현재 운영체제 수업을 듣고 있는데, 과제로 리눅스를 사용하는 과제가 주어졌습니다. 내용은 즉슨 "두개의 프로세스를 실행하고, 서로 네임드 파이프라인 통신을 하게 하라. 단 각 프로세스는 fork를 통해 자식프로세스를 만들고, 자식은 전송을 부모는 읽고 출력하는 형식으로 제작하라. 그리고 Ctrl + C 가 입력되면 좀비 프로세스를 만들지 않고 종료하라" 라는 과제가 주어졌습니다. 그래도 교수님게서 사용할 기본 함수들은 알려주셔서 그나마 쉽게 풀어나갈 수 있었습니다. 통신 기본 코드 char *chatTtoJ = "./chatTtoJ"; char *chatJtoT = "./chatJtoT"; mkfifo(chatTtoJ, 0666); mkfifo(chatJtoT, 0666); fdr = open(chatT..

책 : 뇌를 자극하는 윈도우즈 시스템 프로그래밍 우리가 흔히 말하는 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..
- Total
- Today
- Yesterday
- 스레드풀
- 링크드 리스트
- 백준
- 개발
- 컨퍼런스
- 드림핵
- 자료구조
- 보안
- 인제대학교
- 정보보안
- BFS
- 지뢰찾기
- 야경
- 멀티쓰레드
- queue
- 더블버퍼링
- 알고리즘
- 고양이
- 시스템보안
- STL
- Select모델
- 학교
- 레지스터
- c++
- Dreamhack
- 워셜알고리즘
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |