[OS] 프로세스

먼지감자·2021년 8월 17일
0

CS 스터디

목록 보기
3/4

프로세스란?

프로세스는 일반적으로 CPU에 의해 처리되는 사용자 프로그램, 시스템 프로그램 즉 실행중인 프로그램을 의미하며, 작업(Job) 태스크(Task)라고도 합니다.
윈도우 사용자가 특정 프로그램을 실행시키면 하드디스크에 저장된 프로그램이 메모리(RAM)에
올라오게 되고, 메모리에 올라온 프로그램은 CPU를 통해 연산되는데 하드디스크에서 메모리로 올라온 프로그램을 프로세스라고 합니다.

프로세스는 다음과 같이 여러 형태로 정의할 수 있습니다.

  1. PCB를 가진 프로그램

  2. 실기억장치에 저장된 프로그램

  3. 프로세서가 할당되는 실체로서, 디스패치가 가능한 단위

  4. 프로시저가 활동중인 것

  5. 비동기적 행위를 일으키는 주체

  6. 지정된 결과를 얻기 위한 일련의 계통적 동작

  7. 목적 또는 결과에 따라 발생되는 사건들의 과정

  8. 운영체제가 관리하는 실행 단위

※ 프로시저란?
한 프로그램은 여러개의 작은 프로그램으로 분할될 수 있는데 이떄 분할된 작은 프로그램을 의미하며, 부 프로그램이라고도 합니다.

프로세스의 구성

프로세스 제어 블록(PCB, Process Control Block)

운영체제는 프로세스를 관리하기 위해 프로세스의 생성과 동시에 고유한 PCB 를 생성 한다. 프로세스는 CPU를 할당받아 작업을 처리하다가도 프로세스 전환이 발생하면 진행하던 작업을 저장하고 CPU 를 반환해야 하는데, 이때 작업의 진행 상황을 모두 PCB 에 저장하게 된다. 그리고 다시 CPU 를 할당받게 되면 PCB 에 저장되어있던 내용을 불러와 이전에 종료됐던 시점부터 다시 작업을 수행한다.

PCB에 저장되는 정보

  • pid : 운영체제가 각 프로세스를 식별하기 위헤 부여된 프로세스 식별변호 (process identification)
  • 프로세스 상태 : 프로세스의 상태(실행,대기)를 저장
  • 프로그램 카운터(pc) : CPU가 다음으로 실행할 명령어의 메모이 주소를 가리키는 값
  • 스케쥴링 우선순위 : 운영체제가 여러 개의 프로세스가 CPU에서 실행되는 순서를 결정하는 것을 스케쥴링이라고 함
  • 권한 : 프로세스마다 어디까지 접근할 수 있는지에 대한 권한 정보
  • 프로세스의 부모와 자식 : 최초로 생성되는 init 프로세스를 제외한 나머지 프로세스들은 부모 프로세스를 복제해서 생성되고 트리를 구성한다. 따라서 각 프로세스는 부모, 자식 프로세스에 대한 정보를 가지고 있다.
  • 프로세스의 데이터와 명령어가 있는 메모리 주소를 가키리는 포인터 : 프로세스는 실행중인 프로그램이기 때문에 프로그램에 대한 정보를 가지고 있어야 한다. 프로그램에 대한 정보는 프로세스가 메모리에 가지는 자신만의 주소공간에 저장되며, 이 공간에 대한 메모리 주소를 가지고 있다.
  • 프로세스에 할당된 자원들을 가리키는 포인터 : 프로그램에 자원이 할당되고 메모리에 적재되면 실행중인 프로그램 인스턴스 즉, 프로세스가 된다. 따라서 프로세스는 자신에게 할당된 자원들의주소를 가지고 있다.
  • 실행 문맥 (context) : 프로세스가 마지막으로 실행한 프로세서의 레지스터 내용을 담고 있다. 즉 교체된 후 다시 자신의 차례가 됐을 때도 연속적으로 실행된 것처럼 하기 위해서 해당 정보를 가지고 있다.

프로세스의 메모리 공간


컴파일 시 지역변수 얼마나 사용할 지 미리 계산할수 없기 때문에 런타임에 지역변수 선언 순서에 따라 스택영역은 위쪽으로 주소값을 매기고 동적 할당될때 힙영역은 아래쪽으로 주소값을 매긴다.

