본문 바로가기
COMPUTER SCIENCE/OS

[OS] Process - Process Concept & Scheduling

by 민트맛녹차 2023. 7. 3.

Program and Process

Program

disk 에 저장되어 있으며, 명령어들의 리스트를 포함하는 파일같은 passive entity

program 자체는 process 가 아님

 

Process

실행 중인 프로그램 또는 실행 중인 프로그램의 instance

다음에 실행할 명령어를 가리키는 program counter 와 관련 resouces(memory, files, socket, etc) 들이 있는 active entity

virtual address space 와 control information 으로 구성

program 은 실행가능한 파일이 메모리에 올라가면 process 가 됨

 

현재 활동중인 프로세스의 상태는 program counter의 값과 processor's register 의 값으로 확인할 수 있음

 

Process in Memory

  • Text(Code) section : 실행가능한 코드
  • Data section : 전역변수, 정적변수
  • Heap section : program run time 동안 동적으로 할당되는 메모리
  • Stack section : 함수 호출 시 일시적인 데이터를 저장하는 공간(함수 매개변수, 반환 주소, 지역변수 등)

data section 과 text section의 크기는 program run time 동안 바뀌지 않지만, stack section 과 heap section은 동적으로 변한다.

함수가 실행되면 activation record(function parameters, local variables, and the return address 를 포함하는 record) 가 stack 위로 push 되고, 함수가 종료되면  stack 에서 pop 된다.

stack section 과 heap section 은 서로를 향해 증가하지만 os 가 겹치지 않도록 보장함

 

data section 은 initialized data 와 uninitialized data(BSS, Block Started by Symbol) 로 나뉘어짐

초기화된 전역/정적변수는 initialized data 에 저장되지만, 초기화되지 않은 전역/정적변수는 BSS 에 저장

 

 

Process State

process 가 실행될 때, 상태가 바뀜.

  • New : 생성되고 있는 process
  • Ready : processor 에 할당되기 위해 기다리는 process
  • Running : 실행중인 명령어들
  • Waiting : 몇몇 event(I/O completion, reception of a signal 등) 가 일어나길 기다리는 process
  • Terminated : 실행이 끝난 process

모든 processor core에서 한 번에 하나의 process만 running 될 수 있지만, 많은 process들이 ready 와 waiting 이 될 수 있음

 

Process Control Block

각 process 는 OS 에서 PCB(Process Control Block) 또는 Task Control Block으로 나타나며, OS 가 process를 관리하기 위해 사용한다. PCB는 각 process 와 연관된 정보들을 가진다.

  • Process state : new, ready, running, waiting 등의 state
  • Program counter : 이 process에서 실행될 다음 명령어의 주소
  • CPU registers : process 가 가지고 있는 register 정보. process가 중단되었다가 다시 실행될 때 register의 상태를 복원하는 데 사용됨
  • CPU scheduling information : process 우선순위, scheduling queue 의 pointers 등 scheduling algorithm에 필요한 정보
  • Memory management information : base 와 limit registers 값, page table, segment table 등
  • Accounting information : 사용한 CPU 시간, 실제 사용시가, 시간제한 등 
  • I/O status information : process에 할당된 I/O device들의 리스트, open file들의 리스트(file descriptior table) 등

 

Process Scheduling

Multiprogramming :  CPU 사용률을 최대화하기 위해 여러 process 를 동시에 메모리에 유지하고 실행하는 기술. 

Time-sharing :  process 간의 CPU core를 자주 전환하여 여러 유저들이 컴퓨터를 동시에 사용하도록  하는 기술. 작은 CPU time 동안 유저는 전체 컴퓨터 시스템을 사용한다.

 Multiprogramming 과 Time-sharing 를 만족하기 위해, Process scheduler 는 core에서 프로그램이 실행되도록 가능한 process 를 선택한다. 

 

CPU core 수보다 많은 process 가 있으면, 남는 process는 core 가 free할 때까지 기다린 후 reschedule 되야한다. 

