[운영체제] 프로세스

장현수·2023년 5월 30일
0

운영체제

목록 보기
3/11

프로세스의 개념

  • program in execution
  • 실행중인 프로그램

프로세스의 문맥(context)

  • 프로그램이 무엇을 어떻게 실행했는지, 현재 시점이 어느 상태에 있는지 나타내기 위해 사용되는 개념
  • 특정 시점을 기준으로 어디까지 실행이 되었는지 규명하는 데 필요한 요소.

(1) CPU수행 상태를 나타내는 하드웨어 문맥

  • 현재 시점에 program counter가 프로세스의 어떤 코드를 가리키는지, register에 어떤 값이 저장되어있는지 등

(2) 프로세스의 주소 공간

  • 메모리 관련
  • 프로세스의 주소공간 code, data, stack에 어떤 내용이 담겨있는가

(3) 프로세스 관련 커널 자료 구조

  • 프로세스가 실행될 때마다 생성되는 PCB(Process Control Block) 를 통해 운영체제가 프로세스를 관리 함.
  • Kernel stack 각 프로세스가 자신의 코드를 실행중일 때는 자신의 스택에 함수 관련 작업 수행. 시스템콜을 하게 되면 kernel stack에 함수 관련 정보 쌓음
  • 프로세스별로 커널 스택을 별도로 둠

→ 현대의 운영체제는 멀티 프로세싱이기 때문에 프로세스이 문맥이 중요함.

프로세스의 상태 Process State

Running

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

Ready

  • CPU를 기다리는 상태(메모리 등 다른 조건을 모두 만족하고 CPU만 얻으면 실행가능한 상태 )
  • 당장 수행에 필요한 부분은 메모리에 올라가 있어야 함

Blocked(wait, sleep)

  • CPU를 주어도 당장 instruction을 수행할 수 없는 상태
  • Process 자신이 요청한 event(I/O작업과 같이 오래걸리는 작업)가 즉시 만족되지 않아 이를 기다리는 상태
  • ex. 디스크에서 파일을 읽어와야 하는 경우
  • 자신이 요청한 event가 만족되면 Ready

Suspended(stopped) → 중기 스케줄러의 상태 표현

메모리에 너무 많은 프로세스가 올라와 있을 때

  • 외부적인 이유로 프로세스의 수행이 정지된 상태
  • 프로세스는 통째로 디스크에 swap out된다
    • 사용자가 프로그램을 일시정지시킨 경우 (break key)
    • 시스템이 여러 이유로 프로세스를 잠시 중단시킴
  • 외부에서 resume해주어야 Active

**New : 프로세스가 생성중인 상태

**Terminated : 수행이 끝난 상태

  • 자진해서 CPU를 내놓는 경우 : i/o작업같이 오래걸리는 작업
  • timer interrupt : CPU를 여러 프로세스에 분배하기 위함
  • 수행 중간에 i/o 작업을 많이 하는 경우 : blocked했다가 다시 CPU얻고..
  • terminated : 프로세스 종료

  • CPU는 한번에 하나의 프로세스만 running가능, timer interrupt로 ready queue의 프로세스들이 차례로 CPU를 얻어 수행
  • 프로세스 수행 중에 I/O작업을 해야하는 경우, 해당 프로세스의 상태는 Running에서 Blocked으로 변화, I/O queue에 줄서게 됨
  • Disk는 controller의 지휘 하에 큐에 있는 프로세스들 수행, 수행이 끝나면 CPU에 인터럽트를 걸어 수행이 끝났음을 알리고, CPU제어권이 커널에 넘어감. 커널에서 I/O작업에 대한 처리 + 그 프로세스의 상태를 Blocked에서 Ready로 바꾸고 그 프로세스는 레디 큐에 들어가게 됨
  • 공유데이터와 같은 소프트웨어 자원에 여러 프로세스가 동시에 접근할 경우, 프로세스는 blocked상태가 되어 리소스 큐에 줄서게 됨.

Process Control Block 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로 운영체제에 CPU가 넘어가는 것은 context switch가 아님.
  • 운영체제에서 다른 사용자 프로그램으로 CPU가 넘어갈 때는 context switch
  • 인터럽트나 시스템콜을 처리하고 운영체제에서 원래 시스템에 CPU가 넘어가는 것은 문맥교환이 아님

프로세스 스케줄링 큐

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

Job queue

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

Ready queue

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

Device queues

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

스케줄러 scheduler

Long-term scheduler 장기 스케줄러 / job scheduler → 현재 시스템에서는 사용 안함

  • 시작 프로세스 중 어떤 것들을 ready queue로 보낼지 결정
  • 프로세스에 memory 및 각종 자원을 주는 문제
  • degree of Multiprogramming(메모리에 몇개의 프로그램이 올라갈 것인가)을 제어
  • time sharing system에는 보통 장기 스케줄러가 없음 (무조건 ready)

Short-term scheduler 단기 스케줄러 / CPU scheduler

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

Medium-term scheduler 중기 스케줄러 / Swapper

  • 무조건 ready상태가 되는 현대의 시스템에서 메모리에 많은 프로세스가 동시에 올라가게 되는 문제를 조절하기 위해
  • 여유 공간 마련을 위해 일부 프로세스를 통째로 메모리에서 디스크로 쫓아냄
  • 메모리에 올라가는 프로세스의 수를 제어. degree of Multiprogramming
  • 프로세스에게서 memory를 뺏는 문제

profile
개같이 발전하자 개발

0개의 댓글