프로세스 상태 전이

프로세스 상태 전이는 프로세스가 시스템내에 존재하는 동안 프로세스의 상태가 변하는 것을 의미하며, 프로세스의 상태를 아래와 같이 상태 전이도로 표시할 수 있습니다.

프로세스 상태

제출 : 작업을 처리하기 위해 사용자가 작업을 시스템에 제출한 상태입니다.

접수 : 제출된 작업이 스풀 공간인 디스크의 할당 위치에 저장된 상태입니다

준비(Ready) : 프로세스가 프로세서를 할당받기 위해 기다리고 있는 상태입니다. 프로세스는 준비상태 큐(스케줄링 큐)에서 실행을 준비하고 있으며 접수상태에서 준비 상태로의 전이는 Job 스케줄러에 의해 수행됩니다.

실행(Run) : 준비상태 큐에 있는 프로세스가 프로세서를 할당받아 실행되는 상태이며 프로세스 수행이 완료되기 전에 프로세스에게 주어진 프로세서 할당 시간이 종료 되면 프로세스는 준비상태로 전환됩니다. 실행중인 프로세스에 입출력 처리가 필요하면 실행중인 프로세스는 대기상태로 전이되며, 실행상태로의 전이는 CPU 스케줄러에 의해 수행됩니다.

대기(Wait) : 프로세스에 입출력 처리가 필요하면 현재 실행중인 프로세스가 중단되고, 입출력 처리가 완료될떄까지 대기하고 있는상태입니다.

종료(Terminated) : 프로세스의 실행이 끝나고 프로세스 할당이 해제된 상태입니다.

관련 용어

Dispatch : 준비 상태에서 대기하고 있는 프로세스 중 하나가 프로세서를 할당받아 실행 상태로 전이되는 과정

Wake Up : 입 출력 작업이 완료되어 프로세스가 대기 상태에서 준비 상태로 전이되는 과정

Spooling : 입 출력 장치의 공유 및 상대적으로 느린 입출력 장치의 처리속도를 보완하고 다중 프로그래밍 시스템의 성능을 향상시키기 위해 입 출력할 데이터를 직접 입출력장치에 보내지 않고 나중에 한꺼번에 입출력하기 위해 디스크에 저장하는 과정

교통량 제어기 : 프로세스의 상태에 대한 조사와 통보 담당 ??

프로세스 스케줄러

프로세스들이 CPU를 할당받을 수 있도록 관리해주는 프로세스이다.

장기, 중기, 단기 단위 스케줄러

  • 장기 (Long-term scheduling)
    • 어떤 프로세스가 시스템의 자원을 차지할 수 있도록 할 것인가를 결정하여 아래 준비(ready) 상태 큐로 보내는 작업을 의미한다.
    • 상위 스케줄링이라고도 하며, 작업 스케줄러에 의해 수행된다.
    • 수행 빈도 적고, 느리다.
  • 중기 (middle-term scheduling)
    • 어떤 프로세스들이 CPU를 할당 받을 것인지 결정하는 작업을 의미한다.
    • CPU를 할당받으려는 프로세스가 많을 경우 프로세스를 일시 대기(waiting)시킨 후 활성화해서 일시적으로 부하를 조절한다.
    • 스왑 인/아웃 결정 (메모리 부족 시 swap out, 남으면 swap in) 한다.
  • 단기 (Short-term scheduling)
    • 프로세스가 실행되기 위해 CPU를 할당받는 시기와 특정 프로세스를 지정하는 작업을 의미한다.
    • 프로세서 스케줄링, 하위 스케줄링이라고도 한다.
    • 프로세서 스케줄링 및 문맥 교환은 프로세서 스케줄러에 의해 수행한다.
    • 자주 수행되고 빠르다.

스케쥴링 알고리즘 평가기준

  • CPU 이용률: 전체 시스템 시간 중, CPU가 작업을 처리하는 시간의 비율
  • 처리 량: CPU가 단위 시간당 처리하는 프로세스의 개수
  • 총 처리 시간: 프로세스가 시작해서 끝날때 까지 걸린 시간
  • 대기시간: 프로세스가 준비완료 큐에서 대기하는 시간의 총 합
  • 응답시간: 대화식 시스템에서 요청 후 첫 응답이 오기까지 걸린 시간