process 는 대부분 I/O-bound process 과 CPU-bound process 로 나뉜다.  I/O-bound process 는 계산보다 I/O 에 시간이 더 할당되고, CPU-bound process 는 I/O보다 계산에 시간이 더 할당한다.

 

Scheduling Queues

process 들은 CPU core에 할당되어 실행되기 전, 후에 여러 queue 에 위치한다.

  • Job queue : system의 모든 process들
  • Ready queue : CPU core에 실행되기 준비하고 기다리는 process들. main memory에 위치하며, 새로운 process들은 처음에 ready queue 에 들어감
  • Wait queue : 특정 event 가 일어나기 기다리거나 자원을 기다리는 process들.
  • Device queue : I/O device 를 기다리는 process들. wait queue 의 한 종류이다.

ex) process 가 disk 같은 device 에 I/O request 를 만들 때, disk 는 process 보다 속도가 느려 process는 I/O가 완료 될 때까지 기다려야함. 이때 기다리기 위해 위치하는 queue 가 wait queue/device queue

 

 

queueing diagram 으로 process scheduling 을 표현되며, 동작 과정은 다음과 같다.

  1. 새로운 process 는 ready queue 에 들어감. 실행/dispatched 되기 전까지 기다림
  2. 프로세스가 CPU core 에 할당되어 실행됨
  3. 이때, 여러 event 들중 하나가 일어날 수 있음
    1. 프로세스에서  I/O request 가 발생하면 I/O wait queue 에 위치함
    2. 프로세스가 새로운 child process 를 생성하면, child process가 종료될 때까지 wait queue 에서 대기한다.
    3. interupt 나 time splice expire 로 core에서 강제로 제거되어, ready queue 에 다시 들어간다
  4. process 는 종료될 때까지 이러한 순환을 계속한다. 이때 프로세스의 종료란 모든 큐에서 제거되고 PCB와 자원 할당이 해제될 때를 의미한다.

참고로 dipatch 란 프로세스를 CPU 에 올리는 것을 뜻한다.

 

CPU Scheduling

CPU scheduler 의 역할은 ready queue에 있는 프로세스들 중 하나를 골라 CPU core에 할당하는 것이다.

CPU-bound process 는 I/O-bound process 에 비해 더 긴 시간 동안 CPU core 를 필요로 하지만, scheduler는 process 에 core 를 더 오래동안 부여하지 않는다. 대신 강제적으로 CPU에서 프로세스를 제거하고 다른 프로세스를 실행하도록 한다.

 

Context Switch

interrupt 는 OS가 CPU core 로부터 현재 작업을 변경하고 kernel routine을 실행하도록 한다. interrupt 가 일어날 때, 현재 CPU core 에서 실행되는 process 의 context 를 저장해야 프로세스를 다시 시작할 때 context를 복원할 수 있다.

context 는 process 의 PCB 로 대표되며, CPU registers, process state 등을 포함한다. 

 

Context Switch 는 현재 process 를 state save 하고, 다른 process 를 state restore 하여 CPU core 를 다른 프로세스로 전환하는 것이다.

Context switch 가 발생하면 kernel은 다음과 같은 작업을 수행한다.

  1. 현재 실행중인 process 의 context 를 PCB에 저장
  2. scheduler 는 다음 실행할 process 를 선택함
  3. 선택된 새로운 process 는 저장된 PCB를 로드
  4. 복왼된 process 가 이전 중단 시점부터 다시 실행

OS는 switching 동안 유용한 작업을 하지 않으므로, Context Switch time 은 pure overhead 이다. time 은 memory speed 나 register 수 등 hardware support 에 상당히 의존한다.

 

 

참조
Silberschatz_Operating_System_Concepts_10e_2018
광운대 운영체제 강의(안우현 교수, 2021)

'COMPUTER SCIENCE > OS' 카테고리의 다른 글

[OS] Synchronization  (0) 2023.08.16
[OS] Threads  (0) 2023.07.27
[OS] CPU Scheduling  (0) 2023.07.14
[OS] Process - IPC (Interprocess Communication)  (0) 2023.07.10
[OS] Process - Operations on Processes  (0) 2023.07.10

댓글