시작은 미미하나 끝은 쥬쥬하리라.

Study/Windows System Programming 22

[Window System Programming] 윈도우 시스템 프로그래밍 내용 정리

윈도우 시스템 프로그래밍 내용 정리 1. 시스템 프로그래밍의 이해와 접근 / 컴퓨터 하드웨어의 구성 / CPU에 대한 이해 2. 아스키 코드 VS 유니코드 3. 64비트 기반 프로그래밍 4. 컴퓨터 구조와 접근 방법 / LOAD & STORE 명령어 / Direct & Indirect Mode 5. 프로세스와 스케쥴러 / 프로세스 생성 6.커널 오브젝트에 대한 이해 / 핸들의 종속 관계 7. 프로세스 간 통신(IPC)의 의미 / 메일 슬롯 방식 IPC / Signaled vs Non-Signaled 8. 프로세스 환경변수 / 핸들 테이블 상속 / 파이프 방식 IPC 9. 스케쥴링 알고리즘과 우선순위 10. 절차적 함수 호출 11. 프로세스 VS 스레드 / 커널 레벨 VS 유저 레벨 스레드 / 커널 모드 ..

[Window System Programming] Chapter 21. DLL

4-21 DLL DLL(Dynamic Linked Library) DLL(Dynamic Linked Library) 라이브러리 정적 라이브러리 / 동적 라이브러리 존재 정적 라이브러리 : 각 실행 파일에 라이브러리를 별도로 저장 동적 라이브러리 : 각 실행 파일이 라이브러리 파일을 공유 정적 동적 라이브러리 차이 정적 라이브러리 : 프로그램에 미리 맵핑 되어 가상 메모리에 올라와 있으며 프로그램이 실행되면 메인 메모리에서 사용 동적 라이브러리 : 프로그램이 실행될 때 링크 필요, 수정하고자하는 일부만의 변경 가능 -> 별도의 DLL 파일 존재 정적 라이브러리(좌)와 동적 라이브러리(우) 파일의 동작 비교 (1) 정적 라이브러리 메인 메모리에 올라온 경우, 컨텍스트 스위칭이 일어나면 동일한 영역이더라도 새..

[Window System Programming] Chapter 20. 가상 메모리 & 힙 컨트롤 / MMF

4-20 가상 메모리 & 힙 컨트롤 / MMF 가상 메모리 컨트롤 힙 컨트롤 MMF(Memory Mapped File) 가상 메모리 컨트롤 가상 메모리 컨트롤 CPU와 프로그래머 고나점의 메모리는 가상 메모리, 실제로 물리적 메모리에 맵핑되는 구조 가상 메모리 페이지 Windows OS는 가상 메모리의 페이지를 관리할 때, 페이지에 특성을 부여 -> COMMIT 상태 : 물리적 메모리가 할당된 상태 -> FREE 상태 : 물리적 메모리가 할당되지 않은 상태, 메모리 맵핑이 되지 않은 상태 -> Malloc() 함수를 통해 COMMIT, FREE 상태로의 전환을 수행 REVERSE 상태 사용해야되는 메모리를 COMMIT 상태로 놓게되면 다른 곳에서 사용 불가 -> 연속적인 페이지 할당을 원하기 때문에 필요..

[Window System Programming] Chapter 19. 비동기 I/O와 APC

4-19 비동기 I/O와 APC I/O와 클럭 비동기 I/O 중첩 I/O 완료 루틴 기반 I/O 알람 가능한 상태(Alertable State) & APC(Asynchronous Procedure Call) I/O와 클럭 ex) 1초에 100번의 연산(100클럭)을 하는 A시스템과 1초에 200번의 연산(200클럭)을 하는 B시스템이 있는 경우 -> 100클럭의 연산데이터를 버퍼를 통해 전송하고 버퍼는 10 클럭마다 비워진다고(전송된다고) 가정 -> A 시스템은 연산에 1초가 소요되며 데이터를 10개로 분할하여 전송 -> B 시스템은 연산에 0.5초가 소요되며 데이터를 20개로 분할하여 전송 -> 일반적으로는 B 시스템(클럭이 높은)이 더 빨라 보이나, 이는 핸드 쉐이크 등 과정이 2배로 사용되는 것을 ..

[Window System Programming] Chapter 18. 파일 I/O와 디렉토리 컨트롤

