2017년 4월 24일 월요일

12. 교착상태(Deadlock)4


2-3) 교착상태 탐지 및 복구(Deadlock Detection & Recovery)
   * 교착상태 탐지(Detection)
     : 교착상태가 발생했는지 파악하기위해 시스템을 주기적으로 검사하는 알고리즘
     : 사전에 교착상태의 발생에 대해 염려하지 않고 탐지만 하고 있다가 교착상태가 탐지되면 이를 복구하도록 한다.
     : 얼마나 자주 탐지를 위한 검사를 해야할 것인가가 문제. 자주할 수록 탐지는 수월할 수 있지만 자원 이용률이 크게 감소된다.

   * 교착상태 복구(Recovery)
     a. 프로세스 중지 방법
       - 교착상태 프로세스를 모두 중지.
        교착상태의 순환대기를 확실히 해결하지만 자원 사용과 시간 면에서 비용이 많이 듬. 즉, 오랫동안 연산했을 가능성이 있는 프로세스의 부분 결과를 폐기하여 나중에 다시 연산해야 함.
       - 한 프로세스씩 중지.
         한 프로세스가 중지될 때마다 교착상태 탐지 알고리즘을 호출하여 프로세스가 교착상태에 있는지 확인. 이는 교착상태 탐지 알고리즘 호출에 대한 부담이 큼.

     b. 자원 선점 방법
       - 프로세스의 자원을 선점하여 교착상태가 해결될 때까지 선점한 자원을 다른 프로세스에 할당하여 이용.


2-4) 교착상태 무시
   * 교착상태는 일반적으로 자주 발생되는 현상은 아니다.
      따라서 이를 해결하기 위한 노력의 비용이 너무 과하며 시스템 효율도 떨어진다.
   * 일반 PC의 경우 교착상태를 고려하기 보다는 무시하는 것이 효용가치가 높다.
   * 교착상태가 발생해서는 안될경우 무시해서는 안된다.
     예) 우주 탐사 시스템, 미사일 로켓 시스템 등등

3) 기아상태(Starvation)
  * 교착상태의 예방을 위해 자원을 할당하다 보면 기아상태가 발생할 수 있음.
  * 식사하는 철학자 문제
   항상 2명만이 식사를 할 수 있음. 동시에 5명이 식사를 하려 하면 교착상태에 빠지게 됨.
   따라서 어떤 철학자가 기아상태가 될 가능성을 항상 내포하고 있음.
  * 기아상태인 프로세스가 없도록 계속 추적 관리해야 함.
   

2017년 4월 23일 일요일

12. 교착상태(Deadlock)3


2-2) 교착상태 회피(Deadlock Avoidance)
    * 프로세스들은 여러 자원을 필요로 한다. 프로세스가 자원을 사용 하기 위해서는 O/S에게 요청을 해야하고 O/S는 이를 승인하고 할당해 주어어야 하며 회수도 해야 한다. 따라서 교착상태란 O/S가 자원의 할당을 잘 못 했기 때문에 발생한다고 전제한다.
    * 교착상태 회피(avoidance) 기법은
      :  교착상태 방지(Prevention)에 비해 소극적이며 시스템의 효율을 높이는데 목적을 두고 있다.
      : 현재 가용자원을 프로세스 요청시 바로 할당해 줄 것인지(안정 상태), 기다리게 할 것인지(불안전 상태)를 결정하는 문제와 같다.
       - 안전 상태(safe state): 시스템이 교착상태를 일으키지 않으면서 각 프로세스가 요구한 최대 요구량만큼 필요한 자원을 할당해 줄 수 있는 상태이다.
       - 불안전 상태(unsafe state): 안정 상태와 달리 프로세스의 자원 할당 및 해제의 순서가 불명확하여 교착상태의 발생가능성이 있다

Deadlock Avoidance

Deadlock Avoidance

   * Banker's Algorithm(은행가 알고리즘)
     : 교착상태 회피 알고리즘
     : 프로세스가 자원을 요구할 때 시스템은 자원을 할당한 후에도 안정 상태로 남아있게
