[운영체제] 3. 프로세스 관리 (2)

jyleever·2023년 2월 19일
0

운영체제

목록 보기
6/9
post-thumbnail

http://www.kocw.net/home/cview.do?lid=04a13d7898f46d1b

프로세스의 개념, 상태, 문맥과 운영체제가 프로세스를 큐에 넣고 관리하는 형태에 대해 알아본다.

프로세스의 개념

process is a program in execution, 프로세스는 실행 중인 프로그램

프로세스의 문맥(context)

이 프로세스가 어떤 상태에 있느냐? 시간에 따라 바뀌는 개념!
운영체제는 이 프로세스의 문맥을 굉장히 중요하게 생각함

  • CPU 수행 상태를 나타내는 하드웨어 문맥
    • Program Counter (어디를 실행하는가?)
    • 각종 Register (어떤 값을 넣고 있었는가?)
  • 프로세스의 주소 공간
    • code, data, stack (자신의 메모리 공간.. 변수나 데이터 얼마나 가질 수 있고, 현재 함수를 몇 개 호출해서 어디가 실행되는지 등)
  • 프로세스 관련 커널 자료 구조
    • PCB (Process Control Block) (운영체제는 각 프로세스마다 PCB를 가지고 있는데 이 PCB는 CPU를 얼마나 사용하는지 등 정보를 가지고 있음)
    • Kernel stack (프로세스마다 별도의 스택을 사용)

프로세스의 상태

CPU가 하나밖에 없기 때문에 CPU에서 기계어를 실행하고 있는 프로세스는 매 순간 한 개
그 프로세스를 우리는 RUNNING 상태에 있다 라고 부른다.
CPU를 사용하기 위해 기다리고 있는 프로세스는 READY 상태에 있다 라고 부른다.
오래 걸리는 작업 때문에 당장 CPU를 얻어봤자 의미가 없는 프로세스는 BLOCKED, WAIT, SLEEP 상태에 있다 라고 부른다.

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

  • Running
    • cpu를 잡고 insturction을 수행 중인 상태
  • Ready
    • CPU를 기다리는 상태(메모리 등 다른 조건을 모두 만족하고)
  • Blocked(wait, sleep)
    • CPU를 주어도 당장 instruction을 수행할 수 없는 상태
    • Process 자신이 요청한 event(예:I/O)가 즉시 만족되지 않아 이를 기다리는 상태
    • ex) 디스크에서 FILE을 읽어와야 하는 경우
  • NEW : 프로세스가 생성 중인 상태
  • Terminated : 수행(execution)이 끝난 상태

운영체제는 PCB를 통해 프로세스의 상태를 관리한다

자료구조 Queue를 통해 줄세워놓고 처리함
디스크에서 어떤 file을 읽어오는 작업을 기다린다면, 디스크 I/O Queue에 줄 세워놓고, ... 운영체제가 다음번 cpu를 줄 때 Ready Queue 상태에 있는 프로세스에 cpu를 준다. Blocked Queue 상태에 있는 프로세스에는 주지 않음

오래 걸리는 작업이 해소 되어 Ready Queue로 들어가는 작업
예를 들어, keyboard I/O 또는 Disk I/O를 기다리는 Queue가 있다.
이 때 keyboard I/O 발생 또는 Disk I/O가 완료된다면,
운영체제에게 바로 CPU가 넘어가는 게 아니라 키보드 컨트롤러가 CPU에게 인터럽트를 걸면 CPU 제어권이 운영체제로 넘어감.
키보드 I/O 기다리는 프로그램은 Blocked Queue -> Ready Queue

공유 데이터
프로세스들이 동시에 사용하고 있는 데이터
프로세스 하나가 사용하고 있으면 다른 프로세스는 Blocked 상태로 기다리고 있음

프로세스 상태도

프로세스가 생성되지 않거나 종료됐을 때에는 프로세스가 아님.
따라서 종료될 때 후처리가 좀 남은 상태가 terminated
또한 프로세스가 생성 중인 상태 new

온전하게 프로세스가 생성되면 Ready 상태
Ready 상태는 CPU만 주면 바로 실행 상태가 됨
그러기 위해서는 기본적으로 당장 필요한 부분은 Memory에 올라가 있어야 함

즉, Ready 상태는 프로세스가 메모리에 존재하는 상태

