본 내용은 Operating System Concepts 8th Edition 번역본 책을 읽고 공부한 내용입니다.
목차
1. UNIX Process Model에 대한 이해
2. 프로세스 상태 전이
3. Process Creation/Operation in UNIX
참고 문헌
1. UNIX Process Model
아래 내용은 2에 해당하는 프로세스 상태전이를 참고하면서 보면 더 도움이 됩니다.
하나하나 차근차근 잘 외워보자(?)
1. 프로세스가 사용자 모드에서 실행 중(System Call에 의해 커널모드로 전환될 수 있다.)
2. 프로세스가 커널 모드에서 실행 중 - Running
3. 프로세스가 실행되고 있지는 않지만 커널이 예약하는 즉시 실행할 준비가 되어 있습니다. (커널이 스케줄하면 바로 실행 가능하다.) - Ready
4. 프로세스가 잠자고 있고 메인 메모리에 상주한다. - Blocked
5. 프로세스가 실행 준비가 되었지만 빈 메인 메모리가 없다. (현 프로세스를 위해 메인 메모리에서 다른 프로세스를 쫓아낸다.)
이 때 swap은 메모리가 부족하여 메인 메모리에 빈 공간을 만들기 위해 희생자를 만드는 과정이다! 메인메모리에서 하드디스크로 쫓아냄
6. 프로세스가 보조 스토리지로 교체되었으며 차단 상태이다. 메인메모리에서 쫓겨 났다!(현 프로세스가 쫓겨난다.)
7. 사용자 모드로 돌아왔지만 커널이 그 프로세스를 선점하고 있어 다른 프로세스를 스케줄하기 위해 교환 실행(context switching)
상태 3번과 비교 대상이다. preempted는 running에서 ready 상태가 되는 것이다.
교수님의 표현을 빌리면, 총장님께서 오셔서 중요한 말씀을 하려고 한다면 우리 수업은 일단 중지해야 할 것이다!
preempted를 안 하면 priority inversion (ready 상태인 게 running보다 더 priority 높을 때)가 발생한다!
8. 프로세스 0을 제외한 모든 프로세스의 시작상태이다 (시스템 콜에 의해 프로세스가 생성된다.)
9. 프로세스가 존재하지 않지만 부모 프로세스가 수집할 정보를 가진 좀비 상태. 프로세스의 최종 상태이다.
2. 프로세스 상태 전이
- Dispatch(Schedule) : Ready → Running
프로세스가 프로세서를 할당받아 Ready 상태에서 Running 상태가 되는 것 - Time run-out(Preemption) : Running → Ready
프로세스가 프로세서를 빼앗겨 Running 상태에서 Ready 상태가 되는 것 - Block : Running → Asleep
프로세스가 I/O와 같은 자원을 빼앗겨 자원을 기다리는 상태 - Wakeup : Asleep → Ready
프로세스가 프로세서 외의 필요한 자원을 할당받아 Asleep 상태에서 Ready 상태가 되는 것 - Swap-out
메모리에 적재되었던 프로세스의 적재가 해제되어 지연 상태(Suspended)가 되는 것
주로 I/O가 memory에 있을 이유가 없어 swap-out의 대상이 된다. - Swap-in
프로세스가 메모리에 적재되어 활동 상태(Active)가 되는 것
3. UNIX 프로세스의 생성과 실행
1. 프로세스 생성 : fork()
fork()는 부모가 자신과 똑같은 자식 process를 만드는 명령어이다.
아래 코드에서도 살펴볼 수 있듯, fork 함수를 호출한 프로세스가 부모 프로세스에, 그리고 호출당한 프로세스가 자식 프로세스에 해당한다. 자식 프로세스는 부모 프로세스의 메모리를 그대로 복사하고, 심지어 아래 Program counter가 깜빡거리고 있는 위치(하늘색 포인터 위치)까지도 동일하게 복사된다고 한다.
다만 다른 게 있다면 자식 process는 유일한 pid(process id)를 할당받아 pid로 구분지을 수 있다.
2. 프로그램 실행 : system()
3. 코드를 원하는 내용으로 덮어 쓴다: exec()
부모/자식 프로세스 중 하나가 자신의 메모리 공간을 새로운 프로그램으로 바꾸고 싶을 때 사용한다.
exec() 시스템 호출은 이진 파일을 메모리로 적재(load)하고 적재된 프로그램의 실행을 시작한다.
즉 그들 각자의 길을 가는 것! 이러면 부모는 더 많은 자식을 생성 가능하다. 또는 자식이 실행하는 동안 자신이 할 일이 없다면 기다리기도 한다.
그 시스템 호출이 아래에 해당한다.
4. wait()
5. exit()
운영체제에게 자신의 제거를 요구한다. 이 때 프로세스는 wait하고 있는 부모 프로세스에게 자신이 제거되었음을 알릴 수 있다.
부모가 자식의 실행을 종료할 수도 있다.(자식이 자신에게 할당된 자원을 초과하여 사용할 때, 자신에게 할당된 태스크가 더 이상 필요없을 때 ..)
참고문헌
https://www.beyonddiscovery.org/unix-operating-system/61-process-states-and-transitions.html
'CS > OS' 카테고리의 다른 글
[OS] 프로세스 동기화 (0) | 2023.04.13 |
---|---|
[OS] 다중 스레드 프로그래밍 (0) | 2023.04.12 |
[OS] 프로세스 간 통신 IPC (0) | 2023.04.11 |
[OS] 운영체제 개념 및 프로세스 (6) | 2023.04.11 |
[OS] OS 기초 1 (0) | 2023.03.24 |