CS/OS (2022-1)

[OS] Process - 1

샤아이인 2022. 11. 21.

본 글은 반효경 교수님의 운영체제 강의를 들으며 정리하는 글 입니다.

 

1. Process란?

Process is a program in execution

 

즉, Process는 실행 중인 프로그램이다!

디스크에 실행 파일 형태로 존재하던 프로그램이 메모리에 올라가서 실행되기 시작하면 비로소 실행 가능한 프로세스가 되는 것이다.

 

2. 프로세스의 문맥(context)

프로세스가 시작해서 종료될 때 까지 CPU에서 명령을 한꺼번에 수행하면 좋겠지만, 여러 프로세스가 함께 수행되는 시분할 환경에서는 프로세스는 CPU를 빼앗기고 획득하는 과정을 반복하게 된다.

 

따라서 CPU를 빼았겻따가 다시 획득해 이전에 수행하던 일을 재개하는 시점이 되면, 이전 CPU 보유 시기에 어느 부분까지 명령을 수행했는지 정확한 상태를 알고 있어여, 그 이후부터 작업을 수행한다.

 

이때 정확한 재현을 위해 필요한 정보가 바로 프로세스의 문맥(Context)이다.

 

즉, 프로세스의 context는 그 프로세스의 주소 공간(code, data, stack 상태), 레지스터에 저장된 값, 시스템 콜을 통해 커널에서 수행한 일의 상태, 그 프로세스에 관해 커널이 관리하고 있는 각종 정보 등을 포함하게 된다.

 

Process의 문맥은 크게 3가지로 나뉠 수 있다.

 

2- 1) 하드웨어 문맥

현재 시점에 Process가 인스트럭션을 어디까지 수행했는지 판단하는 지표가 된다.

CPU의 수행 상태를 나타내는 것으로 프로그램 카운터 값과 각종 레지스터에 저장하고 있는 값들을 의미한다.

 

2 - 2) 프로세스의 주소 공간

code, data, stack에 저장되어 있는 내용들

 

2 - 3) 프로세스 관련 커널 자료 구조 (커널 상의 문맥)

2 - 3 - 1) PCB (Process Control Block)

OS는 지금 컴퓨터 내부에서 실행되는 Process들을 관리하는 역할을 한다.

따라서 Process가 하나 생길때 마다 OS는 해당 Process를 관리하기 위해 자신의 Data 영역에 Process에 대한 PCB자료구조를 만들게 된다.

 

OS가 프로세스에게 CPU나 메모리를 얼마나 줘야 하는지?, 메모리는 얼마나 할당할지? 보안 상으로 취약한 행위를 하고 있지 않은지?

등 관리하는 역할을 하는데, 이렇게 프로세스마다 상태를 관리하기 위해 PCB를 둔다.

 

2 - 3- 2) Kernel Stack

시스템 콜을 하면 PC가 커널의 code를 가리키며 수행되는데, 호출 정보를 커널 stack에 Process 별로 개별 stack을 만들어 저장한다.

 

3. 프로세스의 상태

프로세스는 다음과 같이 상태가 변경되며 수행된다.

 

  • Running
    • CPU를 잡고 명령을 수행 중인 상태
  • Ready
    • 메모리에 프로그램이 올라가 있지만, CPU가 없어서 기다리는 상태
  • Blocked (Wait, Sleep)
    • CPU를 할당받더라도 당장 명령을 실행할 수 없는 상태
    • 프로세스 자신이 요청한 이벤트가 즉시 만족 되지 않아 이를 기다리는 상태
    • ex) 디스크에서 파일을 읽어와야 하는 경우
  • New
    • 프로세스가 생성 중인 상태
  • Terminated
    • 수행이 끝난 상태, 종료 되면서 자원을 정리하는 과정

 

스케줄러로 인해 추가된 Suspended 상태가 있다. (여기서는 언급하지 않고, 스케줄러 얘기를 할 때 언급할 예정)

 

3 - 1) 프로세스의 상태도

 

  1. 프로세스가 생성되면 new 상태에서 ready 상태가 된다.
  2. ready 상태에서 CPU를 얻으면 running 상태가 된다.
  3. CPU 얻은 상태에서 반환하는 경우
    1. running -> terminated
      본인의 역할을 다했으면 종료된다.
    2. running -> waiting
      I/O 같은 오래 걸리는 작업을 하면, CPU를 가지고 있어 봐야 인스트럭션 수행이 불가능하기 때문에 waiting 상태가 된다.
    3. running -> ready
      CPU는 시간을 나눠서 써야 하는데 Process가 할당된 시간이 끝나면, CPU는 Timer에 의해 인터럽트를 받게되고, 작업 중이던 Process는 ready 상태가 된다.

 

3 - 2) 프로세스 상태 전환 예시

running 상태의 프로세스가 사용자로부터 키보드 입력을 받아서 결과를 확인하고 실행한다고 가정해 보자.

 

그러면 Process는 키보드 I/O 큐에 줄을 서게 된다. 즉, running 상태에서 blocked 상태로 변경된다.

