목차
Process
- 실행중인 프로그램
프로그램은 실행되기 전까지는 보조기억장치에 있는 데이터 덩어리지만, 이 프로그램을 메모리에 적재하고 실행하는 순간 이 프로그램은 프로세스가 된다.
프로세스의 요소
- 프로그램 코드
- 데이터 집합
- PCB (Process Control Block)
PCB는 프로세스를 만들기 위함. 프로세스마다 생성된다.
PCB에 대해 더 자세히 알아보자.
PCB (Process Control Block)
다중 프로세스나 멀티프로세싱을 가능하게 해주는 중요한 기능이다.
프로세스가 인터럽트를 받으면 program counter의 현재 값과 process register를 적절한 곳에 저장한다.
그리고 프로세스의 상태를 blocked나 ready처럼 바뀐다. blocked와 ready 상태에 대해서는 아래에서 설명한다.
- 프로세스의 중요 정보를 저장
- 운영체제에 의해 생성되고 관리된다.
- 다중 프로세스를 가능하게 해준다
-> PCB는 실행상태인 프로세스를 interrupt하고 뒤에 execution을 재개하기 위해 충분한 정보를 가지고 있다.
모든 프로세스는 실행을 위해 CPU를 필요로 하지만, CPU 자원은 한정되어 있다. 그렇기에 프로세스들은 차례대로 돌아가면서 CPU를 이용한다. 인터럽트가 발생하면 자신의 차례를 양보하고 다음 차례가 올 때까지 기다리는데 이를 위해 PCB를 이용하는 것이다.
문맥 교환
- 하나의 프로세스 수행을 재개하기 위해 기억해야 할 정보를 문맥(context)이라고 한다.
- 기존 프로세스의 문맥을 PCB에 백업하고 새로운 프로세스를 실행하기 위해 PCB로부터 복구하고 실행하는 것을
문맥 교환 (context switching)이라고 한다.
프로세스의 메모리 영역
프로세스는 어떻게 배치되는가 ? 하나의 프로세스는 사용자 영역에 코드 영역, 데이터 영역, 힙 영역, 스택 영역으로 나뉘어 저장된다.
코드 영역
- 텍스트 영역, 말 그대로 실행 할 수 있는 코드, 기계어로 이루어진 명령어가 저장
데이터 영역
- 프로그램이 실행되는 동안 유지할 데이터가 저장되는 공간 ex) 전역 변수
힙 영역
- 프로그래머가 직접 할당할 수 있는 저장 공간
스택 영역
- 데이터를 일시적으로 저장하는 공간 ex) 매개 변수, 지역변수
일반적으로 힙 영역은 메모리의 낮은 주소에서 높은구조로 할당 되고, 스택 영역은 높은 주소에서 낮은 주소로 할당된다. (또는 반대)
Process States
Dispatcher : 프로세스를 다른 프로세스로 바꾸는 과정
생성 상태 (new)
- 프로세스를 생성중인 상태, 메모리에 적재되어 PCB를 할당 받은 상태
준비상태 (ready)
- 당장이라도 CPU를 할당받아 실행할 수 있지만, 아직 자신의 차례가 아니기에 기다리고 있는 상태
실행상태 (running)
- CPU를 할당받아 실행 중인 상태
- 인터럽트(타이머 인터럽트) 가 발생하면 다시 준비 상태가 되고, 실행 도중 입출력장치를 사용하여 입출력장치가 끝날때까지 기다려야 한다면 대기 상태가 된다.
대기상태 (blocked)
- 입출력장치가 입출력을 끝낼 때까지 기다려야한다. 이 상태를 대기 상태라고 한다.
- 입출력 작업이 완료되면 해당 프로세스는 다시 준비 상태로 CPU할당을 기다린다.
종료상태 (terminated, exit)
- 프로세스가 종료된 상태
*타이머 인터럽트: 프로세스가 할당된 시간을 모두 사용하여 발생하는 인터럽트
TWO-STATE PROCESS MODEL
- Running
- Not Running
: Ready to execute
: Blocked - waiting for I/O
- Queue에는 Not running 상태의 프로세스들이 저장
- processor에는 running 상태의 프로세스들이 저장
FIVE-STATE PROCESS MODEL
New : 프로세스를 실행할 수 없음, PCB는 할당받았지만 메인 메모리에 load되지 않음.
Ready : 실행 준비상태
Running: 실행 상태
Blocked: 이벤트가 발생할때까지 실행할 수 없음
Exit: 프로세스 종료
*Timeout : 타이머 인터럽트라고 생각하면 된다.
STATE TRANISITION
위에 내용을 이해했다면 이 과정을 이해할 수 있을 것이다.
Running -> Ready
Time-out은 타이머 인터럽트를 의미하고
Preempted는 다른 프로세스가 이미 차지하고 있던 CPU를 빼앗은 것을 의미한다.
Ready / Blocked -> Exit
는 부모 프로세스가 자식 프로세스를 종료시키는 것을 의미한다.
프로세스 중지 상태 (Suspended)
- suspended 상태의 프로세스는 메모리를 강제로 뺏긴 상태로 특정한 이유로 프로세스의 수행이 정지된 상태를 의미
하나의 프로세스만 running 상태에 있을 수 있는 반면, 여러 개의 프로세스가 ready 상태나 block 상태에 있을 수 있다. 그러면 이런 경우도 있을 수 있다.
1. ready 상태에서 계속 CPU의 점유권을 못 가져가는 프로세스
2. asleep 상태에서 ready 상태로 못넘어가는 프로세스
3. 입출력 장치보다 프로세서가 빨라, 모든 프로세스가 입출력장치를 기다려야 함.
-> 이는 실행은 잘 되지도 않으면서 메모리에서 자리만 차지하고 있으므로 이를 해결하기 위해 메인 메모리에서 DISK로 옮기는 것을 Swapping 라고 한다.
메인 메모리에있는 프로세스가 준비상태가 아니라면 운영체제는 blocked process중 하나를 디스크에서 suspended queue로 전환한다. -> Blocked state becomes Suspend state
Suspended processes 의 특징
- 프로세스는 즉시 실행되지 않음.
- 프로세스는 이벤트에대해 기다리거나 안 기다릴 수 있다.
- 프로세스는 운영체제에 의해 중지 상태에 놓여진다.
- 프로세스는 명시적으로 삭제하라는 명령이 들어올때까지 삭제가 안 될수있다.
One Suspended States
위에서 설명했듯이 '메인 메모리에서 DISK로 옮기는 것을 Swapping 라고 한다.' 라는 문장에서 볼 수 있듯이 메인 메모리에서 DISK로 프로세스를 옮긴다는 뜻은 메모리가 새로 생긴다는 뜻이다.
그러면 이 새로 생긴 메모리를 누구에게 주어야하는가?
1. Newly created process (새로 생성된 프로세스)
2. Previously suspended process (전에 있던 중지된 프로세스)
* blocked process에서 메모리로 다시 가져오는건 좋지 않다.
Two Suspended States
이렇게 되면서 새로운 state transition이 생겼다.
* Blocked/Suspended -> Blocked
- Ready/Suspended의 프로세스보다 Blocked/Suspend의 프로세스가 우선순위가 매우 높으면서 event가 곧 발생할 것이라는 확신이 들 때, 이런 transition 발생
* Ready -> Ready/Suspended
- Ready process를 swap-out 시키는 것이 메모리를 얻을 수 있는 유일한 경우일 때
- ready process가 우선순위가 매우 낮을 때
* Running -> Ready/Suspended
- Block/Suspend process의 (매우 높은 우선순위의) 이벤트가 발생하여 메모리로 올라와야하는데 메모리가 부족할 경우 Running에서 바로 swap-out 될 수 있다.
'🖥️ Computer Science > Operating System' 카테고리의 다른 글
[운영체제] Process Creation (0) | 2024.04.19 |
---|---|
[운영체제] Threads, SMP, Microkernels (1) | 2024.04.09 |
[운영체제] Process Description and Control - 3 (0) | 2024.04.03 |
[운영체제] Process Description and Control - 2 (0) | 2024.03.27 |
[운영체제] Computer System Overview (0) | 2024.03.15 |