[Operating System ③] 프로세스 개념 잡기

4 분 소요

[Operating System ③] 프로세스 개념 잡기

HPC Lab 김덕수 교수님의 운영체제 강의를 정리한 내용입니다. :+1:

강의링크


목차

:point_right: [1] 프로세스란 무엇인가?

  1. 프로세스?
  2. 잡과 프로세스의 관계
  3. 프로세스의 정의
  4. 자원의 개념
  5. PCB 프로세스 제어 블록

:point_right: [2] 프로세스의 상태

  1. Created State
  2. Ready State
  3. Running State
  4. Blocked/Asleep State
  5. Suspended State
  6. Terminated/Zombie State
  7. 프로세스 관리를 위한 자료구조

:point_right: [3] 인터럽트

  1. 인터럽트 처리 과정
  2. Context Switching
  3. Context Switch Overhead



:pushpin: [1] 프로세스란 무엇인가?

1-A. 프로세스?

간단히 말하자면 ‘실행중인 프로그램’이다
이번 시간에는 자세한 프로세스의 개념에 대해 알아보자


작업관리자 페이지에서 프로세스를 본 적이 있을 것이다.


1-B. 잡과 프로세스의 관계


Process를 이해하기 위해서 먼저 Job의 개념을 알아야 한다

  • Job이란 프로그램과 해당 프로그램이 처리하는 데이터를 묶은 것으로, 간단히 말하자면 Program이다.
    • Job은 Disk에 보관되어 있으며 System에 요청되기 전의 상태를 말한다.
  • Process란 특정 Job에 대한 실행 요청을 통해서, 해당 Job이 System에 등록된 상태를 말한다.
    • 즉, 실행하기 위해서 System에 등록된 Job/Program
  • Process는 커널에서 관리된다.
    • Process들을 잘 관리해야 System을 효율적으로 관리하여 성능을 향상시킬 수 있기 때문

Disk에 저장된 Job을 System에 요청하여, System에 등록된 상태(Process)로 만든다


Disk에 존재할 때는 Job / Memory를 할당받으면 Process



1-C. 프로세스의 정의


프로세스는 다음과 같이 설명할 수 있다

  • 커널에 등록된 Job
  • 각종 자원을 요청/할당 받을 수 있는 개체
  • PCB(프로세스를 관리할 수 있는 데이터 블록)을 할당 받은 개체
  • 능동적 개체


1-D. 자원의 개념


Process는 다양한 자원을 사용하여 작업을 처리한다.

자원은 크게 HW와 SW로 나뉘는데,
OS가 이러한 자원들을 관리하며,
커널의 관리하에 이러한 자원들이 Process에 할당/반납된다.


1-E. PCB 프로세스 제어 블록


프로세스 제어 블록이란
프로세스를 제어하기 위해 필요한 정보를 모아놓은 공간을 말한다.
프로세스가 생성되면, 커널이 관리하는 영역에 해당 프로세스에 대한 PCB가 생성된다.


PCB는 다음과 같은 정보를 관리한다


  • 각 프로세스의 고유 번호를 가지고 조작
  • 스케줄링(어떤 프로세스를 먼저 처리할 것인지 등) 정보
  • 현재 어떤 자원을 가지고 있고, 어떤 자원을 요청했는지
  • 메모리 할당 받았는지
  • 입출력 상태는 어떠한지
  • 컨텍스트
  • 다중사용자 시스템의 경우, 프로세스가 어떤 유저의 것인지 알기 위한 계정정보

  • 이 때, PCB는 운영체제별로 다를 수 있다
    • 프로세스는 PCB를 통해 관리되기 때문에, PCB를 참조하는 속도가 OS성능의 중요요소


:pushpin: [2] 프로세스의 상태

프로세스의 상태는 자원 간의 상호작용에 의해 결정된다.



프로세스 상태 변화 과정


2-A. Created State


Process가 생성된 상태

Job을 System에 요청하여 커널에 등록이 되면
커널 내부에 해당 프로그램에 대한 PCB가 할당되고 Process가 생성된다.
이 때, 사용할 수 있는 메모리 공간이 있는 지에 따라서, ready state(가용메모리 존재)suspended state(가용메모리 부재)로 각각 변화한다.

2-B. Ready State


가용메모리가 존재하여, Process가 메모리를 할당받은 상태를 말한다.
메모리를 이미 할당 받았기 때문에, 프로세스(CPU)만 있다면 실행 가능하다.
즉, CPU 할당을 기다리는 상태
할당을 받게 되면 running state로 변화하며, 이 과정을 dispatch 혹은 schedule되었다고 말한다.

2-C. Running State


Ready 상태이던 Process가 CPU를 할당받게 되면 Running 상태가 된다.
Running 상태의 Process는 상황에 따라 2가지 상태로 변화한다.

  1. Preemption : 다시 ready로 돌아가는 경우 할당된 시간이 종료되는 등의 이유로 CPU를 빼앗기게 되면 다시 ready 상태로 돌아간다.

  2. Block/Sleep : 자원할당의 요청하여 반응을 기다리는 상태 대표적인 예시로 I/O가 끝나기를 기다리는 경우가 있다.
    I/O인터럽트가 들어오면, 할당받은 CPU를 반납하여 다른 Process가 사용할 수 있게 비워준다.

2-D. Blocked State


