본문 바로가기

혼공컴운

[혼콩컴운] Ch 09 ~ 11 __ 혼공학습단 11기 4주차

이번 주 진짜 고비 .... 
슈퍼주니어의 Sorry 쏘리 신청합니다.
늦었지만 그렇다고 포기하지 않는 마음으로

 


chapter 09 운영체제 시작하기

 

09-1 운영체제를 알아야 하는 이유

- 컴퓨터 부품들은 컴퓨터 내부의 중요한 운영체제를 통해 작동이 된다.
- 모든 프로그램은 실행을 위해 자원을 필요로 한다. ( 자원 / 시스템 자원: 프로그램 실행에 있어서 마땅히 필요로 하는 요소컴퓨터의 네 가지 핵심 부품 포함 ! )
 
운영체제 
- 실행할 프로그램에 필요한 자원을 할당하고

- 프로그램이 올바르게 실행되도록 돕는 특별한 프로그램 (프로그램은 메모리에 저장 / 운영체제는 인터넷 브라우저, 게임과 같은 프로그램임.)

운영체제는 커널 영역에 적재되어 사용자 영역에 적재된 프로그램들에 자원을 할당하고 이들이 올바르게 실행되도록 돕는다.
→ 메모리 관리
→ CPU 관리
→ 입출력장치 관리 

 
 

응용 프로그램과 하드웨어 사이에서 
응용 프로그램에 필요한 자원을 할당하고, 응용 프로그램이 올바르게 
실행되도록 관리하는 역할을 한다.

 
 
 
 
 
 
운영체제를 알아야 하는 이유 >> 
- 개발자는 하드웨어를 조작하는 코드를 직접 작성할 필요가 없음 (간단한 프로그램이라도 운영체제가 없다면
하드웨어를 조작하는 코드를 개발자가 직접 작성해야 함)
- 운영체제는 프로그램을 위한 프로그램으로 

   프로그램을 만드는 개발자는 운영체제를 알아야 한다. - 문제 해결 능력 ( 운영체제와의 대화로 하드웨어와 프로그램을 더 깊이 이해하고 문제 해결의 실마리를 찾을 수 있음)

 


09 - 2 운영체제의 큰 그림

 

운영체제의 심장, 커널

커널 : 운영체제의 핵심 서비스를 담당하는 부분

 
 
 
자동차의 엔진, 사람의 심장과도 같은 역할 !
 
 
 
 
 
유저 인터페이스 (UI; User Interface) 
→ 운영체제에는 속하는데 커널에는 속하지 않는 기능 
  사용자와 컴퓨터 간의 통로일 뿐 운영체제의 핵심 기능(커널)은 아님
 
 
 

이중 모드와 시스템 호출

- 사용자가 실행하는 프로그램이 자원에 직접 접근하는 것은 위험하다.
- 운영체제는 응용 프로그램들이 자원에 접근하려 할 때 
  오직 자신을 통해서만 접근하도록 하여 자원을 보호한다. 
 

 
 
일종의 문지기인 셈이다. 
이러한 문지기 역할은 이중 모드로 구현이 된다.
 
 
 
 
 
이중 모드
CPU가 명령어를 실행하는 모드를 크게 사용자 모드와 커널 모드로 구분하는 방식

  • 사용자 모드 

운영체제 서비스를 제공받을 수 없는 실행 모드
커널 영역의 코드를 실행할 수 없는 실행 모드 
자원 접근 불가 

  • 커널 모드 

운영체제의 서비스를 제공받을 수 있는 실행 모드 (즉, 커널 영역의 코드 실행 가능)
자원 접근을 비롯한 모든 명령어 실행 가능
 

 

이런 식으로 운영체제는 자원 접근을 대행하고 자원 보호 해줌.
 
 
 
 
 

시스템 호출

  • 커널 모드로 전환하여 실행하기 위해 호출 
  • 일종의 소프트웨어 인터럽트

 
 
