{"id":22038771,"url":"https://github.com/connieya/system_programming","last_synced_at":"2025-05-07T21:26:50.353Z","repository":{"id":44425435,"uuid":"447886086","full_name":"connieya/system_programming","owner":"connieya","description":"뇌를 자극하는 시스템 프로그래밍 ","archived":false,"fork":false,"pushed_at":"2023-03-02T14:37:55.000Z","size":2782,"stargazers_count":10,"open_issues_count":0,"forks_count":2,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-03-31T14:12:53.212Z","etag":null,"topics":["computer-architecture","os","windows-system"],"latest_commit_sha":null,"homepage":"","language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/connieya.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2022-01-14T07:57:27.000Z","updated_at":"2024-07-17T05:16:13.000Z","dependencies_parsed_at":"2023-01-30T13:31:15.930Z","dependency_job_id":null,"html_url":"https://github.com/connieya/system_programming","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/connieya%2Fsystem_programming","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/connieya%2Fsystem_programming/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/connieya%2Fsystem_programming/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/connieya%2Fsystem_programming/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/connieya","download_url":"https://codeload.github.com/connieya/system_programming/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":252956319,"owners_count":21831293,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["computer-architecture","os","windows-system"],"created_at":"2024-11-30T11:07:58.942Z","updated_at":"2025-05-07T21:26:50.326Z","avatar_url":"https://github.com/connieya.png","language":"C++","funding_links":[],"categories":[],"sub_categories":[],"readme":"## 뇌를 자극하는 윈도우즈 시스템 프로그래밍 \n\n### [1장 컴퓨터 구조에 대한 첫 번째 이야기](./chapter01/01.md)\n- 시스템 프로그래밍의 이해와 접근\n  - 시스템 프로그래밍이란 (System Programming)?\n  - 컴퓨터 시스템의 주요 구성요소\n- 컴퓨터 하드웨어의 구성\n  - CPU (Central Processing Unit)\n  - 메인 메모리 (Main memory)\n  - 입.출력 버스 (Input/Output Bus)\n- CPU에 대한 이해\n  - ALU (Arithmetic Logic Unit)\n  - 컨트롤 유닛 (Control Unit)\n  - CPU 내부에 존재하는 레지스터들 (Register Set)\n  - 버스 인터페이스 (Bus Interface)\n  - 클럭 신호 (Clock Pulse)\n- 프로그램의 실행 과정\n  - 위대한 수학자 폰 노이만\n  - 프로그램의 실행 과정\n- 하드웨어의 구성의 재접근\n\n### [2장 아스키코드 vs 유니코드](./chapter02/03.md)\n- Windows 에서의 유니코드(UNICODE)\n  - 문자셋의 종류와 특성\n  - MBCS 기반의 문자열\n  - WBCS 기반의 프로그래밍\n- MBCS 와 WBCS 의 동시 지원\n  - `#include \u003cwindows.h\u003e\n  - Windows에서 정의하고 있는 자료형\n  - MBCS 와 WBCS (유니코드)를 동시에 지원하기 위한 매크로\n  - MBCS 와 WBCS (유니코드)를 동시에 지원하기 위한 함수들\n\n### 3장 64비트 기반 프로그래밍\n- WIN 32 vs WIN 64\n  - 64비트와 32비트\n  - 프로그래머 입장에서의 64비트 컴퓨터\n- 프로그램 구현 관점에서의 WIN 32 vs WIN 64\n  - LLP64 vs LP64\n  - 64비트와 32비트 공존의 문제점\n  - Windows 스타일 자료형\n  - Windows 자료형 확인하기\n  - Polymorphic 자료형\n- 오류의 확인\n  - GetLastError 함수와 에러코드\n- System Programming Project Design\n  - 명령 프롬프트 프로젝트의 제안\n  - 명령 프롬프트 프로젝트의 제안과 EXIT 명령어의 구현\n\n### [4장 컴퓨터 구조에 대한 두 번째 이야기](./chapter04/4장.md)\n- 컴퓨터 구조의 접근 방법\n  - 컴퓨터를 디자인하자\n  - 레지스터를 디자인하자\n  - 명령어 구조 및 명령어를 디자인하자\n- LOAD \u0026 STORE 명령어 디자인\n  - LOAD \u0026 STORE 명령의 필요성\n  - LOAD \u0026 STORE 명령의 디자인\n- Direct 모드와 Indirect 모드\n  - Direct 모드의 문제점과 Indirect 모드의 제안\n  - Indiret 모드의 이해\n  - Indirect 모드 활용 예제\n### [5장 프로세스의 생성과 소멸](./chapter05/5-1/프로세스의이해.md)\n- 프로세스의 이해\n  - 프로세스란 무엇인가?\n  - 프로세스를 구성하는 요소\n- 프로세스의 스케줄링과 상태 변화\n  - 프로세스의 스케줄링(Scheduling)\n  - 프로세스의 상태 변화\n  - 프로세스의 상태 변화, 시나리오로 다시 이해하기\n- 컨텍스트 스위칭(Context Switching)\n- 프로세스의 생성\n  - 프로세스의 생성\n  - CreateProcess 함수의 이해\n  - 예제를 통한 CreateProcess 함수의 이해\n  - 실습을 위한 환경의 구성 및 실행\n- 프로세스 생성과 관련된 예제 그리고 문제점\n- 명령 프롬프트 프로젝트 기능 추가\n\n### [6장 커널 오브젝트와 오브젝트 핸들](./chapter06/6-1/커널오브젝트.md)\n- 커널 오브젝트에 대한 이해\n  - 커널 오브젝트의 이해\n  - 그 이외의 커널 오브젝트들\n- 커널 오브젝트와 핸들의 종속 관계\n- 커널 오브젝트와 Usage Count\n- 명령 프롬프트 프로젝트 기능 추가\n\n### [7장 프로세스간 통신(IPC) 1](./chapter07/프로세스간통신.md)\n-  프로세스간 통신(IPC) 의 의미\n-  메일슬롯 방식의 IPC\n-  Signaled vs Non-Signaled\n\n\n### [8장 프로세스간 통신(IPC) 2](./chapter08/프로세스통신2.md)\n-  핸들 테이블과 오브젝트 핸들의 상속\n-  파이프 방식의 IPC\n-  프로세스 환경 변수\n-  명령 프롬프트 프로젝트 기능 추가\n\n### [9장 스케줄링 알고리즘과 우선순위](./chapter09/스케줄링.md)\n- 프로세스의 스케줄링(Scheduling)\n  - 일반 OS 와 리얼타임 OS 의 차이점\n  - Sott RTOS vs Hard RTOS\n  - 선점형 OS 와 비선점형 OS\n  - 우선순위 스케줄링 알고리즘\n  - 라운드 로빈 스케줄링 알고리즘\n  - 스케줄링 알고리즘에 의해서 스케줄링이 진행되는 시점\n  - Priority Inversion\n- Windows 프로세스 우선순위\n- 명령 프롬프트 프로젝트 기능 추가\n  - 리다이렉션의 이해\n  - 리다이렉션 구현방법\n  - 필자가 구현한 답안\n\n### [10장 컴퓨터 구조에 대한 세 번째 이야기](./chapter10/10.md)\n- 절차적 호출 지원  CPU 모델\n  - 스택 프레임(Stack Frame) 구조\n  - sp 레지스터\n  - 프레임 포인터(Frame Pointer) 레지스터\n  - 스택에 저장하자, 프레임 포인터(Frame Pointer)\n- 함수 호출 인자의 전달과 PUSH \u0026 POP 명령어 디자인\n  - 함수 호출 인자의 전달방삭\n  - PUSH \u0026 POP 명령어 디자인\n- 함수 호출(Procedure) 에 의한 실행의 이동\n  - 다시 살펴보는 메모리 구조와 프로그램 카운터(Program Counter)\n  - 함수 호출과 함수 종료\n- 함수 호출 규약(Calling Convention)\n\n### [11장 쓰레드의 이해](./chapter11/11.md)\n- 쓰레드란 무엇인가?\n  - 멀티 프로세스 기반 프로그램\n  - 멀티 프로세스 운영체제 기반 프로그램의 문제점과 새로운 제안\n  - 해결책, 쓰레드\n  - 메모리 구조 관점에서 본 프로세스와 쓰레드\n  - Windows에서의 프로세스와 쓰레드\n- 쓰레드 구현 모델에 따른 구분\n  - 커널 레벨(Kernel Level ) 쓰레드와 유저 레벨(User Level) 쓰레드\n  - 커널 모드(Kernel Mode)와 유저 모드 (User Mode)\n  - 커널 레벨 쓰레드와 유저 레벨 쓰레드의 장점 및 단점\n\n\n### [12장 쓰레드의 생성과 소멸](./chapter12/12.md)\n- Windows에서의 쓰레드 생성과 소멸\n  - 쓰레드의 생성\n  - 쓰레드의 소멸(쓰레드 생성에 대한 추가적인 이야기 포함)\n- 쓰레드의 성격과 특성\n  - 힙,데이터 영역, 그리고 코드 영역의 공유에 대한 검증\n  - 동시접근에 있어서의 문제점\n  - 프로세스로부터의 쓰레드 분리\n  - ANSI 표준 C 라이브러리와 쓰레드\n- 쓰레드의 상태 컨트롤\n  - 쓰레드의 상태 변화\n  - Suspend \u0026 Resume\n- 쓰레드의 우선순위 컨트롤\n\n### [13장 쓰레드 동기화 기법 1](./chapter13/13.md)\n- 쓰레드 동기화란 무엇인가 ?\n  - 두 가지 관점에서의 쓰레드 동기화\n  - 쓰레드 동기화에 있어서의 두 가지 방법\n- 임계 영역(Critical Section) 접근 동기화\n  - 임계 영역(Critical Section)에 대한 이해\n- 유저 모드 동기화(Synchronization In User Mode)\n  - 크리티컬 섹션(Critical Section) 기반의 동기화\n  - 인터락(Interlocked Family Of Function) 함수 기반의 동기화\n- 커널 모드 동기화(Synchronization In Kernel Mode)\n  - 뮤텍스(Mutex) 기반의 동기화\n  - 세마포어(Semaphore) 기반의 동기화\n  - 이름있는 뮤텍스(Named Mutex) 기반의 프로세스 동기화\n  - 뮤텍스의 소유와 WAIT_ABANDONED\n\n### 14장 쓰레드 동기화 기법 2\n- 실행 순서에 있어서의 동기화\n  - 생산자/소비자 모델\n  - 이벤트 기반 동기화\n  - 수동 리셋 모드 이벤트의 활용 예\n- 이벤트 더하기 뮤텍스\n    - 이벤트와 뮤텍스 오브젝트 적용 예제\n- 타이머 기반 동기화\n    - 수동 리셋 타이머\n    - 주기적 타이머\n\n\n\n### 15장 쓰레드 풀링(Pooling)\n\n- 쓰레드 풀에 대한 이해\n- 쓰레드 풀의 구현\n  - 쓰레드 풀 구현의 모듈별 해석\n  - 쓰레드 풀 구현 소스코드\n- 명령 프롬프트 프로젝트 기능 추가\n  - 입력과 출력을 연결하는 파이프\n  - 구현 원리\n  - 구현 사례\n\n### [16장 컴퓨터 구조에 대한 네 번째 이야기](chapter16/컴구네번째이야.md)\n\n- 메모리 계층(Memory Hierarchy)\n  - 메모리 범위와 종류\n  - 메모리의 계층 구조(Memory Hierarchy)\n\n- 캐쉬와 캐쉬 알고리즘\n    - 컴퓨터 프로그램의 일반적인 특성\n    - 캐쉬 알고리즘\n    - 캐쉬 프렌드리 코드(Cache Freindly Code) 작성 기법\n\n- 가상 메모리(Virtual Memory) \n  - 물리 주소(Physical)\n  - 가상 주소 시스템 1\n  - 가상 주소 시스템 2\n  \n### 17장 구조적 예외처리(SEH) 기법\n\n- SEH(Structed Exception Handling)\n  - 예외처리의 필요성\n  - 예외와 에러의 차이점\n  - 하드웨어 예외와 소프트웨어 예외\n- 종료 핸들러(Termination Handler)\n    - 종료 핸들러의 기본 구성과 동작 원리\n    - 종료 핸들러 활용 사례 연구1\n    - 종료 핸들러 활용 사례 연구2\n- 예외 핸들러(Exception Handler)\n    - 예외 핸들러와 필터\n    - 예외 핸들러의 활용 사례 연구\n    - 처리되지 않은 예외의 이동\n    - 핸들러의 중복\n    - 정의 되어 있는 예외의 종류와 예외를 구분하는 방법\n    - EXCEPTION_CONTINUE_EXCUTION \u0026 EXCEPTION_CONTINUE_SEARCH\n- 소프트웨어 기반의 개발자 정의 예외\n  - 소프트웨어 예외의 발생\n  - GetExceptionInformation\n\n\n### 18장 파일 I/O 와 디렉터리 컨트롤\n- 기본적인 파일 처리 함수들\n  - 파일 열기 \u0026 닫기\n  - 파일 읽기 \u0026 쓰기와 포인터\n  - 파일을 열어서 읽고 쓰고 닫는 예제\n  - 파일의 시간 정보 얻어오기\n  - 파일 사이즈 얻어오기\n  - 파일의 특성 정보 얻어오기\n  - 파일의 특성 정보 핸들로부터 얻어오기\n  - 파일의 경로 정보 얻어오기\n  - 파일 포인터의 이동 - 32비트 기반\n  - 파일 포인터의 이동 - 64비트 기반\n- 디렉터리 관련 함수 및 그밖의 함수들\n    - 디렉터리의 생성과 소멸\n    - 현재 디렉터리, 시스템 디렉터리 그리고 Windows 디렉터리\n    - 디렉터리에서 파일 찾기\n- 명령 프롬프트 프로젝트 기능 추가\n    - XCOPY의 이해\n    - XCOPY의 구현 범위 및 방법\n    - XCOPY의 구현 사례\n\n### 19장 비동기 I/O 와 APC\n\n- 비동기(Asynchronous) I/O\n  - 비동기 I/O 의 이해\n  - 중첩(Overlapped) I/O\n  - 중첩(Overlapped) I/O 예제\n  - 완료루틴(Completion Routine) 기반 확장 I/O\n  - 알림 가능한 상태(Alertable State)\n  - OVERLAPPED 구조체의 파일 위치 정보\n  - 타이머에서의 완료 루틴\n  - 지금까지의 내용 정리\n- APC(Asynchronous Procedure Call)\n    - APC의 구조\n    - APC Queue의 접근\n\n### 20장 메모리 관리(Virtual Memory , Heap ,  MMF)\n\n- 가상 메모리(Virtual Memory) 컨트롤\n  - Reserve, Commit 그리고 Free\n  - 메모리 할당의 시작점과 단위 확인하기\n  - VirtualAlloc \u0026 VirtualFree 함수\n  - Dynamic Array Design\n- 힙(Heap) 컨트롤\n    - 힙(Heap) 컨트롤에 대한 필자의 기억\n    - 디폴트 힙(Default Heap) \u0026 Windows 시스템에서의 힙\n    - 디폴트 힙 컨트롤\n    - 힙(Dynamic Heap) 생성이 가져다 주는 또 다른 이점\n    - 힙의 생성과 소멸 그리고 할당\n    - Heap \u0026 Linked List 예제\n- MMF(Memory Mapped File)\n    - MMF의 이해\n    - MMF의 구현과정\n    - MMF의 구현 함수\n    - MMF의 구성 예제1\n    - 일고 쓰기 위한 MMF\n    - Copy-On-Write(COW)\n### 21장 Dynamic Linking Library\n- 라이브러리와 printf!\n  - 질문\n  - 해답은 라이브러리\n  - 라이브러리 작성에 대한 동기\n  - 라이브러리 작성\n  - STATIC LIBRARY\n- 또 다른 라이브러리 DLL\n  - DLL(Dynamic Linking Library)에 대한 이해\n  - DLL 과 정적 라이브러리의 차이점\n  - DLL 제작 1: 암묵적 연결 (Implicit Linking)\n  - DLL 과 extern 선언\n  - DLL 제작 2 : 명시적 연결 (Explicit Linking)\n  - 한번 이상 로드될 수 있는 DLL\n- 도대체 해더파일을 몇 개나 만들 작정이야!\n  - 필요한 헤더파일의 개수는 최소한 세 개\n  - 하나의 헤더파일로 모두 지원하기\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fconnieya%2Fsystem_programming","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fconnieya%2Fsystem_programming","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fconnieya%2Fsystem_programming/lists"}