1. Process
2. Virtualizing CPU
3. Limited Direct Execution
4. Scheduling
1. Process
- 정의
: 실행 중인 프로그램
- 프로세스 API
: OS가 제공하는 API
a) create : 프로세스 생성
b) destroy : 프로세스 제거
c) wait : 프로세스를 대기 시킴
d) miscellaneous control : 프로세스 재개와 같은 프로세스 제거, 대기 이외의 기능
e) status : 프로세스 상태 정보를 알아냄
- 프로세스 상태
a) running : 프로세서에서 프로세스 실행중
b) ready : 프로세스는 실행할 준비가 되어 있지만 다른 프로세스가 실행중이므로 대기
c) blocked ; 프로세스의 수행이 중단
2. Virtualizing CPU
- 정의
: time-sharing 기법을 이용하여 하나의 CPU 또는 소규모 CPU 집합을 무한개의 CPU가 존재하는 것처럼 변환하여 동시에 많은 수의 프로그램을 실행시키는 것.
- Direct Execution
: 프로그램을 CPU상에서 직접 실행시키는 것
- Direct Execution의 문제점
a) 제한된 연산 : 프로그램이 운영체제가 원치않는 일을 하지 않는다는 것을 보장할수 없다
b) 프로세스 간 전환 : 프로세스 실행 시, 운영체제는 어떻게 프로그램의 실행을 중단하고 다른 프로세스로 전환 시킬 수 있는가
3. Limited Direct Execution
- Direct Execution의 2가지 문제 해결
a) kernel mode : 제한된 연산 문제 해결
b) Non-Cooperative Approach : 프로세스 간 전환 문제 해결
- kernel-mode
- 접근 권한에 따라 user mode 와 kernel mode로 나누어 user mode에서 실행되는 코드를 제한시킨다.
- 사용자 프로세스는 입출력요청을 하는경우 하드웨어가 제공하는 시스템 콜을 호출하고 이를 위해 trap instruction을 실행
- 하드웨어는 프로세스의 레지스터를 커널 스택에 저장하고 kernel mode로 진입
- OS는 사용자 프로세스가 요청한 작업을 처리한다. 작업이 완료되면 return-from-trap instructoin을 실행
- 하드웨어는 커널 스택으로부터 레지스터를 복원하고 kernel mode에서 user mode로 다시 하향 조정
- 사용자 프로그램으로 다시 리턴
- Non-Cooperative Approach
- 수밀리 초마다 timer interrupt를 발생시켜 프로세스를 중단
- 하드웨어는 프로세스의 레지스터를 프로세스 커널스택에 저장하고 부팅시에 미리 구성된 OS의 interrupt handler를 실행
- OS가 제어권을 다시 획득하면 현재 실행중인 프로세스를 계속 실행할 것인지 아니면 다른 프로세스로 전환할 것인지 OS의 Scheduler가 결정
- 프로세스 전환하기로 결정되면 OS는 context switch코드 실행하여 프로세스의 레지스터, PC, 커널 스택포인터 를 해당 프로세스의 구조체에 저장
- 다음 실행될 프로세스의 구조체에서 레지스터, PC, 커널 스택포인터를 복원하고 다음 프로세스의 커널스택으로 전환
- 하드웨어는 전환된 프로세스의 커널스택에서 레지스터 복원 하고 user mode로 하향조정 및 PC로 분기
4. Scheduling
- FIFO, First In First Out
- 먼저 도착한 순서대로 job을 스케쥴링
- convoy effect : 짧은 시간 동안 자원을 사용할 프로세스들이 자원을 오랫동안 사용하는 프로스세의 종료를 기다림
- SJF, Shortest Job First
- 동시에 도착한 작업들중 job이 짧은 순서대로 스케쥴링
- convoy effect 발생
- STCF, Shortest Time-To-Completion First
- 새로운 job이 시스템에 도착하면 스케쥴러는 남아 있는 작업의 잔여 실행 시간을 계산하고 그 중 가장 적은 잔여 실행시간을 가진 작업을 스케쥴링
- convoy effect 해결
- response time 측면에서는 효과적이지 못함
- Round-Robin
- time slice동안 실행한 후 실행 큐의 다음 작업으로 전환
- time slice는 timer-interrupt의 N배수
- time slice가 짧을수록 response time 측면에서 성능은 좋아지지만 context-switch 비용이 증가
- Overlap
- 프로세스가 입출력 작업을 요청하는 경우 입출력이 완료될때까지 cpu를 사용하지 않으며 blocked 상태가 된다
- 스케줄러는 그 시간 동안 실행될 다른 작업을 스케줄링하여 연산을 overlap, 중첩 시킨다
- MLFQ, multi-level feedback queue
- rule 1 : priority (A) > priority(B) 이면 프로세스 A 실행
- rule 2 : priority (A) = priority(B) 이면 프로세스 A와 B는 Round-Robin 방식으로 실행
- rule 3 : 작업이 시스템에 들어가면 최상위 큐에 배치
- rule 4 : cpu 양도 횟수에 상관없이 time slice를 전부 소진하면 priority 강등 -> cpu를 독점하는 악성 프로세스 방지
- rule 5 : 일정 주기가 지나면, 시스템의 모든 작업을 최상위 큐로 이동 -> starvation 문제 방지
'CS > Operating System' 카테고리의 다른 글
#4 Concurrency (0) | 2020.01.22 |
---|---|
#3 Virtualizing Memory (0) | 2020.01.22 |
#1 Introduction to OS (0) | 2020.01.22 |