본문 바로가기
CS 지식/Operating System

운영체제 - 3 (Process Management)

by 눈오는1월 2024. 7. 11.
728x90

해당 정리는 youtube HPC Lab. KOREATECH의 OS 강의를 듣고 정리한 내용이다.

강의 자료는 https://hpclab.tistory.com/1?category=887083 해당 링크에 있다.

 

목차

  • 프로세스 개념
  • PCB(프로세스 관리 블록)
  • 프로세스 상태 변화
  • 인터럽트
  • Context switching

프로세스 vs Job

작업(job)

컴퓨터 시스템에 실행 요청 전의 상태를 의미한다.

즉 실행할 프로그램 + 데이터로 아직 메모리에 올라와 있지 않는 프로그램을 의미한다.

프로세스(process)

시스템에 등록된 작업을 의미한다(시스템 = 커널)

프로세스가 시스템의 등록되는 이유는 시스템의 성능을 향상하기 위해 프로세스를 관리하기 때문이다.

즉, 프로세스를 한마디로 정의하자면 실행중인 프로그램으로 정의할 수 있다.

여기서 말하는 실행 중인 프로그램이란,

  • 커널에 등록되고 커널의 관리하에 있는 작업을 의미한다.
  • 각종 자원들을 요청하고 할당받을 수 있는 개체를 의미한다.
  • 프로세스 관리 블록(pcb)을 할당 받은 개체를 의미한다. (pcb(Process Control Bolck) = 프로세스를 제어하기 위한 정보 블록)
  • (자원을 할당받아 실행하는) 능동적인 개체를 의미한다.

이러한 프로세스의 종류에는 역할, 병행 수행 방법으로 구분할 수 있다.

 

역할

역할에 따라 시스템 프로세스, 사용자 프로세스로 나눌 수 있다.

  • 시스템 프로세스 : 모든 시스템 메모리와 프로세서의 명령에 액세스 할 수 있는 프로세스
  • 사용자 프로세스 : 사용자 코드를 수행하는 프로세스

병행 수행 방법

수행 방법을 어떻게 하는지에 따라 독립 프로세스, 협력 프로세스로 나눌 수 있다.

  • 독립 프로세스 : 다른 프로세스에 영향을 주지 않거나 다른 프로세의 영향을 받지 않으면서 수행하는 프로세스
  • 협력 프로세스 : 다른 프로세스에 영향을 주거나 다른 프로세스에서 영향을 받는 프로세스

프로세스를 더 공부하기 전 자원(Resource) 에 대해서 간략하게 알아보자.

자원(Resource)

커널의 관리 하에 프로세스에게 할당/반납하는 수동적인 개체를 의미한다.

자원의 분류로는 H/W resource S/W resource가 존재한다.

  • H/W resource
    • Processor, memory, dist, monitor, keyboard 등
  • S/W resource
    • Message, signal, files, 등

Process Control Block(PCB)

앞서 언급드린 PCB에 대해서 좀 더 자세하게 알아보자

PCB는 프로세스를 제어하기 위해 필요한 정보들을 모아둔 것으로 OS가 프로세스 관리에 필요한 정보를 저장한 것을 의미한다.

PCB는 프로세스 생성 시에 생성이 된다.(커널에 PCB가 생성됨)

 

PCB가 관리하는 정보

  • PID : Process Identification Number(프로세스 고유 식별 번호)
  • 스케줄링 정보 : 프로세스 우선순위와 같은 스케줄링 관련 정보 등
  • 프로세스 상태 : 자원 할당, 요청 정보 등
  • 메모리 관리 정보 : Page table, segment table 등
  • 입출력 상태 정보 : 할당받은 입출력 장치, 파일 등에 대한 정보 등
  • 문맥 저장 영역 : 프로세스의 레지스터 상태를 저장하는 공간(Context save area)
  • 계정 정보 : 자원 사용 시간 등 관리

*PCB는 OS가 프로세스를 관리하기 위해 사용되기 때문에, PCB 정보는 OS 별로 다르다.

프로세스 상태(Process States)

프로세스는 시스템 등록 후에 여러가지 상태를 거친다.

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

각각의 프로세스 상태에 대해 하나씩 알아보자

Created State

작업(job)을 커널에 등록하는 상태로 PCB 할당 및 프로세스가 생성된다.

Created State 이후에는 메모리 공간을 기준으로 메모리 공간이 넉넉하면 ready State, 넉넉하지 않으면 suspended ready state로 된다.

Ready State

프로세서 외에 다른 모든 자원을 할당 받은 상태를 의미한다. (프로세서 = CPU 자원)

즉 CPU 자원만 받게 되면 바로 실행이 가능하기 때문에 이 상태를 즉시 실행 가능 상태 라고 한다.

프로세서를 할당 받게 되면 Ready State에서 Running State로 된다.

Running State

프로세서와 필요한 자원을 모두 할당 받은상태 즉 실행하는 상태이다.

Running State상태에서 이후 프로세서가 종료되기 전에는 2가지 상태로 변할 수 있는데 ready State, asleep State 단계로 갈 수 있다.