선점/비선점 기법

프로세서 스케줄링의 기법에는 크게 아래와 같이 선점(preemptive)/비선점(non-preemptive) 형태가 있다.

먼저, 비선점(non-preemptive) 은 이미 할당된 CPU 를 다른 프로세스가 강제로 빼앗아 사용할 수 없는 스케줄링 기법이다.
프로세스가 CPUS 를 할당 받으면 해당 프로세스가 완료될 때 까지 CPU 를 사용하지 않는다.

비선점 기법에 종류로는 크게 아래 종류들이 존재한다.
FCFS 스케줄링 (First Come First Serve Scheduling)
CPU 를 먼저 요청한 프로세스가 먼저 CPU 를 배정 받는 스케줄링 방법. P1(24ms), P2(3ms), P3(3ms) 프로세스가 있다 가정하면, CPU 스케줄링의 결과는 다음과 같이 표현된다.

장점 : 가장 간단
단점 : p3 가 priority 가 가장 높은 프로세스였다면, 의미 없는 대기 시간을 기다려야만한다. 이런 식으로 다른 모든 프로세스들이 커다란 한 프로세스가 끝날때까지 계속 기다리는 현상을 convey effect 라 한다. convey effect는 CPU와 장치들의 사용률을 낮추기 때문에 되도록이면 지양해야 한다.

SPN(Shortest Process Next) 혹은 Shortest Job First
준비 큐에서 기다리고 있는 프로세스 중에서 가장 CPU 요구량이 적은 것을 먼저 실행시켜 주는 방식

장점 : 평균 응답 시간 최소화
단점 : 실행 시간이 긴 프로세스가 CPU를 할당받지 못하고 계속해서 대기하는 무한 대기 현상이 발생

convey effect 가 길어지면 무한대기현상?

HRRN(Highest Response Ratio Next)
준비 큐에 있는 프로세스들 중에서 응답률(Response Ratio = (대기시간 + CPU 요구량) / CPU 요구량)이 가장 높은 프로세스에게 높은 우선순위를 주는 방식
장점 : SPN과 SRT 방식의 약점인 수행 시간이 긴 프로세스의 무한 대기 현상을 방지하기 위한 기법

선점(preemptive) 은 CPU 사용권을 선점한다고 생각하면 이해가 쉽다. 특정 요건에 따라 각 프로세스의 요청이 있을 때 프로세스에게 분배하는 방식이다. 가장 자원을 필요로하는 프로세스에게 CPU 를 분배하며 상황에 따라 강제로 회수할 수 도 있다. 따라서 빠른 응답신을 요하는 대화식 시분할 시스템에 적합하며 긴급한 프로세스를 제어할 수 있다.

라운드 로빈(Round-Robin/RR) 스케줄링
FCFS 스케줄링을 기반으로 하여 CPU를 할당하되, 각 프로세스는 한 번에 쓸 수 있는 CPU 시간 크기(시간 할당량)이 지나면 시간 종료 인터럽트에 의해 CPU를 뺏기게 되는 방식이다. 주로 우선순위 스케줄링(Priority scheduling)과 결합해 프로세스의 시간 할당량을 조절하는 방식으로 활용한다.

장점 : FCFS에서 convey effect의 방지
단점 : Context Switch의 오버헤드를 감수해야한다.

SRT(Shortest Remaining Time) 스케줄링

준비 큐에서 완료까지 남은 CPU 요구량이 가장 짧은 것을 먼저 실행시켜주는 방식이다. 실행 도중 남은 실행 시간이 더 적은 프로세스가 준비 큐에 들어올 경우, 현재 실행 중인 것을 중단하고 새 프로세스에게 CPU를 할당한다.

다단계 큐(Multi-level Queue) 스케줄링

프로세스들의 우선순위 개수만큼의 큐가 필요하다. 프로세스들은 자신의 우선순위 값에 해당하는 큐에 들어가게 되며, 우선순위가 낮은 하위 단계 큐의 작업은 실행 중이더라도 상위 단계 큐에 프로세스가 도착하면 CPU를 뺏긴다.


Ref

https://coding-factory.tistory.com/307
https://ybdeveloper.tistory.com/20
https://velog.io/@emily0_0/OS-Process-Thread
https://sugerent.tistory.com/270

profile
ML/AI Engineer

0개의 댓글