http://www.kocw.net/home/search/kemView.do?kemId=1046323 의 강의를 정리한 글입니다.
1. 프로세스란
프로세스(Process)란 실행 중인 프로그램을 말한다.
- 프로세스의 문맥(Context) - 프로세스의 현재 상태를 나타내는데 필요한 요소들
- CPU의 수행상태를 나타내는 하드웨어(Program Counter, 각종 Register)
- Program Counter : 실행할 기계어 코드의 위치를 지정하고 다음에 실행할 명령어의 주소를 가지고 있는다.
- 프로세스의 주소 공간(code, data, stack)
- 프로세스 관련 커널 자료구조(PCB, Kernel stack)
➡️ 프로세스의 문맥을 파악하고 있지 않으면 CPU의 제어권을 뺏겼다가 다시 잡았을 때 프로그램의 처음부터 다시 시작해야 한다.
- CPU의 수행상태를 나타내는 하드웨어(Program Counter, 각종 Register)
2. 프로세스의 상태
프로세스는 상태가 변경되면서 수행된다.
- RUNNING : CPU를 잡고 Instruction을 수행하고 있는 상태
- USER MODE : 프로세스가 CPU를 가지고 있으면서 본인의 코드를 실행하고 있는 상태
- MONITOR MODE : 프로세스가 본인이 할 수 없어서 운영체제에게 요청(시스템 콜)을 하여 운영체제가 CPU를 가지고 운영체제 커널이 RUNNING하고 있는 상태
- I/O 등으로 인해 운영체제가 CPU를 가지고 있는 상태를 '운영체제가 RUNNING하고 있다'고 하지 않고 'Kernel Mode, Monitor mode에서 RUNNING하고 있다'고 한다.
- READY : 메모리 등의 다른 조건은 모두 만족하고 CPU를 기다리는 상태
- BLOCKED(WAIT, SLEEP) : CPU를 줘도 당장 instruction을 수행할 수 없는 상태
- 해당 프로세스가 요청한 이벤트(I/O 등)가 만족되지 않아 응답을 기다리는 상태
- NEW : 프로세스가 생성 중인 상태
- TERMINATED : 프로세스의 수행이 끝났지만 정리할 게 남아있는 상태
- SUSPENDED(STOPPED) : 외부적인 이유로 프로세스의 수행이 정지된 상태 (INACTIVE)
- 프로세스는 통째로 디스트에 swap out된다.
- 외부에서 resume해줘야지만 active된다.
- SUSPENDED BLOCK과 SUSPENDED READY로 나뉜다.
3. PCB(Process Control Block)
운영체제가 각 프로세스를 관리하기 위해 프로세스당 유지하는 정보를 말한다.
- 구성요소(구조체로 유지)
- (1) OS가 관리를 위해 사용하는 정보(Process State, Process ID, Scheduling information, priority)
- (2) CPU 수행과 관련된 하드웨어 값(Program Counter, registers)
- (3) 메모리 관련 정보(code, data, stack의 위치 정보)
- (4) 파일 관련 정보(Open file descriptors...)
4. 문맥 교환(Context Switch)
CPU를 한 프로세스에서 다른 프로세스로 넘겨주는 과정을 말한다.
- CPU가 다른 프로세스에게 넘어갈 때 운영체제는
- CPU를 내어주는 프로세스의 상태를 그 프로세스의 PCB에 저장한다.
- CPU를 얻는 프로세스의 상태를 PCB에서 읽어온다.
- 시스템 콜이나 인터럽트(하드웨어)이 발생할 때 반드시 문맥 교환이 일어나는 것은 아니다.
- CPU가 사용자 프로세스에서 운영체제로 넘어가는 것은 문맥 교환이 아니다.
이 경우, 기존 사용자 프로세스의 정보를 PCB에 저장하긴 하지만 문맥 교환을 하는 경우보다는 부담이 적음(cache memory flush)- 예) 프로세스 A ➡️ 시스템 콜 ➡️ 커널모드 ➡️ 프로세스 A (문맥교환 X)
- 사용자 프로세스에서 다른 사용자 프로세스로 CPU가 넘어가는 과정을 문맥 교환이라고 한다.
- 예) 프로세스 A ➡️ 타이머 인터럽트 ➡️ 커널모드 ➡️ 프로세스 B (문맥교환 O)
- CPU가 사용자 프로세스에서 운영체제로 넘어가는 것은 문맥 교환이 아니다.
5. 프로세스를 스케줄링 하기 위한 큐
- Job Queue: 현재 시스템 내에 있는 모든 프로세스의 집합(ready queue + device queue)
- Ready Queue: 현재 메모리 내에 있으면서 CPU를 잡아서 실행되기를 기다리는 프로세스의 집합
- Device Queue: I/O Device의 처리를 기다리는 프로세스의 집합
➡️ Ready queue에 있으면 Device queue에서 빠지고, Device queue에 있으면 Ready queue에서는 빠져 있다.
➡️ 프로세스들은 각 큐들을 오가며 수행된다.
6. 스케쥴러(Scheduler)
- Long-term scheduler(Job scheduler)
- 프로세스에 메모리 및 각종 자원을 주는 문제
- 시작 프로세스 중 어떤 것들을 ready queue로 보낼 지를 결정한다.
- degree of multiprogramming을 제어한다
- time sharing system에는 장기 스케줄러가 없다.(무조건 ready)
- Short-term scheduler(CPU scheduler) :
- 프로세스에 CPU를 주는 문제
- 어떤 프로세스를 다음에 running할 지를 결정한다.
- 밀리 세컨드 단위로 스케줄이 이루어져야 하므로 충분히 빨라야 한다.
- Medium-term scheduler(Swapper) :
- 프로세스에게서 메모리를 빼앗는 문제
- 여유 공간 마련을 위해서 프로세스를 통째로 메모리에서 디스크로 쫓아낸다.
- degree of multiprogramming을 제어한다.
- 이로 인해 메모리를 빼앗긴 상태를 표시하기 위해서 'SUSPENDED'가 생겼다.
- degree of multiprogramming : 메모리에 올라가는 프로그램의 수
- 프로그램을 실행하면 장기 스케줄러가 실행되면서 메모리를 줘서 ready상태가 된다.
- 이 때 메모리의 여유 공간등을 고려하지 않고 무조건 ready상태가 되기 때문에 중기 스케줄러를 통해서 메모리에 너무 많은 프로그램이 올라가 있으면 일부 프로그램을 메모리에서 쫓아낸다.
'컴퓨터 구조와 운영체제' 카테고리의 다른 글
프로세스 관리 (0) | 2022.08.29 |
---|---|
쓰레드(Thread) (0) | 2022.08.22 |
컴퓨터 시스템 구조(2) (0) | 2022.08.18 |
컴퓨터 시스템 구조(1) (0) | 2022.08.16 |
운영체제란 (0) | 2022.08.16 |