프로세스

Single Ko·2023년 4월 25일
0

operating system

목록 보기
4/13

프로세스

프로세스의 개념

  • 실행중인 프로그램

프로세스의 문맥(context)

  • CPU 수행 상태를 나타내는 하드웨어 문맥
    • Program Counter
    • 각종 레지스터
  • 프로세스의 주소 공간
    • code, data, stack
  • 프로세스 관련 커널 자료 구조
    • PCB(Process Control Block)
    • Kernel stack

프로세스의 상태

프로세스는 상태(state)가 변경되며 수행된다.

  • Running
    ✓ CPU를 잡고 instruction을 수행중인 상태

  • Ready
    ✓ CPU를 기다리는 상태(메모리 등 다른 조건을 모두 만족하고)

  • Blocked(wait, sleep)
    ✓ CPU를 주어도 당장 instruction을 수행할 수 없는 상태
    ✓ Process 자신이 요청한 event(예: I/O)가 즉시 만족되지 않아 이를 기다리는 상태
    (예) 디스크에서 file을 읽어와야 하는 경우

New : 프로세스가 생성중인 상태
Terminated : 수행(execution)이 끝난 상태

queue라는 자료구조를 통해 운영체제가 각 프로세스의 PCB를 data 영역에 만들어 놓고 이를 통해서 관리.

프로세스 상태도

PCB(Process Control Block)

✨ 운영체제가 각 프로세스를 관리하기 위해 프로세스당 유지하는 정보
✨ 커널의 data에 보관되는 PCB
✨ 다음의 구성 요소를 가진다(구조체로 유지)

(1) OS가 관리상 사용하는 정보

  • Process state, Process ID
  • scheduling information, priority

(2) CPU 수행 관련 하드웨어 값

  • Program counter, registers -> 커널에 있는 값.
    cpu에 있는 값을 굳이 왜 가지고 있나??
    문맥 교환(Context Switch)
  • cpu를 한 프로세스에서 다른 프로세스로 넘겨주는 과정
  • cpu가 다른 프로세스에게 넘어갈 때 운영체제는 다음을 수행
    • cpu를 내어주는 프로세스의 상태를 그 프로세스의 PCB에 저장
    • cpu를 새롭게 얻는 프로세스의 상태를 PCB에서 읽어옴

(3) 메모리 관련

  • 프로세스의 code, data, stack의 위치 정보

(4) 파일 관련

  • Open file descriptors...

문맥교환

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

(1)의 경우에도 CPU 수행 정보 등 context의 일부를 PCB에 save해야 하지 문맥교환을 하는 (2)의 경우 그 오버헤드가 훨씬 큼 (eg. cache memory flush)

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

✨ Job queue

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

✨ Ready queue

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

✨ Device queues

  • I/O device의 처리를 기다리는 프로세스의 집합

✨ 프로세스들은 각 큐들을 오가며 수행된다.

실제 운영체제가 관리하는 자료구조. 노드에는 여러 PCB들이 있고 이 PCB를 연결하기위한 포인터가 있다.

스케쥴러

  • Long-term scheduler (장기 스케줄러 or job scheduler)
    ✓ 시작 프로세스 중 어떤 것들을 ready queue로 보낼지 결정
    ✓ 프로세스에 memory(및 각종 자원)을 주는 문제
    ✓ new 상태의 프로세스를 admitted 해주는것이 장기 스케쥴러
    ✓ 처음에 프로세스가 시작될때 메모리에 들어오도록 해주는 것
    ✓ degree of Multiprogramming(메모리에 올라간 프로그램이 몇개냐)을 제어
    ✓ time sharing system에는 보통 장기 스케줄러가 없음 (무조건 ready)
  • Short-term scheduler (단기 스케줄러 or CPU scheduler)
    ✓ 어떤 프로세스를 다음번에 running 시킬지 결정
    ✓ 프로세스에 CPU를 주는 문제
    ✓ 충분히 빨라야 함 (millisecond 단위)

  • Medium-Term Scheduler (중기 스케줄러 or Swapper)
    ✓ 여유 공간 마련을 위해 프로세스를 통째로 메모리에서 디스크로 쫓아냄
    ✓ 프로세스에게서 memory를 뺏는 문제
    ✓ degree of Multiprogramming을 제어
    ✓ 장기 스케쥴러가 없는 time sharing system들이 두는 스케쥴러

중기 스케쥴러가 생기며 나온 프로세스 상태

✨ Suspended (stopped)

  • 프로세스가 Swapper 때문에 메모리에서 쫒겨난 상태(꼭 Swapper때문은 아님)
  • 외부적인 이유로 프로세스의 수행이 정지된 상태(운영체제, 유저)
  • 프로세스는 통째로 디스크에 swap out 된다.
    (예) 사용자가 프로그램을 일시 정지시킨 경우 (break key) 시스템이 여러 이유로 프로세스를 잠시 중단시킴 (메모리에 너무 많은 프로세스가 올라와 있을 때)

🏴 Blocked: 자신이 요청한 event가 만족되면 Ready, 프로세스는 일을 하고 있는 상태
🏴 Suspended: 외부에서 resume해 주어야 Active, 프로세스가 아예 일을 못하는 상태

Suspended가 추가된 프로세스 상태도

profile
공부 정리 블로그

0개의 댓글