되는 지를 사전에 검사하여 교착상태의 발생을 회피하는 기법
      (마치 은행이 대출을 시행한 후에 파산하지 않고 정상 유지되지는를 검사하여 안전하다고 판단될 때만 대출을 시행하는 것과 같은 개념)
     : 각 프로세스가 실행되기 전에 필요로 하는 모든 자원 형태들의 최대수를 알아야 함.
     : 프로세스가 자원을 요구할 때 시스템은 자원을 할당한 후에도 안정 상태로 남아있게 되는지 검사.
     : 안정 상태에 있으면 자원을 할당, 그렇지 않으면 다른 프로세스들이 자원을 해제할 때까지 대기.

   * Banker's Algorithm(은행가 알고리즘)의 문제점
      : 할당할 수 있는 자원의 일정량을 상시 필요로 한다.
     : 사용자가 최대 필요량을 미리 알려주도록 요구하지만 자원 할당 방법이 점점 동적으로 변함에 따라 사용자의 최대 필요량을 파악하기 어려워 짐.
     : 교착상태 회피 알고리즘을 실행하면 시스템 과부하가 증가함.
     : 항상 불안정상태를 방지해야 함으로 자원 이용률이 낮아짐.

12. 교착상태(Deadlock)2


* 교착상태에 대한 대응 방안
  : 교착상태 방지(예방) (Deadlock Prevention)
  : 교착상태 회피 (Deadlock Avoidance)
  : 교착상태 탐지 및 복구 (Deadlock Detection & Recovery)
  : 교착상태 무시 (Don't Care)
 
2-1) 교착상태 방지기법(Deadlock Prevention)
 * 교착상태의 원인이 되는 4 가지 필요조건들 중 한 가지 이상이 발생되지 않도록 한다..
    (상호배타 / 점유와 대기 / 비선점 / 환형 대기)

 (1) 상호배타(Mutual exclusion) 방지
     : 자원을 공유 가능하게 하면 된다.
     : 문제 점 - 그러나 원천적으로 사용중인 자원을 공유하는 것은 불가능 하다.
                CPU, Memory, Print 등은 동시 공유가 불가능하다.

 (2) 점유와 대기(Hold & Wait) 방지
     : 어느 자원을 점유한 상태에서 다른 자원을 기다리지 않도록 한다. 즉, 점유하고 있는 자원이 없을 때만 요청한다.
      : 요청한 자원을 다른 프로세스가 점유하고 있다면 자신이 점유한 자원을 놓아 주도록 한다.
     : 필요한 자원을 동시에 요청하도록 한다(어느 하나만 점유 불가능).
     : 문제점 - 자원 활용률 저하, 특정 프로세스의 기아(starvation) 발생 가능성

 (3) 비선점 (No preemption) 방지
     : 자원을 선점 가능하게
     : 문제점 - 가능한 경우도 있지만 대체로 불가능 하다.
                CPU는 선점할 수 있어도 그 이외의 자원은 불가능 하다. 프린터를 사용중인데 강제로 빼앗아서 다른 인쇄물을 출력 할수는 없다.

 (4) 순환대기 (Circular wait) 방지
     : 자원에 번호를 부여하고 프로세스는 번호의 오름차순으로 자원을 요청하도록 한다.
Circular wait
< 식사하는 철학자: 순환대기 방지 > 
                         P0: R0 요청 후 R1 요청
                              P1: R1 요청 후 R2 요청
                         P2: R2 요청 후 R3 요청
                         P3: R3 요청 후 R4 요청
                         P4: R0 요청 후 R4 요청 <= 때문에 순환이 깨어짐

     : 문제점 - 자원 활용률 저하

12. 교착상태(Deadlock)1


1) 교착상태의 발생조건

