[Windows System Programming] 쓰레드 동기화 기법 - (1)
·
내가 공부한 것들/Windows 시스템 프로그래밍
[공부했던 것을 되짚어보며] 이전에 공부했던 내용은 쓰레드의 생성과 소멸과 관련해서 공부를 했었습니다. 그리고 여기서 동시접근에 대한 문제점도 다뤘었습니다. 실제로 strtok과 같은 ANSI C 라이브러리 함수를 사용할 때에는 동시 참조의 위험성이 있다고 했습니다. 멀티 쓰레드 기반 프로그램에서 쓰레드에서 strtok을 사용하면 다른 쓰레드에서도 내부 정적 변수에 접근이 가능해집니다. 다른 쓰레드에서 이 함수를 호출할 때에는 정적 변수를 덮어쓰는 문제가 생기죠. 그래서 앞으로는 CreateThread가 아닌 ANSI 표준 라이브러리를 이용한 _beginthreadex 함수를 사용하기로 했습니다. 이 함수는 CretateThread와 같이 단순하게 쓰레드만 생성하지 않습니다. 쓰레드를 생성하기 앞서서 쓰..
[Windows System Programming] 쓰레드의 생성과 소멸
·
내가 공부한 것들/Windows 시스템 프로그래밍
[공부했던 것을 되짚어보며] https://sevenshards.tistory.com/56 [Windows System Programming] 쓰레드의 이해 [공부했던 것을 되짚어보며] 사실 지금까지 우리는 프로세스에 대한 이야기만 계속 늘어놨습니다. 커널 오브젝트에, 핸들에, 핸들 테이블과 프로세스 간 통신 이야기만 했습니다. 그리고 쓰레드 sevenshards.tistory.com 지난 글에서는 쓰레드에 대한 개념적인 이해를 했습니다. 쓰레드를 왜 쓰는지, 그리고 Windows에서의 쓰레드는 어떤 것인지에 대해서도 확인했습니다. 이번 글에서는 쓰레드를 직접 생성하고 소멸하는 과정을 거치면서 배웠던 내용을 정리해보려고 합니다. [Windows에서의 쓰레드 생성과 소멸] 이전 글에서 다뤘던 내용은 쓰레드..
[Windows System Programming] 쓰레드의 이해
·
내가 공부한 것들/Windows 시스템 프로그래밍
[공부했던 것을 되짚어보며] 사실 지금까지 우리는 프로세스에 대한 이야기만 계속 늘어놨습니다. 커널 오브젝트에, 핸들에, 핸들 테이블과 프로세스 간 통신 이야기만 했습니다. 그리고 쓰레드는 뒤에서 이야기한다고 했었죠. 도대체 '쓰레드'라는게 뭐길래? 아마 이걸 공부하시는 분들이라면 '멀티 쓰레드'라는 말은 한 번쯤은 들어보셨을겁니다. '프로세스보다 더 잘게 쪼갠 것이 쓰레드다' 라고 알고 계신 분들도 있을거고요. 대충은 맞는 말입니다. 프로세스와 관련된 내용을 잘 알고 계신다면 쓰레드는 크게 어려울 것이 없습니다. [쓰레드(Thread)란 무엇인가] 일단 쓰레드 이야기를 하기 전에 우리가 지금까지 공부했던 내용을 좀 톺아보고 갈까 합니다. 왜 쓰레드가 필요하게 되었는지, 어째서 생겨났는지를 알기 위해서는..
[Windows System Programming] 컴퓨터 구조 - (3)
·
내가 공부한 것들/Windows 시스템 프로그래밍
[공부했던 것을 되짚어보며] 이제 3장의 시작입니다. 책에서는 항상 새로운 장을 시작하면서 컴퓨터 구조에 대한 이야기를 짚어보고 넘어가는 구조로 되어있습니다. 이번에 다룰 내용은 지난 2장의 시작이었던 컴퓨터 구조에 대한 두 번째 이야기에서 이어집니다. https://sevenshards.tistory.com/40 [Windows System Programming] 컴퓨터 구조 - (2) [컴퓨터 구조의 접근 방법] 컴퓨터 구조에 대한 근본적인 이해는 나중에 학습하게 될 프로세스와 쓰레드를 이해하는데 도움이 된다. 이번 챕터에서는 가장 일반적인 형태의 컴퓨터 구조에 대해 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] 컴퓨터 구조 - (2)
·
내가 공부한 것들/Windows 시스템 프로그래밍
[컴퓨터 구조의 접근 방법] 컴퓨터 구조에 대한 근본적인 이해는 나중에 학습하게 될 프로세스와 쓰레드를 이해하는데 도움이 된다. 이번 챕터에서는 가장 일반적인 형태의 컴퓨터 구조에 대해서 정리해보겠다. [컴퓨터를 설계해보자] 컴퓨터를 설계한다고는 했는데, 도대체 뭘 설계를 하겠다는걸까? 케이스는 뭐를 쓰고 크기는 어떻게 하고, CPU는 뭐를 쓰고... 이런 조립 PC 견적을 내듯이 설계를 하겠다는 것이 아니다. 엄밀히 따지면 컴퓨터에서 핵심이 되는 CPU를 설계해보려고 한다. 그렇다고 디지털 논리회러에서 쓰는 AND, OR, NOT와 같은 논리회로와 게이트 수준에서 만들겠다는 것은 아니다. (지금 정리글을 쓰는 나도 실제로 그럴 능력이 안된다.) https://sevenshards.tistory.com/..
sevenshards
'내가 공부한 것들' 카테고리의 글 목록 (2 Page)