시스템 호출은 사용자 모드로 실행되는 프로그램이
운영체제 서비스를 제공받기 위해 커널 모드로 
전환하는 방법이다.
 
 
 
 
소프트웨어 인터럽트
시스템 호출이 처리되는 방식은 하드웨어 인터럽트 처리  방식과 유사함.

 
일반적으로 응용 프로그램은 실행 과정에서
운영체제 서비스들을 매우 빈번하게 이용.
그 과정에서 빈번하게 시스템 호출을 발생시키고
사용자 모드와 커널 모드를 오가며 실행.
 
 
 
 
 
 

운영 체제의 핵심 서비스

→ 프로세스 관리 / 자원 접근 및 할당 / 파일 시스템 관리
 
1)  프로세스 관리 
→ 프로세스 == 실행 중인 프로그램 
동시다발적으로 생성/실행/삭제되는 다양한 프로세스를 일목요연하게 관리 
     ( 어떻게 관리하는지 : 프로세스와 스레드, 프로세스 동기화, 교착상태 해결 )
 
2) 자원 접근 및 할당

  • CPU ( CPU 스케줄링 : 어떤 프로세스를 먼저, 얼마나 오래 실행할까?) 
  • 메모리 ( 페이징, 스와핑,..)
  • 입출력장치

3) 파일 시스템 관리

  • 관련된 정보를 파일이라는 단위로 저장 장치에 보관
  • 파일들을 묶어 폴더(디렉터리) 단위로 저장 장치에 보관

 


Chapter 10  프로세스와 스레드 

10 - 1 프로세스 개요

 
프로세스 == ‘실행 중인 프로그램’

 
프로그램은 실행되기 전까지는 그저
보조기억장치에 있는 데이터 덩어리일 뿐이지만, 
보조기억장치에 저장된 프로그램을
메모리에 적재하고 실행하는 순간 프로세스 됨.
 
 
 
 

프로세스 제어 블록

모든 프로세스는 실행을 위해 CPU가 필요하다. 
→ BUT ! CPU 자원은 한정되어 있음. 
- 프로세스들은 돌아가며 한정된 시간만큼 CPU 이용
 

 
- 자신의 차례에 정해진 시간만큼 CPU 이용
 - 타이머 인터럽트가 발생하면 차례 양보
    (타이머 인터럽트: 클럭 신호를 발생시키는 장치에 의해 
     주기적으로 발생하는 하드웨어 인터럽트.)
 
 
 
 
- (운영체제는) 빠르게 번갈아 수행되는 프로세스들을 관리해야 함.
- 이를 위해 사용하는 자료구조가 프로세스 제어 블록 (PCB)
     - 프로세스 관련 정보를 저장하는 자료 구조 (자료를 저장하는 하나의 형태)
     - 마치 상품에 달린 태그와 같은 정보
     - 프로세스 생성 시 커널 영역에 생성, 종료 시 폐기
 
PCB에 담기는 대표적인 정보
1)  프로세스 ID (=PID) 

  • 특정 프로세스를 식별하기 위해 부여하는 고유한 번호(학교의 학번, 회사의 사번)

2) 레지스터 값 

  • 프로세스는 자신의 실행 차례가 오면 이전까지 사용한 레지스터 중간 값을 모두 복원 → 실행 재게 
  • 프로그램 카운터, 스택 포인터 … 

3) 프로세스 상태

  • 다음 강의에서 다룰 예정
  • 입출력 장치를 사용하기 위해 기다리는 상태, CPU를 사용하기 위해 기다리는 상태, CPU 이용 중인 상태 … 

4) CPU 스케줄링 정보 

  • 프로세스가 언제, 어떤 순서로 CPU를 할당받을지에 대한 정보

5) 메모리 정보  

  • 프로세스가 어느 주소에 저장되어 있는지에 대한 정보
  • 페이지 테이블 정보(지금으로서는 ‘메모리 주소를 알 수 있는 정보가 담기는구나’ 정도로) * 

6) 사용한 파일과 입출력장치 정보 

  • 할당된 입출력장치, 사용 중인(열린) 파일 정보

 

문맥 교환 (context switch)

Q) 한 프로세스 (e.g. 프로세스 A)에서 다른 프로세스 (e.g. 프로세스 B)로 실행 순서가 넘어가면??
 