Deadlock

 * 교착상태(Deadlock)이란?
   : 프로세스들이 자원의 사용을 위해 대안 없이 무한정 기다리게 되는 상태

 * 교착상태의 발생 현상
   : 프로세스의 자원 사용 절차
     O/S에 요청(Request) => 점유, 사용(Use) => O/S에 반납(Release)
   : 어떤 프로세스가 특정 자원을 점유하고 있으면서 다른 프로세스가 점유하고 있는 다른 자원을 사용하기 위해 무한정 기다리게 됨으로써 교착상태가 발생하게 된다.

 * 교착상태의 발생 조건(필요조건,Necessary Conditions)
   : 항상 발생하는 것은 아니며 아래 4조건이 만족할 경우 발생할 수도 있게 된다.
  (1) 상호 배타(Mutual exclusion)
  (2) 점유와 대기(Hold and Wait)
  (3) 비선점 (No Preemptive)
  (4) 순환대기(Circular wait)

Deadlock
  예제) 식사하는 철학자 문제
  -- 상호배타 : 포크는 공유될 수 없다.
  -- 점유와 대기 : 모든 철학자들이 왼쪽의 포크를 쥐고 우측의 포크를 기다린다.
  -- 비선점 : 다른 철학자가 잡고 있는 포크를 강제로 빼앗을 수 없다.
  -- 순환대기 : 점유와 대기가 반시계 방향으로 순환되고 있다.
Deadlock

  * 자원할 당도(Resource Allocation Graph)
   : 어떤 자원이 어떤 프로세스에게 할당되어져 있는가?
   : 어떤 프로세스가 어떤 자원을 할당 받으려고 기다리고있는가?
   : 자원할당도를 통해 교착상태가 일어날지 아닐지를 알 수 있다.

Resource Allocation Graph


Resource Allocation Graph

Resource Allocation Graph
< 식사하는 철학자 문제: 자원할당 그래프 => 교착상태 >
모든 철학자들이 왼쪽 포크를 할당 받고(점유하고) 오른쪽 포크를 기다리고 있음(요청중).

2017년 4월 19일 수요일

11. 프로세스 동기화(Process Synchronization)3


3) 모니터(Monitor)
 * 추상화된 고급 동기화 도구(High-level synchronizaion contruct)
   : Java, C++, C#, Pascal
   : 프로그래머가 명시적으로 동기화를 위한 코딩을 작성할 필요는 없음.

class MyCode {
      private int value, ... ;
      synchronized void f() {
           ...
      }
      synchronized void g() {
           ...
      }
      void h() {
            ....
      }
}

 * 모니터 내에서 상호 배제(mutual exclusion)를 보장
   : 모니터 외부에서는 접근불가
   : 항상 하나의 프로세스만 활성화됨을 보장
  * 상호배제 + 조건 변수


< 모니터1 >

동기화 모니터
   * P가 현재 모니터 내부에서 활성화되어 있다.
    : P가 나가면서 조건 C1에 신호(signal)를 보내면, 첫번째 Y가 모니터로 진입
    : P가 나가면서 조건 C3에 신호(signal)를 보내면, 첫번째 Z가 모니터로 진입
    : P가 나가면서 조건 C2에 신호(signal)를 보내면, 혹은 아무런 신호를 보내지 않으면
     첫번째 X가 모니터로 진입


< 모니터 2: 확장 >

동기화 모니터
   * P가 현재 모니터 내부에서 활성화되어 있다.
    : P가 나가면서 조건 C1에 신호(signal)를 보내면, 첫번째 Y가 모니터로 진입
    : P가 나가면서 조건 C3에 신호(signal)를 보내면, 첫번째 Z가 모니터로 진입
    : P가 나가면서 조건 C2에 신호(signal)를 보내면, 혹은 아무런 신호를 보내지 않으면
     첫번째 A가 모니터로 진입



2017년 4월 18일 화요일

11. 프로세스 동기화(Process Synchronization)2


