* 강의를 듣고 복습하며 정리한 내용입니다.
프로그램의 실행
프로그램이 실행될 때 각각의 프로그램은 독자적인 주소 공간인 가상 메모리를 가진다. 이는 코드, 데이터, 스택 영역으로 구성된다.
운영체제의 커널도 하나의 프로그램이기 때문에 코드, 스택, 데이터 영역을 가진다.
프로세스
프로세스란 실행 중인 프로그램을 말한다.
프로세스 문맥 (Process Context)
시분할 시스템 환경에서는 타이머 인터럽트에 의해 CPU 관리가 이루어진다. 따라서 CPU를 뺏겼다가 다시 얻었을 때 이전에 어디까지 명령을 수행했는지 정보가 필요하다. 이를 프로세스 문맥이라고 한다.
프로세스 문맥은 다음과 같이 구분할 수 있다.
1. 하드웨어 문맥: Program Counter 등 각종 레지스터에 저장된 값
2. 프로세스의 주소 공간: 코드, 데이터, 스택으로 구성된 프로세스의 독자적 주소 공간
3. 커널 자료구조: 프로세스와 관련된 PCB와 커널 스택
PCB (Process Control Block)
운영체제가 각 프로세스를 관리하기 위해 프로세스의 정보를 기록한 커널 내 자료구조. 프로그램이 프로세스가 되었다는 것은 운영 체제로부터 PCB를 받았다는 것을 의미한다.
PCB에는 프로세스의 상태, 고유 번호, 다음 명령할 작업의 위치, CPU 레지스터 정보, 메모리 위치 정보, 열린 파일 목록 등이 저장된다.
문맥 교환 (Context Switch)
CPU를 한 프로세스에서 다른 프로세스로 넘겨주는 과정을 문맥 교환이라고 한다. 문맥 교환시 CPU를 내어주는 프로세스의 상태를 PCB에 저장하고 새롭게 얻은 프로세스의 상태를 PCB에서 읽어온다.
사용자 프로세스 실행 중 인터럽트나 시스템 콜에 의해 CPU가 운영체제 커널로 넘어가는 경우는 문맥 교환이 아니다.
= 프로세스 A에서 프로세스 A로 이동
타이머 인터럽트나 I/O 작업을 위한 시스템 콜로 인해 CPU가 다른 프로세스로 넘어가는 경우는 문맥 교환이다.
= 프로세스 A에서 프로세스 B로 이동
프로세스의 상태
1. New: 프로세스를 생성 중인 상태.
2. Running: 실행 중인 상태. CPU에서 기계어를 수행하는 프로세스는 매 시점 하나뿐이다.
3. Ready: 프로세스가 CPU를 기다리는 상태. 메모리 등 다른 조건을 모두 만족하고 CPU만 할당받으면 바로 실행 가능한 상태이다.
4. Blocked: CPU를 할당받아도 당장 실행할 수 없는 상태 예) 프로세스가 요청한 I/O 작업이 완료되지 않아 기다리는 상태.
5. Suspended: 외부적인 이유로 프로세스의 수행이 정지된 상태. 프로세스는 통째로 디스크에 swap out 된다. 예) 사용자가 프로그램을 일시 정지시킨 경우, 메모리에 너무 많은 프로세스가 올라와 시스템이 프로세스를 중단시킨 경우.
6. Terminated: 프로세스가 종료 중인 상태.
📌Blocked vs Suspended
Blocked상태의 프로세스는 요청한 작업이 끝나면(I/O 작업 등) Ready 상태로 돌아온다. 하지만 Suspended는 아예 일을 하지 못하는, 외부에서 불러줘야 다시 실행할 수 있는 상태이다.
프로세스 스케줄링
프로세스 상태 관리는 커널의 주소 영역 중 데이터 영역에 다양한 큐를 두어 수행한다. 즉, 각 프로세스가 CPU를 기다리는지, I/O 작업을 기다리는지 등을 커널이 관리한다.
프로세스는 큐를 오가며 수행된다.
1. 작업 큐(Job Queue): 프로세스의 상태와 무관하게 시스템 내 모든 프로세스를 관리하기 위한 큐. 프로세스가 시스템에 들어가면 작업 큐에 넣어진다.
2. 준비 큐(Ready Queue): CPU 할당을 기다리는 프로세스들로 구성된 큐.
3. 장치 큐(Device Queue): I/O 디바이스 처리를 기다리는 프로세스들로 구성된 큐.
* 작업 큐에 있다고 해서 반드시 메모리를 가지고 있는 것은 아니다.
* 준비 큐와 장치 큐는 모두 작업 큐에 속한다.
큐는 각 프로세스의 PCB를 연결 리스트 형태로 관리하며 포인터를 사용해 순서를 정한다.
스케줄러
어떤 프로세스에게 자원을 할당할지 결정하는 운영체제 커널의 코드
장기 스케줄러(Long-term Scheduler)
Job Scheduler라고도 한다. 시작 프로세스 중 어떤 것을 준비 큐로 보낼지 결정한다. 프로세스에 메모리 및 각종 자원을 주는 문제를 다룬다.
👉time sharing system에는 보통 장기 스케줄러 없이 무조건 준비 상태가 된다.
단기 스케줄러(Short-term Scheduler)
CPU Scheduler라고도 한다. 어떤 프로세스를 다음에 실행시킬지 결정한다. 단기 스케줄러는 타이머 인터럽트마다 수행되기 때문에 빨라야 한다.
중기 스케줄러(Medium-term Scheduler)
Swapper라고도 한다. 메모리에 적재된 프로세스의 수를 제어하는 역할을 한다. 프로세스의 수가 너무 많을 때 일부를 디스크 스왑 영역으로 쫓아낸다 = swap out
* 중기 스케줄러로 인해 프로세스 상태에 Suspended 상태가 추가되었다.
'Computer Science > Operating system' 카테고리의 다른 글
[운영체제] CPU 스케줄링 | KOCW 2017 이화여대 반효경 교수님 (0) | 2022.05.31 |
---|---|
[운영체제] 프로세스 관리(2) | KOCW 2017 이화여대 반효경 교수님 (0) | 2022.05.26 |
[운영체제] 컴퓨터 시스템의 구조 | KOCW 2017 이화여대 반효경 교수님 (0) | 2022.05.24 |
[운영체제] 운영체제 개요 | KOCW 2017 이화여대 반효경 교수님 (0) | 2022.05.23 |