Search
Duplicate
📤

프로세스 스케줄링을 이해해보자

간단소개
프로세스 스케줄링을 이해해보자
팔만코딩경 컨트리뷰터
ContributorNotionAccount
주제 / 분류
CS
Scrap
태그
cs
9 more properties

개요

프로세스란, 실행 중인 프로그램을 말한다.
우리가 사용하는 컴퓨터에서는 정말 많은 프로세스들이 실행되고 있다.
프로세스들은 실행을 위해 CPU, Memory 등의 자원들을 운영체제로부터 할당받아 사용한다.
운영체제가 프로세스들에게 효율적으로 자원을 할당하는 것을 프로세스 스케줄링이라고 한다.
프로세스 스케줄링 이해를 위해, 기본적인 개념부터 차근차근 알아보도록 하자.

프로그램(Program)

프로그램이란, 명령어들의 집합이다.
여기서 말하는 명령어는 CPU가 실행하는데 필요한 명령어이다.
즉, 프로그래밍 언어로 작성된 소스 코드를 컴파일하여 만들어진 명령어들의 집합이다.
Ex) UNIX 계열 운영체제의 .out 파일, Windows 운영체제의 .exe 파일.
프로그램은 보조기억장치에 저장되어 있다.

프로세스(Process)

프로그램이 실행되어 메모리에 적재된 상태를 말한다.
실행 중인 프로그램이라고 볼 수 있다.
Ex) 게임 프로그램(실행파일) 실행 → 게임 프로세스 생성.
프로세스 생성시, 운영체제가 프로세스에 필요한 자원을 할당한다.
이때, 프로세스들은 각각의 독립된 메모리 영역을 할당 받는다.
각 프로세스들은 자신만의 독립된 메모리 영역을 가지고 있으므로, 프로세스간 통신은 불가능하다.
프로세스간 통신을 위해서는 파이프, 시그널, 공유메모리, 파일 등을 사용해야 한다.

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

프로세스와 관련된 정보를 저장하는 곳이다.
각 프로세스마다 자신만의 PCB를 가지고 있다.
프로세스 ID(PID), 프로세스 상태 등의 정보들을 저장하고 있다.
운영체제는 PCB를 통해 각 프로세스를 식별한다.
PCB는 중요한 정보들을 저장하고 있기 때문에, 커널 메모리 영역에 저장된다.
커널 메모리 영역(운영체제 영역) : 시스템에서 사용해야하는 필수적인 데이터나 중요한 정보들을 저장하기 위해 사용하는 메모리 영역.
사용자 메모리 영역 : 각 프로세스가 할당 받는 메모리 영역(Code, Data, Heap, Stack).
PCB에 저장되는 정보들은 아래와 같다.
프로세스 ID (PID) : 프로세스 식별 번호.
레지스터 값 : 프로세스가 사용 하던 레지스터 값. (프로그램 카운터 등)
프로세스 상태 : CPU를 사용 중인 상태인지, CPU 사용을 위해 기다리는 상태인지 등.
CPU 스케줄링 정보 : 언제, 어떤 순서로 CPU를 할당 받을지.
메모리 관리 정보 : 프로세스가 적재된 메모리 위치.
사용한 파일 및 입출력 장치 정보 : 프로세스가 어떤 입출력 장치나 파일을 사용했는지.

문맥 교환(Context Switching)

모든 프로세스들은 실행을 위해 CPU 자원이 필요하지만, CPU 자원은 한정되어있다.
따라서, 모든 프로세스는 동시에 CPU 사용이 불가능하며, 프로세스들은 차례대로 돌아가면서 특정 시간 동안 CPU를 사용한다.
즉, 프로세스들은 운영체제가 할당해준 특정 시간만큼 번갈아가면서 CPU를 사용한다.
이때, 실행 중이던 프로세스에서 다른 프로세스로 실행 순서가 넘어갈 때, 운영체제는 현재까지 실행 중이던 프로세스의 정보를 PCB에 저장하고, 다음에 실행할 프로세스의 정보를 해당 프로세스의 PCB로부터 불러온다.
이 과정을 문맥 교환이라고 한다.
문맥 교환은 아주 빠르게 수행되기 때문에(현대 시스템에서는 수십 usec 정도), 사용자 입장에서는 여러 개의 프로세스가 동시에 실행되고 있는 것처럼 보인다.
문맥 교환이 자주 일어나게 된다면, 그만큼 오버헤드가 발생할 수 있다.
오버헤드 : 특정 기능을 수행하는데 추가적으로 시간, 자원이 소모되는 것.

프로세스 상태(Process Status)