2) 세마포(Semaphore)
  * 열차의 진행/정지 신호(차단기)
  * 네달란드의 다익스트라(Dijkstra)가 제안함
    : 상호배제(Mutual Exclusion) 문제의 해결 방안
    : 음이 아닌 정수 값을 갖는 플래그 변수
  * 동기화 문제를 해결하기 위한 소프트웨어 기법
  * 1개의 정수 변수와 두 개의 함수로 구성
   : int value (초기값 = 1)
   : P ( Proberen = test ) => acquire()
   : V ( Verhogen = increment ) => release()

====================
void acquire() {
       value--;
       if (value < 0) {
                add this process to list;
                block;
       }
}

void release() {
       value++;
       if (value <= 0) {
                remove a process P from list;
                wakeup P;
       }
}
====================
 
Semaphore  
    * Process A => acquire() 호출: value = 0 이면 Critical Section 진입.
    * Process B => acquire() 호출: value < 0 이면 세마포어 큐에 갇힘.
    * Process A => release() 호출: 세마포어 큐에 있는 Process B를 풀어줌

2017년 4월 17일 월요일

11. 프로세스 동기화(Process Synchronization)1


1) 임계구역 문제(Critical Section Problem)

 * 독립 프로세스(independent process) & 협력 프로세스(cooperating process)
   : 다른 프로세스와 아무런 연관을 갖지 않는다면 독립 프로세스.
   : 다른 프로세스에 영향을 미치거나 영향을 받게 되면 협력 프로세스.
    (이메일 주고 받기, 데이타 베이스, 온라인 게임, 주식거래 등)

 * 프로세스 동기화(Process Synchronization)
   : 상호 협력하는 다수의 프로세스들이 공유 자원(혹은 데아타)을 사용할 경우, 경쟁 조건(Race Condition)으로 인해 그 공유 자원을 신뢰할 수 없게 된다. 따라서 이를 방지하기 위해 프로세스들이 공유 자원을 사용할 때 일련의 규칙을 지키도록 하는 것을 프로레스 동기화라고 한다.

 * 경쟁 조건(Race Condition)
   : 여러 프로세스가 공유 데이터를 동시에(병행적으로) 접근(읽기나 쓰기)할 때 공유 데이터에 대한 접근 순서에 따라 실행 결과가 달라지는 상황.

 * 임계 구역(Critical Section)
   : 둘 이상의 프로세스(혹은 쓰레드)가 공유하는 자원(데이타 구조, 장치)이지만 동시에 둘 이상의 프로세스가 접근할 수는 없고 특정 시간에 오직 하나의 프로세스만 접근 가능한 코드 영역.

 * 은행 계좌 문제
Critical Section
   : 부모(parent)는 은행 계좌(bank account)에 입금을한다.
   : 자녀(child)는 은행 계좌(bank account)에서 출금은 한다.
   : 은행 계좌(bank account)는 입금과 출금 동기화가 올바로 이루어 져야 은행 시스템이 신뢰로울 수 있다.
   : 입금 프로세스가 처리되고 있는 중간에 문맥 교환(Context Switching)이 발생하여 출금 프로세스가 처리되면 안된다.
   : 임계 구역 = 은행 계좌 => 변수 balance


 * 생산자-소비자 문제(Producer-Consumer Problem)
   = 유한 버퍼 문제(Bounded-Buffer Problem)
Bounded-Buffer Problem

   : 생산자(Producer)는 아이템을 생산하여 버퍼(Buffer)에 넣는다.
   : 소비자(Consumer)는 버퍼(Buffer)에 있는 아이템을 꺼내서 소비한다.
   : 버퍼가 가득차면 생산자는 아이템을 넣을 수 없고, 버퍼가 비어 있으면 생산자는 아이템을 소비할 수 없는 문제가 발생한다.
   : 임계 구역 = 버퍼(Buffer)


 * 독자-저자 문제
 독자 저자 문제

   : 저자(Writer)는 공유 데이타 베이스(Shared Database)에 글을 추가한다.
   : 독자(Reader)는 공유 데이타 베이스에서 글을 읽는다.
   : 공유데이타 베이스에 다수의 독자가 글을 읽고 있다면 또 다른 독자는 글을 읽기 위해 진입할 수 있지만 저자는 글을 추가(업데이트)하기 위해 진입할 수 없다.
   : 공유데이타 베이스에 어떤 저자가 글을 작성하여 추가(업데이트)하고 있다면 독자들은 글을 읽기 위해 진입할 수 없으며 또 다른 저자 역시 글을 추가(업데이트)하기 위해 진입할 수 없다.
   : 임계 구역 = 데이타 베이스(DB) => 공유 데이타(Shared Data)


 * 식사하는 철학자 문제
