개발

[운영체제] Process(프로세스) - 1 (프로세스의 개념, 프로세스의 상태, 프로세스의 상태도, PCB, 큐, 스케쥴러(Scheduler))

김나나_ 2024. 7. 4. 17:04

📌 프로세스의 개념

  • Process is a program in exectuion
    : 실행 중인 프로그램

  • 프로세스의 문맥(context)
    1. CPU 수행 상태를 나타내는 하드웨어 문맥
      • Program Counter
      • 각종 register
    2.  프로세스의 주소 공간 (메모리와 관련)
      • code, data, stack : code, data, stack 에 어떤 내용이 담겨있는가?
    3. 프로세스 관련 커널 자료 구조
      • PCB(Process Control Block)
      • Kernel stack

 

- 그림 안에서의 PC: Program Counter

- R1, R2 ... : Register

- 프로그램의 상태를 알 수 있는 것이 문맥이다. (현재 상태를 나타내는 것)

- 프로그램이라는 것은 CPU를 잡고 매시간 instruction 을 실행 한다.

- 프로그램이 하나 실행될 때마다 커널은 data 영역에 프로그램당 하나의 PCB 를 두고 있다. (이 친구한테 CPU를 얼마나 줘야 할 지, 메모리한테 얼마나 줘야할 지 등을 관리하는 역할)

- 프로세스 context를 알기위해선 CPU 상태, 메모리 상태도 알아야 하지만, 운영체제가 이 프로세스를 어떻게 평가하고 있는 지도 알아야 한다.

- 커널 스택은 프로그램 별로 두고 있다. (어떤 프로그램이 커널을 호출했는 지 알기 위해서)

 

📌프로세스의 상태(Process State)

  • 프로세스는 상태(State)가 변경되며 수행된다
    1. Running
      • CPU를 잡고 instrutcion을 수행 중인 상태
    2. Ready
      • CPU를 기다리는 상태(메모리 등 다른 조건을 모두 만족하고)
    3. Blocked(wait, sleep)
      • CPU를 주어도 당장 instruction을 수행할 수 없는 상태 (ex. 오래걸리는 I/O 작업)
      • Process 자신이 요청한 event(예: I/O)가 즉시 만족되지 않아 이를 기다리는 상태
      • ex) 디스크에서 file을 읽어 와야 하는 경우
- New: 프로세스가 생성 중인 상태
- Terminated: 수행(execution)이 끝난 상태 (프로세스가 끝나기 직전에 정리하는 상태, 프로세스가 끝나면 그냥 프로세스가 끝난 것임)

 

- CPU 는 1개가 있다고 가정

- CPU 를 잡고 있는 프로세스는 1개 => 해당 프로세스를 running 이라고 함

- CPU 를 잡기 위해 기다리고 있는 상태 => ready

CPU를 잡기 위한 모든 상태를 만족하고 있어야 한다.

- 프로세스는 크게 3가지 상태가 있다고 생각하면 된다. (Running, Ready, Blocked)

 

📌프로세스 상태도

 

- I/O or event wait : 자진해서 wating 처리 하는 것

- Timer interrupt: 강제로 CPU 뺏기는 경우

 

📌프로세스 상태

 

 

📌Process Control Block(PCB)

< PCB >

  • 운영체제가 각 프로세스를 관리하기 위해 프로세스당 유지하는 정보
  • 다음의 구성 요소를 가진다(구조체로 유지)
    1. OS가 관리상 사용하는 정보
      • Process state, Process ID (마지 추민번호 같은 것)
      • scheduling information, priority
    2. CPU 수행 관련 하드웨어 값
      • Program counter, registers
    3. 메모리 관련
      • Code, data, stack 의 위치 정보
    4. 파일 관련
      • Open file descriptors...

 

 

 

📌 문맥 교환(Context Switch)

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

 

 

  • system call 이나 interrupt 발생 시 반드시 context switch 가 일어나는 것은 아님

 

(1)의 경우에도 CPU 수행 정보등 context의 일부를 PCB에 save해야 하지만 문맥교환을 하는 (2)의 경우 그 부담이 훨씬 큼
ex) cache memory flush (캐시 초기화) => 상당한 오버헤드

 

- 프로세스 진행 중에 system call 이나 interrupt 가 발생해서 CPU가 사용자 프로세스에서 커널로 넘어가는 것을 context switch라고 하는 것이 아니다. 프로그램 A 에서 프로그램 B 로 넘어가는 것이 context switch이다.

- 만약 system call 이나 interrupt 가 발생해서 프로그램 자체가 넘어가는 경우가 있는데 이 경우는 context switch가 맞다

- ISR: interrupt service routine

 

📌 프로세스를 스케쥴링하기 위한 큐

1) Job queue

  • 현재 시스템 내에 있는 모든 프로세스의 집합

2) Ready queue

  • 현재 메모리 내에 있으면서 CPU를 잡아서 실행되기를 기다리는 프로세스의 집합

3) Device queues

  • I/O device의 처리를 기다리는 프로세스의 집합
프로세스들은 각 큐들을 오가며 수행된다.

 

