[Windows System Programming] 쓰레드 풀링(Pooling)
·
내가 공부한 것들/Windows 시스템 프로그래밍
[공부했던 것을 되짚어보며] 지금까지 쓰레드에 대한 것과 동기화에 대한 개념들을 쭉 공부해왔습니다. 쓰레드가 무엇인지, 쓰레드를 만들고 소멸시키는 것부터 동기화가 왜 필요한지에 대해서 알게 되었고요. 이제 이 쓰레드를 어떻게 활용할 수 있을까를 고민하게 되었습니다. 멀티 쓰레드 프로그래밍을 써먹을 수 있는 것은 알겠는데, 이걸 어디에 쓸까. 책에서는 "쓰레드 풀"이라는 것을 통해 지금까지 배웠던 내용을 한 번 정리할 기회를 갖게 되었습니다. 저도 이걸 따라 구현하면서 아직도 이해가 잘 안되는 부분들이 많습니다. 이번 글에서는 많이 미숙한 부분이 보일 것입니다. 그 부분에 있어서 양해 부탁드립니다. [쓰레드 풀에 대한 이해] 우선 "쓰레드 풀"이라는 개념에 대해서 좀 이해를 하고 넘어갈까 합니다. 이게 도..
[Windows System Programming] 쓰레드 동기화 기법 - (2)
·
내가 공부한 것들/Windows 시스템 프로그래밍
[공부했던 것을 되짚어보며] https://sevenshards.tistory.com/62 [Windows System Programming] 쓰레드 동기화 기법 - (1) [공부했던 것을 되짚어보며] 이전에 공부했던 내용은 쓰레드의 생성과 소멸과 관련해서 공부를 했었습니다. 그리고 여기서 동시접근에 대한 문제점도 다뤘었습니다. 실제로 strtok과 같은 ANSI C sevenshards.tistory.com 이전 글에서 다뤘던 내용은 임계 영역에 대한 개념을 이해하고 이에 대한 동기화 방법에 대한 것이었습니다. '메모리 접근에 대한 동기화'를 다뤘었고, 이번 글에서는 '쓰레드의 실행순서'를 위주로 다루고자 합니다. [실행순서에 있어서의 동기화] "쓰레드의 실행순서를 동기화한다"는 말은 정확하게 표현하면..
[Windows System Programming] 스케줄링 알고리즘과 우선순위
·
내가 공부한 것들/Windows 시스템 프로그래밍
[공부 했던 것을 되짚어보며] 책으로 치면 어느덧 2장의 끝에 왔습니다. 지금까지 컴퓨터 구조에 대한 이야기도 했었고, 프로세스에 대한 이야기도 했었죠. 그리고 커널 오브젝트와 핸들, 핸들 테이블에 대한 이야기도 했습니다. 특히 이 커널 오브젝트라는 개념이 뒤에 가서도 굉장히 많이 언급이 될겁니다. 저는 4장 이전까지 공부를 하고 복습 차원에서 글을 작성하고 있습니다. 여기서 다뤘던 커널 오브젝트와 핸들부터 핸들 테이블까지의 개념은 잘 정리해두시길 바랍니다. 뒤에 가서 이 개념을 모르면 진짜 11챕터까지 가서 7~8챕터를 오락가락하게 됩니다. 개인적인 잡소리가 더 길어지면 안되니까 공부했던 것을 정리해보겠습니다. [프로세스의 스케줄링(Scheduling] 우리가 쉽게 접하는 대부분의 운영체제는 멀티 프로..
[Windows System Programming] 프로세스간 통신(IPC) - (2)
·
내가 공부한 것들/Windows 시스템 프로그래밍
[이번 글을 따라 진행하기에 앞서] 이번 글의 제목대로 지난 글에 이어서 IPC에 대한 이야기를 마저 하려고 합니다. 그런데 그 전에 또 이야기를 좀 해두고 갈까 합니다. 아마 아시는 분들은 아시겠지만, 윈도우즈 시스템 프로그래밍을 공부할 때 권장하는 책들이 있습니다. 문제는 윈도우즈 시스템 프로그래밍 서적들이 옛날 책입니다. 쓰여진 년도가 대략 2006~2008년도에요. 지금 제가 읽고 있는 윤성우 아저씨의 '뇌를 자극하는 윈도우즈 시스템 프로그래밍' 역시 2006년도 책입니다. 그리고 앞으로 읽게 될 제프리 리처 아저씨의 'Windows via C/C++ 5판'도 2008년에 나온 책이고요. 다시 말해서 여기 수록된 코드나 예제들이 옛날 기준이라는거에요. 그러다보니 지금 환경에서 안돌아가는 경우는 다..
[Windows System Programming] 프로세스간 통신(IPC) - (1)
·
내가 공부한 것들/Windows 시스템 프로그래밍
[이번 글을 따라서 진행하기에 앞서] 여기까지 와서 글을 보고 공부하시는 분은 뭐... 얼마 없을거라고 생각합니다. 하지만 복습하는 차원에서 글을 읽는 분들에게 설명하는 것이 가장 좋은 학습 방법이라고 생각합니다. 그래서 글을 읽으시는 불특정 다수의 사람들에게 설명하듯이 글을 쓰게 되었습니다. 우선 이번 글을 공부하기에 앞서서, 책이 있으신 분들은 아마 문제가 안될 것이라고 생각합니다. 책이 없는 분, 혹은 강의만 들으신 분은 이 글에서 느닷없이 파일 입출력 함수가 나와서 당황하실 수도 있습니다. 그렇다고 책을 사라는 말은 아닙니다. 있으면 편하겠죠 애초에 이 글도 안보실거고요 https://learn.microsoft.com/en-us/windows/win32/api/fileapi/nf-fileapi-..
[Windows System Programming] 커널 오브젝트와 오브젝트 핸들
·
내가 공부한 것들/Windows 시스템 프로그래밍
[커널 오브젝트에 대한 이해] 저를 포함해서 운영체제와 관련된 공부를 하면서 아마 '커널(Kernel)'이라는 단어를 한 번쯤은 들어봤을겁니다. 우리가 지금 쓰는 운영체제는 기본적인 요소 외에도 여러가지 기능들을 제공합니다. 메모장이라던가, 웹 브라우저, 그림판이나 계산기 등등의 잡다한 것들도 있습니다. 그런데 그 중에서도 컴퓨터를 운영하는 데에 있어 핵심이 되는 부분을 '커널'이라고 합니다. 요즘에는 이런걸 세세하게 따지는지는 잘 모르겠습니다. 그렇지만 이번에는 '커널 오브젝트'라는 것을 주제로 다룰 것이기 때문입니다. 일단 '커널 오브젝트'라는 놈이 뭐냐? 한 문장으로 정리하면 다음과 같습니다. "커널에서 관리하는 중요한 정보를 담아둔 데이터 블록을 가리켜 '커널 오브젝트'라 한다." 여기서 커널이 ..
[Windows System Programming] 프로세스의 생성과 소멸
·
내가 공부한 것들/Windows 시스템 프로그래밍
[프로세스의 이해] 현재 운영체제는 "멀티 프로세스(Multi-Process) 운영체제"라고 한다. 쉽게 말하면 "프로세스라는 것이 여러개 존재할 수 있는 운영체제"를 말한다. 여기서 프로세스라는 것을 뭘 말하는 것일까? 애초에 프로그램은 뭐고 프로세스는 뭘까? [프로세스(Process)란 무엇인가?] 어려운 개념이 아니다. 쉽게 말할 것도 없다. "프로세스"란, 메인 메모리에 올라가서 현재 실행 중에 있는 프로그램을 의미한다. 쉽게 생각해서 우리가 즐겨하는 게임들을 예로 들면 금방 이해가 될 것 같다. 원신이라던가, 리그 오브 레전드 같은 게임을 실행할 때, 이 실행 파일의 이름이 "게임이름.exe"같은 식으로 되어 있다. 이런 실행 파일을 프로그램이라고 한다. 그리고 이 프로그램을 실행하기 위해서 더..
[Windows System Programming] 명령 프롬프트 프로젝트 (1)
·
내가 연구한 것들/초소형 프로젝트
[구현 목표] 1) 명령어를 입력받기 위한 골격이 되는 코드를 작성. 2) EXIT 명령어를 처리할 수 있도록 한다. [구현 결과] [CMDPromptProject.cpp] /* * Windows System Programming - 명령 프롬프트(CMD Prompt) 프로젝트 * 파일명: CMDPrompt.cpp * 파일 버전: 0.1 * 작성자: Sevenshards * 작성 일자: 2023-12-02 * 이전 버전 작성 일자: * 버전 내용: 명령 프롬프트의 골격 작성 * 이전 버전 내용: */ #define _CRT_SECURE_NO_WARNINGS #include #include #include #include #include // 한글 입력 처리를 위해 삽입한 헤더파일 #define STR_L..
[Windows System Programming] 64bit 기반 프로그래밍
·
내가 공부한 것들/Windows 시스템 프로그래밍
[WIN32 vs WIN64] 이 책이 쓰여질 당시에는 64비트 운영체제로 점차 갈아타고 있는 시점이었다. 그리고 지금은 64비트 운영체제가 거의 보편화되었고, 32비트 운영체제를 찾아보기가 힘들 정도다. 그렇지만 아직도 32비트 운영체제와의 호환성은 생각해야 할 문제다. [64비트와 32비트] 생각해보면 숫자가 높으면 그냥 다 좋다고 생각할 때가 있었다. 나도 한때는 그랬고 더 빠르고 더 좋은줄만 알았지 왜 좋은지는 생각을 해본 적이 없었다. 도대체 32비트와 64비트 시스템은 뭘 기준으로 나누는 것일까? 1) 한 번에 송/수신할 수 있는 데이터의 크기 - (버스 시스템) 2) 데이터 처리 능력 - CPU 이 둘을 한 문장으로 정리하면 다음과 같다. "한 번에 송/수신할 수 있는 데이터의 크기와 한 번..
[Windows System Programming] 아스키코드와 유니코드
·
내가 공부한 것들/Windows 시스템 프로그래밍
[Windows에서의 유니코드] [문자셋(Character Set)의 종류와 특성] [대표적인 문자셋] 1) 아스키(ASCII) 코드 (1Byte) 미국에서 정의한 표준. 알파벳의 갯수는 26개이며, 대소문자를 포함하면 52개. 그리고 몇 가지 확장 문자를 포함하더라도 256개를 넘지 않으므로 1바이트($2^8$)으로 충분히 표현 가능하다. 2) 유니코드(Unicode) (2Byte) 영어뿐만이 아닌 다른 국가에서 사용하는 문자들도 표현하기 위해 사용. 유니코드는 문자를 표현하는데 모두 동일하게 2바이트를 사용. 2바이트($2^16)면 최대 65536개의 문자를 표현할 수 있다. 그래서 영어나 한글 외에도 전세계의 문자와 다양한 종류의 기호를 표현하는 것이 가능하다. [문자셋(Character Set)]..
sevenshards
'C++' 태그의 글 목록