Running State에서 프로세서 스케줄링 등으로 프로세서를 뺏기게 될 경우 ready상태로 돌아가는데 이를 Preemption이라고 한다.

Running State에서 다른 I/O 등 자원이 필요할 경우 Asleep State로 변하게 되고 이를 block/sleep이라고 한다.

Asleep State

프로세서 외에 다른 자원을 기다리는 상태이다. 이때 자원할당은 System call에 의해 이루어진다.

Asleep State에서 프로세서 외에 다른 자원을 받게 되면 다시 Running State가 되지 않는다.

예를 들어서 은행에 추가적인 서류가 필요해서 서류를 가지고 집을 갔다가 다시 은행을 갔어도 순서는 기다려야 한다. 그래서 Asleep State에서 추가적인 자원을 받으면 Ready State 상태로 된다. 이것을 Wake-up이라고 한다.

Suspended State

suspended는 메모리를 할당받지 못한 상태를 의미한다. 즉, Suspended State는 메모리를 할당받지 못하거나 빼앗긴 상태를 의미한다.

여기서 빼앗긴 상태에 대해서 예를 들어서 설명하자면,

만약 체스를 하던 중에 잠깐 중단했다가 다음날에 하려면 어떻게 해야할까? 보통은 사진으로 찍은 후에 다음날 할 것이다.

프로세스도 마찬가지이다. 메모리 할당을 돌려줘야할때 프로세스 진행 상황을 저장하는데 이를 Memory image라고 한다.

이러한 Memory image를 swap device에 저장을 한다.(swap device는 일종의 HDD라고 보면 된다.)

이때 swap device에 저장하는 것을 Swap-out(suspended)라고 하고, 다시 메모리로 복구하는 것을 Swap-lin(resume)이라고 한다.

Terminated/zombie State

Terminated State는 프로세스 수행이 끝나고 난 후 소멸 직전의 상태를 의미한다.

왜 Terminated State가 필요하냐면, 비슷한 작업이 들어올 때 PCB를 알고 있으면 좋기 때문에 위 상태가 존재한다. 즉, 프로세스 관리를 위해 정보를 수집하는 단계이다.

위처럼 여러 프로세스의 상태를 관리하기 위해 Ready Queue, I/O Queue, Device Queue가 필요로 하다.

인터럽트

인터럽트의 뜻은 예상하지 못한 상태에서 외부에서 발생한 이벤트를 의미한다.

 

인터럽트의 종류

  • I/O interrupt
  • Clock interrupt
  • Console interrupt
  • Program check interrupt
  • Machine check interrupt
  • Inter-process interrupt
  • System call interrupt

인터럽트가 발생을 하게 되면 커널이 개입을 해서 프로세스를 중단시킨다. 이후 인터럽트 처리 단계에 들어가는데 인터럽트 원인 파악 후 인터럽트 서비스 할지 결정한 후에 인터럽트 서비스 루틴이 호출한다.

이때 원인파악을 Interrupt handing, 서비스 루틴 호출을 Interrupt service라고 한다.

인터럽트 처리 과정

  1. 맨 처음 인터럽트가 발생하게 되면 Context saving이 된다. 이는 프로세스를 중단하고 프로세스의 흐름을 PCB에 저장한다.(책을 읽고 잠시 중단할 때 책갈피를 책에 꽂는 것처럼)
  2. 이후 인터럽트의 원인을 파악하기 위해 Interrupt handing이 발생한다.
  3. Interrupt handing 이후에 서비스 결정 이후 Interrupt servcice가 발생한다.
  4. 인터럽트가 해결이 됐으면 Context restoring이 발생한다. 이는 ready 상태에 있는 (다른) 프로세스가 running 상태로 바뀌는 것을 의미한다. 이때, 중요한 점이 인터럽트가 발생했던 프로세스가 아닌 다른 프로세스일 수도 있다는 것이다.
    (Pi 프로세스를 interrupt service 이후에 프로세서에 Pi가 들어가는 것이 아닌 다른 Pj 프로세스가 들어가는 것)

Context Switching(문맥 교환)

앞서 Context svaing과 Context restoring을 간략하게 알아봤는데 좀 더 자세하게 알아보자

Context는 여기에서 프로세스와 관련된 정보들의 집합을 의미한다. 이러한 Context는 2군데에 저장하는데 CPU, Memory에서 저장을 하게 된다. CPU에 저장되는 것이 CPU register context이고, Memory에 저장되는 것이 Code & data, Stack, PCB이다.

즉 인터럽트가 발생 시 프로세스에 있던 CPU 자원을 빼앗기고 CPU register context에 저장이 되고 이후 PCB에 저장된다.

 

Context saving을 정확하게 정의하면 현재 프로세스의 CPU Register Context를 저장하는 작업을 의미하고 Context restoring은 CPU Register context를 복구하는 작업을 의미한다.

 

즉 위 Context saving과 Context restoring을 합쳐서 Context Switching이라고 한다.

 

이러한 Context Switching은 자주 일어나기 대문에 OS 성능에 큰 영향을 미친다(OS마다 다르다)

그래서 불필요한 Context Switching을 줄이는 것이 중요하다.

 

728x90