자원 할당 요청으로 Block/Asleep 상태가 되면,

요청에 대한 응답을 받는다고 해서 바로 running 상태로 돌아갈 수 없으며,
wakeup과정을 통해, 다시 ready상태로 돌아가 다음 CPU할당을 기다리게 된다.
자신의 차례가 되면 다시 running상태가 된다.

Process 상태 변화 다이어그램



2-E. Suspended State

Created 상태에서 가용메모리가 부족하여 메모리를 할당받지 못하거나, Block/Asleep 상태에서 메모리공간을 뺏기게 되면 Suspended 상태가 된다
Swap-out과 Swap-in이란
Block/Asleep상태가 되어 메모리를 빼앗기는 경우,
현재 Process가 어디까지 작업했는지 정보를 메모리 이미지로 저장한다.
해당 메모리 이미지를 SWAP DEVICE에 저장해놓고(일종의 하드디스크)
CPU를 다시 할당 받으면, 저장해 둔 메모리 이미지를 복구해서 중간부터 다시 일을 시작한다.

  • SWAP OUT: 메모리 뺏기는 거
  • SWAP IN: 다시 할당받아서 메모리 복구


2-F. Terminated State


Process가 작업을 모두 끝낸 상태이다.
커널은 해당 Process가 System에 다시 요청을 할 때를 대비하여, 커널에 해당 Process의 PCB정보를 수집해 놓는다.
Process는 모든 자원을 반납하고 PCB정보가 커널에 수집완료 되면 소멸된다.

2-G. 프로세스 관리를 위한 자료구조


ready상태에서 running상태로 들어가기 위한 리스크나,
asleep상태에서 다른 자원들을 요청하는 리스트 모두 Queue형태로 관리된다.


:pushpin: [3] 인터럽트


인터럽트는 2가지 키워드로 설명할 수 있다. 예상치 못한 , 외부에서 발생한 이벤트
즉, Process가 외부로 부터 예상치 못한 방해를 받는 상황을 의미한다.

  • 종류
    • I/O: 배그할 때, 유저가 언제 마우스 클릭해서 총을 쏠지 프로세스는 모른다. 마우스가 클릭되면 프로세스에 이것을 알려줘야 함.
    • Clock: 시간
    • Console: 콘솔창 입력
    • Program check: 프로그램 문제 생기면
    • Machine check: 하드웨어 문제 생기면
    • Inter-process: 다른 프로세스가 찌르는거


3-A. 인터럽트 처리 과정

인터럽트는 그림과 같은 순서로 처리된다


  • 핸들링: 왜 인터럽트가 발생했으며, 해당 인터럽트를 처리할 것인지 무시할건지?
  • 서비스 : 해당 인터럽트를 처리하기 위해 실제로 취하는 행동


Pi라는 Process에서 Pj라는 Process로 context switching 되는 과정


  1. Pi가 수행되는 와중에 인터럽트가 발생
  2. Kernel이 개입해서 Pi 를 중단시킴
  3. Context saving 발생 : Pi의 정보를 PCBi에 저장
  4. Kernel이 Pi에 대하여 Interrupt handling : 어디서 발생하였고, 왜 발생하였으며, 어떤 Interrupt service를 할지 결정
  5. Interrupt service : Pi가 프로세서를 벗어나고, Interrupt service를 처리하는 새로운 Process를 CPU에 할당
  6. Interrupt service가 완료되면, ready queue에 있는 process 중 하나를 CPU에 할당(Pi라는 보장 없음)
  7. 이 때, Pj가 CPU를 할당받는다면, 미리 저장해 놓은 PCBj를 복구하고 기존 작업 이후부터 작업을 수행


3-B. Context Switching

Context란, Process가 바뀔 때 저장/복원되는 해당 Process에 관한 정보들을 말한다.


  • Context는 두 군데에 저장된다.
    • CPU: CPU가 작업을 처리할 때는 반드시 메인 메모리에 있는 데이터를 레지스터에 올려서 실행하게 되는데, 작업 중 저장된 데이터 값들을 register context라 부른다.
    • Main Memory: 코드나 데이터 등의 정보가 저장된다.
  • Context saving
    • 실행 중이었던 Process가 CPU를 빼앗기면, 실행 되는 동안 CPU안에 저장되어 있던 register context를 저장해야 한다.
    • 해당 register context는 메모리 공간(PCB)에 저장된다.
  • Context restoring
    • 다시 CPU를 할당받은 Process는 메모리의 PCB에 저장해 둔 register context를 복구하여 사용한다.
  • Context switching
    • savingrestoring과정을 묶은 것을 말한다.
    • CPU를 차지하는 Process가 변화하면서, 서로 바뀌는 동작을 말한다.
    • switching작업은 Kernel의 개입을 통해 이루어진다.

3-C. Context Switch Overhead


문맥 교환 작업은 가능한 한 적게 이루어져야 한다.
하나의 컴퓨터로 작업하는 Process가 많기 때문에, 실제로 switching작업이 빈번하게 일어난다.
문맥교환은 OS성능에 영향을 주기 때문에, 이것을 최대한으로 줄이는 방법을 생각해야 한다.
대표적인 방법으로는 thread를 이용하는 것이 있다.
다음시간에 thread에 대해 알아보자.

태그:

카테고리:

업데이트:

댓글남기기