- 기존에 실행되던 프로세스 A는 지금까지의 중간 정보를 백업 
    - 프로그램 카운터 등 각종 레지스터 값, 메모리 정보, 열었던 파일, 사용한 입출력장치 등 
    - 이러한 중간 정보 == 문맥 (context)
    - 다음 차례가 왔을 때  실행을 재개하기 위한 정보 ✅
 - “실행 문맥을 백업해 두면 언제든 해당 프로세스의 실행을 재개할 수 있다. “ 
    - 뒤이어 실행할 프로세스 B의 문맥을 복구 
    - 자연스럽게 실행 중인 프로세스가 바뀜
 

  • 정리 

이처럼 기존의 실행 중인 프로세스 문맥을 백업하고 
새로운 프로세스 실행을 위해 문맥을 복구하는 과정을
문맥 교환 (context switching)이라고 한다. 
(여러 프로세스가 끊임없이 빠르게 번갈아 가며 실행되는 원리)
 

문맥 교환을 그림으로 나타낸 것

 
 

프로세스의 메모리 영역

 

 
 
크게 
코드 영역 ( = 텍스트 영역 ) , 
데이터 영역, 힙 영역, 스택 영역 
 
 
 
 
1) 코드 영역 ( = 텍스트 영역)

  • 실행할 수 있는 코드, 기계어로 이루어진 명령어 저장
  • 데이터가 아닌 CPU가 실행할 명령어가 담기기에 쓰기가 금지된 영역 (read - only) 

2) 데이터 영역 

  • 잠깐 썼다가 없앨 데이터가 아닌 프로그램이 실행되는 동안 유지할 데이터 저장
  • e.g. 전역 변수(프로그램이 실행되는 동안 유지되는 변수, 프로그램 전체에 적용되는 변수) 

+) 코드 영역과 데이터 영역은 크기가 변하지 않기 때문에 ‘크기가 고정된 영역’이라는 점에서 정적 할당 영역이라고도 부른다. 
 
3) 힙 영역 

  • 프로그램을 만드는 사용자, 즉 프로그래머가 직접 할당할 수 있는 저장공간 

+) 힙 공간에 할당한 공간을 다시 반환해야 하는데 이걸 자동으로 해주는 게 가비지 컬렉션이라고 한다?? 
+) 메모리 공간을 반환하지 않는다면 할당한 공간은 메모리 내에 계속 남아 메모리 낭비를 초래함 == 메모리 누수 (memory leak)
 
4) 스택 영역 

  • 데이터가 일시적으로 저장되는 공간
  • (데이터 영역에 담기는 값과 달리) 잠깐 쓰다가 말 값들이 저장되는 공간
  • e.g. 매개 변수, 지역 변수 (일시적으로 사용할 데이터) 

+) 힙 영역과 스택영역은 프로그램 실행하는 동안 영역이 가변적으로 변할 수 있어 둘을 동적할당영역이라고도 부른다. 
+) 일반적으로 힙 영역은 낮은 주소 → 높은 주소로 할당 
+) 스택 영역은 높은 주소 → 낮은 주소로 할당

 
 
 
 
 
 
 
 
 
 
 
 


 

10 - 2 프로세스 상태와 계층 구조

: 작업 관리자 > 세부 정보 > 상태 ( PCB에 기록되는 프로세스 상태) 
 
 

프로세스 상태

1) 생성 상태  

  • 이제 막 메모리에 적재되어 PCB를 할당받은 상태
  • 준비가 완료되었다면 준비 상태로 된다.

2) 준비 상태

  • 당장이라도 CPU를 할당받아 실행할 수 있지만
  • 자신의 차례가 아니기에 기다리는 상태 
  • 자신의 차례가 된다면 실행 상태로 된다. (=디스패치)

3) 실행 상태 

  • CPU를 할당 받아 실행 중인 상태
  • 할당된 시간 모두 사용 시 (타이머 인터럽트 발생 시) 준비 상태로 되돌아가게 됨
  • 실행 도중 입출력장치를 사용하면 입출력 작업이 끝날 때까지 대기 상태로 됨

