2020. 1. 22. 13:44

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
Posted by yongminLEE