프로세스가 실행될 때, 각 프로세스는 여러 가지의 상태를 거치며 실행된다.
1.
생성 상태(New) : 프로세스가 이제 막 메모리에 적재되어 PCB를 할당 받은 상태.
2.
준비 상태(Ready) : CPU를 할당 받으면 실행이 가능하지만, 자신의 차례를 기다리는 상태.
3.
실행 상태(Running) : CPU를 할당 받아 실행 중인 상태.
일정 시간 동안만 CPU 사용이 가능하다.
할당된 시간을 모두 사용하면, 타이머 인터럽트가 발생하며 다시 준비 상태로 변경된다.
4.
대기 상태(Waiting) : 입출력 요청을 받게되어 입출력 작업을 완료할 때까지 대기하는 상태.
입출력 작업이 끝나고 입출력 완료 인터럽트를 받을 때까지 대기하는 상태이다.
정확히는 특정 이벤트가 일어나기까지 기다리는 것이며, 대부분의 이벤트가 입출력 작업이다.
5.
종료 상태(End) : 프로세스가 종료된 상태.

프로세스 스케줄링(Process Scheduling)

운영체제가 프로세스들에게 공정하고 합리적으로 자원을 배분하는 것을 말한다.
특정 자원의 할당을 원하는 프로세스들은, 해당 자원의 스케줄링 큐에서 대기한다.
대표적인 스케줄링 큐에는 준비 큐대기 큐가 있다.
준비 큐 : CPU 사용 위해 기다리는 큐.
대기 큐 : 입출력 장치 사용을 위해 기다리는 큐.
스케줄링 큐는 반드시 선입선출(FIFO) 방식은 아니며, 프로세스들이 대기하는 공간일 뿐이다.
운영체제는 스케줄링 큐에서 대기하는 각 프로세스들의 우선순위를 고려하여 자원을 배분한다.

프로세스 스케줄링 알고리즘(Process Scheduling Algorithm)

운영체제가 프로세스 스케줄링을 위해 사용하는 실질적인 방법이다.
대표적인 CPU 할당을 위한 프로세스 스케줄링 알고리즘의 종류는 아래와 같다.
1.
선입 선처리 스케줄링
준비 큐에 삽입된 순서대로 CPU를 할당해주는 방식이다.
먼저 실행되는 프로세스들의 실행 시간이 길다면, 대기 중인 프로세스들이 기다리는 시간이 매우 길어질 수 있다.
2.
최단 작업 우선 스케줄링
실행 시간이 가장 짧은 프로세스부터 CPU를 할당해주는 방식이다.
3.
라운드 로빈 스케줄링
준비 큐에 삽입된 순서대로 CPU를 할당하지만, 정해진 시간(타임 슬라이스)만큼만 할당해주는 방식이다.
정해진 시간동안 전부 실행되지 못했다면, 맨 마지막 순서로 돌아가서 다시 기다린다.
4.
최소 잔여 시간 우선 스케줄링
정해진 시간만큼 CPU를 할당하되, 다음 프로세스는 남은 작업 시간이 가장 적은 프로세스를 선택하는 방식이다.
5.
우선순위 스케줄링
프로세스들에 우선순위를 부여하고, 우선순위가 높은 프로세스부터 실행시키는 방식이다.
우선순위가 같다면, 선입 선처리로 처리한다.
우선순위가 낮은 프로세스는 무한정 실행되지 못하는 기아(Starvation)현상이 발생한다.
기아 현상 방지를 위해 오래 기다린 프로세스의 우선순위를 점차 높이는 에이징(Aging)기법을 사용한다.
6.
다단계 큐 스케줄링(Multilevel Queue Scheduling)
우선순위별로 준비 큐를 여러 개 사용하는 스케줄링 방식이다.
우선순위가 가장 높은 큐에 있는 프로세스를 먼저 처리한다.
우선순위가 가장 높은 큐가 비어 있으면, 그 다음 우선순위 큐를 처리한다.
우선 순위가 낮은 프로세스는 기아 현상이 발생할 수 있다.
7.
다단계 피드백 큐 스케줄링
큐 간의 이동이 가능한 다단계 큐 스케줄링이다.
우선순위가 가장 높은 큐부터 처리를 하되, 일정 시간(타임 슬라이스)동안 못 끝낸 경우 그 다음 우선 순위 큐로 다시 이동하여 대기한다.
CPU 사용 시간이 길수록 우선 순위가 내려가게 된다.
즉, CPU 사용 시간이 긴 CPU 집중(CPU Bound) 프로세스는 우선 순위가 상대적으로 낮아지고, CPU 사용 시간이 짧고 입출력 작업이 많은 입출력 집중(I/O Bound) 프로세스는 우선 순위가 상대적으로 높아진다.
또한, 에이징 기법을 통해 기아 현상을 방지한다.

참고 자료

혼자 공부하는 컴퓨터구조 + 운영체제 - 강민철.