식사하는 철학자 문제

   : 철학자들은 식사를 하기 위해서는 양쪽 손에 포크를 모두 집어야 한다.
   : 어떤 철학자가 포크를 잡고 식사 중이라면 어떤 철학자들은 식사를 할 수 없다.
   : 임계 구역 = 포크(Forks)

* 임계 구역 문제의 해결방안
  : 상호배제(Mutual exclusion)
     - 공통 변수에 대해 상호 배타적이어야 한다.
     - 오직 한 프로세스(혹은 쓰레드)만 임계 구역에 진입한다.
     - 임계 구역이 비어있을 때만 진입할 수 있다.
  : 진행(Progress) - 다음에 진입할 프로세스는 유한 시간 내에 결정한다.
  : 유한대기(Bounded Waiting) - 어떤 프로세스라도 유한시간내에 진입할 수 있다.
                                     즉, 기다리면 언젠가 진입하게 된다.

2017년 4월 10일 월요일

10. CPU 스케쥴링 알고리즘6


6) Multilevel Feedback Queue Scheduling
  (다단계 피드백 큐 스케쥴링)
 * 다단계 큐 스케쥴링은 프로세스의 종류에 따라서 우선순위가 다른 큐에 배치됨.
 * 다단계 피드백 큐 스케쥴링은
   : 버스트 타임이 긴것은 낮은 큐에 짧은 것은 높은 큐에 배치
   : 프로세서 중심 프로세스는 낮은 큐에 대화식 프로세스는 높은 큐에 배치


Multilevel Feedback Queue Scheduling

   :높은 큐에 배치가 되었어도 필요에 의해(예를들면 2차 기준에 의해 버스트 타임이 너무 길경우) 우선순위가 낮은 큐로 이동할 수 있으며, 낮은 큐에서 기아 프로세스를 방지하기 위해 높은 큐로 이동할 수도 있다.   

Multilevel Feedback Queue Scheduling

10. CPU 스케쥴링 알고리즘5


5) Multilevel Queue Scheduling (다단계 큐 스케쥴링)
 * 프로세스를 중요도에 따라 다양한 형태로 분류
 * 각 분류된 프로세스 그룹(각각의 큐)에 대해 별도의 스케쥴링 방식 적용
   : 각각의 큐에 절대적 우선순위가 존재하거나 CPU 사용시간을 비율로 분배
   : 각각의 큐는 별도의 스케쥴링 정책 사용


Multilevel Queue Scheduling
        - 시스템 프로세스: OS 프로세스, Virtual Memory Mapping, File Reading etc
        - 대화식 프로세스: 게임, 멀티 미디어 제작 등
        - 대화식 편집 프로세스: 워드 프로세스 등 문서 편집 프로그램등
        - 일괄 프로세스
        - 학생 프로세스


Multilevel Queue Scheduling
        - 시스템 프로세스 => Shortest Job First(SJF)Scheduling
        - 대화식 프로세스 => Round-Robin(RR) Scheduling (Δ 3 ms)
        - 대화식 편집 프로세스 => Round-Robin(RR) Scheduling (Δ 10 ms)
        - 일괄 프로세스 => FCFS
        - 학생 프로세스 => FCFS

2017년 4월 9일 일요일

10. CPU 스케쥴링 알고리즘4


