본문 바로가기

Programming

윈도우 시스템 프로그래밍_3

[뇌를 자극하는 윈도우즈 시스템 프로그래밍] 2007 윤성우 저
" 시스템 프로그래이란 하드웨어를 사용할 수 있도록 도와주는 프로그램"

= Window 운영체제 기반의 컴퓨터에게 일을 시키기 위한 프로그램 구현하는 것

 

6장 커널 오브젝트와 오브젝트 핸들

사실상 프로세스는 운영 체제가 생성/관리 한다.

프로그래머->(CreateProcess)->운영 체제->프로세스 생성(관리)

프로세스를 관리하기 위해서 프로세스 상태 정보를 저장하기 위해 정의한 것이

프로세스 관리 구조체 = 커널 오브젝트이다.

 

"윈도우 운영체제는 프로세스, 쓰레드 파일과 같은 리소스들을 원활히 관리하기 위해 필요한 정보를 저장해야 한다. 이때 데이터를 저장하는 메모리 블록을 가리켜 커널 오브젝트라고 한다."

 

 

1. 프로그래머는 커널 오브젝트를 직접 조작할 수는 없지만 간접 조작은 가능하다.

ex) 프로세스 우선순위 높이기

-실제로 프로세스 우선순위를 높여서 문자열을 출력한 결과 문자열이 뒤섞이는 것을 확인할 수 있다. 이유는 함수 호출이 완료되기 전에 다른 프로세스에게 CPU 할당 시간을 넘겨주기 때문이다.

 

2. 커널 오브젝트는 프로세스에 종속된 것이 아니라 운영체제에 종속되어 있다. 때문에 생성, 소멸은 운영체제에 의해 결정된다. 때문에 운영체제에 의해 운영되는 프로세스는 각각의 커널 오브젝트에 접근 가능하다.

*그래서 하나의 프로세스 우선순위가 높은 경우 다른 프로세스가 그 우선순위를 낮추고 실행될 수 있다.

 

4. 프로세스가 소멸된다고 해서 커널 오브젝트가 생성되지 않는다 그렇다면 커널 오브젝트는 언제 소멸되는 것일까

A. 해당 커널 오브젝트를 참조하는 대상이 하나도 없을 때. (Usage Count로 관리 생성될 때 1로 초기화되며 자식 프로세스가 생기면 추가된다.)

 

 


 

7장 프로세스 간 통신

프로세스들이 서로 만날 수 없는 이유

프로세스는 개별적으로 독립적인 메모리 공간을 가진다.  때문에 프로세스들은 자신에게 할당된 메모리 공간 이외에는 접근이 불가능하다.

 

IPC 방식 : 메일 슬롯

데이터를 주고받기 위해 프로세스가 우체통을 마련하는 것

1. Receiver가 준비해야 할 것 우체통 (CreateMailSlot(...))

2. Sender가 준비해야 하는 것 (Receiver가 만들어 놓은 메일 슬롯의 이름을 알아야 한다.)

3. ReadFile: 메일 슬롯의 핸들을 받아 데이터를 읽는다.

- 메일 슬롯은 브로드 캐스팅 방식의 통신을 지원한다. 하나의 Sender는 한 번의 메시지 전송으로 여러 Receiver에게 동일한 메시지를 동시에 전송하는 것이 가능하다.

 

WaitForObject 함수

- 프로세스를 실행시키면, 프로세스 생성과 소멸 시점을 예측할 수 없게 된다 그럴 때 사용하는 것이 WaitForObject이다. 하나의 프로세스가 끝날 때까지 기다려서 소멸 시점을 관리할 수 있게 한다.

 

 


 

8장 프로세스 간 통신

핸들 테이블

커널 오브젝트와 핸들 사이에 핸들 테이블이 존재한다. 때문에 핸들을 참조하여 특정 커널 오브젝트를 가리킬 수 있다. 

핸들은 상속되며 부모 프로세스의 핸들 테이블 정보고 자식 프로세스의 핸들 테이블에 복사된다. 

 

IPC 방식 : 파이프 기반 IPC

: 이름에 걸맞게 옥상에 내린 물을 아래로 내려준다.라는 의미로 이해하면 쉽다.

 

이름 없는 파이프 : (부모 자식, 형제 관계) 프로세스 사이에서 통신할 경우 유용, 단방향 통신을 지원한다.

- 파이프를 생성하고 양끝 정보를 알고 있는 상태라면 부모, 자식이 양끝을 통해 소통할 수 있다.

 

이름 있는 파이프 : 메일 슬롯과 마찬가지로 이름으로 서로를 식별하기 때문에 관계가 없어도 통신이 데이터를 주고받을 수 있다. 양방향 통신을 지원한다.

- 파이프 생성 후 , ConnectNamePipe를 통해 연결 요청을 기다리게 된다. 

 

 

 

 

'Programming' 카테고리의 다른 글

윈도우 시스템 프로그래밍_5  (0) 2020.10.04
윈도우 시스템 프로그래밍_4  (0) 2020.09.26
윈도우 시스템 프로그래밍_2  (0) 2020.09.13
윈도우즈 시스템 프로그래밍  (0) 2020.09.06
[도서] Code Complete - #2  (0) 2020.05.18