본문 바로가기

Dev.Basic/운영체제

[OS] 3-1. Process I / 프로세스란 무엇인가 / Process Control Block / Scheduler

Chapter 3-1. Process


프로세스란 무엇인가

Process is program in execution

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

그리고 이 프로세스를 구성하는 요소들을 프로세스의 문맥(process context)



프로세스의 문맥은 무엇을 말하는가

1. CPU 수행 상태를 나타내는 하드웨어 문맥, Program Counter 등의 register들 값을 포함한다.

PC는 다음에 수행할 명령어(code)의 위치에 대한 정보(주소값)를 담고 있다.

CPU가 할당되었을 때, PC가 가리키는 부분부터 수행해나가면 되는 것이다.


2. 프로세스의 주소 공간을 포함한다.

즉, code, data, stack 각각의 공간에 어떠한 값이 들어있는가를 나타내는 주소값을 포함한다.

현재 변수의 값은 얼마인가? 메모리에는 어떤 내용들이 담겨져 있는가? 스택에는 어느 내용까지 쌓여있는가? 등에 대한 정보를

모두 담고 있다.


3. 프로세스 관련 커널 자료구조를 포함한다.

PCB(Process Control Block), Kernel Stack 등을 포함한다.

프로세스가 하나 시작될 때마다, 운영체제에서는 그 프로세스를 관리하기 위해서 PCB를 생성한다.

커널의 주소 공간에서 data에 해당하는 부분에 PCB를 저장해둔다.

이는 운영체제가 이 프로세스를 어떻게 관리하는지, 어떻게 다루고 있는지 파악할 때 사용된다.

시스템 콜이 발생할 때, 어떤 프로세스가 시스템 콜을 했는지 알기 위해

커널 주소공간의 stack에는 시스템 콜을 한 프로세스의 커널 스택 값을 저장하고 있다.



운영체제가 문맥을 알고 있어야 하는 이유

현 컴퓨터는 time sharing, multitasking 체제이다.

즉, 하나의 CPU가 여러 개의 프로세스를 동시에 수행한다.

짧은 속도로 여러 개의 프로세스를 수행해야하는 CPU의 입장에서는

이전에 수행하고 있던 프로세스가 어디까지 진행되었는지를 알아야 할 필요가 생긴다.

그 어디까지 진행되었는지에 대한 값을 문맥에 저장하고 있기 때문에,

이 문맥을 CPU가 알고 있어야 한다.



프로세스는 어떠한 상태들을 갖는가

프로세스는 상태가 변경되면서 수행된다.

Running

CPU를 잡고 instruction을 수행중인 상태이다.

Ready

CPU를 기다리는 상태를 말한다.

즉 queue에서 대기하고 있는 상태를 의미한다. 이는 물리적인 메모리에 코드가 올라와있는 상태를 말한다.

Blocked(wait, sleep)

당장 CPU를 할당해줘도 instruction을 수행할 수 없는 상태를 말한다.

디스크에서 file을 읽어와야 하는 오래 걸리는 작업을 하고 있거나, 다른 프로세스의 진행을 위해 일부러 재워둔 경우에 해당한다.

+New

프로세스가 생성중인 상태를 말한다.

+Terminated

프로그램의 execution이 끝나고 종료중인 상태를 말한다.

프로세스가 종료되면 정리하는 작업을 진행하게 되는데 이 상태에 해당한다.


PCB에는 어떠한 정보들이 있는가

PCB에는 문맥에 대한 거의 모든 정보를 담고 있다.

운영체제가 관리상 사용하는 정보

process state(현재 process의 상태)

process ID(Process마다 갖는 고유의 값)

scheduling information(우선순위 같은 스케줄링에 대한 정보)

CPU 수행에 관련된 Program Counter 값, 각종 register값

code, data, stack 에 대한 정보




Context Switch(문맥 교환)

문맥 교환이란 CPU를 어떤 프로세스에서 다른 프로세스로 넘겨주는 과정을 말한다.

System call이나 Interrupt가 발생했더고 해서 반드시 Context Switch가 발생하는 것은 아니다.

프로세스 내부에서 System Call을 요청하거나 Interrupt가 외부에서 들어왔어도,

운영체제에서의 일을 마치고 다시 할당되었던 CPU로 넘어가게 된다.

다른 프로세스로 넘어가는 과정은 상당한 오버헤드를 발생시킨다.

cache memory에 있던 진행하던 프로세스에 대한 cache를 모두 비워줘야하기 때문이다.

그래서 문맥교환이 일어나는 상황은 크게 두가지 경우이다.

Interrupt 중에서도 timer Interrupt가 들어왔을 때와 I/O 요청 system call요청이 들어왔을 때이다.



프로세스를 스케줄링하기 위한 Queue

Job Queue : 현재 시스템 내에 있는 모든 프로세스의 집합을 의미한다.

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

Device Queue :  Device I/O작업을 대기하고 있는 프로세스의 집합을 의미한다.

이 Queue들은 연결리스트를 기반으로 하는 Queue의 자료구조를 하고 있다.



스케줄러


장기스케줄러(Long-term scheduler or job scheduler)

시작 프로세스 중 어떤 것들을 ready queue로 보낼지 결정
프로세스에 memory(및 각종 리소스)를 주는 문제 = admit
process state : new -> ready(in memory)
degree of Multiprogramming 제어 = (메모리에 여러 프로그램이 올라가는 것) 몇 개의 프로그램이 올라갈 것인지를 제어
메모리에 프로그램이 너무 많이 올라가도, 너무 적게 올라가도 성능이 좋지 않은 것이다.
time sharing system 에서는 장기 스케줄러가 없다. 그냥 곧바로 메모리에 올라가 ready 상태가 된다.

단기스케줄러(Short-term scheduler or CPU scheduler)
어떤 프로세스를 다음번에 running 시킬지 결정
프로세스에 CPU를 주는 문제 = scheduler dispatch
ready -> running을 판단하는 스케줄러이다.

중기스케줄러(Medium-term scheduler or Swapper)
여유 공간 마련을 위해 프로세스를 통째로 메모리에서 디스크로 쫓아냄
프로세스에게서 memory를 뺏는 문제
degree of Multiprogramming 제어
현 시스템에서 메모리에 너무 많은 프로그램이 동시에 올라가는 것을 조절하는 스케줄러. 

+ 추가된 Process State
Suspended(stopped)
메모리가 통째로 빼앗긴 상태
외부적인 이유로 프로세스의 수행이 정지된 상태
다른 상태들은 CPU를 잡고 instruction을 수행하거나, CPU를 기다리거나, 다른 I/O작업을 하거나 무엇을 하고 있는 상태이지만
이 상태는 잠시 기절한 상태!
프로세스는 통째로 디스크에서 swap out 된다.
메모리에 너무 많은 프로세스가 올라와 있을 때, 사용자가 프로그램을 일시 정지시킨 경우
Blocked 상태는 스스로가 다시 Ready로 돌아갈 수 있는 상태지만

Suspended 상태는 외부(중기 스케줄러 or 사용자)에서 기절시켰기 때문에, 스스로 돌아갈 수 없다. 









Chapter 3-1. 끝

이 포스팅은 이화여대 반효경 교수님 강의를 듣고 요약한 내용을 담고 있습니다.