카테고리 없음

[운영체제] 5. Process 1

윤카일 2022. 11. 13. 21:06

프로세스의 개념

실행 중인 프로그램!

 

프로세스의 문맥(크게 3가지로 구분 가능)

  1. 하드웨어 문맥
    • PC : code부분의 명령어 중, 현재 어디를 읽고 있었냐
    • 각종 레지스터 : 각종 계산을 하기 위한 값들
  2. 프로세스의 주소 공간
    • 메모리와 관련된 부분
    • 현재 code, data, stack에 어떤 내용이 들어가있는가
  3. 프로세스 관련 커널 자료 구조
    1. PCB 
      • 운영체제는, 자원을 관리하는 역할을 한다.
      • 그 중, 프로세스들을 관리하는 역할 또한 한다
      • 이를 위해, data 영역에 각 프로세스마다 PCB라는 자료구조를 두게 된다.
    2. Kernel Stack
      • 운영체제도 커널이라는 메모리 공간을 차지하고 있는 프로그램이다. 그래서 code, data, stack 이라는 영역을 가지고 있다.
      • 운영체제가 code를 실행하고, 함수를 호출하면 stack에 함수를 쌓는 과정을 진행할 것이다. 그런데, 운영체제의 code는 사용자 프로그램 간의 공유 코드라고 할 수 있다. 그래서 커널이, 어떤 사용자 프로그램의 부탁을 받고 실행하는지를 기억해두어야 한다.
      • 이를 위해, 커널 스택을 사용자 프로그램(프로세스)마다 하나씩 두고 있다.

좌 : 하드웨어 문맥, 우상 : 프로세스의 주소공간, 우하 : 프로세스 관련 커널 자료구조

 

프로세스의 상태

  1. Running
  2. Ready
    • CPU를 주기만 하면 당장 명령어를 실행할 수 있는 상태(메모리에 명령어 수행을 위한 부분이 다 올라와있음)
  3. Blocked
    • CPU를 주어도 당장 명령어를 수행할 수 없는 상태
  4. New, Terminated
    • 생성 중인 상태, 종료인 상태(정리하는 상태)

 

[프로세스가 위치하는 공간과, 그에 따른 상태]

프로세스가 위치할 수 있는 여러 공간들을 표시해두었다.

  • CPU를 가지고 있는 상태 = running
  • Ready queue에 있는 상태 = ready
  • Disk I/O queue에 있는 상태 = blocked
  • keyboard I/O queue에 있는 상태 = blocked
  • Resource queue에 있는 상태 = blocked
  • 위와 같은 공간들에 프로세스가 있을 수 있고, 각각마다 어떤 상태인지 표시해둔 그림이라고 생각하면 된다.

 

(큐를 어떤 별개의 물리공간처럼 표현해두었지만, 사실 큐라는 것은 아래와 같이, 커널의 data 공간에, 자료구조로 큐를 만들어두고 프로세스를 넣어두는 것이다)

 

 

PCB

  • 프로세스를 관리하기 위한 자료구조이다.
  • 커널 (커널 주소 공간)의 data 영역에 각 프로세스의 PCB가 저장되게 된다.
  • 구성요소
    • 프로세스의 하드웨어 문맥
      • PC, register
    • 프로세스의 주소공간의 위치정보
      • 메모리내에서, 프로세스의 code, data, stack 의 위치정보
    • OS가 관리상 사용하는 정보, 파일 관련 정보

 

문맥 교환(context switch)

  • CPU를 한 프로세스에서 다른 프로세스로 넘겨주는 과정
  • CPU가 다른 프로세스에게 넘어갈 때, 운영체제가 수행하는 것
    1. CPU를 내어주는 프로세스의 상태를 그 프로세스의 PCB에 저장
    2. CPU를 새롭게 얻는 프로세스의 상태를 PCB에서 읽어옴

 

[주의점]

(1) 사용자 프로세스로부터 운영체제로 CPU가 넘어가는 것을 context switch라고 부르진 않는다!

  • 운영체제에서 CPU가 다른 프로세스로 넘어가게 되면, 이땐 context switch가 맞다

(2) 사용자 프로세스 -> 사용자 프로세스로 CPU가 넘어갈 때, context switch다!