코학다식

[OS] 프로세스와 프로세스 스케줄링 본문

Fundamentals/OS

[OS] 프로세스와 프로세스 스케줄링

copeng 2019. 9. 24. 18:14

Operating System

charter 3, Processes (1)

 

 

 

Process: 프로세스란 무엇일까?


 

  • 실행 중인 프로그램을 말한다.

    • 프로그램은 passive entity
    • 프로세스는 프로그램 카운터가 동작하는 active entitiy
  • 프로그램은 실행 가능한 파일이 메모리에 로드되었을 때 프로세스가 된다.

  • 운영체제는 다양한 프로그램을 실행한다.

    • Batch system - jobs
    • Time-shared systems - tasks(interactive)
  • 프로세스는 코드 (또는 텍스) 섹션, 데이터 섹션, 스택(stack) 섹션, 그리고 프로그램 카운터를 포함한다.

    • 프로그램 카운터는 다음에 실행될 명령의 위치를 저장하고 있다.
  • 실행 가능한 파일이 메모리에 로드되면 다음과 같다.

    • 스택에는 함수의 매개변수, 리턴 주소, 지역 변수와 같은 일시적인 데이터들이 포함된다.
    • 힙에는 프로세스 런타임 동안 동적으로 할당된 메모리가 포함된다.
    • 데이터 영역에는 전역 변수가 초기화 여부에 따라 나누어져 포함된다.

 

 

 

 

프로세스 상태(Process State)


 

  • 한 사용자가 하나의 프로그램을 실행하는 경우에는 프로세스의 상태가 나누어질 필요가 없다. 프로그램이 끝나고 새로운 프로그램을 실행하면 되기 때문이다.
  • 하지만 다양한 사용자가 많은 프로세스를 실행한다고 생각하면, 하나의 프로세스가 끝나고 새로운 프로그램을 실행해 새 프로세스를 생성하는 것은 효율이 떨어질 것이다.
  • 이에 현대의 운영체제들은 한 프로세스가 실행될 때 다른 프로세스는 CPU에 할당되기까지 대기하거나, I/O 작업을 기다리는 등으로 상태를 나눈다.
  • 프로세스가 실행되면 상태는 변화한다.
  • 운영체제마다 상태의 종류에는 차이가 있다. 하지만 기본적으로 다음의 다섯 가지 상태가 존재한다.
    • new: 프로세스가 생성된다.
    • ready: 프로세스가 메모리에 적재되어 CPU에 할당되기를 기다린다. 스케줄링(scheduling)을 통해 한 개의 프로세스가 선택되고 실행되는 것을 scheduler dispatch라고 한다.
    • running: 명령이 수행된다.
    • waiting: 프로세스가 어떤 이벤트의 발생을 기다린다. (I/O 등)
    • terminate: 프로세스가 실행을 끝낸다.

 

 

 

Process Control Block(PCB)


 

  • PCB는 각 프로세스에 관계된 모든 정보(Process context)를 저장한다.
  • 프로세스당 1개씩 존재한다. 즉, 1:1 관계이다.
  • 메모리에 존재한다.
  • 프로세스 상태, 프로세스 번호, 프로그램 카운터, CPU 레지스터, CPU 스케줄링 정보, 메모리 관리 정보, Accounting 정보, I/O 상태 정보를 저장한다.
  • 다른 프로세스가 스케줄링 되는 시점에 최신의 정보로 업데이트된다.
  • Process Control Block in Linux
    • 이 구조체의 노드들은 doubly linked list를 이룬다.
    • current라는 포인터는 현재 running 상태인 PCB를 가리킨다.

 

 

 

