이번 주 면접에서 프로세스와 스케줄링에 대한 면접 질문이 있었다.
하지만 제대로 대답하지 못하였다
스케줄링에 대해서는 명확히 아는 것이 없어 하나도 대답하지 못하였고,
프로세스는 실행되고 있는 프로그램이라는 말만 할 수 있었다.
그렇기에 프로세스와 스케줄링에 대해서 포스팅 해보고자 한다.
[ 참고 블로그 ]
https://80000coding.oopy.io/b271bc98-65be-4722-8299-a087dc014f3c
프로세스 스케줄링을 이해해보자
개요
80000coding.oopy.io
https://www.youtube.com/watch?v=isj4sZhoxjk&list=PLYH7OjNUOWLUz15j4Q9M6INxK5J3-59GC&index=2
1. 프로세스와 프로세스 스케줄링이란?
프로세스란?
실행중인 프로그램을 말한다.
우리가 사용하는 컴퓨터에서는 정말 많은 프로세스들이 실행된다.
프로세스들은 실행을 위해서 CPU, 메모리 등의 자원들을 운영체제로 부터 할당받아 사용합니다.
운영체제가 프로세스들에게 효율적으로 자원을 할당하는 것을 프로세스 스케줄링 이라고합니다.
2. 프로그램이란?
프로그램이란?
명령어들의 집합을 의미한다
여기서 말하는 명령어는 CPU가 실행하는데 필요한 명령어로, 프로그래밍 언어로 작성 된 소스코드를 컴파일 하여 만들어진 명령어들의 집합이 프로그램 입니다.
- UNIX : [ .out 파일 ] // WINDOW : [ .exe파일 ]
프로그램은 보조기억장치에 저장되어 있습니다.
3. 프로세스에 대해서 자세히 알아보자
다시 한 번 프로세스에 대해서 설명하자면, 프로그램이 실행되어 메모리에 적재 된 상태를 말합니다.
즉, 실행중인 프로그램을 프로세스라고도 설명이 가능합니다.
게임 프로그램(.exe파일)을 실행 -> 게임 프로세스 생성
프로세스 생성 시, 운영체제가 프로세스에 필요한 자원을 할당합니다.
이 때, 프로세스들은 각각의 독립 된 메모리 영역을 할당 받습니다.
단,
(1) 프로세스들은 자신만의 독립된 메모리 영역을 가지고 있어, 프로세스 간의 통신은 불가능
(2) 프로세스 간 통신을 위해서는 파이프, 시그널, 공유메모리, 파일 등을 사용해야 합니다
4. 프로세스 제어 블록(Process Conttrol Block - PCB)
PCB는 프로세스와 관련 된 정보를 저장하는 곳 입니다.
각 프로세스들은 자신만의 PCB를 소유하고 있고, 프로세스 ID, 프로세스 상태 등의 정보를 저장합니다.
운영체제는 이 PCB를 통해 각 프로세스들을 식별합니다.
PCB는 중요한 정보들을 저장하고 있기 때문에, 커널 메모리 영역에 저장됩니다.
(1) 커널 메모리 영역 : 시스템에서 사용해야하는 필수적인 데이터나 중요한 정보들을 저장하기 위해 사용하는 메모리 영역
(2) 사용자 메모리 영역 : 각 프로세스가 할당 받는 메모리 영역 (Code, Data, Heap, Stack)
PCB에 저장되는 정보
(1) 프로세스 ID : 프로세스 식별 번호
(2) 레지스터 값 : 프로세스가 사용 하던 레지스터 값
(3) 프로세스 상태 : CPU를 사용 중인 상태인지, CPU 사용을 위해 기다리는 상태인지 표시
(4) CPU 스케줄링 정보 : 언제, 어떤 순서로 CPU를 할당 받을 지
(5) 메모리 관리 정보 : 프로세스가 적재된 메모리 위치
(6) 사용한 파일 및 입출력 장치 정보 : 프로세스가 어떤 입출력 장치나 파일을 사용했는지
5. 문맥 교환 (Context Switching)
모든 프로세스들은 실행을 위해 CPU 자원이 필요하지만, CPU 자원은 한정되어있습니다.
따라서, 모든 프로세스는 동시에 CPU 사용이 불가능하며, 프로세스들은 차례대로 돌아가면서 특정 시간 동안 CPU를 사용합니다.
이때 실행중이던 프로세스에서 다른 프로세스로 실행 순서가 넘어갈 때, 운영체제는 현재까지 실행중이던 프로세스의 정보를 PCB에 저장하고, 다음에 실행할 프로세스의 정보를 해당 프로세스의 PCB로부터 불러온다. 이 과정을 문맥교환이라고 합니다.
문맥교환은 아주 빠르게 진행되기에 마치 여러개의 프로세스가 동시에 실행되는 것처럼 보이지만, 실제로는 하나의 프로세스들이 번걸아 가며 진행됩니다.
단, 문맥교환이 자주 일어나게 된다면, 그만큼 오버헤드가 발생할 수 있습니다
- 오버헤드 : 특정 기능을 수행하는데 추가적으로 시간, 자원이 소모되는 것
6. 프로세스의 상태
프로세스가 실행 될 때 프로세스는 여러 상태를 거치면서 실행되게 됩니다.
(1) 생성 상태(New) : 프로세스가 이제 막 메모리에 적재되어 PCB를 할당 받은 상태
(2) 준비 상태(Ready) : CPU를 할당 받아 실행은 가능하나, 차례를 기다리는 상태
(3) 실행 상태(Running) : CPU를 할당 받아 실행중인 상태, 일정 시간동안만 CPU 사용 가능, 할당시간을 모두 사용시, 타이머 인터럽트가 발생하여 다시 준비상태로 변경
(4) 대기 상태(Waiting) : 입출력 요청을 받게되어 입출력 작업을 완료할 때까지 대기하는 상태, 입출력 작업이 끝나고 입출력 완료 인터럽트를 받을 때까지 대기하는 상태로써, 정확히는 특정 이벤트가 일어나기까지 기다리는 것이며, 대부분의 이벤트가 입출력 작업이다.
(5) 종료 상태(End) : 프로세스가 종료된 상태
7. 프로세스 스케줄링이란?
운영체제가 프로세스들에게 공정하고 합리적으로 자원을 배분하는 것을 말합니다.
특정 자원의 할당을 원하는 프로세스들은, 해당 자원의 스케줄링 큐에서 대기합니다.
- 스케줄링 큐에는 준비 큐, 대기 큐가 존재합니다
(1) 준비 큐 : CPU 사용을 위해 기다리는 큐
(2) 대기 큐 : 입출력 장치 사용을 위해 기다리는 큐
스케줄링 큐는 일반적인 큐와 다르게 FIFO(Frist In Frist OUt) 방식이 아닌, 프로세스들이 대기하는 공간일 뿐이다.
운영체제는 스케줄링 큐에서 대기하는 각 프로세스들의 우선순위를 고려하여 자원을 배분한다.
8. 프로세스 스케줄링 알고리즘이란?
운영체제가 프로세스를 스케줄링하기 위해 사용하는 실질적인 방법입니다.
프로세스 스케줄링 알고리즘의 종류
(1) 선입 선처리 스케줄링
선입 선처리 스케줄링은 준비 큐에 삽입된 순서대로 CPU를 할당해주는 방식입니다.
먼저 실행되는 프로세스들의 실행 시간이 길다면, 대기 중인 프로세스들이 기다리는 시간이 매우 길어질 수 있다.
(2) 최단 작업 우선 스케줄링
실행 시간이 가장 짧은 프로세스부터 CPU를 할당해주는 방식입니다.
(3) 라운드 로빈 스케줄링
준비큐에 삽입된 순서대로 CPU에 할당하지만, 정해진 시간(타임 슬라이스)만큼만 할당시키는 방법입니다.
정해진 시간안에 전부 실행되지 못하였다면, 가장 후순위로 돌아가 순서를 기다리게 됩니다.
(4) 최소 잔여 시간 우선 스케줄링
정해진 시간만큼 CPU를 할당하되, 다음 프로세스는 남은 작업 시간이 가장 적은 프로세스를 선택하는 방식입니다.
(5) 우선순위 스케줄링
프로세스들에 우선 순위를 부여하고, 우선 순위가 높은 순으로 실행시키는 방법입니다.
우선 순위가 같다면, 선입 선처리로 처리합니다.
우선 순위가 낮은 프로세스는 무한정 실행되지 못하는 기아 현상이 발생할 수 있고, 기아 현상 방지를 위해서 오래 기다린 프로세스의 우선순위가 점점 높아지는 에이징 기법을 사용합니다.
(6) 다단계 큐 스케줄링
우선순위별로 준비 큐를 여러 개 사용하는 스케줄링 방식이다.
우선순위가 가장 높은 큐에 있는 프로세스를 먼저 처리하며, 가장 높은 큐가 비어있다면, 그 다음 우선순위 큐를 처리합니다.
우선순위 스케줄링과 마찬가지로 우선순위가 낮은 프로세스는 기아현상이 발생할 수 있습니다.
(7) 다단계 피드백 큐 스케줄링
큐 간의 이동이 가능한 다단계 큐 스케줄링입니다.
우선순위가 높은 큐부터 처리를 하되, 일정 시간동안 못 끝낸 경우 그 다음 우선 순위 큐로 다시 이동하여 대기한다.
CPU 사용 시간이 길수록 우선 순위가 내려가게됩니다.
즉, CPU 사용 시간이 긴 CPU 집중 프로세스는 우선 순위가 상대적으로 낮아지고, CPU 사용 시간이 짧고 입출력 작업이 많은 입출력 집중 프로세스는 우선 순위가 상대적으로 높아진집니다. 또한 에이징 기법으로 기아현상을 방지합니다.
[ 요약 ]
우리가 흔히 프로그램을 실행하기 위해서는 메모리에 프로세스를 올리게 됩니다.
그 프로세스들은 CPU에 의해 실행되게 되고, 그 실행 순서를 정하는 과정을 스케줄링이라 합니다.
'CS' 카테고리의 다른 글
rest api란 무엇일까 ? (2) | 2024.01.22 |
---|---|
RDBMS, NoSql이란 무엇일까? (0) | 2024.01.14 |
프로세스와 쓰레드란? (0) | 2023.12.07 |
쿠키와 세션, 캐시의 차이란 무엇일까? (1) | 2023.11.30 |