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

Study/Windows System Programming 22

[Window System Programming] Chapter 12. 스레드 생성, 소멸 / 스레드 성격, 특성 / 스레드 상태, 우선순위 컨트롤

3-12 스레드 생성, 소멸 / 스레드 성격, 특성 / 스레드 상태, 우선순위 컨트롤 스레드 생성, 소멸 스레드 성격, 특성 스레드 상태, 우선순위 컨트롤 스레드 생성, 소멸 스레드 생성 : createThread() -> 핸들의 상속 여부 -> 스레드의 독립적인 스택 공간 크기(스택 사이즈) -> 스레드 main 함수의 함수 포인터(스레드 main 함수가 전달되면 스레드가 독립적인 루틴을 형성) -> 스레드 main 함수에 전달할 인자, 자료형 -> default Flag -> 스레드 ID 핸들 vs 스레드 ID 핸들 : 프로세스가 가지는 고유한 정수값 -> 해당 프로세스 내에서만 의미를 지님 -> 프로세스가 내부 리소스를 컨트롤하기 위한 목적 스레드 ID : 스레드가 가지는 고유한 ID -> OS 전..

[Window System Programming] Chapter 11. 프로세스 vs 스레드 / 커널 레벨 vs 유저 레벨 스레드 / 커널 모드 vs 유저 모드

3-11 프로세스 vs 스레드 커널 레벨 vs 유저 레벨 스레드 커널 모드 vs 유저 모드 프로세스 vs 스레드 ex) 1인용 테트리스 프로그램 -> 하나의 프로세스 사용 ex) 2인용 테트리스 프로그램 -> 하나의 부모 프로세스에 두 자식 프로세스를 생성해서 구현 -> 만약 프로세스를 상속하면 부모와 자식 프로세스는 모두 데이터/힙/스택/코드 세그먼트가 존재 -> 스케쥴러는 커널 오브젝트 관리와 컨텍스트 스위칭이 부담될 수 있음 일반적으로 코드의 흐름을 2개의 분기로 가져가기 위해서는 함수 호출을 위한 스택이 필요 -> 스택의 논리적 분할이 가능하다면 프로세스를 2개 생성하지 않아도 되지 않을까 ? : 스레드 -> 스레드는 부모 프로세스와 데이터/힙/코드 영역은 공유, 스택만 논리적으로 분할하여 사용 ..

[Window System Programming] Chapter 10. 절차적 함수 호출

3-1 절차적 함수 호출 스택 프레임 / 프레임 포인터 프로그램 카운터 스택 프레임 / 프레임 포인터 스택 프레임 함수 호출 과정에서 할당되는 메모리 블록 -> 함수 호출이 마무리된 이후에는 해당 함수의 지역 변수에 접근 불가 -> 메모리 블록이 함수 호출이 끝나면서 반환되었기 때문 -> main()이 fct1을, fct1은 fct2를 호출하는 구조 -> fct2의 지역변수 e와 h는 fct2 호출이 완료되면 반환되어 사라지는 스택 프레임에 해당 스택이라는 이름이 부여된 이유는 메모리의 구조적인 특성 때문 -> 가장 먼저 할당되면 가장 나중에 반환, 가장 나중에 반환되면 가장 먼저 반환되는 특성 : Stack sp 스택 포인터 기본적으로 스택이 데이터를 쌓거나 반환하기 위해서는 어느 위치까지 데이터를 저..

[Window System Programming] Chapter 09. 스케쥴링 알고리즘과 우선순위

2-9 스케쥴링 알고리즘과 우선순위 프로세스 스케쥴러 스케쥴링 알고리즘 프로세스 스케쥴러의 동작 시점 프로세스 스케쥴러 스케쥴러 일반 OS와 리얼타임 OS를 결정짓는 역할 -> 스케줄러의 동작 방식에 따라 일반 OS가 되기도, 리얼타임 OS가 되기도 함 리얼타임 OS : 실시간으로 동작을 처리하며 응답성이 좋은 OS -> A라는 프로그램을 리얼타임 OS와 일반 OS가 동시에 실행한 경우, 리얼타임 OS가 더 빠르게 처리 -> 최종적으로 동작 처리를 마무리하고 실행하는 것은 CPU 성능에 의존적(리얼타임 OS가 무조건적으로 빠르진 않음) 타임 슬라이스 프로세스는 클럭을 기준으로 동작하고, 이 클럭이 모여서 타임 슬라이스를 형성 -> 프로세스에게 할당된 러닝 시간의 기준을 의미 ex) 타임 슬라이스가 3클럭..

[Window System Programming] Chapter 08. 프로세스 환경변수 / 핸들 테이블 상속 / 파이프 방식 IPC

2-8 프로세스 환경변수 / 핸들 테이블 상속 / 파이프 방식 IPC 프로세스 환경변수 핸들 테이블 상속 파이프 방식 IPC 프로세스 환경변수 환경변수 하나의 데이터 블록, 프로세스가 자신의 정보를 넣어두었다가 사용하기 위한 용도 프로세스 별로 독립적인 메모리 공간이 할당, 저장은 key와 value 쌍으로 저장 프로세스의 환경변수 사용을 위해 SetEnvironmentVariable(), GetEnvironmentVariable() 함수가 필요 1. SetEnvironmentVariable() : 데이터를 저장하기 위함 -> key와 value를 인자로 전달 2. GetEnvironmentVariable() : 데이터를 반환 받기 위함 -> key값을 통해서 value 값의 포인터를 반환 프로세스 환경..

