[OS] Scheduling Que, Interrupt, Context Switching

parkheeddong·2023년 3월 15일
0

Operating System

목록 보기
11/63

1. Scheduling Que

=> Ready, Asleep 상태의 자료구조

1) Ready Queue

CPU가 하나라면 Running 상태의 프로세스는 하나이지만, Ready 상태의 프로세스는 여러개 있을 수 있다.
이러한 프로세스들을 잘 줄을 세우기 위해서 'Ready Queue'(=Ready List)를 사용한다. (큐 사용)
CPU가 비게 되면, 스케줄러가 Ready Queue에서 프로세스를 하나 고르게 된다. First In First Out이 아니라, Priority Queue이기 때문에 높은 우선순위의 프로세스를 뽑아간다.

2) I/O Queue

Asleep 상태에서도 queue가 있는데, 이를 Block List(Block Queue, I/O Queue) 라고 한다.
I/O Device의 종류가 매우 많기 때문에 키보드, 네트워크 등등 다양한 원인으로 alseep 한다.
그 원인에 따라서- R1 원인에 대한 프로세스의 큐, R2에 대한 큐 등등이 있게 된다.
I/O Device에서 시그널이 들어오면, R2에 대한 시그널일 경우 R2에 해당하는 큐의 프로세스들만 깨우게 된다.

2. Scheduler

1) Long-term Scheduling : 시스템 전체 대상

  • 어플리케이션을 대상으로 어떤 것을 프로세스로 생성할지

2) Medium-term Scheduling : 메모리

  • suspended 상태의 프로세스를 대상으로 메모리 할당을 누구 먼저 할지

3) Short-term Scheduling : CPU

  • ready 상태의 프로세스를 대상으로 누구에게 cpu할당을 먼저 할지

3. Interrupt

1) Unexpected External Event

  • CPU 외부의 디바이스(ex. I/O Device)에서 오는 예측하지 못한 이벤트
  • 인터럽트의 종류에는 I/O 인터럽트, Clock 인터럽트(Time Quantum이 지나면, 그 프로세스를 preemption 시키고 다른 프로세스를 running 하도록 하게 하라는 인터럽트), Console Interrupt, Machine Check Interrupt 등이 있다.

2) Interrupt 핸들링 프로세스

(1) CPU로 인터럽트가 오면, 일단 프로세스의 실행을 중지시킨다. 프로세스의 cpu 레지스터 값을 전부 빼 내어서 PCB 영역에 저장한다.
(2) 그 후 커널의 인터럽트 핸들러가 cpu에 들어와서 인터럽트 핸들링을 한다.
(3) 인터럽트 핸들러가 제일 먼저 인터럽트가 어디에서 왔는지 Interrupt 소스를 확인한다. (하드디스크, time, 마우스 등) 그리고 인터럽트의 원인을 파악한다.
(4) 인터럽트 서비스 결정을 내린다. 현재 프로세스가 더 중요한지, 인터럽트 이벤트가 더 중요한지 판단하고 인터럽트를 서비스 할지 말지 결정을 내린다.
(5) 인터럽트 서비스를 결정하면 Interrupt Service Routine을 호출한다. 그렇게 인터럽트 서비스를 하게 된다.
(6) 인터럽트 서비스가 끝나면 바로 이전에 중지한 프로세스를 다시 실행하는 것이 아니라, 스케줄링을 진행한다. 인터럽트는 time quantum에 대한 것일수도 있기 때문에, 스케줄링을 해서 바로 실행할 프로세스를 선택하고, 해당 pcb로부터 cpu 레지스터값을 가져오는 context restoring을 한다. 이 때 이렇게 프로세스가 바뀌는 것을 'context switching(process switching)'이라고 한다.

4. Context Switching

1) Context란

Context is a Set of Information related to a process.

(1) User-level Context

  • 메모리 안에 들어가는 프로세스의 프로그램 코드, data, stack, heap 등

(2) System-level Context

  • 커널이 가지고 있는 PCB 등의 정보

(3) Register Context

  • cpu 레지스터 값들
  • User-level, System-level Context는 메모리에 있기 때문에 상관없지만 Register Context는 cpu 내부에 있는 값이기 대문에, Register Context는 Saving을 해야 하는 대상이다.

2) Context Switching

1) context saving

프로세스가 cpu를 내놓고 나와야 할 때 Context Saving을 해야 한다.

2) context restoring

다시 cpu로 레지스터값을 복원해 가져가는 일이다.

3) context switching

한 프로세스의 context를 저장하고 다른 프로세스의 context를 복원하는 일.

3) Context Switch Time

CPU에서 Context Saving부터 인터럽트 서비스 루틴, 스케줄링, Context Restoring 등까지 커널이 개입하는 부분의 switch 시간은 최소화되어야 한다.

0개의 댓글