프로세스가 cpu에서 기계어를 실행하다가, cpu를 내놓는 경우는 3가지 경우가 있다.

  • timer interrupt
  • 오래 걸리는 작업에 있어서, CPU가 있어봤자 소용 없을 때 - Blocked
    오래 걸리는 작업이 끝나면 보통 인터럽트가 걸려서 ready 상태로 바뀜
  • 본인의 일이 종료돼서 CPU를 내놓는 경우

Process Control Block (PCB)

운영체제가 각 프로세스를 관리하기 위해 프로세스당 유지하는 정보

PCB의 구성 요소(구조체로 유지)

  • os가 관리상 사용하는 정보
    process state, process ID, scheduling information, priority
  • CPU 수행 관련 하드웨어 값
    program counter, registers
  • 메모리 관련
    code, data, stack의 위치 정보
  • 파일 관련
    open file descriptors...

모든 프로세스가 동등한 게 아니기 때문에 PCB에서 관리가 되고 있다.

문맥 교환 (Context Switch)

CPU를 한 프로세스에서 다른 프로세스로 넘겨주는 과정

  • 사용자 프로세스에서 다른 사용자 프로세스로 CPU가 넘어가는 과정

현재 cpu가 어디까지 수행했는지, register에 어떤 값을 넣었는지 등을 저장

CPU가 다른 프로세스에게 넘어갈 때 운영체제는 다음을 수행

  • CPU를 내어주는 프로세스의 상태를 그 프로세스의 PCB에 저장
  • CPU를 새롭게 얻는 프로세스의 상태를 PCB에서 읽어옴

프로세스A가 프로세스B에 CPU를 넘기는 과정

  • A가 CPU에서 수행되면서 발생하는 모든 정보를 PCB에 저장
  • 프로세스B가 바로 직전에 CPU를 사용한 정보가 저장되어있는 PCB
  • 그리고 그 B의 PCB를 실제 CPU 안에 있는 register에 복원시킨 후 PCB를 넘겨줌

    이런 과정을 문맥 교환이라고 한다.

문맥 교환과 문맥 교환이 아닌 것을 구분해야 한다

(1)번은 문맥 교환이 아님.
프로세스 A가 실행되다가 인터럽트 또는 시스템 콜이 발생
CPU가 커널로 넘어감 : 문맥 교환이 아님

문맥 교환은 사용자 프로세스에서 다른 사용자 프로세스로 CPU가 넘어가는 과정이며, 이 과정 중에 반드시 운영체제의 커널의 개입이 존재하나 사용자 프로세스에서 커널로 넘어가는 것을 문맥 교환이라고 부르지는 않음

(2)번
결과적으로 사용자 프로그램에서 다른 사용자 프로그램으로 CPU가 넘어가면 문맥 교환이 맞음

USER MODE <-> 커널 모드 : 문맥 교환에 비해서는 오버헤드가 적음

1번의 경우, CPU 수행 정보 등 context의 일부를 PCB에 save해야 하지만,
문맥 교환을 하는 2번의 경우 그 부담이 훨씬 큼

  • 문맥 교환할 떄 Cache memory flush하는데, 이 때의 오버헤드가 심함

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

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

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

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

  • Device Queues
    오래 걸리는 작업의 원인이 되는, I/O device의 처리를 기다리는 프로세스의 집합

Ready Queue와 다양한 Device Queue


실제로 운영체제를 관리하는 자료구조..
ready queue에 pcb가 줄줄이 연결되어있다

프로세스 스케줄링 큐의 모습


프로세스가 처음에 실행되면
1. Ready Queue에 들어옴 -> 본인 차례가 되면 CPU를 얻어서 사용
2. CPU를 사용하다가 오래 기다리는 작업을 요청하면, I/O Queue
3. I/O가 종료되면 다시 Ready Queue로 가서 CPU를 얻을 수 있는 권한 획득
4. cpu를 계속 사용하고 싶은 상황에서 timer interrupt -> cpu 할당 시간 종료되면 다시 ready queue
5. ready queue에 있다가 다시 본인 차례가 되면 cpu를 얻고..

fork a child?
프로세스가 자식 프로세스를 생성할 수 있음
자식 프로세스 : 자신과 똑같은, 복제한 프로세스.
프로세스가 자식 프로세스를 만들면, 자식 프로세스가 실행되고 자신도 동시에 실행이 되는데, 이 때 자식 프로세스와 경쟁을 하게 됨.

wait for an interrupt
오래 걸리는 I/O 작업일 수도 있지만 다른 이유로 기다리다가 인터럽트가 발생하면 다시 Ready Queue로 넘어가고..

0개의 댓글