4-1주차. CPU 스케줄링

나우히즈·2024년 7월 14일

OS

목록 보기
6/27

wait() 시스템 콜

sleep until child is done.

  • 프로세스 A가 wait() 시스템콜을 호출하면,
    : 커널은 child가 종료될 때까지 프로세스 A를 sleep 시킨다 (block 상태-> CPU 못 얻음)
    : child process가 종료되면 커널은 프로세스 A를 깨운다. (ready 상태 -> ready queue로 돌아옴.)

exit() 시스템콜

frees all the resources, notify parent.

  • 자발적 종료
    마지막 statement 수행 후 exit() 시스템콜을 통해 종료
    exit()을 프로그램에 명시하지 않더라도, 컴파일러가 메인함수가 리턴되는 위치에 exit() 시스템콜을 진행.

  • 비자발적 종료

  1. 부모 프로세스가 자식 프로세스를 강제종료하는 경우(kill() 시스템 콜)
    자식 프로세스가 한계치를 넘어서는 자원 요청
    자식에게 할당된 테스크가 더이상 필요하지 않음

  2. 키보드로 kill(), signal(ctrl+c) 등을 친 경우

  3. 부모가 종료하는 경우

부모 프로세스가 종료하기 전에 자식들이 먼저 종료됨.


프로세스 간 협력

  • 독립적 프로세스 (Independent process)
    프로세스는 각자의 주소 공간을 가지고 수행되므로 원칙적으로 하나의 프로세스는 다른 프로세스의 수행에 영향을 미치지 못함.

  • 협력 프로세스(Cooperation process)
    프로세스 협력 매커니즘을 통해 하나의 프로세스가 다른 프로세스의 수행에 영향을 미칠 수 있음.

프로세스 간 협력 매커니즘 (IPC: Interprocess Communication)

  1. 메시지를 전달하는 방법: message passing, 커널을 통해 메시지 전달
    Message system: 프로세스 사이에 공유변수를 일체 사용하지 않고 통신하는 시스템.

process A -> process B 메시지 전달.
메세지를 운영체제가 매개하여 두 프로세스 간 데이터를 전달.

a) Direct communication
: 통신하려는 프로세스 이름을 명시적으로 표시
b) Indirect communication
: mailbox(또는 port)를 통해 메시지를 간접 전달

어찌되든 메시지 패싱 방식은 다 커널에 의존하여 데이터를 통신한다.

  1. 주소 공간을 공유하는 방법: shared memory, 서로 다른 프로세스 간에도 일부 주소 공간을 공유하게 하는 shared memory 매커니즘이 있음
    원칙적으로는 프로세스가 본인만의 코드-데이터-스택 공간만을 가지는데, 공유 메모리의 경우 운영체제에 요청하여 메모리를 공유하여 사용하게 됨.

프로세스가 공유 메모리를 쓸 때, 신뢰할 수 있는 프로세스인지 주의해야한다.
두 프로세스가 공유 자원을 사용할 때 동기화를 위해 Semaphoremutex 등의 동기화 매커니즘이 필요하다.

thread: 스레드는 사실상 하나의 프로세스이므로 프로세스 간 협력으로 보기는 어렵지만 동일한 process를 구성하는 thread들 간에는 주소 공간을 같이 사용하므로 협력이 가능하고 프로세스 간 협력보다 스레드 협력이 용이하다.


CPU and I/O Bursts in Program Execution

CPU를 가지고 명령어를 실행하면 -> CPU burst
I/O 명령을 수행하게 된다면 -> I/O burst

일반적으로 프로그램은 일생동안 CPU 연산 처리 <-> I/O 처리 과정을 번갈아가며 수행한다.
계산 프로그램같은 경우, CPU를 오래 쓰고 I/O를 마지막에 처리하는 경우도 있음.

  • I/O bound job
    CPU를 잡고 계산하는 시간보다 I/O 에 많은 시간이 필요한 잡
    many short CPU bursts

  • CPU bound job
    계산 위주의 job
    few very long CPU bursts

만약 두 job 이 모두 CPU를 쓰고자한다면, 어떻게 배분하는 것이 좋을까.
얼마만큼의 시간동안 줄것인가.

이처럼 여러 종류의 프로세스가 섞여 있기 때문에 CPU 스케줄링이 필요하다.
CPU와 I/O 장치 등 시스템 자원을 골고루 효율적으로 사용

CPU scheduler & Dispatcher

  • CPU Scheduler (OS의 코드 일부분)
    Ready 상태의 프로세스 중에서 이번에 CPU 를 줄 프로세스를 고른다. (결정)
  • dispatcher (OS 코드의 일부분)
    CPU의 제어권을 CPU scheduler에 의해 선택된 프로세스에게 넘긴다. (결정된 프로세스에 CPU를 넘김)
    이 과정을 context switch 라고 한다.

CPU 스케줄링이 필요한 경우.

  1. running -> blocked (예: I/O 요청하는 시스템 콜)
  2. running -> ready (예: 할당시간만료로 timer interrupt)
  3. blocked -> ready (예: I/O 완료후 인터럽트)
  4. terminate

1, 4에서의 스케줄링은 nonpreemptive (= 강제로 빼앗지 않고 자진 반납)
다른 스케줄링은 모두 preemptive(= 강제로 빼앗음)

Scheduling criteria(performance index, 성능척도)

  • CPU utilitzation (이용률)
    Keep the CPU as busy as possible
    전체 시간에서 CPU가 일한 시간의 비율
    -> CPU를 놀리지 않고 계속 일시키는 것이 좋음. (이용률 높은 것)

  • Throughput (처리량)
    number of processes that complete their execution per time unit

  • Turnaround time (소요시간, 반환시간)
    amount of time to execute a particular process
    CPU 를 기다린 시간 + 사용하는 시간

  • Waiting time (대기 시간)
    amount of time a process has been waiting in the ready queue.
    대기큐에서 대기하며 보낸 시간

  • response time (응답 시간)
    amount of time it takes from when a request was submitted until the first response is produced, not output (for time-sharing environment)
    CPU를 쓰러 들어와서 처음으로 사용하게 되는데 걸리는 시간.

0개의 댓글