프로세스 스케줄링(Process Scheduling)의 개념


 

  • 멀티프로그래밍(멀티태스킹)의 목표는 CPU의 효율성을 극대화하기 위해 항상 어떤 프로세스가 돌아가게 하는 것이다.
  • time-sharing의 목표는 CPU가 프로세스를 아주 자주 변경하면서 사용자들이 각각의 프로그램이 실행되는 동안 상호 작용할 수 있게 하는 것이다.
  • uni-processor 시스템은 하나의 실행 중인 프로세스만 가질 수 있다.
  • 하나 이상의 프로세스가 존재하면 실행 중인 프로세스 외의 나머지 프로세스는 CPU가 작업을 마치고 다시 스케줄링을 할 때까지 기다려야 한다.
  • 이는 프로세스 스케줄링을 필요로 한다.

 

 

 

Process Scheduling Queues


 

  • 스케줄링은 큐(queue)들 사이에서 PCB의 위치를 바꾸는 것과 같다.
  • 프로세스는 여러 큐들 사이를 이동한다.
  • PCB들이 연결되어 큐를 이룬다.
    • Job queue: 시스템 상의 모든 프로세스의 집합(new 상태의 프로세스)
    • Ready queue: 메모리에 적재되어 실행을 기다리는 모든 프로세스의 집합
    • Device queues(I/O queue): I/O 디바이스들을 기다리는 모든 프로세스의 집합(읽기 등이 끝날 때까지 기다린다.)

 

 

 

스케줄러(Schedulers)


 

  • Long-term 스케줄러 (또는 job 스케줄러): 어떤 프로세스가 ready queue로 이동되어야 하는지 결정한다. 몇 분 단위로 자주 일어나지 않는다. 느릴 수 있다.

  • Short-term 스케줄러 (또는 CPU 스케줄러): 어떤 프로세스가 다음에 실행되고 CPU에 할당되어야 하는지 결정한다. millisecond 단위로 아주 자주 일어난다. 빨라야 한다.

  • 프로세스는 다음 두 가지 중 하나이다.

    • I/O bound 프로세스: 계산보다 I/O 하는 데에 시간을 더 많이 소요하며 많은 짧은 CPU burst를 가진다.

      CPU burst란 프로세스가 CPU에서 실행되고 있을 때를 말한다. I/O burst는 CPU가 다음 명령을 위해 I/O를 기다리고 있는 때를 말한다.

  • CPU-bound: 계산에 더 많은 시간을 소요한다. 수가 적고 긴 CPU burst를 가진다.
  • long-term 스케줄러는 degree of multiprogramming을 제어한다.

    • degree of multiprogramming이란 메인 메모리에 적재된 프로세스의 수를 의미한다.
    • I/O bound 프로세스가 많이 생성된 경우, I/O 작업에는 오랜 시간이 소요되므로 CPU 사용이 효율적이지 못하게 된다.

 

 

 

Medium-term Scheduler


 

  • 현대의 많은 운영체제들은 medium-term 스케줄러를 사용한다.
  • 이 스케줄러의 핵심 아이디어는 프로세스를 메모리에서 삭제하고 시간이 지난 후에 다시 메모리에 적재하여 실행을 계속하는 게 때때로 이득일 수 있다는 것이다.
  • 메모리가 부족한 경우 디스크에 PCB를 쓰고 가져온다. (이는 시간이 소요된다.)
  • 그래서 컴퓨터가 느리게 느껴질 때, 많은 경우는 CPU를 바꾸는 것보다 메모리의 크기를 키우거나 빠른 디스크(SSD 등)를 사용하는 게 효과가 좋다.

 

 

 

 

Context Switch


 

  • CPU가 다른 프로세스로 변경할 때, 시스템은 바꾸기 이전 프로세스의 상태를 저장하고 새로운 프로세스에 저장된 상태를 로드해야 한다. 이 일은 Context switch로 알려져 있다.
  • 이는 스케줄링의 핵심이라고 할 수 있다.
  • 프로세스의 context-CPU 레지스터의 값, 프로세스 상태, 메모리 관리 정보 등... 위의 PCB 설명과 사진을 다시 한 번 보자-는 PCB에 쓰여 있다.
  • context switch 시간은 오버헤드가 크다. 시스템은 변경하는 동안 다른 일을 할 수 없다.
  • 변경 속도는 기계마다 다르다. 즉, 시간은 하드웨어에 달려 있다.

Comments