4) 대기 상태

  • 프로세스가 실행 도중 입출력장치를 사용하는 경우를 의미
  • 입출력 작업은 CPU에 비해 느리기에 이 경우 대기 상태로 접어듦
  • 입출력 작업이 끝나면 (입출력 완료 인터럽트를 받으면) 준비 상태로 됨

(실행 중인 프로세스가 입출력 작업을 만났을 때 입출력 작업이 끝날 때까지 기다리는 상태)
(입출력 작업이 끝나면 대기 상태가 끝남. 다시 준비 상태로 되돌아감)
 
5) 종료 상태 

  • 프로세스가 종료된 상태
  • PCB, 프로세스의 메모리 영역 정리 

+) 프로세스의 상태는 운영체제마다 조금씩 차이가 있다.
 

프로세스 상태 다이어그램

 
 
 
 
 

프로세스 계층 구조

- 프로세스 실행 도중 (시스템 호출을 통해) 다른 프로세스 생성 가능
   - 새 프로세스를 생성한 프로세스 : 부모 프로세스
   - 부모 프로세스에 의해 생성된 프로세스 : 자식 프로세스 
( 부모 프로세스와 자식 프로세스는 별개의 프로세스이므로 각기 다른 PID를 가짐 
 일부 운영체제에서는 자식 프로세스 PCB에 부모 프로세스 PID(PPID)를 명시하기도 함)
- 자식 프로세스는 또 다른 자식 프로세스를 낳을 수 있고 …. 무한 반복 
 
→ 프로세스의 계층적인 구조 형성

 
 
 

프로세스 생성 기법

Q) 부모 프로세스는 자식 프로세스를 어떻게 만들어 내고, 자식 프로세스는 어떻게 자신만의 코드를 실행할까??
 
→ 부모 프로세스를 통해 생성된 자식 프로세스들은 복제와 옷 갈아입기를 통해 실행된다. 

  • 부모 프로세스는 fork 시스템 호출을 통해 자신의 복사본을 자식 프로세스로 생성(복제)
  • 자식 프로세스는 exec 시스템 호출을 통해 자신의 메모리 공간을 다른 프로그램으로 교체 (옷 갈아입기)

 
fork 시스템 호출 
 

 
 
 
 
- 복사본 (= 자식 프로세스) 생성
- 부모 프로세스의 자원 상속
 
 
 
 
 
 
exec  시스템 호출

 
 
- 메모리 공간을 새로운 프로그램으로 덮어쓰기
- 코드 / 데이터 영역은 실행할 프로그램 내용으로 바뀌고
  나머지 영역은 초기화
 
 
 
 
 
 
 
부모가 자식 프로세스를 실행하며 프로세스 계층 구조를 이루는 과정을 fork와 exec가 반복되는 과정이라 볼 수 있다.
 
+)

 
 
부모 프로세스가 자식 프로세스를 fork 한 뒤에
부모 프로세스, 자식 프로세스 누구도 exec를 호출하지 않는 경우도 있다. 
이 경우 부모 프로세스와 자식 프로세스는 같은 코드를 병행하여
실행하는 프로세스가 된다.
 
 
 
 
 
 


10 - 3 스레드

( 소프트웨어적인 스레드를 의미함)
 

 
 
스레(thread)는 프로세스를 구성하는 실행 흐름의 단위.
 
하나의 프로세스는 하나 이상의 스레드를 가질 수 있다.
 
 
 
 
 
 

프로세스와 스레드

단일 스레드 프로세스  : ‘ 실행의 흐름 단위가 하나인 프로세스’

 
 
멀티 스레드 프로세스 : ‘실행 흐름이 여러 개인 프로세스’

 
 
 
→ 프로세스를 이루는 여러 명령어 
    동시 실행 가능 
 
 
 
 
 
 
 

스레드의 구성 요소

 
프로세스의 스레드들은 실행에 필요한 최소한의 정보
(프로그램 카운터를 포함한 레지스터, 스택)만을 유지한 채
프로세스 자원을 공유하며 실행된다는 점. 
 
