반응형

win32 18

윈도우 할당 메모리 개념(Private, Virtual, WorkingSet)

윈도우 할당 메모리는 아래와 같은 3가지 형태로 확인할 수 있습니다. 작업 세트(Working Set)작업 관리자에서 메모리로 보이는 항목으로 현재 프로그램이 사용하고 있는 물리 메모리의 양을 나타냅니다. 윈도우는 현재 불필요하거나 현재 여유가 없을 경우 프로그램 메모리를 디스크에 저장합니다. 소위 말하는 스왑(SWAP)이라고 표현되는 부분입니다. 즉 작업 세트는 해당 프로그램 중에 스왑되지 않고 현재 물리 메모리에서 차지하는 양입니다. 여기서 좀 더 깊이 들어간다면 보통 윈도우 프로그램은 실행 프로그램이 다른 공유 라이브러리를 참조하는 경우가 많고 그럴경우 작업 세트의 메모리는 참조하는 공유 라이브러리를 위하여 할당한 메모리도 포함하고 있을 수 있습니다.거기에 윈도우가 현재 메모리 상태와 프로그램 상태..

32bit 윈도우 어플리케이션 사용 가능 최대 메모리 (확장 옵션 설명 포함)

윈도우 32bit 어플리케이션의 최대 사용가능 메모리는 공식적으로는 2 기가입니다. 이건 보통 기초 윈도우 프로그래밍 책자에서 유저모드 메모리 2기가 + 커널모드 메모리 2기가로 잘 설명되어 있습니다. 하지만 32bit로 만들어졌구 아직 64bit로 포팅안된 서버 등을 유지보수 해야 한다면 때로는 더 많은 메모리가 있었으면 좋겠다는 생각이 들 수도 있을거 같습니다. 이럴때 32bit 윈도우에서는 부팅시 /3GB 옵션을 주거나 (윈도우 2003 서버, 2000, XP) 혹은 BCDEdit에서 IncreaseUserVA를 사용하면(윈도우 Vista, 7, 8, 10) 32bit 윈도우 어플케이션은 3G의 메모리를 사용할 수 있습니다. 만약 64bit 윈도우에서 실행시킨다면 컴파일시 /LARGEADDRESSA..

비주얼스튜디오(Visual Studio) 시작 중에 비정상 종료될 때(Crash) 해결법

비주얼 스튜디오가 시작 중에 비정상종료(크래쉬) 될 때가 있습니다.뭐 보통은 다시 인스톨하면 될 듯하지만 그래도 같은 현상이 계속 일어날 수 있습니다.개인적인 경험으로는 비주얼 스튜디오를 언인스톨할 때, 각종 설정은 초기화 하지 않기 때문에 일어나는 현상인 듯 보입니다. 여기서는 해당 문제를 해결하기 위한 방법을 소개할까 합니다. 이 방법은 설정을 완전히 초기화 하는 것이기 때문에 실행을 하게 되면 설정을 처음부터 다시 물어볼 것이며 각종 확장기능(플러그인)을 처음부터 다시 인스톨해야 하는 점 참고하여 실행하여 주시기 바랍니다. 1. 아래와 같은 폴더를 완전히 삭제하여 주십시오.C:\Users\\AppData\Local\Microsoft\Team FoundationC:\Users\\AppData\Loca..

ATL/OLE DB관련 라이브러리 ver 1.02

The Dynamic Database Class Based on ATL/OLE DB 현재 참조하고 있는 코드프로젝트 글입니다. OLEDB 관련된 ATL클래스를 사용하기 쉽게 만들어 놓았습니다. 물론 MFC에서 바로 사용할 수 있겠죠. 물론 라이브러리 사용하려면 기초적인 ATL과 OLEDB구조는 알고 있어야 합니다. 사실 OLEDB는 ATL형식으로 되어 있어 복잡하다고 느껴지는게 사실입니다. 그러나 막상 이해하고 나면 또 별것도 없는게 OLEDB가 아닌가 합니다. 2002년 글로서 아직까지도 지존 중에 한개인걸로 보아 검증받은 코드라는 생각이 듭니다. ODBC와 ADO보다 강력한 DB라이브러리를 원하시면 볼만 합니다. 이 코드는 동적인 관계로 ATL마법사로 만드는 정적인 클래스 기반의 DB처리보다 속도는 ..

