1. 스케쥴링 알고리즘 구현 이해2
Round Robin 스케쥴러
- 큐(queue) 자료구조를 활용하여 쉽게 구현 가능함
프로세스 상태 기반 스케쥴러
- FIFO, Round Robin과 함께 기본적인 현대 스케쥴링 알고리즘 이해해보기
- ready state: CPU에서 프로세스를 실행 가능한 상태(실행 대기 상태)
- running state: 현재 CPU에서 프로세스를 실행 중인 상태
- block state: 프로세스에서 특정 이벤트 발생 전 대기 상태
프로세스 구조 이해
프로세스 구성
- text(CODE): 코드
- data: 변수/초기화된 데이터
- stack: 임시 데이터(함수 호출, 로컬 변수 등)
- heap: 코드에서 동적으로 만들어지는 데이터
프로세스와 컴퓨터 구조
PC(Program Counter) + SP(Stack Pointer)
- PC: 다음 실행할 코드 주소
- SP: 스택 최상단 주소
- 임베디드 시스템 등에서 동작하는 C 프로그램 등은, 디버깅 시 PC와 SP를 캡쳐해서 확인
힙과 컨텍스트 스위칭 이해
힙(Heap/Heap Memory)
- 컴퓨터 프로그램이 실행되는 동안 동적 메모리 할당(Dynamic Memory Allocation)에 사용되는 공간을 말함
- 운영 체제가 관리하는 메모리 영역 중 하나로, 프로그램이 실행 도중 필요한 메모리를 할당/해제할 수 있는 공간 제공
-> 자료구조의 힙(Heap)과는 전혀 다른 개념
- 힙 공간이 부족하면 객체 생성이 불가하여, Java와 같은 객체지향 프로그램이 동작하지 않게 됨
가비지 컬렉터(Garbage Collector)
- Java, Python, C# 등에서는 가비지 컬렉터(GC)가 힙 메모리를 자동으로 관리
- 불필요한 객체가 차지하는 힙 공간을 삭제하여 메모리 확보 및 누수 방지
- 프로그래머의 부담이 줄어드나, 실행 중 간헐적인 성능 저하 발생 가능
프로세스와 컨텍스트 스위칭(Context Switching)
컨텍스트 스위칭이란?
- CPU에 실행할 프로세스를 교체하는 기술
- PC와 SP만 바꿔주면, 프로세스 저장 상태를 기반으로 하여 실행 가능
- 실행 중지할 프로세스 정보를, 해당 프로세스의 PCB에 업데이트하여 메인 메모리에 저장
=> 다음 실행할 프로세스 정보는, 메인 메모리에 있는 해당 PCB 정보를 CPU에 넣고 실행
- 디스패치 (dispatch)란, ready 상태의 프로세스를 running 상태로 바꾸는 것
인터럽트와 컨텍스트 스위칭
- 프로세스 실행 중 인터럽트 발생 -> 현 프로세스 실행 중단 (이 때 PCB 업데이트) -> 인터럽트 처리 함수 실행 (운영체제)
-> 현 프로세스 재실행 (PCB 정보를 CPU에 넣고 실행)
*프로세스 제어 블록(PCB/Process Control Block)
- Process ID, Register(PC, SP등), Scheduling Info(Process State), Memory Info(메모리 사이즈 제한) 등의 정보 저장
- 프로세스가 실행중인 상태를 캡쳐/구조화해서 저장하는 것