책 : 뇌를 자극하는 윈도우즈 시스템 프로그래밍 우리가 흔히 말하는 Heap이란, malloc, new 등을 통해서 동적으로 생성할 수 있는 메모리 공간을 뜻합니다. 보통 malloc 등을 통해서 선언된 동적 배열 공간은, 멀티쓰레드 환경에서 쓰레드들 간의 공유하는 상황이 발생하게 됩니다. 그러다보니, 다른 쓰레드가 그 공간을 건들여서 해제를 하거나 하는 상황이 발생할 수 있습니다. 그래서 Windows에서는 쓰레드 별로 사용할 힙을 별도로 할당해줄 수 있습니다. 이것을 Dynamic Heap이라고 합니다. 다이나믹 힙같은 경우에는 해제할 경우 힙에 있는 모든 데이터가 해제되므로 링크드 리스트 같은 자료구조 형에서도 유용합니다. - 디폴트 힙(Default Heap) : 공유하고 있는 기본적인 힙 - 힙..
책 : 뇌를 자극하는 윈도우즈 시스템 프로그래밍 1 ) 이름있는 뮤텍스(NamedMutex) 동기화 - 원래 선언된 Mutex는 하나의 프로세스에서 내부 쓰레드들만 사용할 수 있는데, 이름있는 뮤텍스를 사용하면 다른 프로세스들이 그 뮤텍스를 사용할 수 있습니다. 코드를 예시로 확인해 보겠습니다. if 1 -> 이름있는 뮤텍스를 생성하는 코드 else -> 외부 프로세스에서 뮤텍스 접근하여 사용하는 코드 예제 더보기 #include #include #include #include HANDLE hMutex; DWORD dwWaitResult; void ProcessBaseCriticalSection() { dwWaitResult = WaitForSingleObject(hMutex, INFINITE); swi..
책 : 뇌를 자극하는 윈도우즈 시스템 프로그래밍 1 ) 뮤텍스(Mutex) 기반 동기화 - 뮤텍스 생성 hMutex = CreateMutex( NULL, // 디폴트 보안관리자. FALSE, // 누구나 소유 할 수 있는 상태로 생성. //(TRUE일 경우, 뮤텍스를 생성하는 쓰레드가기회를 얻음) NULL // numaned mutex ); - Mutex 사용 WaitForSingleObject(hMutex, INFINITE); /********************* 임계영역 *********************/ ReleaseMutex(hMutex); 예제 더보기 #include #include #include #include #define NUM_OF_GATE6 LONG gTotalCount = ..
책 : 뇌를 자극하는 윈도우즈 시스템 프로그래밍 1 ) 임계영역(Critical Section) 동기화 - 크리티컬 섹션 오브젝트 변수 선언 CRITICAL_SECTION hCriticalSection; - 오브젝트 초기화 InitializeCriticalSection(&hCriticalSection); - 임계영역 지정 EnterCriticalSection(&hCriticalSection); //임계영역 지정 /************* 임계영역 *************/ LeaveCriticalSection(&hCriticalSection); //임계영역 탈출 - 임계영역 삭제 DeleteCriticalSection(&hCriticalSection); 예제 더보기 #include #include #in..
책 : 뇌를 자극하는 윈도우즈 시스템 프로그래밍 커널 레벨(Kernel Level) 쓰레드 : 프로그래머 요청에 따라 쓰레드를 생성 및 스케줄링하는 주체가 커널 인 경우, 이럴 경우에는 쓰레드를 생성해주고, 스케줄링하는 대상이 커널이 된다. 커널 영역 : 유저 영역을 제외한 나머지 영역 유저 영역 : 프로세스의 산하 쓰레드들이 가지고 있는 코드 영역, 데이터 영역, 스택 및 힙 영역을 가리킴. 장점 : 커널에서 직접 제공하기 때문에 안전성과 다양한 기능성이 제공된다. 단점 : 커널에서 제공해 주는 기능이기 때문에 유저 모드에서 커널 모드로의 전환이 빈번하게 일어난다. 따라서 이는 성능의 저하로 이어지게 된다. 유저 레벨(User Level) 쓰레드 : 커널이 쓰레드 모델을 지원하지 않을 경우(혹은 커널이..
책 : 뇌를 자극하는 윈도우즈 시스템 프로그래밍 파이프에는 두가지 종류가 있는데 이름없는 파이프(anonymous_pipe)와 이름있는 파이프(named_pip)가 있습니다. anonymous_pipe 같은 경우에는 프로세스에서 내부 즉, 자식 프로세스나 부모 프로세스와 통신을 할때 사용하는 것으로, 외부 프로세스와는 통신 할 수 없습니다. named_pipe 같은 경우에는 이름이 존재하기 때문에, 이름을 통하여 외부의 프로세스와 통신을 할 수 있다. 통신 방법은 아래와 같습니다. 아래는 서버와 클라이언트 코드입니다. 서버 더보기 #pragma warning(disable:4996) #include #include #include #include #define BUF_SIZE 1024 int CommTo..
책 : 뇌를 자극하는 윈도우즈 시스템 프로그래밍 일단 echo와 start를 구현하라는 미션이 주어졌습니다. 그래서 단순 echo와 start만 구현했는데, 책에서는 다른것도 구현이 되어있어서 코드가 상당히 달랐습니다.. 그래도 주어진 미션 부분은 비슷했어서 잘 구현된 거 같습니다. 내가 구현한 코드 더보기 #pragma warning(disable:4996) #include #include #include #define STR_LEN 256 #define CMD_TOKEN_NUM 10 TCHAR ERROR_CMD[] = _T("'%s'은(는) 실행할 수 있는 프로그램이 아닙니다.\n"); int CmdProcessing(int); TCHAR* StrLower(TCHAR*); void ECHO(TCHAR..
프로세스 실행 함수 CreateProcessW( 1) LPCWSTR lpApplicationName, 2) LPWSTR lpCommandLine, 3) LPSECURITY_ATTRIBUTES lpProcessAttributes, 4) LPSECURITY_ATTRIBUTES lpThreadAttributes, 5) BOOL bInheritHandles, 6) DWORD dwCreationFlags, 7) LPVOID lpEnvironment, 8) LPCWSTR lpCurrentDirectory, 9) LPSTARTUPINFOW lpStartupInfo, 10) LPPROCESS_INFORMATION lpProcessInformation ); 1 : 생성할 프로세스의 실행파일 이름을 인자로 전달한다. 경로..
- Total
- Today
- Yesterday
- 인제대학교
- Select모델
- 링크드 리스트
- 보안
- STL
- 워셜알고리즘
- 알고리즘
- 드림핵
- 컨퍼런스
- Dreamhack
- 고양이
- BFS
- 개발
- c++
- 지뢰찾기
- 레지스터
- queue
- 학교
- 스레드풀
- 자료구조
- 멀티쓰레드
- 야경
- 더블버퍼링
- 백준
- 정보보안
- 시스템보안
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
31 |