[MPP] Visual Studion 2010 Parallel Patterns Library (PPL) 예제

Four Ways to Use the Concurrency Runtime in Your C++ Projects 2009년 10월의 msdn매거진에 나온 병렬 런타임을 사용하는 예제입니다. User Interface의 반응성을 높이기 위하여 배경쓰레드를 사용하는 전통적인 방법을 PPL의 agent를 활용하였을 떄 얼마나 코딩이 더 쉬워지고, 더 굳건해지는 지를 보여주고 있습니다. 참고로 Agent는 병렬처리 엔진에 의한 별도의 쓰레드에서 작동하며 메시지로 데이터를 주고 받습니다. 병렬처리용인 관계로 CPU 개수나 코어 개수에 따라 물리적으로는 별도의 CPU에서 작동할 것입니다. 다른 말로 바꾸면 싱글CPU에서는 오히려 오버헤드가 걸린다는 이야기가 됩니다. 개인적인 지식과 경험으로 보았을 때는 IOCP같은 ..

[MPP] Visual Studion 2010 Parallel Patterns Library (PPL) ver 1.01

Parallel Patterns Library (PPL)은 Visual Studio 2010에 포함될 예정인 Microsoft의 템플릿 기반 멀티프로세스 프로그래밍 라이브러리 입니다. 라이브러리는 MS독자적인 모델로 인텔의 쓰레딩빌딩블록과 유사한 형태를 가지고 있으며 전반적인 인터페이스 모양은 쓰레딩빌딩블록처럼 STL의 모습을 따릅니다. VS2010의 병렬런타임(Concurrency Runtime)은 협업적 태스크 스케줄링(Cooperative Task Scheduling)과 협업적 블록킹(Cooperative Blocking)에서 강점을 가지고 있습니다. 개념적으로 보자면 협업적 태스크 스케줄링이라는 것은 태스크가 끝난 쓰레드에 자동으로 사용 가능한 다른 태스크를 할당하는 등의 효과적인 스케줄링을 의미..

64bit 윈도우 프로그래밍

zdnet에 안철수연구소의 유병인님이 쓰신 3부작 글을 한눈에 볼 수 있게 요약하여 놓은 글입니다. [64비트 윈도우 프로그래밍] ① 32비트 프로그램을 엄호하라 64bit x86아키텍처는 32/64bit 겸용 아키텍처, IA64와 같은 64bit 전용 아키텍처로 나뉘며, 이 아키텍처에 따라서 64bit 윈도우의 동작은 틀려진다. 64bit 윈도우의 틀린점 (※이 틀린 점은 64bit 프로세스에서만 지원한다.) -64개의 CPU를 지원한다. -8K Page를 사용한다. x64와 IA64의 틀린점 -x64는 32bit 프로그램을 직접 실행하는데 비하여 IA64는 32bit 에뮬레이션을 하여 실행한다. -IA64는 AWE(Address Windowing Extention)를 사용할 수 없으며 일부 32bit..

Low Fragementation Heap(LFH)

Low Fragementation Heap이란 Heap Memory에 대하여 new와 delete등의 메모리 할당 및 소멸 작업시 멀티쓰레드에서의 Lock에 의한 overhead를 줄여주는 Heap을 말합니다. XP에서 처음 도입되었으며 Vista에서 본격적으로 홍보된 Windows Heap의 일종입니다. 1개의 CPU가 아닌 N개의 CPU에서 멀티쓰레드에서 16KB이하의 메모리를 할당을 위하여 사용할 때 괄목할 만한 성능 향상이 있으며 상황에 따라 기본 Heap에 비하여 성능이 떨어지기도 합니다. 주로 서버용 프로그램에 사용되어질 듯 합니다. 자세한 내용을 담은 페이지는 아래와 같습니다. 윈도우 비스타 힙 관리자 Vista에서의 LFH를 소개한 블로그 글입니다. 댓글에 자세한 테스트를 한 분의 글이 있..

Win32 ThreadPool

