-
운영체제(OS) - 4. 프로세스 관리Computer Basis/OS 2020. 10. 6. 14:54
1. 프로세스 정의 및 문맥
# 프로세스
디스크에 실행파일 형태로 존재하던 프로그램이 메모리에 올라가서 실행될때 프로세스라 칭한다.
# Context of Process
프로세스가 현재 어떤 상태에서 수행되고 있는지 정확히 규명하기 위해 필요한 정보
CPU 재획득시, 직전 수행시점의 정확한 상태를 재현하기 위해 필요한 정보
# 문맥의 구성
1. 하드웨어 문맥
- CPU 수행상태 (PC값, 각종 레지스터 값)
2. 프로세스 주소공간
- 코드, 데이터, 스택상태
3. 커널상의 문맥
- PCB와 커널스택 (커널의 프로세스 관리를 위한 자료구조)
# 프로세스의 문맥교환 (context switch)
실행시킬 프로세스를 변경하기 위해, 수행중이던 프로세스의 문맥을 저장하고 새로운 프로세스의 문맥을 세팅하는 과정
프로세스의 상태가 running -> ready 또는 running -> block 로 변할 때 문맥교환이 일어난다.
2. 프로세스의 상태(process state)
출처 : https://eunhyejung.github.io/os/2018/07/08/operatingsystem-study06.html # 시작상태(new)
프로세스가 시작되어, 그 프로세스를 위한 각종 자료구조는 생성되었으나 아직 메모리 획득을 승인받지 못한 상태
# 준비상태(ready)
CPU만 보유하면 당장 명령을 실행할 수 있지만, CPU를 보유하지 못한 상태
프로세스가 메모리에 적재되어 있으나, CPU를 보유하지 못한 상태
# 실행상태(running)
CPU를 보유하고, 기계어 명령을 하나씩 실행하고 있는 상태
# 봉쇄상태(blocked, wait, sleep)
CPU를 할당받더라도 당장 명령을 실행할 수 없는 상태
wait() 시스템콜, I/O 시스템콜로 인해 발생
# 완료상태(terminated)
프로세스가 종료되었으나 운영체제가 그 프로세스와 관련된 자료구조를 완전히 정리하지 못한 상태
# CPU dispatch
준비상태에 있는 프로세스들 중, CPU을 할당할 프로세스를 선택후 제어권을 넘겨받는 과정
디스크 컨트롤러에 의해 인터럽트 당할때, 편의상 직전 프로세스의 문맥에서 실행된 것으로 간주한다.
실제 I/O 요청 프로세스는 직전프로세스가 아니지만,
인터럽트 당한 프로세스가 사용자모드에서 커널모드로 진입한 것으로 간주하게 된다.
3. 프로세스 제어블록(PCB)
# Process Control Block
운영체제가 시스템내의 프로세스들을 관리하기 위해 프로세스마다 유지하는 정보들을 담는 커널내의 자료구조
PCB 구성요소 # PCB 구성요소
1. 프로세스 상태 (process state)
2. 프로그램 카운터 값 (process counter)
3. CPU 레지스터 값 (CPU register)
4. CPU 스케줄링 정보 (CPU scheduling information)
5. 메모리관리 정보 (memory management information)
- 코드, 데이터, 스택 위치정보
6. 자원사용 정보 (accouting information)
7. 입출력상태 정보 (I/O status information)
4. 문맥교환 및 프로세스 큐
# 문맥교환(context switch)
프로세스 A에서 프로세스 B로 CPU의 제어권이 이양되는 과정 (CPU 제어권이 바뀌는 과정)
프로세스의 상태가 running -> ready 또는 running -> block 로 변할 때 문맥교환이 일어난다.
즉, 프로세스가 실행상태일때, 시스템 콜이나 인터럽트에 의해 커널모드에서 실행되게 되어 PCB에 문맥의 일부를 저장하더라도 이러한 과정을 문맥교환이라 부르지 않는다. (프로세스의 실행모드만 바뀌었을 뿐, CPU의 제어권이 바뀌지 않았으므로)
프로세스의 문맥교환에는 프로세스의 실행모드 변경에 비해 훨씬 많은 오버헤드가 뒤따른다.
# 프로세스 상태관리
커널의 주소 영역 중 데이터 영역에 다양한 큐를 두어 관리
큐의 종류에는 ready queue, device queue, job queue 가 있다
ready queue 에는 ready 상태 프로세서들이 들어있고,
device queue 에는 blocked 상태 프로세서들이 들어있고,
job queue 에는 현재 시스템내의 모든 프로세스들이 들어있다.
5. 스케줄러
# Schelduler
어떤 프로세스에게 자원을 할당할지 결정하는 운영체제 커널의 코드
# 장기 스케줄러(long term schelduler, job schelduler)
new상태의 프로세스를 ready queue에 진입시킬지 결정
수십 초에서 수 분 단위로 호출됨 => 수행속도가 느려도 됨
메모리에 동시에 올라가 있는 프로세스의 수(degree of multiprogramming)를 조절
과거 적은양의 메모리로 인해 사용됨 => 현대 시분할 시스템에서는 거의 사용되지 않음
# 단기 스케줄러(short term schelduler, CPU schelduler)
ready queue 내의 프로세스 중, 어떤 프로세스에게 CPU를 할당할 것인가를 결정
밀리초 단위로 호출됨 => 수행속도 빨라야함
시분할 시스템에서는 타이머 인터럽트가 발생하면 단기 스케줄러가 호출됨
# 중기 스케줄러(medium term scheduler)
- 너무 많은 프로세스에게 메모리를 할당해 시스템의 성능이 저하되는 경우를 막기위한 스케줄러
- 너무 많은 프로세스가 메모리에 적재되어있으면, 당장의 CPU수행에 필요한 프로세스의 주소공간조차도 스왑영역에서 불러와야함(disk I/O가 수시로 발생 => 시스템 성능저하)
- 위의 상황에서, 스케줄러는 일부를 선정해 이들로부터 메모리를 통째로 빼앗아 디스크의 스왑 영역에 저장해둔다. 이를 swap-out 이라 일컫는다
- 선정기준 0순위는 봉쇄 상태에 있는 프로세스들, 후순위는 타이머에 의해 ready queue로 이동하는 프로세스들
- 중기 스케줄러의 등장으로 인해, 프로세스의 상태에 중지(suspended, stopped)상태가 추가됨
- 중지(stopped)상태의 프로세스들은 외부에서 재개시키지 않는 이상 활성화 되지 않음
# 중지 상태(suspended, stopped status)
외부적인 이유로 프로세스의 수행이 정지된 상태
메모리를 보유하지않고 디스크에 통째로 swap-out 된 상태
# 중지준비(suspended ready) 상태
ready status 인 프로세스가 디스크로 swap-out 되면, 중지준비 상태로 진입한다.
# 중지봉쇄(suspended block) 상태
blocked status 인 프로세스가 디스크로 swap-out 되면, 중지봉쇄 상태로 진입한다.
봉쇄조건이 풀리면, suspended ready 로 넘어간다.
6. 프로세스의 생성
시스템 부팅 후 최초의 프로세스는 운영체제가 직접 생성
그 이후부터는 이미 존재하는 프로세스가 다른 프로세스를 복제 생성
이로 인해 부모, 자식 프로세스가 생기며, 계층을 형성한다
부모 프로세스는 모든 후손 프로세스들을 연쇄적으로 종료시킨후에야 본인이 종료될 수 있음
# 프로세스 생성(복제)
자식프로세스는 생성될 당시 부모의 내용을 그대로 복제 생성 (Unix 의 fork() 시스템 콜)
PID(process ID)를 제외한 모든 정보(운영체제 커널 내의 정보 + 주소공간 정보)를 그대로 복사
주소공간은 부모와 따로 쓰지만, 내용은 동일
자식프로세스는 exec() 시스템 콜을 통해 새로운 프로그램으로 주소공간을 덮어씌울 수 있음
(그렇다면, 부모프로세스의 주소공간이 너무나도 과도하게 크다면.... 시스템에 부하가 걸리지 않을까? 복제하자마자 다른프로그램으로 쓰는게 대부분일텐데... 복제하는 기회비용은 어떻게 해결하는지 검색해보기)로그아웃을 하면 로그인프로세스 아래에 생성된 모든 프로세스가 종료
서버 컴퓨터에 접속해서 실행시킨 프로그램을 로그아웃 이후에도 실행시키고 싶다면, 시스템 프로세스의 자식으로 이양시키면 됨
# 프로세스의 종료
1) 자발적 종료
exit() 시스템 콜로 종료되는 경우
운영체제는 해당 시스템콜을 받을시, 해당 프로세스의 자원을 모두 회수하고 시스템 내에서 이 프로세스를 정리한다
2) 비자발적 종료
- 부모의 종료로 인한 자식프로세스들의 연쇄적종료
- abort() 함수를 통한 자식프로세스 강제종료 (자식프로세스가 할당치를 넘는 자원을 요구할때 or 자식프로세스의 작업이 필요하지 않을때)
7. 프로세스 간 협력
원칙적으로는 하나의 프로세스는 다른 프로세스 수행에 영향을 미칠 수 없다
(다른 프로세스의 주소공간을 참조하는 것이 허용되지 않으므로)
하지만 효율을 위해 운영체제는 IPC(Inter-Process Communication)를 제공한다
# IPC(Inter-Process Communication)
하나의 컴퓨터 안에서 실행 중인 서로 다른 프로세스간에 발생하는 통신
프로세스간 통신과 동기화를 보장하기 위한 메커니즘
# 메세지 전달(message passing) 방식
프로세스간 공유 데이터를 일체 사용치 않고, 메세지 객체로 주고받으며 통신
프로세스간 주소공간이 다르므로 직접전달이 아닌 커널이 대행한다
커뮤니케이션 링크 생성 후, send(), receive() 시스템 콜 연산으로 통신
# 직접통신(direct communication)
전송 대상이 다른 프로세스
# 간접통신(direct communication)
전송 대상이 메일박스 객체, 다른프로세스는 메일박스에서 데이터를 꺼내쓰게 됨
# 공유 메모리(shared memory) 방식
프로세스들이 주소공간의 일부를 공유
공유메모리를 사용하는 시스템 콜로 구현
각 프로세스 마다 각자의 주소 공간 중 일부를 공유메모리로 사용함
=> (공유 메모리로 사용되는 공간은 매핑될때 동일한 물리적 메모리로 매핑됨)
커널이 대행하지 않기에, 메모리접근 동기화는 프로세스들이 책임져야 함
728x90'Computer Basis > OS' 카테고리의 다른 글
운영체제(OS) - 6. 메모리 관리 (0) 2020.10.08 운영체제(OS) - 5. CPU 스케줄링 (0) 2020.10.06 운영체제(OS) - 3. 프로그램 구조와 실행 (0) 2020.09.26 운영체제(OS) - 2. 컴퓨터 시스템 동작원리 (0) 2020.09.24 운영체제(OS) - 1. 운영체제 자원관리 개요(CPU & 메모리 관리) (0) 2020.09.23