프로세스의 자원을 공유한다는 것이 스레드의 핵심.
 
 
 
 
 
정리하면, 프로세스가 실행되는 프로그램이라면 스레드는 프로세스를 구성하는 실행의 흐름 단위이다. 
 
 
 

멀티 프로세스와 멀티 스레드

→ 여러 프로세스를 동시에 실행하는 것 : 멀티 프로세스 
→ 여러 스레드로 프로세스를 동시에 실행하는 것 : 멀티 스레드

 
 
→ 결과는 같지만
     무엇이 다를까?? 
 
 
 
 
 
 
 
 
→ 프로세스끼리는 기본적으로 자원을 공유하지 않지만, 스레드끼리는 같은 프로세스 내의 자원을 공유한다는 큰 차이점이 있다.
 
 
프로세스를 fork 하면 코드/ 데이터/ 힙 영역 등 모든 자원이 복제되어 저장됨.

 
 

저장된 메모리 주소를 제외하면 모든 것이 동일한
프로세스 두 개가 통째로 메모리에 적재.
fork를 세 번 네 번하면 메모리에는 같은 프로세스가 통째로
세 개 네 개가 적재.
 
 
 

 
스레드들은 각기 다른 스레드 ID, (별도의 실행을 위해 꼭 필요한)
프로그램 카운터 값을 포함한 레지스터 값, 스택을 가질 뿐.
프로세스가 가지는 자원을 공유 ( 때론 문제가 생길 수도 있음. 하나의 스레드에 문제 생기면 다른 스레드도 영향받음)

 
 


 

Ch 11 CPU 스케줄링 

 

11 -1 CPU 스케줄링 개요

 
 

프로세스 우선순위

Q) 가장 공정한 CPU 스케줄링?? 
입출력 작업이 많은 프로세스 ( = 입출력 집중 프로세스)의 우선순위는 
     CPU 작업이 많은 프로세스 ( = CPU 집중 프로세스)의 우선순위보다 높다.
 

입출력 집중 프로세스 : 비디오 재생이나 디스크 백업 작업을 담당하는 프로세스와 같이 입출력 작업이 많은 프로세스 
CPU 집중 프로세스 : 복잡한 수학 연산, 컴파일, 그래픽 처리 작업을 담당하는 프로세스와 같이 CPU 작업이 많은 프로세스도 있다. 
→ 입출력 집중 프로세스는 실행 상태보다는 입출력을 위한 대기 상태에 더 많이 머무르게 된다. 반대로 CPU 집중 프로세       스는 대기 상태보다는 실행 상태에 더 많이 머무르게 됨.
 
 
프로세스 우선순위 (priority)
 

  • 모든 프로세스가 CPU를 차례대로 돌아가며 사용하는 것보다 각각의 상황에 맞게 CPU를 배분하는 것이 더 효율적임. 
  •  상황에 맞게, 프로세스의 중요도에 맞게 프로세스가 CPU를 이용할 수 있도록 하기 위해 운영체제는                          프로세스마다 우선순위를 부여함.
  • -운영체제는 각 프로세스의 PCB에 우선순위를 명시하고, PCB에 적힌 우선순위를 기준으로 먼저 처리할 프로세스를 결정한다.  → 자연스레 우선순위 높은 프로세스는 더 빨리 자주 실행됨.

 
 

스케줄링 큐

  • PCB에 우선순위가 적혀있지만, CPU를 사용할 다음 프로세스를 찾기 위해 운영체제가 일일이 모든 프로세스의 PCB를 뒤적거리는 것은 비효율적임.

운영체제는 프로세스들에 ‘줄을 서서 기다릴 것’을 요구한다. 이러한 줄을 스케줄링 큐로 구현하고 관리한다.     

 
 
 

+) 큐는 자료구조 관점에서는 선입선출 FIFO 자료 구조이지만,
스케줄링에서 이야기하는 큐는
반드시 선입선출 방식일 필요는 없다.  

 
 
 
 
