프로세스(Process)란?
프로세스란 지금 실행하는 프로그램을 의미하며, 프로그램의 가장 기본적인 단위를 의미하기도 한다.
프로세스의 문맥(Context)
현재 혹은 특정 지점을 놓고 봤을 때 프로세스가 어디까지 수행됐는지, 프로세스를 실행시키기 위해 어떤 메모리 공간을 만들었는지, Program Counter가 어디를 가리키고 있는지를 알려주는 정보를 프로세스의 문맥이라고 한다.
프로세스의 요소
각 프로세스는 크게 아래의 2가지를 갖는다.
- address space(core image)
- process table entry
여기서 entry는 해당 프로세스를 수행하기 위해 필요한 정보와 나중에 수행하기 위해 필요한 레지스터 값과 상태를 저장한다.
Entry보다는 Process Control Block이라는 이름으로 더 많이 불린다.
Process table은 운영체제가 관리하는 자료구조의 종류로, Entry, 즉 PCB는 이 자료구조의 한 부분을 차지한다.
프로세스가 실행되면 독자적인 공간이 형성되고, 그 공간에 형성된 자료들을 보며 문맥을 파악할 수 있다.
프로세스의 문맥을 읽을 수 있는 것으로는 크게 아래의 3가지가 있다.
- CPU와 관려된 하드웨어 문맥
- 프로세스의 주소 공간
- 프로세스 관련 커널 자료 구조
CPU와 관련된 하드웨어 문맥
레지스터에 어떤 값을 넣고 있었고 프로그램 카운터가 어디를 가리키는지를 본다.
프로그램 카운터와 레지스터의 값을 보며 프로세스가 어디까지 실행되었는지를 파악할 수 있다.
프로세스의 주소 공간
Code, Data, Stack의 주소 공간이 형성되며 해당 주소 공간의 값들을 보아 문맥을 파악할 수 있다.
프로세스 관련 커널 자료 구조
Process Control Block (PCB)
프로세스가 하나 실행될 때 마다 Process Control Block(PCB)을 만든다.
PCB는 운영체제가 각 프로세스를 관리하기 위해 프로세스당 유지하는 정보 블록으로 다음과 같은 구조를 가진다. (구조체로 유지된다.) ▼
- OS가 관리상 사용하는 정보
Process state, Process ID, Scheduling Information, Prioity - CPU 수행 관련 하드웨어 값
Program counter, Registers - 메모리 관련
Code, Data, Stack의 위치 정보 - 파일 관련
Open file descrpitors 등등
Kernel Stack
커널에서도 함수 호출이 실행되면 스택에 데이터를 쌓아놓는다.
그러나 커널은 여러 사용자 프로세스들에 의해 공용으로 사용된다.
그렇기에 어떤 프로세스가 호출했는지에 따라 커널 스택을 다르게 둔다.
프로세스가 혼자 실행되면 이런 것들이 필요없는데, 예전과는 다르게 요즘에는 여러 개의 프로세스가 실행되기 때문에 문맥을 제대로 알고 있어야 이전에 실행된 위치부터 다시 시작할 수 있다.
프로세스의 상태
프로세스의 상태와 상태 다이어그램
상태 다이어그램(state diagram) 은 일반적으로 프로세스의 3가지 상태, Running, Ready, Blocked를 보여준다. ▼
Running
CPU를 잡고 instruction을 수행중인 상태를 말한다.
Ready
CPU를 기다리는 상태를 말한다.
다른 모든 것은 준비가 되어있고 CPU만 잡으면 바로 실행할 수 있는 상태이다.
Blocked(wait, sleep)
CPU를 줘도 instruction을 수행할 수 없는 상태를 말한다.
프로세스 자신이 요청한 event가 수행되지 않아 즉시 만족되지 않아 기다리는 상태이다. (I/O와 같은 작업)
New
생성 될 때의 상태를 말한다.
Terminated
수행이 끝난 상태를 말한다.
프로세스가 끝나면 바로 종료되는게 아니라 정리하는 시간이 있는데, 그 정리하는 시간을 terminated라고 한다.
하지만 New와 Terminated는 상태도에는 잘 쓰진 않는다.
아래의 그림은 위의 상태도를 컴퓨터의 입장에서 보기 쉽게 표현한 것이다. ▼
CPU는 굉장히 빨라서 계속계속 잘 돌아가지만 디스크는 그만큼 빠르지 않아 순회가 빠르지 않다.
그림에는 라운드 로빈처럼 차례차례 돌아가는 것 처럼 표현되어있지만, 사실은 그렇진 않고 우선순위에 따라 배정된다.
Multiprogramming
초기의 컴퓨터는 프로그램을 순차적으로 처리해야했다.
프로그램이 10개가 있다면, 1번 프로그램부터 10번 프로그램까지 순서대로 돌려야했다.
프로그램들 끼리의 속도차이도 존재했는데, 연산 처리 속도와 입출력 속도의 차이가 엄청나게 큰 것도 문제였다.
순차적으로 실행하는 것에서 이미 엄청난 자원 낭비가 이루어지게 되면서, 다른 작업의 응답을 대기할 동안 다른 프로세스를 수행할 수 있게 한 Multiprogramming이 등장했다.
동작
Multiprogramming은 CPU가 프로세스를 전환함으로서 수행된다.
실제로는 하나의 CPU Core에서는 하나의 프로세스만 수행될 수 있기 때문이다.
Program Counter는 Core하나당 하나씩 존재하기에, 하나의 Program Counter를 계속 바꾸면서 여러 개의 프로세스를 구동시킨다.
그래서 Multiprogramming은 얼핏 보면 동시에 돌아가는 것 처럼 보이지만, 실제로는 굉장히 빠르게 번갈아가며 수행이 된다.▼
Context Switch
CPU를 한 프로세스에서 다른 프로세스에게 넘겨주는 과정을 Context Switch, 한국말로 문맥 교환이라고 한다.
CPU가 다른 프로세스에게 넘어갈 때 운영체제는 다음의 두 절차를 수행한다.
- CPU를 내어주는 프로세스의 상태를 그 프로세스의 PCB에 저장한다.
- CPU를 새롭게 얻는 프로세스의 상태를 PCB에서 읽어온다.
여기서 중요한 것은 한 프로세스에서 다른 프로세스이다.
System Call이든 Interrupt든, 사용자 프로세스에서 커널로 넘어가게 된다.
하지만 사용자에서 운영체제로 넘어가는건 문맥 교환이 아니다.
프로세스 A에서 프로세스 B로, 다른 프로세스로 넘어가는 과정이 있어야 문맥 교환이 일어난다. ▼
1번과 같이, 아무리 커널을 거친다고 해도 A에서 A로 가는 경우는 문맥 교환이 일어나지 않는다.
1번 역시도 context의 일부를 PCB에 저장해야 하지만, 부담은 훨씬 적은 편이다.
2번의 경우 A에서 B로 가기에 문맥 교환이 일어난다.
문맥 교환이 일어나면 캐시 메모리를 다 지워야하기에 그 오버헤드가 상당히 크다.
프로세스 스케쥴링을 위한 큐
Job Queue
현재 시스템 내에 있는 모든 프로세스의 집합을 말한다.
Ready Queue
현재 메모리 내에 있으면서 CPU를 잡아 실행되기를 기다리는 프로세스의 집합을 말한다.
Device Queue
I/O Device의 처리를 기다리는 프로세스의 집합을 말한다.
프로세스들은 위의 큐들을 오가며 수행된다.
'CS > 운영체제' 카테고리의 다른 글
CPU Scheduling (0) | 2024.03.04 |
---|---|
System Call (0) | 2024.01.31 |
Operating System’s Structure (0) | 2024.01.29 |
Operating System 개요 (0) | 2024.01.29 |