4) Round-Robin (RR)
  * 시 공유 시스템(Time Sharing System)에서 사용함.
   : Time Quantum(시간 양자), Time Slice(시간 조각) => 10 ms ~ 100 ms
   : 정해진 시간이 지나면 강제로 프로세스 전환이 발생한다.
  * 선점 스케쥴링(Preemptive Scheduling)
   : 일정 시간마다 강제로 프로세스 전환이 발생함으로 선점 스케쥴링 방식이다.

 * 예)
Round-Robin (RR)
   :
Round-Robin (RR)



   :
Round-Robin (RR)



   :
Round-Robin (RR)



 * 특징
   : Time Quantum을 어떻게 결정하는가에 따라서 성능차이가 발생함.
   : Time Quantum => 무한대(∞)에 근접하면 => FCFS와 동일해지게 됨.
   : Time Quantum => 0에 근접하면 => 모든 프로세스가 거의 동시에 실행됨
     (단, 매우 많은 문맥 교환에 따른 심한 오버헤드가 발생함)

 * Time quantum에 따른 평균 반환 시간(Average Turnarround Time)의 변화

Time quantum

10. CPU 스케쥴링 알고리즘3


3) Priority
  : 프로세스마다 우선순위를 부여하고 우선순위가 높은 프로세스를 먼저 서비스 한다.
  : 선점 방식과 비선점 방식 모두 가능하다.


Priority

Priority


 * 우선순위의 결정
   : 내부적 요인
     - 시간 제한이 짧은 프로세스 우선
     - 메모리를 사용하는 사이즈가 작은 프로세스 우선
     - CPU 보다 I/O 사용이 많은 프로세스 우선
   : 외부적 요인
     - 사용료를 많이낸 사용자의 프로세스 우선
     - 정책적으로 중요한 프로세스 우선(입학원서 접수가 리포트 제출 보다 우선)

 * 문제점
   : 기아(Starvation)가 발생할 수 있다.
     우선순위가 계속 밀려서 영구적으로 CPU 서비스를 받지 못해서 처리되지 못함.

 * 기아를 방지하기 위한 방법
   : 에이징(Aging) 기법
    우선순위가 낮은 프로세스에 대해 시간이 지날 수록 우선순위의 값을 높여준다.
    따라서 일정 시간이 지나면 우선순위가 높아져서 결국 CPU 서비스를 받게 된다.

10. CPU 스케쥴링 알고리즘2


2) Shortest-Job-First (SJF)
 * 버스트 타임이 가장 짧은 것부터 CPU 서비스를 제공한다.
 * 가장 효과적인 알고리즘 방식이다.
 * 선점 방식과 비선점 방식 모두 가능하다.

 * 예1) 동일 프로세스들에 대해 SJF 일때 7.0 ms,  FCFS 일때 10.0 ms

  :  SJF 알고리즘
Shortest-Job-First (SJF)


Shortest-Job-First (SJF)



  :  FCFS 알고리즘

Shortest-Job-First (SJF)



 * 예2) 동일 프로세스들에 대해 비선점 SJF 일때 7.75 ms,  선점 SJF 일때 6.5 ms

   :  비선점(Nonpreemptive) SJF
Shortest-Job-First (SJF)



  : 선점(Preemptive) SJF
        Time 0 일때 도착한 프로세스는 P1뿐임
        Time 1 일때 프로세스 P2가 도착하여 강제로 버스트 타임이 적은 P2로 교환됨
       ( P1 -> 1 ms 처리하고 7 ms 남음 / P2 -> 4 ms 남음 )

Shortest-Job-First (SJF)

 * 문제점
   : 실행시간을 CPU 서비스 이전에 미리 알 수 없다. 따라서 현실적으로 불가능하다.
   : 통계적으로 추정할 수는 있지만 통계처리를 위한 과부하가 발생한다.
   : 이론적으로는 가장 효율적인 알고리즘이지만 현실성이 없다.

2017년 4월 8일 토요일

10. CPU 스케쥴링 알고리즘1