MSDN: Thread Pool API Thread Pool API에 대한 간략한 설명이 들어 있는 페이지 입니다. 이 페이지는 기본적으로 전 버전에서 지원하는 API들과 Window Vista에서 지원하는 새로운 Thread Pool API를 비교하며 설명하고 있습니다. 쓰레드 풀은 OS의 쓰레드 풀을 사용하는 것이고 Win2K부터 지원을 합니다. Thread Pool API라는 것은 OS Thread Pool에서 동작하는 API를 나열해 놓은 페이지 입니다. 그러니 API별 용도는 다릅니다. 이 글에서는 Original API를 바탕으로 하나씩 살펴볼까 합니다. 쓰레드 풀 쓰레드는 I/O 쓰레드와 non-I/O쓰레드 2가지 종류가 있습니다. I/O worker thread는 APC(Asynchrono..

OLE DB의 클래스 역활

CDataSource DBMS에 대한 연결 문자열, 즉 해당 DBMS에 대한 드라이브에 대한 연결을 제공하는 듯 보임 CSession 일종의 DB Connection임 CCommand Connection에 대하여 Query를 수행 한다. ..DBAccessor 자동으로 만들어지는 클래스로 컬럼에 대한 정보를 가지고 있다. CCommand객체로 Query시 이용한다. ..Accessor 자동으로 만들어지는 클래스로 컬럼에 대한 정보를 가지고 있다. .. : public CCommand 자동으로 만들어지는 클래스로 테이블형태의 억세스를 가능하게 해주는 클래스인 듯 보인다. CDBPropSet CCommand로 Query를 수행할 경우의 커서의 속성을 설정한다.

Overlapped I/O Note #2 서버개발전략

From NETWORK PROGRAMMING FOR MICRSOFT WINDOWS 대용량 데이터 처리(High Throughput) 대량의 데이터를 송수신하는 것을 목적으로 하며 해당 서버의 예로 FTP서버가 있다. 대용량 데이터 처리로 인하여 동시에 연결할 수 있는 연결 수가 제한될 수 있는 문제점이 있으며 아래와 같은 방법이 해결책이 될 수 있다. 제한된 수의 연결을 처리하는 동안 제한된 수의 연결을 처리하지 않고 큐에 넣어 대기시키게하며 제한된 수의 연결을 처리한 후에 대기하고 있던 연결을 꺼내어 처리한다. (뭐, 일종의 처리 연결수를 제한하는 전략인듯.. 책의 내용은 Accept를 위한 queue에서 대기시키라는 건지 별도의 User Level queue를 만들라는 건지 애매 모호함) overla..

Overlapped I/O Note #1

accept 1) backlog를 충분히 잡는다. 2) Win32 - AcceptEx a. What a) accept(..)가 Pending되며 1byte이상이 수신되었을 때 완료된다. b) 성능상의 이유로 AcceptEx에 할당된 커널모드 구조체는 소켓이 연결되었거나 listening socket이 닫히고 난후에 제거할 수 있다. b. How To Use a) 미리 생성된 socket을 accpet(..)에 걸어놓는다. b) 최대치의 개수를 정해놓고 일정수의 AcceptEx를 항상 걸어놓는다. c) 연결만을 걸어놓는 악의적인 접속이나 유효하지 않은 접속을 대비하기 위하여 getsockopt(SO_CONNECT_TIME)을 이용하여 주기적으로 소켓을 검사한다. d) AcceptEx호출이 값비싼 호출이기 ..

Fiber [beta]

파이버는 아래와 같은 단점을 가지고 있습니다.... 우선 처리가 적절하게 끝나야 합니다. 적절하게 끝나지 못하고 중간에서 Fiber Context Switching이 된 상태에서 끝나게 된 경우, 해당 Fiber Context에서 돌아가던 변수들이 클리어 되지 않습니다. 이것 때문에 애 먹었습니다. Compuware Error Detection으로 체크하는데 갑자기 Memory Leak과 Resource Leak이 나와 체크하였는데 결과적으로 실행하다가 프로그램 종료와 함께 종료된 Fiber Context에서 선언되고 사용되어진 Class들의 d'tor가 호출되지 않았습니다. 쩝... Thread관련 클래스에는 이상없이 클리어 되던 얘들인데... (상세한 조사는 하지 않고 버그만을 수정하였습니다.) --..

반응형