computer science

[OS] 운영체제 Process Management

yjs3819 2021. 7. 17. 10:53
728x90

이제 OS의 기능별로 하나씩 정리할 건데, 먼저 OS가 어떻게 프로세스를 관리하는지, 프로세스란 뭔지에 대해서부터 알아보자.
(OS는 시스템의 자원들을 효율적으로 관리해서 성능 향상을 높이는데 목적이 있는 소프트웨어이다.)

Job vs Process

Job / Program

실행 프로그램 + 데이터이다.
실행할 이므로 실행 요청전의 상태이다.

Process

실행을 위해 커널에 등록된 Job을 의미한다.
커널에 등록된다는 의미는 OS에의해 관리를 받는 다는 것이고, 커널에 의해 관리를 받으면 효율적으로 관리를 받기에 시스템 성능 향상을 이룰수 있다.

Job과 Process

실행 요청전 디스크내에 존재하는 Job을 볼수있고 오른쪽에는 시스템에 의해 관리되는, 즉 커널에 의해 관리되는 Process를 볼수 있다.

실행 요청전 디스크내에 존재하는 Job과 메모리를 할당받아서 시스템에 의해 관리되는 Process를 볼수있다.
메모리를 할당받았냐 안받았냐로 Job과 Process를 구분할수도있다.

프로세스(Process)란?

커널에 의해 등록되고 커널의 관리하에 있는 작업(Job)
---> OS에의해 효율적인 관리를 받아 컴퓨터 System의 성능 향상을 위해서

간단하게 실행중인 프로그램이다.

이 외에도 다르게 정의를 내릴수있다.

  • 각종 자원들을 요청하고 할당받을수 있는 개체
  • PCB를 할당받은 개체
  • 능동적인 개체(자원은 수동적임.)

자원(Resource)란?

  • H/W resources
  • S/W resources
    로 구분할수 있다.

정의는 커널의 관리하에 있는 프로세스에게 할당/반납되는 수동적인 개체이다.
(프로세스는 능동적인 개체, 자원은 수동적인 개체임을 기억하라)

PCB(Process Control Block)

OS가 프로세스 관리(제어)에 필요한 프로세스 정보를 저장한 블럭이다.

메모리도 커널부분의 메모리와 그렇지 않은 메모리로 구분할수있는데 PCB는 OS가 프로세스 관리를 위해 가지고있기 때문에 커널부분의 메모리에 존재하는 것을 볼수있다.

PCB내의 정보

  • PID
  • 스케줄링 정보
  • 프로세스 상태
  • 메모리 관리정보
  • 입출력 정보
  • 문맥저장영역
    ...

OS마다 PCB를 다르게 관리하여 저장하고있음

프로세스 상태(Process State)

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

전체 프로세스 상태 전이도

created는 커널에 의해 관리되는 프로세스이고 ready는 메모리를 할당받은 프로세스이다. running은 프로세서(cpu)를 할당받은 프로세스이고 asleep(blocked)은 프로세서 이외의 자원의 요청에 의해 잠시 프로세서를 반납한 프로세스 상태이다. blocked상태에서의 작업이 끝나면 바로 프로세서를 다시 할당받는게 아니라 ready상태로가서 대기한다.(queue에 대기한다.)
created상태의 프로세스가 메모리를 할당받지못하면 suspended 영역의 suspended ready상태가된다. suspended block도 blocked상태에서 메모리까지 반납할 상황에선 suspended blocked상태가 된다.

swap

메모리를 할당받은 상태에서 반납하게되면(뺏기게 되면) 그 상태를 저장할 필요가 존재하다.
메모리를 재 할당 받을 때에 뺏기기 전의 상태를 저장해야 하기 때문이다.
사진을 찍는 것과 같이 swap device에 당시의 메모리의 상태의 image인 Memory image를 보관한다.

  • swap-in이란 swap device에서 Memory image를 이용해 메모리를 복구하는 것이다.
  • swap-out이란 swap device에 Memory image를 저장하고 메모리를 반납하는 것이다.

