1. 프로세스의 이해

: 오늘날의 운영체제를  멀티 프로세스 운영체제 라고 부른다. 프로세스가 여러개 존재할 수 있는 운영체제라는 뜻이다.

: 프로세스는 무엇이고 프로세스라는 것이 여러개 존재할 수 있는것일까?    

* 프로세스란 무엇인가?

: 프로세스란 실행 중에 있는 프로그램을 의미한다

: 메모리 공간으로 올라간 프로그램이 프로세스라고 볼 수 있다.

* 프로세스를 구성하는 요소

- Execution of "C"Program

: 프로그램이 실행될 때 구성되는 메모리 공간

Data 영역 : 전역변수나 static 변수의 할당을 위함

Stack 영역 : 지역변수 할당과 함수 호출시 전달되는 인자값 저장

Heap 영역 : 동적할당(malloc, calloc 함수) 

Code 영역 : 실행파일을 구성하는 명령어들이 올라가는 메모리 영역

: 위의 사진은 프로세스 생성시 만들어지는 메모리 구조를 보여주고 있는데, 이 자체를 그냥 프로세스라고 표현하기도 한다.

: 명령어들이 올라와 있는 상태이고 필요한 메모리 공간이 할당되어 있는 상태이기 때문이다.

* Register Set

: 프로그램 실행을 위해서는 Register들이 절대적으로 필요하기 때문에, 프로세스를 구성하는 요소로 더불어 생각해보아야 한다.

: 그러므로 Register의 상태까지도 프로세스의 일부로 포함시켜 말할 수 있다.


2. 프로세스의 스케줄링과 상태 변화

: "CPU는 하나인데, 어떻게 여러개의 프로그램이 동시에 실행 가능한 것인가?"

* 프로세스의 스케줄링

: 하나의 CPU가 여러개의 프로세스를 번갈아 가면서 실행해야한다.

: CPU는 매우 빠르기 때문에 여러개의 프로그램을 고속으로 번걸아가면서 실행시킬 경우, 사용자는 동시에 여러개의 프로그램이 실행된다고 느껴진다.

- 스케줄링의 기본 원리

: 프로세스의 CPU 할당 순서 및 방법을 결정짓는 일을 가르켜 스케줄링이라 하며 이때 사용되는 알고리즘을 스케줄링 알고리즘이라고 한다.

: 이를 적용해서 프로세스를 관리하는 운영체제 요소(모듈)을 가리켜 스케쥴러라고 한다

- 멀티 프로세스는 CPU를 바쁘게 한다.

: A,B,C의 프로세스가 실행되는 형태

1. 고전적

: 순차적 실행방법 => A시작종료, B시작종료, C시작종료

2. 동시 실행

 : A,B,C를 모두 실행시키고 스케쥴러에 의해 프로세스들이 관리되도록 함

: 이 두가지 방법의 차이는 프로그램 특성에 따라 달라진다.

: 일반적으로 프로세스는 입력/출력 과정(인터넷에서 사이트를 다운받거나, 메모리에서 불러올 때)에서 시간이 많이 소요된다. 이떄 CPU는 아무일을 하지 않고 대기하게 된다.

: A프로세스가 I/O에 관련된 일을 할 때 B 프로세스가 CPU에 의해 실행된다면 얼마나 효율적일까?


* 프로세스의 상태 변화

: 프로세스 각각의 상태는 시간 흐름에 따라 변화한다.

상황 1. S(start)에서 Ready 상태로의 전이를 보여준다.

: 프로세스가 생성되고 Ready상태로 들어간다.

: CPU에 의해 실행되기를 기다린다.

상황 2. Ready 상태에서 Running 상태로의 전이를 보여준다.

: Ready 상태에 있는 프로세스들은 스케줄러에 의해 관리되는 프로세스들이다.

: 스케줄러는 Ready 상태에 있는 프로세스 중 하나를 알고리즘에 의해 선택해서 실행한다.

상황 3. Running 상태에서 Ready 상태로의 전이를 보여준다.

: 프로세스들은 생성시 중요도에 따라서 우선순위가 매겨진다.

: 우선수위가 높은 프로세스를 Ready에서 Running 상태로 끌어 올리고 종료 후 다른 프로세스를 실행한다.

상황 4. Running 상태에서 Blocked 상태로의 전이를 보여준다.

: 일반적으로 데이터 입.출력에 관한 일을 할때 발생된다

: 실행 중에 있는 프로세스가 실행을 멈추는 상태로 들어가게 된다.

: 대신 Ready 상태에 있는 프로세스 하나를 실행시켜  CPU를 효율적으로 사용한다.

상황 5. Blocked 상태에서 Ready 상태로의 전이를 보여준다

: Blocked 상태는 스케줄러에 의해서 선택될 수 없는 상태를 의미한다.

: 입출력이 완료되었을 때에 Ready 상태로 전이된다.

* 프로세스의 상태변화, 시나리오로 다시 이해하기

: 책 참고.

3. 컨텍스트 스위칭 (Context Switching)

: 멀티 프로세스 운영체제의 기본 원리에 대해서 이야기 했는데, 이는(실행 중인 프로세스의 변경) 사실 시스템에 많은 부하를 가져다 주기도한다.

"CPU 내에 존재하는 레지스터들은 현재 실행 중에 있는 프로세스 관련 데이터들로 채워진다"

: 따라서 프로세스가 변경될 떄에는 현재 레지스터들이 지니고 있는 데이터를 어딘가에 저장해야, 나중에 이전 프로세스를 실행했을 때 작업을 이어서 할 수 있다. 

: 새롭게 시작되는 프로세스도 이미 저장된 레지스터 데이터들이 있을 수 있으므로, 복원시켜주어야만 한다.

: 이 작업을 일컬어 Context Switching 이라고 한다.

: 레지스터 개수가 많은 시스템일 수록 이는 더 복잡해지며, 멀티 프로세스 운영체제의 단점이다.

: 즉, I/O 과정에서 발생하는 CPU손실과 Context Switching 과정에서 발생하는 손실을 비교하여 어느 것이 성능향상에 도움이 되는지 고려해야한다.

: 이는 프로그램마다 다르게 나타나므로, 감각을 키워나가야 한다.

4. 프로세스의 생성

* 프로세스의 생성

: 프로그램이 다른 프로그램을 실행시켜도 이는 프로세스가 생성된 것이므로, 다른 프로그램을 실행시키는 프로그램을 만들어보자.

* CreateProcess 함수의 이해

: Windows에서 프로세스 생성을 돕기 위해 제공하는 함수이다.

: 새로운 프로세스간에 부모-자식 프로세스 관계가 형성된다.

* 예제를 통한 CreateProcess 함수의 이해


뇌를 자극하는 윈도우즈 시스템 프로그래밍
국내도서
저자 : 윤성우
출판 : 한빛미디어 2007.03.30
상세보기


+ Recent posts