1) First-come, First-Served (FCFS)
 * 먼저 요청한(도착한) 프로세스를 CPU가 먼저 처리(서비스)한다.
 * 비선점 스케쥴링(Nonpreemptive Scheduling) 방식이다.
   : CPU는 현재 처리하고있는 프로세스를 완료한 뒤에 다음 프로세스를 처리한다.
 * 요청 순서에 따라 서비스 되기 때문에 공정한 인상을 주고 비교적 구현 원리가 단순하다.

 * 예1)
First-come, First-Served (FCFS)

First-come, First-Served (FCFS)



 * 예2)
First-come, First-Served (FCFS)

First-come, First-Served (FCFS)


 * 문제점
   : 요청 순서에 따라서 평균대기시간(AWS)이 매우 큰 차이를 보이게 된다.
   : 호위효과(Convoy Effect) - 비선점 스케쥴링에서 버스트 타임이 긴 프로세스가 한번 CPU 서비스를 받기 시작하면 그 뒤의 모드 프로세스들이 모두 오랜 시간 대기해야 하는 현상.
   : 참고) 대형마트에서 카트에 물건을 가득 담은 소비자가 계산을 하고 있다면 그 뒤의 사람들은 모두 한참을 기다려야 한다. 만약, 물건이 적은 사람부터 처리한다면 더 많은 고객을 빨리 처리할 수 있을 것이다.


2017년 4월 4일 화요일

09. CPU 스케쥴링2

2) 스케쥴링의 평가 기준(Scheduling criteria)

 * CPU Utilization (CPU 이용률)
 * Throughput (처리율)
 * Turnaround time (반환시간)
 * Waiting time (대기시간)
 * Response time (응답시간)

-----
 * CPU Utilization (CPU 이용률)
   : CPU가 유휴상태가 되지 않고 항상 작업(프로세스)을 처리하는 정도.
   : 3초 동안 CPU가 프로세스들을 처리하며 100% 활용되었는가? 혹은 80% 활용되었는가?
   : 이용률이 높을 수록 바람직함.
   : I/O 중심 작업보다 CPU 중심 작업을 실행하도록 함.
   : 참고) 의사가 쉬지 않고 환자를 진료하면 의사의 이용률이 높음.

 * Throughput (처리율)
   : 단위시간당 몇개의 작업(프로세스)을 처리하였는가?
   : 3초 동안 3개의 작업(프로레스)을 처리했는가? 혹은 5개의 작업을 처리했는가?
   : 높을 수록 바람직함.
   : 처리율이 높은 스케쥴링이 되도록 해야 함.
   : 참고) 1시간 동안 의사가 몇 명의 환자를 진료했는가? 많을 수록 처리율 높음.

 * Turnaround time (반환시간)
   : 하나의 작업(프로세스)이 준비 큐(Ready Queue)에 도착해서 끝날 때까지 걸린 총 시간.
   : 반환시간이 빠를 수록 바람직함.
   : 참고) 병원에 도착해서 모든 진료와 치료를 마치고 병원을 나올 때까지 걸린 시간.

 * Waiting time (대기시간)
   : 하나의 작업(프로세스)이 준비 큐(Ready Queue)에서 CPU의 서비스를 받기 위해 기다린 총 시간.
   : 준비 큐(Ready Queue)에 주을 서서 기다린 총 시간.
   : 대기시간이 짧을 수록 바람직함.
   : 참고) 병원에 도착해서 의사의 진료 혹은 치료를 위해 지료실 앞에서 기다린 총 시간.
          접수후 대기, X-Ray 찍고와서 또 대기

 * Response time (응답시간)
   : 요청된 작업이 처음 반응하기 까지 걸린 시간.
   : 대화식 시스템(Interactive System)에서 더욱 중요시됨.
   : 인터넷에서 링크를 눌렀을 때 반응하는 시간.
   : 일괄처리 작업은 이후로 미루고 사용자의 요구를 우선 처리함.
   : 응답시간이 빠를 수록 바람직함.
   : 참고) 병원에 도착해서 바로 접수를 하기 까지의 시간.

