티스토리 뷰
※ 반효경 교수님의 운영체제와 정보기술의 원리를 기반으로 작성하였습니다.
프로세스(Process)
프로세스란 실행 중인 프로그램을 말한다. 실행에 대해서는 4장에서도 살펴보았는데 크게 메모리 할당, CPU할당 두 조건을 만족하는 것을 의미한다. 따라서 프로세스는 메모리에 올라가 CPU를 획득해 자신의 코드를 수행하기도 하고, CPU를 반환하고 입출력 작업을 수행하기도 한다. 그러다가 자신의 임무를 다 수행하고 나면 종료되어 사라진다.
문맥(Context)
문맥이란 프로세스의 현재 상태를 명확히 나타내기위한 정보이다. 여러 프로세스를 함께 수행하는 시분할 시스템 환경에서 CPU는 여러 프로세스에게 돌아가면서 할당되었다가 빼앗기기를 반복한다. 이 과정에서 CPU를 빼앗긴 후 다시 CPU를 획득해 실행될 때 이전 수행시점의 상태를 정확하게 재현해야하고, 이때 프로세스 문맥을 사용하게 된다.
문맥의 구성요소
- 하드웨어 문맥: CPU의 수행 상태를 나타내는 것으로 프로그램 카운터(PC)값과 각종 레지스터에 저장하고 있는 값 의미
- 프로세스 주소 공간: 4장에서 설명함
- 프로세스 관리를 위한 자료구조: 커널의 주소 공간에 존재하는 PCB와 커널 스택(kernal stack)
이 중에서도 PCB에 대해 조금 더 자세히 알아보자.
PCB(Process Control Block)
프로세스 제어블록이란 운영체제가 시스템 내의 프로세스들을 관리하기 위해 프로세스마다 유지하는 정보들을 담은 커널 내의 자료구조를 의미한다. PCB는 다음과 같은 구성요소를 가진다.
- OS 관리상 사용하는 정보
- 프로세스의 상태(process state): CPU 할당 가능 여부 결정에 필요
- 프로세스 번호(ID)
- CPU 스케줄링 정보(CPU scheduling information):
- CPU 수행 관련 하드웨어 값
- 프로그램 카운터(program counter): 다음에 수행할 명령의 위치 가리킴
- CPU 레지스터(CPU register)의 값: CPU연산을 위해 현 시점에 레지스터에 가지고 있는 값
- 메모리 관련
- 메모리 관리 정보(memory management information): 메모리 할당 위한 코드, 데이터, 스택의 위치 정보
- 파일 관련
- 프로세스가 오픈한 파일 정보
- 자원 사용 정보(accounting information)
- 입출력 상태 정보(I/O status information)
프로세스 상태(process state)
크게 세 가지 상태로 나누어 볼 수 있다.
- 실행(running): 프로세스가 CPU를 보유하여 실행중인 상태
- 준비(ready): CPU만 할당받으면 바로 실행 가능한 상태. 메모리와 같은 다른 부분은 모두 준비
- 봉쇄(blocked, wait, sleep): CPU를 할당 받더라도 실행할 수 없는 상태.
프로세스는 항상 이 세 가지 중 하나의 상태를 가지게 되며, 흐름에 따라 변하게 된다.
문맥 교환(context switch)
문맥 교환이랑 하나의 사용자 프로세스로부터 다른 사용자 프로세스로 CPU의 제어권이 이양되는 과정을 의미한다. CPU를 할당받고 실행 → 타이머 인터텁트 발생 → CPU 제어권이 운영체제로 넘어감 → 운영체제가 인터럽트 처리루틴 수행 (실행중이던 프로세스의 문맥 저장(자신의 PCB에 저장) 및 준비 상태로 변환 → 새롭게 실행시킬 프로세스에 CPU 할당 → 새로운 프로세스의 저장해두었던 문맥을 PCB에서 실제 하드웨어로 복원)과 같은 과정을 거친다. 주로 타이머 인터럽트가 발생하거나 입출력 요청 시스템 콜을 하여 봉쇄상태에 들어가는 경우 문맥 교환이 일어난다.
프로세스 실행 중에 그 외에 다른 시스템 콜이나 인터럽트가 발생하면 CPU의 제어권이 운영체제로 넘어와 커널의 코드가 실행된다. 이 경우에는 문맥교환이 일어나지 않는다. CPU의 실행위치와 같은 프로세스 문맥의 일부가 PCB에 저장되기는 하지만 이를 문맥교환이라고 보지 않는다.
프로세스 스케줄링을 위한 queue
- 준비 큐(ready queue): 준비 상태에 있는 프로세스들을 줄세워 제일 앞에 있는 프로세스에 제일 먼저 CPU할당. 스케줄링 방법에 대한 것은 6장에서.
- 장치 큐(device queue): 프로세스를 줄 세우듯 특정 자원을 기다리는 프로세스들을 줄 세우기 위해 자원별로 존재
+) 공유 데이터 큐: 어떤 프로세스가 공유 데이터를 사용하고 있을 때 다른 프로세스가 접근해 공유 데이터의 상태가 바뀌는 것을 막기 위해 공유 데이터 큐에 줄을 세워 관리
- 작업 큐(job queue): 현재 시스템 내에 있는 모든 프로세스 줄 세움. 준비 큐, 장치 큐의 프로세스가 모두 포함된다. 작업 큐가 가장 넓은 개념
이러한 큐의 자료구조는 연결 리스트형태로 되어있다. 각 준비, 혹은 장치 큐마다 큐헤더(queue header)가 존재하고 여기에 PCB를 연결하여 연결 리스트 형태로 관리하고, 포인터를 사용해 순서를 정한다.
스케줄러(scheduler)
어떤 프로세스에 자원을 할당할지 결정하는 운영체제 커널의 코드
단기 | 장기 | 중기 |
CPU 스케줄러 | 작업 스케줄러(job scheduler) | swapper |
어떤 프로세스를 다음번에 실행 상태로 만들 것인지 결정 | 어떤 프로세스를 준비 큐에 진입시킬지 결정 | 메모리에 올라와 있는 프로세스 중 일부를 선정해 메모리를 통채로 빼앗아 스왑 영역에 저장(=swap out) |
CPU를 할당하는 문제에 관여 | 메모리에 동시에 올라가 있는 프로세스의 수(degree of multiprogramming) 관리 | 메모리에 동시에 올라가 있는 프로세스의 수 동적으로 관리 |
밀리초 단위로 매우 빈번하게 호출. 수행 속도가 충분히 빨라야 | 수 분단위로 호출, 상대적으로 느림 허용 | |
현대 시분할 시스템에서는 장기 스케줄러 두지 않는 경우가 대부분. 자원이 좋아지면서 장기 스케줄러 없이 바로 메모리 할당 | 외부적인 이유로 프로세스의 수행이 정지된 상태에 있는 중지(suspended, stopped)상태 추가 |
'OS' 카테고리의 다른 글
4장. 프로그램 구조와 실행 (0) | 2023.01.27 |
---|---|
3장. 컴퓨터 시스템의 동작 원리 (1) | 2023.01.15 |
동기식과 비동기식 입출력 (0) | 2023.01.08 |
2장. 운영체제 개요 (0) | 2023.01.05 |
- 신호처리
- controllable GAN
- deeplearning
- TRACKING
- Depth estimation
- Raspberry Pi
- Building Basic GAN
- Deep learning
- ML Pipeline
- depth
- DSP
- 디지털신호처리
- machine learning
- image
- 운영체제
- AI
- 딥러닝
- design pattern
- Operating System
- feature
- Gan
- depthmap
- pcb
- conditional GAN
- Generative Model
- 3d object detection
- ML
- MLOps
- OS
- mode collapse
- Total
- Today
- Yesterday
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |