스케쥴링
목차
- 소스코드의 컴파일 과정
- Preprocessing(전처리)
- Compile -> assembly
- Liking
- 스케쥴링
- 선점형(Preemptive) 스케쥴링
- Round Robin
- MFQ(multi feedback queue) 스케쥴링
- 주요 문제점
- starvation problem
- DeadLock
- 주요 문제점
- 비선점형(Non-Preemptive) 스케쥴링
- 선점형(Preemptive) 스케쥴링
소스코드의 컴파일 과정
- 프로그램이 되기 위해서는 main 함수가 필요하다.
- Preprocessing(전처리)
- 코드 줄바꿈 없애고 한줄로 바꿈(c언어)
- 컴파일할수 있는 단계까지 전처리
- 매크로 대체, 조건부 컴파일 지시문 테스트, file include
- Compile -> assembly(binary file(=object file)로 바꿔줌. .o file)
- 공유 라이브러리는 .so파일로 공유된다.
- 컴파일 시
-c
옵션을 주면 컴파일까지 실행된 object file을 얻을 수 있다.
- Liking
- 헤더 파일을 불러들여 오브젝트 파일을 연결하고 프로그램으로 변환한다.
- 헤더파일: 함수 선언부만 존재하는 파일
- Dynamic link
- 공유라이브러리를 가리키도록 처리한다.
- 프로그램의 실행 시점에 해당 함수의 구현부가 있는 프로세스를 동시에 메모리에 올려 코드를 수행한다.
- 공유 라이브러리가 업데이트되었을때 다시 컴파일할 필요가 없고(함수가 추가되는게 아니라면), 업데이트가 쉽다.
- Static link
- 컴파일할 때 함수의 구현부를 실행파일에 삽입한다.
- 파일 공유 시 해당 파일만으로 실행이 가능한 이점이 있다.
- 파일 크기가 커지고, 업데이트 시 복잡도가 비교적 높으며 다시 컴파일 해줘야한다.
스케쥴링
- 여러 프로세스가 CPU를 점유하는 순서와 시간을 결정하는 매커니즘
선점형(Preemptive) 스케쥴링
Round Robin
- time slice(quantum)
- 현재 실행중인 프로세스가 일정 시간이 지나면 CPU에서 내려오게 한다.
MFQ(multi feedback queue) 스케쥴링
중요한 관점
- priority(우선순위)
- 먼저 실행된다
- time slice
- 오래 점유한다.
운영체제별 구현 방식
- 윈도우는 우선순위, time slice를 각각 정 할수 있음
- 리눅스는 우선순위, time slice를 각각 정할 수 없도록 구현되어 있음. 오픈소스이기때문에 커스텀도 가능함.
주요 문제점
- starvation problem
- 우선순위가 낮아서 처리되지 않는 프로세스가 존재할 수 있는 문제점이 있다. 해결 방법으로는 우선순위가 낮은 프로세스의 우선순위를 높여주어 해결할 수 있다.
- DeadLock(교착 상태)
- 두 개 이상의 프로세스가 서로 자원을 얻지 못해서 다음 처리를 하지 못하는 상태(무한히 다음 자원을 기다리게 되는 상태)
- 교착상태가 존재하는 프로세스는 IPC를 사용중이라는 뜻
- 해결 방법: 공유 자원(트리티컬 섹션) 관리 -> 필요한 자원을 선점했을 때에만 프로세스를 수행할 수 있도록 atomic instruction으로 공유 자원의 접근 가능 상태를 관리한다.
비선점형(Non-Preemptive) 스케쥴링
- 프로세스에 yield 함수를 추가하여, yield 함수가 실행되면 CPU에서 내려감
- FCFS(first come first served)(fifo) 방식
- 프로세스를 강제로 내려오게 할 수 없으므로, 모든 프로그램을 신뢰할수 있을때만 씀
Real Time 스케줄링
- 프로세스가 일정 시간안에 들어가는게 보장되어야 할 때 사용된다.(로켓, 로봇 등에 사용되는 프로그램)
'개발 > 컴퓨터 사이언스' 카테고리의 다른 글
[운영체제] Memory Management (0) | 2022.12.04 |
---|---|
Process와 Thread (1) | 2022.10.11 |
운영체제와 Kernel (2) | 2022.10.04 |
Instruction과 Pipelining (0) | 2022.09.27 |
CPU와 RAM (1) | 2022.09.21 |
댓글