[Window System Programming] Chapter 07. 프로세스 간 통신(IPC)의 의미 / 메일 슬롯 방식 IPC / Signaled vs Non-Signaled

2-7 프로세스 간 통신(IPC)의 의미 / 메일 슬롯 방식 IPC / Signaled vs Non-Signaled 프로세스 간 통신(IPC)의 의미 메일 슬롯 방식 IPC Signaled vs Non-Signaled 프로세스 간 통신(IPC)의 의미 일반적인 통신 : 데이터의 송수신하는 방식 프로세스 간 통신 : 같은 메모리 영역을 공유하는 방식 ex) 프로세스 A의 데이터 영역에 프로세스 B가 접근이 가능한 경우 -> 프로그램 A가 프로그램 B에게 영향을 받을 수 있음 -> 이를 제한하고자 운영체제에서 프로세스의 공유 가능한 메모리 영역을 지정 -> 프로세스 A가 공유 메모리 영역에 데이터를 저장, 프로세스 B가 공유 메모리 영역에서 데이터를 로드하는 방식 IPC(Inner Process Commun..

[Window System Programming] Chapter 06. 커널 오브젝트에 대한 이해 / 핸들의 종속 관계

2-6 커널 오브젝트에 대한 이해 / 핸들의 종속 관계 커널 오브젝트에 대한 이해 핸들의 종속 관계 커널 오브젝트 커널 모든 OS가 가지고 있는 핵심에 해당하는 부분 -> Windows OS와 Linux가 번들로 제공하는 소프트웨어(커널)에는 차이가 있음 -> 이전에는 운영체제와 커널은 동의어 -> 지금에는 운영체제의 기능이 늘어나고 운영체제 별 기능의 차이가 생기면서 그 의미가 분리 -> 따라서 처음 운영체제에서 지금에 이르는 과정에서 변하지 않고 유지되고 있는 부분을 커널이라 함 커널 오브젝트 커널에 의해 관리되는 리소스 정보를 담고 있는 데이터 블록 리소스 : 운영체제에 의해 생성 및 소멸되는 것 -> 커널 오브젝트는 리소를 관리하기 위함 ex) 사용자가 파일을 하나 생성해서 해당 파일에 접근하려는..

[Window System Programming] Chapter 05. 프로세스와 스케쥴러 / 프로세스 생성

2-5 프로세스와 스케쥴러 / 프로세스 생성 프로세스와 스케쥴러 프로세스 생성 프로세스와 스케쥴러 프로세스 메인 메모리로 이동하여 실행 중인 프로그램 하드디스크에 있는 실행 파일을 실행시키는 순간에 메모리 공간이 할당되고 이 순간부터 프로그램은 프로세스 메모리 공간 메모리 공간 : 데이터 영역 + 스택 영역 + 힙 영역 + 코드 영역 -> 데이터 영역 : 전역 변수나 static 변수 할당을 위한 영역 -> 스택 영역 : 지역변수 할당과 함수 호출 시 인자 값 저장을 위한 영역 -> 힙 영역 : 동적 할당을 위한 영역 -> 코드 영역 : 프로그램 실행 시, 명령어들이 올라가는 영역 ex) RAM이 256MB인데 프로세스의 메모리 공간을 4GB 할당 받는 경우 -> 메모리 공간 전체가 RAM에 올라갈 수 ..

[Window System Programming] Chapter 04. 컴퓨터 구조와 접근 방법 / LOAD & STORE 명령어 / Direct & Indirect Mode

2-4 컴퓨터 구조와 접근 방법 / LOAD & STORE 명령어 / Direct & Indirect Mode 컴퓨터 구조와 접근 방법 LOAD & STORE 명령어 Direct & Indirect Mode 컴퓨터 구조와 접근 방법 CPU 디자인 프로그래머 관점 CPU 디자인 : 명령어(컴파일러를 통해 만들어지는 명령어 집합) + 레지스터 디자인 -> 아래부터 간단한 레지스터 디자인을 진행 레지스터 중심 CPU 디자인 예시 1. 고려사항 : 레지스터의 비트수(N비트 시스템에서는 레지스터 역시 N비트로 구성), 레지스터의 개수, 레지스터의 저장 용도(범용 RAM, 하드디스크와 차별되는 부분, 용도를 정하면 명령어가 단순해지고 연산 속도 향상, 필수는 아님) 2. 레지스터 디자인 : 16비트, 레지스터 8개..

[Window System Programming] Chapter 03. 64비트 기반 프로그래밍

1-3 64비트 기반 프로그래밍 WIN32 vs WIN64 프로그램 구현 관점에서의 WIN32, WIN64 WIN32 vs WIN64 32비트와 64비트의 차이 한 번에 송수신 가능한 데이터의 크기, 데이터의 처리 능력 즉, 버스 시스템의 능력과 CPU의 차이가 주요 ex) 32비트 시스템에서는 32비트 명령어를 한 번에 fetch(명령어 이동) 한다고 하면 64비트 시스템에서는 64비트 명령어를 한번에 fetch 하면서 한 번에 fetch 할 수 있는 데이터의 크기가 증가 -> 같은 시간에 32비트 명렁어를 64비트는 2번 fetch 할 수 있다고 생각할 수 있으나, 보통 64비트 시스템에서는 64비트 명령어 길이를 사용하는 것이 일반적 하드웨어 관점에서 WIN32 vs WIN64 버스 인터페이스가 한..