📌 스케쥴러(Scheduler)

1) Long-term scheduler(장기 스케쥴러 or job scheduler)

  • 시작 프로세스 중 어떤 것들을 ready queue 로 보낼지 결정
  • 프로세스에 memory(및 각종 자원)을 주는 문제
  • degree of Multiprogramming을 제어
  • time sharing system 에는 보통 장기 스케쥴러가 없음 (무조건 ready)
- 스케쥴러: 순서를 정하는 것
- 어떤 프로세스를 메모리에 올릴 지 결정하는 것(프로세스 new 상태 -> ready queue 로 보내는 것)
- Multiprogramming: 메모리에 여러 프로그램이 올라가는 것
- degree of Multiprogramming: 메모리에 올라가는 프로그램의 수를 제어하는 것 (메모리에 올라가는 프로그램의 수가 10이라면 degree of Multiprogramming 가 10이 되는 것)
- 메모리에 프로그램이 너무 적어도 문제고 메모리에 프로그램이 너무 많아도 성능이 좋지 않아짐
- ex) 메모리에 프로그램이 1개: 해당 프로그램이 I/O 를 하러 가게 되면 CPU는 놀고 있게 된다. => BAD
- 보통 우리가 쓰는 시스템에서는 장기 스케쥴러가 없음

 

2) Short-term scheduler(단기 스케쥴러 or CPU shceduler)

  • 어떤 프로세스를 다음번에 running 시킬 지 결정
  • 프로세스에 CPU를 주는 문제
  • 충분히 빨라야 함(millisecond 단위)

3) ⭐Medium-term scheduler(중기 스케쥴러 or Swapper)

  • 여유 공간 마련을 위해 프로세스를 통째로 메모리에서 디스크로 쫒아냄
  • 프로세스에게서 memory를 뺏는 문제
  • degree of Multiprogramming을 제어
- 일단 메모리에 다 올려놓고 너무 많으면 몇 개를 디스크로 쫒아내는 방식
- 중기 스케쥴러 때문에 추가된 프로세스의 상태 => Suspended (stopped)

 

 

📌  프로세스의 상태(Process State) - new version

  1. Running
    • CPU를 잡고 instrutcion을 수행 중인 상태
  2. Ready
    • CPU를 기다리는 상태(메모리 등 다른 조건을 모두 만족하고)
  3. Blocked(wait, sleep)
    • CPU를 주어도 당장 instruction을 수행할 수 없는 상태 (ex. 오래걸리는 I/O 작업)
    • Process 자신이 요청한 event(예: I/O)가 즉시 만족되지 않아 이를 기다리는 상태
    • ex) 디스크에서 file을 읽어 와야 하는 경우
  4. Suspended (stopped) : 중기 스케쥴러 때문에 생긴 개념(메모리를 빼앗긴 상태)
    • 외부적인 이유로 프로세스의 수행이 정지된 상태 / 프로세스를 강제로 정지 시킴
    • 프로세스는 통쨰로 디스크에 swap out 된다
    • ex) 사용자가 프로그램을 일시 정지시킨 경우(break key)
      시스템이 여러 이유로 프로세스를 잠시 중단시킴(메모리에 너무 많은 프로세스가 올라와 있을 때)
Blocekd: 자신이 요청한 event가 만족되면 Ready
Suspended: 외부에서 resume 해 주어야 Active

 

- Running, Ready, Blocked 는 CPU 를 넓게 생각하면 기다리는 상태. Blocked는 I/O 와 같이 시간이 오래걸리는 작업 때문에 CPU가 다른 일을 하고 있다.

- Suspended: 프로그램 통째로 정지시킨 상태. 메모리에서 쫒겨남

- 외부적인 이유는 중기 스케쥴러가 될 수도 있고 사람이 될 수도 있다.

 

📌 프로세스 상태도 - new version

 

- Running(user mode): 프로세스가 일하고 있는 상태

- Running(monitor mode): 시스템 콜, 인터럽트, 트랩등에 의해 커널이 일하고 있는 상태
❗실질적으로 커널이 일하고 있지만 커널이 Running 하고 있다는 아님! 해당 프로세스가 여전히 Running 중이라고 표현

(운영체제가 running 하고 있다라는 표현 자체는 잘 쓰지 않는 표현)

- 위의 active: CPU를 사용하고 있거나 기다리고 있거나 I/O를 하기위해 Blocked 되거나 일을 하는 상태

- 아래의 inactive: 프로세스가 정지되어 있는 상태

- suspended 상태에서도 blocked 에서 ready 로 바뀔 수는 있다. (I/O 작업이 진행 중이었다 끝나면 ready 로 전환 된다)

 

참고 강의:

http://www.kocw.net/home/search/kemView.do?kemId=1046323

 

운영체제

운영체제는 컴퓨터 하드웨어 바로 위에 설치되는 소프트웨어 계층으로서 모든 컴퓨터 시스템의 필수적인 부분이다. 본 강좌에서는 이와 같은 운영체제의 개념과 역할, 운영체제를 구성하는 각

www.kocw.net

이화여자대학교 반효경 교수님의 운영체제 강의