4-18 파일 I/O와 디렉토리 컨트롤 파일 I/O 디렉토리 컨트롤 파일 I/O ANSI 미국의 산업 표준을 제정하는 민간단체, 국제표준화기구(ISO)에 가입되어 있는 단체 -> 일반적으로 ANSI는 MicoroSoft 디스크 운영체제인 MS DOS의 기본 인코딩인 OEM-US 혹은 Window-1252를 의미 -> ANSI에서 정의한 파일 입출력 관련 표준함수 = 파일 I/O 함수 파일 I/O 함수 ANSI에서 정의한 파일 입출력 관련 표준, 국제 표준이기 때문에 모든 OS가 해당 표준을 따르며 운영체제에 관계없이 작동하는 함수 -> 하드웨어에 OS를 설치하고 프로그램을 동작할 때, 파일을 생성하면 하드디스크에 저장 -> 이때 파일이 저장되는 방법은 파일 시스템에 의존적, 파일 시스템은 OS의 일부(O..

[Window System Programming] Chapter 17. 예외 처리 / SEH & 종료 핸들러 / 예외 핸들러

4-17 예외 처리 / SEH & 종료 핸들러 / 예외 핸들러 예외 처리 SEH & 종료 핸들러 예외 핸들러 예외 처리 CPU의 예외 처리 정책 CPU는 미리 정의된 예외 상황에서 소프트웨어, OS 등이 동작하는 중간에 예외가 발생하면 정책에 따라 처리 -> CPU는 에외 상황이 발생하면 발생 여부만 알려주고 처리의 구체적인 방안은 소프트웨어가 결정 -> 소프트웨어는 예외 처리 핸들러를 마련 해놓고, 예외 발생시 예외 핸들러 동작 -> OS를 하드웨어에 넣는 시점에서 이미 예외 핸들러는 설정 하드웨어 예외 이미 결정되어 있는 CPU의 예외 -> 하드웨어 예외의 처리 결정권은 소프트웨어에게 있음 SEH & 종료 핸들러 SEH Windows OS는 SEH(구조적 예외 기법) 매커니즘을 가지고 있음 -> 1...

[Window System Programming] Chapter 16. 메모리 계층 / 캐쉬와 캐쉬 알고리즘 / 가상 메모리

4-16 메모리 계층 / 캐쉬와 캐쉬 알고리즘 / 가상 메모리 메모리 계층 캐쉬와 캐쉬 알고리즘 가상 메모리 페이지 & 페이지 프레임 메모리 계층 메모리 계층 레지스터 : CPU에 내장, 연산을 위한 저장소 제공 L1 & L2 캐쉬 : CPU와 RAM 사이의 중간 저장소 역할, CPU의 일부가 아닌 CPU에 근접한 메모리 메인 메모리 : RAM ( + 하드디스크 일부 : 스왑 파일) -> 상위 계층으로 갈수록 비용, 속도 증가 -> 메모리 계층 비교 시, 같은 기능을 기준으로 비교 (ex: 메인 메모리의 실행 하드디스크의 실행을 비교) -> 프로그램 실행을 위해서 하위 메모리는 상위 메모리에게 메모리를 전달 -> 상위 메모리에 데이터가 없다면 하위 메모리에 데이터를 요청 -> 프로그램의 지역적 특성 때문..

[Window System Programming] Chapter 15. 스레드 풀링(Pooling)

3-15 스레드 풀링(Pooling) 스레드 풀 스레드 풀 구현 스레드 풀 스레드 풀의 필요성 스레드의 생성과 소멸이 빈번히 일어나면 시스템이 부담 -> 하나의 동작을 위해 하나의 스레드가 생성 후 소멸되고 다시 다른 동작을 위해 다른 스레드 생성/소멸 = 비효율적 스레드 풀 할당된 동작을 마친 스레드를 소멸시키지 않고 스레드 풀에 저장해두었다가 필요한 경우 다시 재사용 -> n개의 동작이 요구되면, 미리 스레드 풀 내부에 저장해둔 스레드를 통해 해당 동작을 처리하고 다시 스레드 풀로 반환 스레드 풀 구현 스레드 풀 구현 고려사항 1. 스레드를 어떻게 동작에 할당할 것인가? 2. 동작을 마무리한 스레드를 어떻게 스레드 풀 내부에 다시 저장할 것인가? 스레드 풀 구현 -> 스레드를 저장할 구조체 선언 : ..

[Window System Programming] Chapter 14. 이벤트 기반 동기화 / 타이머 기반 동기화

3-14 이벤트 기반 동기화 / 타이머 기반 동기화 이벤트 기반 동기화 타이머 기반 동기화 이벤트 기반 동기화 6. 이벤트 기반 동기화 : 접근 기반 동기화 : 순서 기반 동기화 순서 동기화의 필요성 ex) 사용자로부터 입력을 받아 출력하는 프로그램 -> 입력에 의존적, 입력은 사용자에 의존적 -> 10Byte씩 입력을 받다가 100MB의 입력이 이루어지는 경우 데이터 손실 발생 가능성 -> 입력 도중에도 출력이 이루어져야하기 때문에 프로그램 성능이 감당하지 못할 수 있음 -> 입력 스레드와 출력 스레드 사이에 버퍼를 두어, 버퍼가 Full되는 경우 버퍼의 값을 출력 버퍼로 전달해주는 모델 정의 -> 입력 스레드가 버퍼에 데이터를 보내기 이전에 출력 스레드가 출력 동작을 진행하면 쓰레기값 출력 -> 순서..

[Window System Programming] Chapter 13. 스레드 동기화 / 유저 모드 동기화 / 커널 모드 동기화

3-13 스레드 동기화 / 유저 모드 동기화 / 커널 모드 동기화 스레드 동기화 유저 모드 동기화 커널 모드 동기화 스레드 동기화 스레드 동기화 필요 이유 : 다수 스레드의 동시 접근 문제 임계 영역(Critical Section) 둘 이상의 스레드가 동시에 접근할 위험요소를 가지고 있는 코드 블록 -> 임계 영역은 한 번에 하나의 스레드만 접근할 수 있도록 설정을 해주어야 함 -> 위의 과정을 접근 동기화 ex) A스레드가 값을 입력받아 해당 값을 가지고 B스레드가연산을 하는 경우 -> A스레드는 B스레드보다 먼저 실행되어야 함 : 스레드의 실행 순서 컨트롤 -> 위 과정을 순서 동기화 스레드 동기화 메모리의 접근 동기화 + 실행 순서 동기화 동기화 구분 순서 동기화 : 이벤트 기반 동기화 접근 동기화..