→ 운영체제는 메모리로 적재되고 싶은 (새로 생성되는) 프로세스들을 큐에 삽입하여 줄을 세우고, CPU를 이용하고 싶은 프로세스들 또한 큐에 삽입하여 줄을 세우고, 특정 입출력장치를 이용하고 싶은 프로세스들 역시 큐에 삽입하여 줄을 세운다. 
→ 운영체제가 관리하는 대부분의 자원은 큐로 관리된다. 
 
준비 큐(CPU를 이용하고 싶은 프로세스들이 서는 줄을 의미) /
     대기 큐 (입출력장치를 이용하기 위해 대기 상태에 접어든 프로세스들이 서는 줄을 의미)
 

 


 

→ 입출력이 완료되어 완료 인터럽트가 발생하면 운영체제는 대기 큐에서 작업이 완료된 PCB를 찾고, 이 PCB를 준비 상태로 변경한 뒤 대기 큐에서 제거한다. 당연히 해당 PCB는 준비 큐로 이동한다.
 
 

좀 더 자세한 프로세스 상태 다이어그램

 
 
 
 

선점형과 비선점형 스케줄링

선점형 스케줄링
- 선점 : ‘남보다 앞서서 차지함’을 의미

 
프로세스가 CPU를 비롯한 자원을 사용하고 있더라도
운영체제가 프로세스로부터 자원을 강제로 빼앗아
다른 프로세스에 할당할 수 있는 스케줄링 방식을 의미함.
 
 
- 장점 : 어느 한 프로세스의 자원 독점을 막고 프로세스들에 골고루 자원을 배분할 수 있다. 
- 단점: 그만큼 문맥 교환 과정에서 오버헤드가 발생할 수 있다.
 
 
비선점형 스케줄링

 
하나의 프로세스가 자원을 사용하고 있다면
그 프로세스가 종료되거나 스스로 대기 상태에 접어들기 전까진
다른 프로세스가 끼어들 수 없는 스케줄링 방식을 의미한다.
 
 
- 장점 : 선점형 스케줄링에 비해 문맥 교환에서 발생하는 오버헤드가 적다
- 단점: 모든 프로세스가 골고루 자원을 이용하기 어렵다.
 
 


 
 

11 - 2 CPU 스케줄링 알고리즘

 

스케줄링 알고리즘의 종류

1. 선입 선처리 스케줄링
2. 최단 작업 우선 스케줄링
3. 라운드 로빈 스케줄링
4. 최소 잔여 시간 우선 스케줄링
5. 우선순위 스케줄링
6. 다단계 큐 스케줄링
7. 다단계 피드백 큐 스케줄링
 
 
1. 선입 선처리 스케줄링
 

  • FCFS (First Come First Served) 스케줄링
  • 단순히 준비 큐에 삽입된 순서대로 처리하는 비선점 스케줄링
  • 먼저 CPU를 요청한 프로세스로부터 CPU 할당
  • 단점: 프로세스들이 기다리는 시간이 매우 길어질 수 있다는 부작용 ( = 호위효과)

 
2. 최단 작업 우선 스케줄링
 

  • 호위 효과를 방지하려면?? 
  • CPU 사용이 긴 프로세스는 나중에 실행, CPU 사용 시간이 짧은 프로세스는 먼저 실행
  • CPU 사용시간이 가장 짧은 프로세스부터 처리하는 스케줄링 방식 
  • 선점형, 비선점형 스케줄링 알고리즘으로 구현될 수 있다. (둘 다 가능/ 기본 비선점)

 
 
3. 라운드 로빈 스케줄링
 

  • RR (Round Robin) 스케줄링
  • 선입 선처리 스케줄링 + 타임 슬라이스 (time slice)
  • 타임 슬라이스: 각 프로세스가 CPU를 사용할 수 있는 정해진 시간
  • 정해진 타임 슬라이스만큼의 시간 동안 돌아가며 CPU를 이용하는 선점형 스케줄링

        - 큐에 삽입된 프로세스들은 순서대로 CPU를 이용하되 정해진 시간만큼만 이용
        - 정해진 시간을 모두 사용하였음에도 아직 프로세스가 완료되지 않았다면 
           다시 큐의 맨 뒤에 삽입 ( 문맥교환)
 

 
 
 