그동안 CPU는 ready 상태에 있는 다른 프로세스에게 CPU를 전달한다.

 

키보드 입력을 받으면 키보드 컨트롤러가 CPU에게 인터럽트를 걸어서 알려주고, CPU는 하던 일을 멈추고 운영체제에게 넘어가서 해당 Process의 상태를 ready로 바꾼다.

 

즉, 키보드 입력이 들어왔기 때문에 CPU를 얻는 권한이 생기며 Ready 큐에 줄을 서게 된다.

 

이외에 프로세스는 공유 데이터에 접근하거나, 디스크, 키보드, 디스크 등 종류에 따라 그에 맞는 큐에 줄을 서게 된다.

 

4. PCB (Process Control Block)

pcb의 대략적인 구조는 다음과 같다.

 

운영체제가 프로세스들을 관리하기 위해 프로세스의 정보들을 담고 있다.

 

(1) OS가 관리 상 사용하는 정보

  • Process 상태, Process ID, CPU 스케줄링 정보, Process 우선 순위 등

(2) CPU 수행 관련 하드웨어 값

  • 프로그램 카운터(PC), 레지스터 등

(3) 메모리 관련

  • code, data, stack의 위치 정보들

(4) 파일 관련

  • Process가 오픈한 파일 정보

 

5. 문맥 교환 (Context Switch)

문맥 교환이란 하나의 사용자 Process로부터 다른 사용자 Process로 CPU의 제어권을 넘겨주는 과정을 말한다.

예를 들어 사용자 프로세스가 CPU를 할당 받고 실행되던 중에 타이머 인터럽트가 발생하면 CPU의 제어권은 운영체제에게 넘어가게 된다.

 

그러면 운영 체제는 타이머 인터럽트 처리 루틴으로 가서 직전까지 수행 중이던 프로세스의 context를 저장하고 새롭게 실행 시킬 Process에게 CPU의 제어권을 넘긴다.

 

이 과정에서 원래 수행 중이던 프로세스는 ready 상태로 바뀌고 새롭게 CPU를 할당 받은 프로세스는 실행 상태가 된다.

 

문맥 교환 중에 원래 CPU를 보유하고 있던 프로세스는 프로그램 카운터 값과 레지스터 값, 메모리 맵 등 프로세스의 context를 자신의 PCB에 저장하고, 새롭게 CPU를 할당 받을 프로세스는 예전에 저장했던 자신의 context를 PCB로부터 실제 하드웨어로 복원하여 이전 작업을 계속해서 수행한다.

 

즉!

  1. CPU를 내어주는 프로세스 상태를 해당 프로세스의 PCB에 저장한다.
  2. CPU를 새롭게 얻는 프로세스의 상태를 해당 프로세스의 PCB에서 읽어온다.

 

5 - 1) 시스템 콜, 인터럽트가 발생하면 항상 Context Switch가 발생하는가?

우선 답부터 말하면 No 이다. 이에 다하여 알아보자!

▶ 1번 경우

1번 경우는 프로세스가 실행 상태일 때 시스템 콜이나 인터럽트가 발생하여 CPU의 제어권이 운영 체제로 넘어와 원래 실행 중이던 프로세스의 업무가 잠시 멈추고 운영체제 커널의 코드가 실행된 경우다.

 

이 경우에도 CPU의 실행 위치 등 Process의 문맥 중 일부를 PCB에 저장하기는 한다.

하지만, 단지 하나의 프로세스의 실행 모드가 사용자 모드에서 커널 모드로 바뀌는 것이고 CPU를 점유하는 Process가 다른 사용자 Process로 변경되는 것이 아니므로 문맥 교환이 아니다.

 

▶ 2번 경우

2번 경우는 타이머 인터럽트가 발생하거나 프로세스가 입출력 요청 시스템 콜을 하여 봉쇄 상태(Blocked)에 들어간 경우다.

이 때는 다른 사용자 프로세스에게 CPU의 제어권을 전달하므로 Context Switch가 발생한다.

 

6. 프로세스를 스케줄링하기 위한 큐

프로세스들은 각 큐들을 오가며 수행된다.

 

6 - 1) Job queue

현재 시스템 내에 있는 모든 프로세스의 집합 (Ready, Device queue도 포함)

 

6 - 2) Ready queue

현재 메모리 내에 있으면서 CPU를 잡아서 실행되기를 기다리는 프로세스의 집합

 

6 - 3) Device queues

I/O device의 처리를 기다리는 프로세스의 집합

 

다음 그림을 보면 맨위에 Ready Queue를 확인할 수가 있다.

이전에 PCB 구조를 보면 Pointer 부분이 있었는데, 이는 다음 노드를 가리키기 위한 포인터 부분에 해당되는 것 이였다!

 

7. 스케줄러

7 - 1) Long-term scheduler(장기 스케줄러 또는 job scheduler)

