-
[OS] 프로세스 관리 (Process Management)Computer Science/운영체제 2020. 1. 9. 22:54
프로세스(Process)의 정의
실행중인 프로그램
커널에 등록되고 커널의 관리하에 있는 작업
각종 자원들을 요청하고 할당 받을 수 있는 개체
프로세스 관리 블록(PCB)을 할당 받은 개체
실행 중에 각종 자원을 요구, 할당 반납할 수 있는 능동적인 개체
자원(Resources)의 정의
커널의 관리 하에 프로세스에게 할당/반납 되는 수동적 개체
H/W resources : Processor, Memory, Disk, Monitor Keyboard etc...
S/W resources : Message, Signal Files, Installed SWs etc...
프로세스 관리 블록 PCB(Process Control Block)
OS가 프로세스 관리에 필요한 정보 저장 (프로세스 생성 시, 같이 생성됨)
PCB가 관리하는 정보
PID(Process Identification Number) : 프로세스 고유 식별 번호
스케줄링 정보 : 프로세스 우선순위 등과 같은 스케줄링 관련 정보
프로세스 상태 : 자원 할당, 요청 정보 등
메모리 관리 정보 : 페이지 테이블, 세그먼트 테이블 등
입출력 상태 정보 : 할당 받은 입출력 장치, 파일 등에 대한 정보 등
문맥 저장 영역(Context Save Area) : 프로세스의 레지스터 상태를 저장하는 공간 등
계정 정보 : 자원 사용 시간 등을 관리
PCB 정보는 OS별로 서로 다름, PCB를 통해 프로세스를 관리하기 때문에 PCB 참조 및 갱신 속도가 OS의 성능을 결정 짓는 중요한 요소
프로세스의 상태
생성 상태(Created State)
Job이 커널에 등록되면서 PCB가 할당되고 프로세스가 생성되면서 생성 상태가 시작됩니다.
생성 상태에서 프로세스의 상태는 현재 쓸 수 있는 가용 메모리 공간에 따라 Ready, Suspended Ready 두 가지 기로에 놓이게 됩니다.
메모리가 충분한 상태라면 메모리를 할당받아 Ready 상태로 가게되고, 메모리가 충분하지 않다면 할당을 기다리기 위해 Suspended Ready 상태로 가게됩니다.
준비 상태(Ready State)
다음으로 준비 상태입니다. 이전 생성 상태에서 프로세스가 생성되고 메모리를 할당받아, 이제 실행을 하기 위해서 프로세서(CPU)를 기다리고 있는 상태입니다.
즉 프로세서 할당 대기 상태, 즉시 실행 가능한 상태라고 합니다.
프로세서를 기다리고 있다가 할당받으면 Running 상태로 가게 되는데, 이 작업을 Dispatch(Schedule)라고 합니다.
실행 상태(Running State)
프로세스가 프로세서를 할당받아 작업을 하고 있는 상태입니다.
실행 상태를 벗어나는 방법이 두가지가 존재하는데, 첫번째는 프로세서를 뺏겨서 Ready로 가는 경우, 두번째는 입출력 요청으로 인해 Asleep으로 가는 경우입니다.
대기 상태(Blocked/Asleep State)
입출력 요청으로 인해 대기 상태로 간 상태입니다.
입출력이 끝이 나면 다시 바로 Running으로 갈 수 있을까요? 프로세스 스케줄링 정책에 따라 다를수도 있지만 일반적으로 다른 프로세스가 작업을 하고 있는데 갑자기 끼어들면 안될 것입니다.
따라서 Ready로 가서 프로세서의 할당을 기다리는 상태가 됩니다. 이때 Asleep에서 Ready로 가는 과정을 Wakeup이라고 합니다.
보류 상태(Suspended State)
보류 상태는 메모리를 할당 받지 못한(빼앗긴) 상태입니다.
메모리에 프로세스가 작업하던 내용이 저장되어 있을 것입니다. 그런데 메모리를 빼앗기게 되면 여태 작업 하던 내용이 사라지게 될 것입니다. 그렇게 되면 다시 프로세스가 메모리를 할당받아서 일을 하게 됐을 때 본인이 어디까지 작업을 했었는지 알지 못하게 됩니다.
따라서 이러한 불상사를 방지하기 위해서 메모리의 상태(Memory Image)를 Swap Device에 보관합니다.
즉 메모리를 빼앗겨 메모리의 상태를 Swap Device에 저장하는 작업을 Swap-Out 이라고 하고, 메모리를 다시 할당받아 Swap Device에 있는 메모리 상태를 다시 가져오는 것을 Swap-In 이라 합니다.
완료 상태(Terminated/Zombie State)
마지막으로 프로세스의 수행이 끝난 것을 완료 상태라고 합니다.
모든 자원들을 반납하고, 커널 내에 일부 PCB 정보만을 남겨두게 됩니다.
인터럽트
예상치 못한, 외부에서 발생한 이벤트 (Unexpected external events)
ex)
I/O interrupt
Clock interrupt
Console interrupt
Program check interrupt
Inter-process interrupt
System call interrupt
....
인터럽트 처리 과정은 다음과 같은 과정을 거칩니다.
문맥교환
커널에 의해 실행 중인 프로세스의 context를 저장하고, 앞으로 실행할 프로세스의 context를 복구하는 작업
Context : 프로세스와 관련된 정보들의 집합
ex)
CPU register context => CPU
Code & Data, Stack, PCB => Memory
Context Saving : 현재 프로세스의 register context를 저장하는 작업
Context Restoring : register context를 프로세스로 복구하는 작업
문맥 교환에 소요되는 비용은 OS에 따라 다르며, OS의 성능에 큰 영향을 준다. 따라서 불필요한 문맥 교환을 줄이는 것이 중요하다. => 스레드(Thread)의 사용!
참고
m.yes24.com/goods/detail/62054527
www.youtube.com/playlist?list=PLBrGAFAIyf5rby7QylRc6JxU5lzQ9c4tN
'Computer Science > 운영체제' 카테고리의 다른 글
[OS] 프로세스 스케줄링 (Process Scheduling) (0) 2020.11.06 [OS] 스레드 관리 (Thread Management) (0) 2020.10.21 [OS] 단일 커널 VS 마이크로 커널 (0) 2020.01.02 [OS] 운영체제의 구조 (0) 2020.01.02 [OS] 운영체제 역사, 유형별 특징 (0) 2020.01.02