Process

프로세스의 개념

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

프로세스의 상태

  • 프로세스는 지속적으로 상태가 변경되며 수행됨
  • Running: CPU를 할당 받아 명령을 수행 중인 상태
  • Ready: 메모리 등 다른 조건을 모두 만족하고 CPU를 기다리는 상태
  • Blocked(wait, sleep)
    • CPU를 주어도 당장 명령을 수행할 수 없는 상태
    • 프로세스 자신이 요청한 Event(ex: Disk I/O)가 즉시 만족되지 않아, 이를 기다리는 상태
  • New: 프로세스가 생성 중인 상태
  • Terminated: 수행이 끝난 상태

  • CPU를 사용하지 못하고 있는 이유는 위와 같이 다양함
  • Ready, Block Queue 관련 정보는 Kernel의 Data 영역에 저장됨

PCB(Process Control Block)

  • 운영체제가 각 프로세스를 관리하기 위해 프로세스 당 유지하는 정보로 구조체로 유지
  • (1) OS가 관리상 사용하는 정보
    • Process state, PID
    • scheduling information, priority..
  • (2) CPU 수행 관련 하드웨어 값
    • PC, registers
  • (3) 메모리 관련
    • code, data, stack의 위치 정보
  • (4) 파일 관련
    • Open file descriptors

Context Switch

  • CPU를 한 프로세스에서 다른 프로세스로 넘겨주는 과정
  • CPU가 다른 프로세스에게 넘어갈 때 운영체제는 다음을 수행
    • CPU를 내어주는 프로세스의 상태를 그 프로세스의 PCB에 저장
    • CPU를 새롭게 얻는 프로세스의 상태를 PCB에서 읽어옴
  • System call이나 Interrupt 발생 시 반드시 문맥 교환이 일어나는 것은 아님



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

  • Job Queue: 현재 시스템 내에 있는 모든 프로세스의 집합
  • Ready Queue: 현재 메모리 내에 있으면서 CPU를 할당 받아 실행되기를 기다리는 프로세스의 집합
  • Device Queues: I/O device의 처리를 기다리는 프로세스의 집합
  • 프로세스들은 위의 Queue들을 오가며 수행됨

Scheduler

  • Long-term scheduler(Job scheduler)
    • 시작 프로세스 중 어떤 것들을 ready queue로 보낼지 결정
    • 프로세스에 memory 및 각종 자원을 주는 문제
    • degree of Multiprogramming을 제어
      • 메모리에 올라가 있는 프로세스의 수
      • 메모리에 너무 적은 혹은 너무 많은 프로세스가 있지 않도록 제어
    • time sharing system에는 보통 장기 스케줄러가 없음
      • 무조건 ready queue로 보냄!
      • Swapper가 degree of Multiprogramming을 제어
  • Short-term scheduler(CPU scheduler)
    • 어떤 프로세스를 다음에 running 시킬지 결정
    • 프로세스에게 CPU를 주는 문제
    • millisecond 단위로 충분히 빨라야 함
  • Medium-term scheduler(Swapper)
    • 여유 공간 마련을 위해 프로세스를 통째로 메모리에서 디스크로 쫓아냄
    • 프로세스에게서 memory를 빼앗는 문제
    • degree of Multiprogramming을 제어

  • Swapper로 인해 추가되는 프로세스 상태 Suspended(stopped)
    • 외부적 이유로 프로세스의 수행이 정지된 상태
    • 프로세스는 통째로 디스크에 Swap out 됨
    • 외부에서 resume해 주어야 다시 Active
  • cf. 메모리에 너무 적은 프로세스만 올라가 있으면 왜 안좋은가?
    • 모든 프로세스들이 device queue에 들어가게 되면 CPU는 노는 상태가 되버림

Thread

  • A Thread(lightweight process) is a basic unit of CPU utilization

  • Thread의 구성(독립적으로 가지는 요소)
    • Program counter
    • Register set
    • Stack space
  • Thread가 동료 Thread와 공유하는 부분(Task)
    • Code section
    • Data section
    • OS resources
  • 즉, 공유할 수 있는 것은 최대한 공유하고, CPU 수행단위를 여러 개를 두는
  • Thread의 종류
    • kernel에 의해 지원되는 Kernel Threads
      • Thread가 여러 개 있다는 것을 kernel이 알고 있음
      • 따라서, context switch가 매우 빠름
    • library를 통해 지원되는 User Threads
      • Thread가 여러 개 있다는 것을 kernel은 모르고 사용자 프로그램이 관리해야 함
    • 이 외에도 Realtime thread도 존재

Thread의 장점

  • 응답성: 다중 Thread로 구성된 Task 구조에서는 하나의 서버 Thread가 Blocked(wait) 상태인 동안에도 동일한 Task 내의 다른 Thread가 Running이 되어 빠른 처리를 할 수 있음
    • ex) 웹 브라우저 프로세스를 구성하는 하나의 Thread가 이미지를 불러오는 동안에, 또 다른 Thread가 이미 읽어온 HTML 문서와 같은 것들을 미리 화면에 제공..
  • Resource Sharing: n개의 Threads는 하나의 프로세스의 binary code, data, resource를 공유
  • Economy: 동일한 일을 수행하는 다중 Thread가 협력하여 높은 Throughput과 성능 향상을 얻을 수 있음
    • thread 간 문맥 교환도 같은 process 내에서 일어나기 때문에 빠름
    • ex) Word 프로그램에서 여러 파일을 띄워놓을 때, 각각의 파일을 프로세스를 생성하여 수행하도록 하는 것이 아니라 Thread를 생성하여 성능 향상
  • Utilization of Multi Processor Architectures: 각각의 Thread는 여러 개의 프로세서에서 병렬적으로 running되어 병렬성을 높일 수 있음


'Software Convergence > OS, Linux ' 카테고리의 다른 글

5. CPU Scheduling  (0) 2018.09.17
4. Process Management  (0) 2018.09.16
2. System Structure & Program Execution  (0) 2018.09.16
1. Introduction to Operating Systems  (0) 2018.09.16
Linux Command Line Guide(2)  (0) 2018.09.10

+ Recent posts