09. CPU 스케쥴링1

1-0) CPU Scheduling (CPU 스케쥴링)이란?
 * 준비 큐(Ready Queue)에 있는 프로세스들 중에 어떤 프로세스를 선택하여 CPU 서비스를 받게 할 것인가를 결정하는 방식.
 * 프로세서의 효율성 높이기 위해, 시스템의 작업 처리 능력을 향상시키기 위해,
    작업의 응답 시간을 최소화하기 위해 필요.
 * 다중 프로그램(Multiprogram) 시스템에서 시스템 성능에 큰 영향을 미치게 됨.
 * 다음 그림에서 아래쪽 처리 방식이 위쪽 처리 방식보다 훨씬 효율적이고 빠른 처리가 되는 것을 볼 수 있다.

CPU Scheduling

1-1) Preemptive Scheduling (선점 스케쥴링)
 * 현재 어떤 프로세스가 CPU 서비스를 받고 있는 상태이지만 이후에 더 중요한 혹은 더 우선한 프로세스가 대기하게 되면 현재 서비스를 받고 있는 프로세스를 강제로 내보내고 더 우선한 프로세스를 CPU가 처리하는 방식
 * 강제로 문맥 교환(Context Switching) 발생
   : 시분할 시스템에서 할당된 시간 소진이되었을 때, 인터럽트나 시스템 호출 종료시에 더 높은 우선 순위 프로세스가 발생 되었을 때 현 실행 프로세스로부터 강제로 CPU를 회수.

1-2) Non-preemptive Scheduling (비선점 스케쥴링)
 * 선점 방식과는 달리 이미 서비스를 받기 시작한 프로세스는 이후에 어떤 중요한 프로세스가 대기하더라도 스위칭되지 않는 방식.
 * 강제로 문맥 교환(Context Switching) 불가. 스스로 반납할 때까지 CPU 사용.
   : I/O 처리가 필요한 경우 문맥 교환

참고) 일반적으로 병원은 비선점 스케쥴링 방식임.
       그러나 응급실의 경우는 선점 스케쥴링 방식임. 즉, 현재 치료받고 있는 환자의 뜻과 상관없이 의사는 보다 응급한 환자를 치료하기 시작함.

2017년 4월 2일 일요일

08. 프로세스와 쓰레드 이해6

5) 쓰레드(Thread)
  : 실행되는 프로세스의 내적 맥 혹은 흐름
  : 모든 프로그램에는 최소한 1개 이상의 맥이 있음.
   오직 1개인 경우 단일 쓰레드(Single-Thread)

Thread
             단일 쓰레드                                               다중 쓰레드

 * 다중 쓰레드(Multithread)
   : 하나의 프로그램에 2개 이상의 맥이 있는 개념
   : 예시)
     Web 브라우저에서 화면을 출력하는 쓰레드와 데이타 읽어 오는 쓰레드 존재
     동영상 플레이어 에서 화면 출력 쓰레드, 동영상 로드하는 쓰레드
     워드에서 키보드 입력 받는 쓰레드, 오타를 표시하는 스레드, 자동 저장 쓰레드

 * 다중 쓰레드(Multithread)의 구현
   : TSS(Time Sharing System)처럼 일정 시간이 지나면 각 쓰레드를 돌아가며 실행함.
   : 현대 대부분의 프로그램은 다중 쓰레드로 구현됨.
   : 또한 현대의 프로세스는 맥락 교환의 단위가 프로세스가 아니고 쓰레드임
   : Code, Data, Files은 공유하고 Registers, Stack, PC 등은 공유하지 않음.


 * 쓰레드(Multithread)의 특징
  : 프로세스에서 실행 제어만 분리한 실행단위이다.
  : 사용자에 대한 응답성을 증가시킨다.
  : 프로세스의 자원과 메모리를 공유한다. 따라서 오버헤드가 줄어든다.
  : 다중 프로세서 구조에서 각 쓰레드는 다른 프로세서에서 병렬로 실행될 수 있다.