본문 바로가기
계란으로 바위깨기/CS

Process

by gdana 2022. 1. 23.
반효경 교수님의 '운영체제'를 보고 기록한 자료입니다.

 

1. Process

프로세스란 실행중인 프로그램을 말한다. 

이 프로세스가 실행되면 해당 프로세스만의 독자적인 주소 공간이 생성된다.

// user stack(프로세스 A의 주소공간)
--------
| stack | 
--------
| data   |
--------
| code  |
--------

주소 공간이 생성된 프로그램이 CPU를 점유하게 되면 Program Counter라는 Register가 프로세스의 code 를 가르키게 되며, 매 순간 code 안에 있는 기계어를 읽어서 CPU안에 있는 Register에 값을 넣고 산술논리연치(ALU) 장치를 통해 연산을 한다.

연산의 결과는 Register에 저장하거나 바깥 메모리 프로세스의 data에 저장한다.

 

이때 이 프로세스가 현재 시점에 어디쯤 와있는가를 규명하는 것이 '프로세스 문맥(Context)'이라고 한다. 그리고 프로세스 문맥을 나타내기 위해서는 아래 요소를 모두 고려해서 살펴봐야 한다.

  • PC가 어디를 가리키고 있는가 code의 어느 부분까지 실행했는가
  • 해당 프로세스(code, data, stack)의 메모리(data)에 어떤 내용을 담고 있는가
  • code에서 함수를 실행하고 stack에 쌓여있을 텐데 어떤 내용을 쌓아 놓고 있는가
  • Register에 어떤 값을 넣어놓고 어떤 instruction까지 실행했는가

 

2. 문맥(Context)

이 문맥은 크게 세가지로 설명이 가능하다.

 

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

프로세스는 CPU를 잡고 매순간 instruction를 실행한다. Register에 어떤 값을 넣고 있었고 Program Counter가 어디를 가리키고 있었고를 고려하는 것이 CPU와 관련된 하드웨어 문맥이다.

  • Program Counter
  • Register

2. 메모리와 관련된 문맥

  • code, data, stack
  • 프로세스 주소, 공간

3. 프로세스 관련 커널 문맥

운영체제는 돌아가고 있는 프로세스를 관리하는 역할을 한다. 관리하기 위해 실행중인 프로세스의 data에 PCB를 두어 할당할 메모리 등을 관리한다. 또한 사용자 프로그램이 실행 할 수 없는 일을 운영체제에 맡겨 실행시키는 것 혹은 커널 함수를 호출하여 I/O 장치에 접근을 요청하는 것을 System Call 이라 부르며 이렇게 운영체제에게 맡기게 된 일은 PC가 프로세스의 'code'를 가리키는 것이 아닌 Kernal이라는 주소공간의 code를 가리키고 실행한다. 

  • PCB(Process Control Block)
  • Kernal stack
// user stack(프로세스 A의 주소공간)
--------
| stack | 
--------
| data   |
--------
| code  |
--------

// kernal stack(커널의 주소공간)
--------
| stack |  (프로세스 A의 Kernal stack)
--------
| data   | (프로세스 A의 PCB)
--------
| code  |
--------

댓글