티스토리 뷰

KOCW 이화여대 반효경 교수님의 2014년 운영체제 강의를 듣고 정리한 내용입니다.

프로세스 개념

  • 실행 중인 프로그램

프로세스의 문맥

  1. CPU 수행 상태를 나타내는 하드웨어 문맥 (CPU 관련)
    • Program Counter : 코드의 어느 부분까지 실행했는가
    • 각종 register : register가 어떤 값을 가지고 있는지
  2. 프로세스의 주소공간 (메모리 관련)
    • Code / Data / Stack : 각각에 어느 내용이 들어있는가
  3. 프로세스 관련 커널 자료 구조 (운영체제 관련)
    • PCB (Process Control Block)
      • 커널 주소공간의 Data영역에 존재
    • Kernel stack (프로세스 별로 커널스택 별도로 둠. 어느 프로세스의 부탁을 받고 실행하는지 매번 다르기 때문)
      • 커널 주소공간의 Stack영역에 존재
      • 커널에서 함수 호출이 이루어지면 커널 스택에 관련된 정보 저장

 

PCB (Process Control Block)

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

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

  • Process state, Process ID
  • Scheduling information, priority

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

  • Program counter, registers

3) 메모리 관련

  • Code, Data, Stack이 메모리 어디에 위치해 있는가

4) 파일 관련

  • 오픈하고 있는 파일같은 리소스 관련...

 

문맥 교환 (Context Switch)

  • CPU를 한 프로세스에서 다른 프로세스로 넘겨주는 과정
  • CPU가 다른 프로세스에게 넘어갈 때 운영체제는 다음을 수행
    • CPU를 내어주는 프로세스의 상태를 그 프로세스의 PCB에 저장
    • CPU를 새롭게 얻는 프로세스의 상태를 PCB에서 읽어옴, 하드웨어에 복사시킴, 그 다음에 CPU 넘겨줌
  • System Call 이나 Interrupt 발생시 반드시 문맥 교환 일어나는 것 아님!!!!!!
    • System Call, Interrupt → 사용자 프로세스로부터 CPU가 운영체제로 넘어감
    • System call : 프로세스가 운영체제에게 (필요에 의해) 요청
    • Interrupt : Controller 같은 장치가 CPU 한테 정보 전달 목적으로 interrupt를 검
    • 문맥 교환은 사용자 프로세스에서 다른 사용자 프로세스로 넘어갈 때의 과정임!!!!!!
    • System Call, Interrupt → 이 때도 CPU 수행 정보 등 context의 일부를 PCB에 저장함
    • But, 진짜 문맥교환 시에는 그 부담이 더 큼 (문맥 교환시 프로세스가 사용하던 cache memory 다 지워야함 == cache memory flush)

 

프로세스의 상태

  • 프로세스는 상태가 변경되며 수행됨
  • Running
    • CPU를 잡고 instruction 수행 중인 상태
  • Ready
    • 메모리 등 다른 조건을 모두 만족하고 CPU만 얻으면 실행 가능한 상태
    • (실행에 필요한 부분이 메모리에 올라와 있을 때)
    • CPU를 기다리는 상태
  • Blocked(wait, sleep)
    • CPU를 주어도 당장 instruction을 수행할 수 없는 상태
    • Process 자신이 요청한 event(ex. I/O)가 즉시 만족되지 않아 이를 기다리는 상태
    • ex. 디스크에서 file을 읽어와서야 다음 instruction을 수행할 수 있을 때
  • Suspended(stopped)
    • 외부적인 이유로 프로세스의 수행이 정지된 상태
    • 프로세스는 통째로 디스크에 swap out된다
    • ex1. 사용자가 프로그램을 일시정지 시킨 경우 (break key)​ (메모리에 너무 많은 프로세스가 올라와 있을 때)​ Suspended : 외부에서 resume 해주어야 Active
    • cf. Blocked : 자신이 요청한 event가 만족되면 Ready
    • ex2. 시스템이 여러 이유로 프로세스를 잠시 중단시킴 (중기 스켸줄러가)
  • New
    • 프로세스가 생성 중인 상태
  • Terminated
    • 수행(execution)이 끝난 상태 (종료 중인 상태)

중기 스켸줄러 배우기 전 프로세스 상태도

중기 스켸줄러 배우고 난 후

  • Running (monitor mode) : 사용자 process가 kernel mode에서 실행하고 있다. (운영체제가 running하고 있다 X )
  • Suspended Blocked → Suspended Ready : 메모리를 잃은 상태, CPU 관점에서 아무 일을 할 수 없음
  • I/O는 진행중이였다면 계속 진행가능 (= Suspended ready로 넘어갈 수 있다.)

cf. Ready queue, Disk I/O queue, Keyboard I/O queue, Resource queue..

→ 운영체제 커널의 Data 영역에 자료구조로 큐를 만들어놓고 프로세스 상태를 바꿔가며 실행하는 것

→ 큐에 PCB가 줄 서 있는 것임

 

 

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

  • Job queue
    • 현재 시스템 내에 있는 모든 프로세스의 집합
  • Ready queue
    • 현재 메모리 내에 있으면서 CPU를 잡아서 실행되기를 기다리는 프로세스의 집합
  • Device queues
    • I/O device의 처리를 기다리는 프로세스의 집합

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

 

스켸줄러 (Scheduler)

  • Long-term scheduler (장기 스켸줄러 or job scheduler)
    • 시작 프로세스 중 어떤 것들을 ready queue로 보낼지 결정
    • 어떤 프로세스에게 memory(및 각종 자원)을 줄지 결정
    • degree of Multiprogramming (메모리에 올라가있는 프로그램 수) 조정
      • 1 → 하나의 프로세스가 I/O 하러 가면 CPU는 놈
      • 너무 많으면 → CPU를 잡고 프로그램 실행하려고 해도 각 프로그램들이 메모리를 조금씩만 가져서 당장 필요한 부분마저도 메모리에 안올라와 있음
    • Time sharing system에는 보통 장기 스켸줄러가 없음 (무조건 ready)
  • Medium-Term Scheduler (중기 스켸쭐러 or swapper)
    • 프로세스를 통째로 메모리에서 디스크로 쫓아냄
      • 메모리에 너무 많은 프로그램이 동시에 올라가있으면 swapper가 일부 프로그램 골라서 메모리에서 통째로 쫓아냄
    • 프로세스에게서 memory를 뺏는 문제
    • degree of Multiprogramming을 제어
    • 우리가 사용하는 시스템은 중기 스켸줄러로 degree of Multiprogramming 제어
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크