어떤 프로세스에 memory(및 각종 자원)를 주는 문제

  • 처음 시작되는 프로세스 중 어떤 것을 ready queue로 보낼지 결정한다.
  • degree of Multiprogramming 제어 즉, 메모리에 올라가 있는 프로세스의 수를 제어한다.
  • time sharing system에는 보통 장기 스케줄러가 없다. (무조건 ready 즉, 프로그램 100개를 실행하면 모두 ready 상태)

 

7 - 2) Short-term scheduler(단기 스케줄러 또는 CPU scheduler)

어떤 프로세스에 CPU를 주는 문제

  • 다음번에 어떤 프로세스를 running 시킬지 결정한다.
  • 충분히 빨라야 한다. (millisecond 단위)

 

7 - 3) Medium-term scheduler(중기 스케줄러 또는 Swapper)

프로세스에게서 memory를 뺏는 문제

  • 여유 공간 마련을 위해 프로세스를 통째로 메모리에서 디스크로 추방한다.
  • degree of Multiprogramming 제어 즉, 메모리에 올라가 있는 프로세스의 수를 제어한다.

 

"지금의 시스템은 장기 스케줄러가 없고, 중기 스케줄러가 degree of Multiprogramming 제어를 한다."

 

중기 스케줄러로 인해 프로세스의 상태 중에 추가된 것이 있다. (위에서 언급을 하지 않음)
바로! Suspended(stopped) 상태이다. Suspended 상태에 대한 특징은 아래와 같다.

 

7 - 4) Suspended 상태

중기 스케줄러의 등장으로 인해 프로세스의 상태에는 Run, Ready, Blocked 외에 하나의 상태가 더 추가된다.

 

외부적인 이유로 프로세스의 수행이 정지된 상태를 나타내는 중지(suspended)상태가 바로 그것이다.

중지 상태에 있는 프로세스는 외부에서 재개해야만 다시 활성화될 수 있다.

 

이 중지 상태의 프로세스는 메모리에서 통째로 디스크로 Swap Out된 프로세스라고 생각하면 된다. (메모리를 조금도 보유하지 않음)

예를 들면 사용자가 프로그램을 일시 중지하였거나, 시스템이 프로그램을 잠시 중단한 경우이다.

 

▶ 질문 : 왜 중기 스케줄러로 인해 Suspended 상태가 추가됐나? 기존의 Running, Ready, Blocked로 표현할 수 없나?

메모리를 통째로 빼앗긴 프로세스 상태를 Running, Ready, Blocked로 표현 할 수 없었기 때문이다.
메모리를 통째로 빼앗겼으면 CPU를 얻어도 바로 작업을 할수가 없다. I/O 작업이 필요하다.

 

▶ 질문 : Blocked 상태로 표현할 수 있을 것 같은데 Blocked 상태와 Suspended(stopped) 상태의 차이는 무엇인가?
- Blocked 상태
자신이 요청한 작업을 하면서 오래 기다리고 있는 상태이다. 즉, 자신이 요청한 작업이 끝나면 다시 Ready 상태로 돌아갈 수 있다.


- Suspened(stopped) 상태
외부에서 정지시킨 상태를 의미한다. 즉, 외부에서 resume 해야 Active 상태로 넘어갈 수 있다.

 

8. 최종 Process 상태 그림

8 - 1) 2가지의 Running 상태

[Runnning(user mode)]

프로세스가 CPU를 가지고 있으면서 본인의 코드를 실행 중인 상태가 Running(user mode)이다.

 

[Running(kernel mode)]

system call이나 interrupt 또는 trap으로 인해 운영체제의 코드가 실행 중인 상태가 Running(kernel mode)이다.

 

8 - 2) Suspended의 2가지 상태

Suspended상태 는 Suspended Ready 상태와 Suspended Blocked 상태로 세분화할 수 있다.

 

Suspended도 Blocked 상태에서 Suspended 되었는지, Ready 상태에서 Suspended 되었는지에 따라
Suspended Blocked와 Suspended Ready 서로 다른 두 가지 상태로 나뉜다.

 

Suspended Blocked에서는 I/O가 오래 걸리는 작업을 수행하게 되면, Suspended Ready 로 바뀔 수 있다.

 

9. 출처

https://hyojaedev.tistory.com/30#%F0%9F%93%8C%C2%A0pcb

 

💻 KOCW-OS-4: Process

🗣 서론 KOCW 반효경 교수님의 운영체제 수업을 들으면서 작성한 글입니다. [Process 1] 프로세스의 개념, 프로세스의 상태(Process State), 프로세스의 개념, 프로세스 상태도, Process Control Block(PCB), 문

hyojaedev.tistory.com

http://www.kocw.or.kr/home/cview.do?mty=p&kemId=1046323

 

운영체제

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

www.kocw.net

 

'CS > OS (2022-1)' 카테고리의 다른 글

[OS] Process Management  (0) 2022.11.22
[OS] Process - 2  (0) 2022.11.21
[OS] System Structure & Program Execution 2  (0) 2022.11.20
[OS] System Structure & Program Execution 1  (0) 2022.11.19
[OS] Introduction to Operating Systems  (0) 2022.11.18

댓글