본문 바로가기
Learning-log -CS/운영체제

(운영체제 / 반효경) 3-1. Process (Process Context, Process State)

by why제곱 2024. 3. 27.

Process Context (프로세스 문맥)

프로세스란 쉽게 말해 실행 중인 프로그램을 말한다. 이러한 프로세스가 특정 시점에 어디까지 실행됐는지, 어떤 단계까지 실행을 한 상태인지를 저장하여, 새로운 프로세스를 실행시키는 데에 사용되는 정보를 바로 프로세스 문맥이라고 한다.

프로세스는 다음과 같이 세 가지로 구분하여 설명할 수 있다.

  • CPU 수행 상태를 나타내는 하드웨어 문맥
  • 프로세스의 주소 공간
  • 프로세스 관련 커널 자료구조

 

<프로세스 실행 시 동작 내용>

프로세스가 실행되면 그 프로세스 만의 독자적인 주소공간으로 code, data, stack을 형성한다. 그 후 CPU를 잡아 Counter Register가 이 프로세스의 코드 중 특정 부분을 가리켜 매 순간 Instruction을 하나씩 읽어서 CPU 안으로 부른다. Register는 해당 데이터를 넣고 산술 연산 장치에서 연산한 결과를 레지스터나 메모리에 저장한다.

 

 

<프로세스의 필요성>

이 과정에서 프로세스의 문맥을 나타내려면 PC가 어디를 가리키는지, 프로세스의 메모리에 어떤 내용을 담고 있는지, 함수를 어디까지 쌓아놓고 있는지 등등에 대한 것들을 알고 있어야 한다. CPU를 하나의 프로세스가 독차지하고 계속 쓰는 것이 아닌, 여러 프로세스가 CPU를 잡고 실행하다 놓아주고, 다른 프로세스가 또 CPU를 차지하는 멀티태스킹이 이뤄지기 때문이다. CPU를 놓아준 후, 다시 CPU를 잡았을 때, 직전에 진행되던 시점의 다음 Instruction부터 실행하기 위해 프로세스 문맥이 필요하다.

위 내용들에 대해 자세히 알아보기 위해 프로세스를 구분하는 세 가지에 대해 하나씩 살펴보자.

 

 

 

 

CPU 수행 상태를 나타내는 하드웨어 문맥

Program Counter, 각종 Register

CPU와 관련된 상태를 나타낸다. 프로세스는 CPU를 잡고 매 순간 Instruction을 실행한다. 현재 시점에 Program Counter가 어디를 가리키는지, Register에 어떤 값을 넣고 있었는지에 대해 알아야 한다.

 

프로세스의 주소 공간

 

code, data, stack

메모리와 관련된 주소공간을 알기 위한 문맥이다. 문맥을 파악하는 시점에 프로세스의 주소공간에 어떤 내용이 들어있는지 알아야 한다.

 

 

프로세스 관련 커널 자료 구조

PCB(Process Control Block)

운영체제와 관련된 정보를 알기 위한 문맥이다. 운영체제는 프로세스가 하나 생길 때마다 이를 관리하기 위해 자신의 데이터 영역에 PCB라는 자료구조를 둔다. 이 PCB를 통해 프로세스에 메모리를 얼마나 줘야할지 등을 관리한다. 따라서 프로세스 문맥을 파악하려면 운영체제가 이 프로세스에 어떤 값을 가지고 있는지도 알아야 하므로, 커널이 가진 프로세스의 PCB를 알아야 한다.

 

 

Kernel stack

프로세스는 운영체제만 할 수 있는 일에 대하여 요청하기 위해 시스템 콜을 하게 된다. 시스템 콜이 발생하면 Program Counter는 자신의 주소 공간의 code가 아닌 커널 주소 공간을 가리킨고 커널의 코드를 실행한다. 이 커널도 함수로 구성되어 있기 때문에, 커널에서 함수 호출이 이뤄지면 스택에 해당 정보를 저장한다.

이 커널은 여러 프로세스들이 공유하는 자원이다. 즉, 운영체제는 어떤 프로세스의 요청을 받고 실행하는 지를 구분해야 한다. 따라서 프로세스 별로 커널의 스택을 별도로 둔다. 그렇기 때문에 프로세스 문맥에는 이 커널 스택의 정보도 포함되어야 하는 것이다.

 

 

 

