🍋 CS

운영체제 - 프로세스 관리

밈98 2023. 3. 31. 16:41

운영체제란?

하드웨어를 관리하고 컴퓨터 시스템의 자원들을 효율적으로 관리하며 응용프로그램과 하드웨어간의 인터페이스로써 다른 응용프로그램이 유용한 작업을 할 수 있도록 환경을 제공해준다

ex) Window, Linux, Mac

운영체제의 역할

  1. 프로세스 관리
  2. 메모리관리(저장장치 관리)
  3. 디스크 파일관리
  4. I/O 디바이스 관리

1. 프로세스 관리

프로세스란?
프로그램이 메모리에 적제된 상태. 즉 프로세스는 프로그램의 인스턴스라고 할 수 있다.
” 운영체제에서 하나의 작업단위” 를 뜻한다

프로세스는 메인 메모리에 할당되어 실행중인 상태인 프로그램을 말한다.

프로그램은 일반적으로 하드디스크(보조기억장치)에 저장되어 아무 일도 하지 않는 상태이다.

프로세스는 실행하면서 stack pointer, data, text, register 등이 끊임없이 변한다.

프로세스는 job, task 등으로 불리기도 한다.

 

  • 프로세스 단위로 가상 메모리가 주어진다 (RAM,HDD) / Cpu를 주로 사용하는 건 스레드다 _ TCB
  • 스레드는 프로세스 안에 속한다. 그리고 프로세스에 속한 스레드들은 가상메모리 접근허용이 가능하다(사용)
  • 운영체제가 관리에 필요한 정보들을 담아 놓은 곳이 PCB(프로세스 관리 블록)

PCB_프로세스 관리 블록(Process Control Block)

  • OS가 프로세스 관리에 필요한 정보 저장
  • 프로세스 생성 시 생성 됨
  • 각 프로세스들에 대한 상태정보 저장

PCB가 관리하는 정보

  • PID(Process Identification Number)
  • 스케줄링 정보
  • 프로세스 상태
  • 메모리 관리 정보
  • 입출력 상태 정보
  • 문맥저장 영역
  • 계정 정보

PCB 정보는 OS 별로 서로 다름

PCB 참조 및 갱신 속도가 OS의 성능을 결정 짓는 요소 중 하나

 


자원(Resource)의 개념

  • 커널의 관리 하에 프로세스에게 할당/반납되는 수동적 개체(passive entity)

프로세스 상태

  • new (생성상태): program이 메인 메모리로 적재된 상태
  • Ready (준비상태): 할당된 프로그램이 초기화와 같은 작업을 통해 실행되기 위한 모든 준비를 마친다.
  • Running (실행 상태): CPU가 해당 프로세스를 실행한다.
  • Waiting (대기 상태): 프로세스가 끝나지 않은 시점에서 I/O로 인해 CPU를 사용하지 않고 다른 작업을 한다. (해당 작업이 끝나면 다시 CPU에 의해 실행되기 위해 ready 상태로 돌아가야 한다.)
  • Terminate (완료 상태): 프로세스가 완전히 종료된다.

프로세스 큐(Queue)

프로세스는 일반적으로 여러 개가 한 번에 수행되므로 그에 따른 순서가 필요하다. 이러한 순서를 대기하는 곳(줄서는곳)을 큐(queue)라고 한다.

 

  • Job Queue: 하드디스크에 있는 프로그램이 실행되기 위해 메인 메모리의 할당 순서를 기다리는 큐이다.
  • Ready Queue: CPU 점유 순서를 기다리는 큐이다.
  • Device Queue: I/O를 하기 위한 여러 장치가 있는데, 각 장치를 기다리는 큐가 각각 존재한다.

 

상태를 관리할때 큐를 사용한다.

예를 들어 큐가 2000개가 있다면, 그 안에서 줄을 선다

프로세스 상태가 Ready인 큐의 맨 앞에 있는 것을 디스패치한다. (큐에 있는걸 꺼낸다)

이후 실행상태로 보내진다.

 

process 상태 : sleep(휴식) + suspend(보류)

  • Suspend 상태는 외부요인(강제적,강제성,의도X)
  • Sleep상태는 자발적이다

문맥교환

Context switching은 CPU가 한 프로세스에서 다른 프로세스로 옮겨가는 것을 말한다. 즉, 한 프로세스가 실행중인 것을 멈추고 다른 프로세스가 실행되는 것이다.

  • Scheduler: 여기서 스케줄러는 CPU Scheduler를 말하며, CPU가 어느 프로세스를 선택할지 정한다.
  • Dispatcher: 실제 context switching이 발생하면 CPU의 내부 데이터를 이전 프로세스 데이터에서 새로 시작되는 데이터로 바꿔준다. 다시 말해서 현재 CPU 데이터는 이전 프로세스의 PCB에 갱신하고, 새로 시작되는 프로세스의 PCB 데이터를 CPU로 복원(restore) 해준다.
  • Context switching overhead: Context switching이 발생할 때마다, dispatcher에서 수행하는 작업을 매번 수행해야하며 이 모든 것은 overhead이다. 그리고 문맥 전환은 매우 자주 발생하는 작업이므로 overhead를 줄이기 위해서는 dispatcher를 구현하는 코드에 대한 효율을 최대한 높여주어야한다.

참조 - 널널한 개발자 유튜브 강의 https://www.youtube.com/watch?v=2i3dInwVeUM&t=1s

'🍋 CS' 카테고리의 다른 글

1장. 네트워크 기초  (0) 2023.08.27
운영체제 - 메모리(Memory)  (0) 2023.04.18
운영체제 - 공유자원 & 임계구역  (0) 2023.04.11
운영체제 - 프로세스간 통신  (0) 2023.04.11
운영체제 - CPU 스케줄링  (0) 2023.04.07