타임 슬라이스의 크기가 중요
 
 
 
 
 
4. 최소 잔여 시간 우선 스케줄링
 

  • SRT (Shortest Remaining Time) 스케줄링
  • 최단 작업 우선 스케줄링 + 라운드 로빈 스케줄링
  • 최단 작업 우선 스케줄링 : 작업 시간이 짧은 프로세스부터 처리하는 스케줄링 알고리
  • 라운드 로빈 스케줄링: 정해진 타임 슬라이스만큼 돌아가며 사용하는 스케줄링 알고
  • 정해진 시간만큼 CPU를 이용하되, 다음으로 CPU를 사용할 프로세스로는 남은 작업 시간이 가장 적은 프로세스 선택

 
5. 우선순위 스케줄링
 

  • 프로세스들에 우선순위를 부여하고, 우선순위 높은 프로세스부터 실행
  • 우선순위가 같은 프로세스들은 선입 선처리로 스케줄링
  • 최단 작업 우선 스케줄링, 최소 잔여 시간 스케줄링 ⊂ 우선순위 스케줄링 
  • 근본적 문제점, 기아 starvation 현상 

         - 우선순위 높은 프로세스만 주구장창 실행
         - 우선순위 낮은 프로세스는 (준비 큐에 먼저 삽입되었음에도 불구하고) 실행 연기
 
 

 
이를 방지하기 위한 기법 : 에이징 aging

  • 오랫동안 대시한 프로세의 우선순위를 점차 높이는 방식
  • 대기 중인 프로세스의 우선순위를 마치 나이 먹듯 점차 증가시키는 방법

        - 우선순위가 낮아도 언젠가는 우선순위가 높아진다.
 
 
 

6. 다단계 큐 스케줄링

  • Multilevel queue 스케줄링 
  • 우선순위 스케줄링의 발전된 형태
  • 우선순위별로 준비 큐를 여러 개 사용하는 스케줄링 방식 

         - 우선순위가 가장 높은 큐에 있는 프로세스를 먼저 처리
         - 우선순위가 가장 높은 큐가 비어 있으면 그다음 우선순위 큐에 있는 프로세스 처리
 

 
 
 
기아 현상이 발생할 수도 있음.
 
 
 
 
 
 
 
7. 다단계 피드백 큐 스케줄링

  • Multilevel feedback queue 스케줄링 
  • 다단계 큐 스케줄링의 발전된 형태
  • 큐 간의 이동이 가능한 다단계 큐 스케줄링
  • 다단계 큐 스케줄링에서는 기본적으로 큐 간의 이동 불가

       - 우선순위 낮은 프로세스는 계속해서 실행 연기 우려
       - 기아 현상 발생 가능

 
새로 준비 상태가 된 프로세스가 있다면
우선 우선순위가 가장 높은 우선순위 큐에 삽입되고
일정 시간(타임 슬라이스) 동안 실행 된다.
 
 
 
 

 
위에서 실행이 끝나지 않는다면 
다음 우선순위 큐에 삽입되어 실행됨. 
또 안 끝나면 다음 우선순위큐 … 반복.
결국 CPU를 오래 사용해야 하는 프로세스는 점차 우선순위 다운.
 
 
 
→ 자연스럽게 CPU 집중 프로세스의 우선순위는 상대적으로 낮아지고
    입출력 집중 프로세스의 우선순위는 상대적으로 높아진다.

 
 
우선순위의 큐에서 너무 오래 기다리고 있는 프로세스가 있다면
점차 우선순위가 높은 큐로 이동시키는 에이징 기법을 적용하여
기아 현상을 예방할 수 있다.
 
 
 
 

  • 즉, 어떤 프로세스의 CPU 시간이 길면 우선순위가 낮아지고                                                                                        어떤 프로세스가 낮은 우선순위 큐에서 너무 오래 기다리면 우선순위를 높이는 방식.
  • CPU 스케줄링 방식으로 알려져 있음

 
 
 


 
기본 미션 

(1) 생성 상태 
(2) 준비 상태 
(3) 실행 상태
(4) 종료 상태
(5) 대기 상태