프로세스의 상태 (Process State)

출처 : https://tutorialwing.com/process-states-process-control-block-tutorial/

 

프로세스는 CPU 제어권에 따라 상태가 변경된다. 이 상태는 크게 Running / Waiting / Ready 로 구분할 수 있다. 경우에 따라서는 New와 Terminated도 추가된다.

 

Running

CPU를 잡고 Instruction을 수행 중인 상태

 

Ready

CPU를 기다리는 상태

 

Blocked(wait, sleep)

CPU를 주어도 당장 Instruction을 수행할 수 없는 상태

프로세스 자신이 요청한 Event(ex. I/O 작업)가 즉시 만족되지 않아 이를 기다리는 상태이다. 또, 물리적 메모리 영역에 실행할 코드가 올라와 있지 않고 하드 디스크에 내려가 있는 경우에도 Instruction을 실행할 수 없으므로 Blcoked 상태에 해당된다.(실행중인 프로그램의 모든 메모리를 물리적 메모리 영역에 올려놓지 않기 때문에 이러한 상황이 발생한다.)

 

New

프로세스가 생성중인 상태

 

Terminated

수행이 끝난 상태(혹은 조금 정리할 것이 남아있는 상태)

 

 

 

프로세스 실행 과정

https://core.ewha.ac.kr/publicview/C0101020140318134023355997?vmode=f

 

그럼 이제 프로세스가 어떻게 실행되는지 살펴보자. CPU는 굉장히 속도가 빠르고 여러 프로세스가 공유하는 자원이다. 또한 CPU는 단 하나의 프로세스만이 접근할 수 있다. 따라서 프로세스들은 각 Queue에 들어가고 나가며 실행된다.

 

Ready Queue

Running 중인 프로세스는 타이머 인터럽트가 들어오면 다른 프로세스에게 CPU를 뺏긴다. 다시 CPU를 잡기 위해 Ready Queue에 들어가 줄을 서고 차례가 되면 CPU를 얻는 과정을 반복한다.

이러한 Ready Queue는 운영체제 커널 주소 공간의 데이터 영역에 존재하며 프로세스의 상태를 바꾼다.

 

Disk Device Queue

이렇게 실행중이던 프로세스가 디스크에 읽어올 데이터가 생기면 어떻게 할까? Running이던 상태가 Blocked로 바뀌며 Disk Device Queue에 들어가 줄을 선다. 이 작업이 끝나면 Disk Device Controller가 CPU에게 인터럽트를 걸어 해당 I/O 요청이 완료됐음을 알린다. 이 인터럽트를 받은 CPU는 잠시 하던 작업을 멈추고 운영체제로 넘어가 프로세스 상태를 Blocked 에서 Ready로 변경시킨다. Ready로 상태 변경된 프로세스는 그때부터 또 CPU의 Ready Queue로 들어가 줄을 서는 것이다.

마찬가지로 오래 기다리는 작업이 있으면 그 작업 종류의 Queue에 들어가 줄을 서고 완료되면 Ready Queue로 넘어간다.

 

Resource Queue

공유 데이터를 여러 프로세스가 동시에 접근하면 일관성이 깨지는 문제가 발생할 수 있다. 따라서 다른 프로세스가 공유 데이터를 사용할 땐, 공유 데이터로의 접근을 막아야 한다. 이를 위해 Resource Queue에 줄을 세운다.

 

 


본 게시물은 이화여자대학교 반효경 교수님의 운영체제(2014) 강의를 들으며 작성한 강의노트입니다.

 

참고자료

 

 

운영체제

운영체제는 컴퓨터 하드웨어 바로 위에 설치되는 소프트웨어 계층으로서 모든 컴퓨터 시스템의 필수적인 부분이다. 본 강좌에서는 이와 같은 운영체제의 개념과 역할, 운영체제를 구성하는 각

www.kocw.net

[Operating System Concepts - Abraham Silberschatz]

https://www.yes24.com/Product/Goods/89496122

 

운영체제 - 예스24

운영체제

www.yes24.com