The Process
프로세스의 정의 : 간단하게 말하면 메모리에 적재되어 실행중인 프로그램(program in execution) 이라 할 수 있다.
프로세스는 기존의 프로그램 코드(text section)보다 더 많은 정보들을 포함하고 있다.
■ Program counter : 실행할 명령어가 저장된 주소를 저장하는 포인터
■ Text section : 프로그램 명령어 집합이 저장된 영역
■ Stack : 함수 매개변수(function parameters),지역변수(local variable), 복귀주소(return address) 등 일시적인 데이터를 저장하는 영역
■ Data section : 전역변수(global variable)가 저장되는 영역
■ Heap : 프로세스 실행중에 동적으로 할당되는 메모리 영역(ex. C++ 의 new 연산자)
|
|
|
Process Control Block
|
|
|
|
-
Process state. 프로세스 상태는 new, ready, running, waiting, halted(종료), 등이 될 수 있다
-
Program counter. 프로그램 카운터는 프로세스에서 실행될 다음 명령어의 주소를 나타낸다. CPU가 다른 프로세스를 실행하다가 제어가 이전 프로세스로 넘어왔을 때 다음에 실행할 명령어를 기억하기 위해 반드시 저장해야 한다.
-
CPU registers: Accumulators(누산기), index registers(인덱스 레지스터), stack pointers(스택 포인터), and general-purpose registers(범용 레지스터) 등을 포함한다.
프로그램 카운터와 마찬가지로 이전 프로세스를 다시 실행할 때 정확한 실행을 위하여 반드시 저장해야 한다.
- CPU-scheduling information. 프로세스 우선순위나 스케쥴링 큐(scheduling queue)에 대한 포인터 등 CPU scheduling에 대한 정보를 포함한다
-
Memory-management information. base register, limit registers, the page tables, segment tables 등 운영체제에서 사용하는 메모리 관리 관련 정보를 포함한다.
-
Accounting information. CPU 사용시간, 시간 제한(time limits), account numbers, process(job) numbers등을 포함한다.
- I/O status information. 해당 프로세스에 할당된 I/O의 목록과 open된 파일들의 정보 등을 포함한다.
Process State
1. New : Process가 생성되 시점에서 해당 Process의 상태는 New상태이다.
2. Running : New상태에서 Process가 CPU에 대한 제어권을 얻어 명령어가 실행중일때 해당 Process는 Running상태이다.
3. Waiting : 해당 Process가 I/O대기 등 특정 Event를 기다리는 상태가 되면 CPU의 제어권을 반납하고 특정 Event가 발생하기 전까지는 CPU의 제어권을 받지 않는다. 이러한 상태를 Wating상태라고 한다.
4. Ready : 해당 Process가 기다리는 특정 Event가 완료되어 CPU를 기다리고 있는 상태를 Ready상태라고 한다.
5. Terminated : 해당 Process가 모든 명령어를 수행하고 종료한 상태를 Terminated상태라고 한다. 이러한 5가지 상태중 2,3,4번의 경우 주기적으로 반복한다. 이러한 상태를 나타내는 도식은 아래와 같다..
Process Scheduling
Multiprogramming(다중프로그래밍)의 목적은 프로세스들을 항상 실행시켜 CPU의 활용을 높이는 것이다.
예를 들어 입출력을 기다리는 동안 CPU는 계속 대기하고 있는데
이때 대기하고 있는 CPU가 다른 작업을 수행하도록 하여 CPU활용을 극대화 할 수 있다.
Time sharing(시분할)의 목적은 CPU가 프로세스 사이를 매우 빠른 주기로 switching해서
사용자들이 각각의 프로그램들을 동시에 실행하게끔 하는 것이다.
이 두 가지의 목적을 이루기 위해서는 적절한 프로세스를 선택하는 process scheduler가 필요하다.
Scheduling Queues
Process scheduler는 process scheduling을 실행하기 위해 Scheduling Queue를 사용한다
프로그램이 실행된 후 ready 상태에 들어간 프로세스들은 Ready queue에 저장되어 있다.
이때 각각의 프로세스들의 PCB가 ready queue에 저장된다.
이 큐는 일반적으로 linked list 형태로 저장되어 있다.
Ready queue 구조 에서 header는 리스트의 첫 번째와 마지막 PCB를 가리키고 있다.
Ready queue 뿐만 아니라 시스템에서는 device queue와 같은 다른 큐들도 존재한다.
프로세스가 CPU에 할당되어 실행 도중에 시스템에 존재하는 입출력(I/O)장치를 사용해야 할 때가 있는데
다른 프로세스에서 이 장치를 사용하는 경우가 있다.
예를 들어, 디스크의 경우 OS에서 실행되고 있는 수많은 프로세스들이 수시로 디스크를 사용한다.
입출력 장치는 한번에 하나의 요청밖에 처리할 수밖에 없기 때문에
프로세스는I/O장치에서 이전 작업이 끝날 때까지 기다려야 한다.
이를 위해 각각의 I/O 장치마다 device queue라는 list를 갖고 있다.
Device queue는 해당 I/O장치를 사용하기 위해 기다리고 있는 프로세스들의 리스트를 저장하고 있다.
구조는ready queue와 동일하다.
아래 그림은 ready queu e와 device queue의 구조를 보여주고 있다.
Process scheduling 실행과정
아래 그림은 process scheduling 과정을 나타내는 그림이다
Process scheduling 과정은 다음과 같다.
1. 프로그램이 실행되어 새 프로세스가 생성되고 ready상태가 되며ready queue에 추가된다.
2. Process scheduler가 ready queue에 있는 프로세스를 CPU에 할당하여 실행시킨다.
3. 프로세스 실행 중에 여러 이벤트가 발생할 수 있는데, 다음과 같이 처리한다.
가. 프로세스가 I/O장치 사용을 요청하고 waiting상태가 된다. I/O queue에 해당 프로세스가 추가되고 I/O입출력이 끝나면 waiting에서 ready상태로 바뀌어 ready queue에 추가된다.
나. 프로세스가 프로세스에 실행에 할당된 시간(time slice)가 만료되었다. Process가 running에서 ready상태로 바뀌어 ready queue에 추가된다.
다. 프로세스가 새로운 child process를 생성하고 child process 종료까지 waiting 상태가 된다. Child process가 종료되면 waiting에서 ready 상태로 바뀌어 ready queue에 추가된다.
라. 프로세스가 실행도중에 interrupt(인터럽트)가 발생한다. CPU에서 실행 중이던 프로세스는 강제로 제거되어 ready상태가 된 후 ready queue에 추가된다.
마. Process scheduling은 위와 같은 주기를 반복하다가 process가 작업이 끝나고 종료되면(terminated) 종료된 프로세스는 모든 scheduling queue로부터 제거되며,프로세스의 PCB와 할당된 자원(resource)은 모두 할당이 해제되어 시스템에 반납된다.
출처 : http://nukestorm.tistory.com/12
'Security > System' 카테고리의 다른 글
[06] 디스크 관리(디스크 스케줄링 기법) (0) | 2015.08.17 |
---|---|
[05] 주기억장치 / 가상기억장치 (0) | 2015.08.17 |
[04] 프로세스 교착상태 (0) | 2015.08.17 |
[03] Process Scheduling (0) | 2015.08.17 |
[02] 태스크(프로세스, 스레드)의 상태 전이도 (0) | 2015.08.17 |