표를 통한 프로세스 상태

terminated/zombie state

프로세스가 프로세서를 할당받아 모든 일이 끝나면 목숨을 다해야겠지만, 그전에 terminated/zombie state에 거치게 된다. 이 상태에선 프로세스 할당받은 모든 자원을 반납한다. 그러나 OS가 프로세스 관리를 위해 가지고있는 프로세스 정보 블럭인 PCB는 삭제가 되지않는다. 왜냐면? 나중에 프로세스가 또 생성되어 실행될수있으므로 그때를 위해 PCB만 가지고있는것이다. 정보를 가지고있으면 다음에 같은 녀석이 들어오면 OS입장에선 쉽게 관리할수 있으므로!

인터럽트(Interrupt)

예상치못한, 외부에서 발생한 이벤트

이 인터럽트 처리에대한 부분을 커널이 관리한다.

인터럽트 종류

  • I/O interrupt
  • Clock interrupt
  • Console interrupt
  • Program check interrupt
  • Machine check interrupt
    ..

인터럽트 처리과정

프로세스가 프로세서를 할당받아 실행중에있음. 이때

  1. 인터럽트 발생(외부의 예상치못한 이벤트)
  2. 프로세스를 중단 (여기서 커널이 개입하여 프로세스를 중단시킨다.)
  3. 인터럽트 처리(커널이 처리함.)
  4. 인터럽트 원인 및 발생 장소 파악(interrupt handling)
  5. 인터럽트 서비스 할지 말지 결정
  6. 인터럽트 서비스 루틴 호출(인터럽트 서비스 실행함.)

인터럽트 처리과정을 그림으로 확인해보자.

문맥교환(Context Switching)

  • Context
    프로세스와 관련된 정보들의 집합을 Context라한다.
    (이 context는 프로세서 내부 register와, 메인메모리에 존재한고, register에 존재하는 context를 register context라한다. 그리고 메인메모리에는 code, data, stack, pcb등의 프로세스 관련 정보들이 존재한다.) * 참고로 cpu는 어떤 작업을 할때는 반드시 register로 데이터를 옮긴후에 register에있는 데이터로 작업을 한다.
  • Context Saving
    register에 저장되어있는 context인 register context를 메인메모리의 PCB로 저장하는 작업을 말한다.(프로세스가 프로세서 할당받는 작업끝날 경우)
  • Context restoring
    프로세스가 프로세서를 할당받아서, context savig결과로 메인메모리에 저장되어있는 register context를 다시 register로 옮기는 작업을 말한다.
  • Context Switching
    Context Saving, Context restoring이 작업을 하며 프로세스 관련정보인 context의 위치가 변경되는 작업을 의미한다.(메인메모리에 register context저장하고 register로 다시 register context 복구하는 작업)

위 문맥교환, context switching은 커널의 개입으로 이루어진다.

Context Switch Overhead

  • Context switching에 소요되는 비용은 OS의 성능에 큰 영향을준다.(여러 프로세스가 존재하기에..)
  • 불필요한 Context switching을 줄이는 것이 중요하다. -> 쓰레드를 이용하여

프로세스가 뭔지, OS의 주 기능중 프로세스를 관리하는 기능이 어떻게 실행되는지, 그에 따라 프로세스의 상태에 대해서 알아보았고 커널이 관리하는 PCB에 대해서도 알아보았다. 그리고 외부 요청에 대한 인터럽트를 어떻게 커널이 관리하는지, 그리고 프로세스가 프로세서를 할당 받을 경우와 안받을 경우 일어나는 context switching에 대해서도 알아보았다.

김덕수 교수님의 운영체제 강의

https://www.youtube.com/watch?v=jZuTw2tRT7w&list=PLBrGAFAIyf5rby7QylRc6JxU5lzQ9c4tN&index=5

728x90