[운영체제] CPU 스케줄링

배고픈메꾸리·2022년 2월 16일
0

운영체제

목록 보기
2/4

1. 스케줄링 개요

스케줄링 이란 여러 프로세스의 상황을 고려하여 CPU와 시스템 자원을 어떻게 배정할지 결정하는 일을 말한다 스케줄링의 목적은 모든 프로세스가 자원을 독점하는 것을 막기 위해 중요도에 따라 우선순위를 배정하는 것이다.

1-1) 스케줄링 단계

CPU 스케줄링은 규모에 따라 고수준 스케줄링, 중간 수준 스케줄링 , 저수준 스케줄링 으로 구분된다.

고수준 스케줄링(장기 스케줄링)

가장 큰 틀에서 이루어 지는 CPU 스케줄링으로 시스템 내의 전체 작업 수를 조절하는 것을 말한다. 많은 작업을 동시에 하면 시스템에 과부하가 걸릴 수 있기 때문에 시스템 내의 전체 작업 수를 조절한다. 작업 요청이 오면 스케줄러가 시스템의 상황을 고려하여 작업을 승인할지, 거부할지 결정한다. 해당 단계에서 동시에 실행 가능한 프로세스 수가 결정된다.

중간 수준 스케줄링(중기 스케줄링)

고수준 스케줄링이 프로세스를 활성화할지 말지 결정하는 것이라면 중간 수준 스케줄링은 프로세스가 활성화 된 후를 담당한다. 프로세스가 활성화 된 후에도 여러 사정으로 시스템에 과부하가 걸릴 수 있으므로 중지와 활성화로 활성화된 프로세스 수를 조절한다. 이는 프로세스 상태 중 보류 상태에 해당하며 보류된 프로세스는 처리 능력에 여유가 생기면 다시 활성화된다.

저수준 스케줄링(단기 스케줄링)

저수준 스케줄링은 어떤 프로세스에 CPU를 할당할지, 어떤 프로세스를 대기 상태로 보낼지 결정하는 단계이다. 필요에따라 준비 상태에 있는 프로세스를 실행 상태로 옮기기도 하고, 대기 상태나 준비 상태로로 보내기도 한다. 프로세스의 상태에 관한 내용은 대부분 저수준 스케줄링이 담당한다.

2. 스케줄링시 고려 사항

2-1) 선점형 스케줄링 vs 비선점형 스케줄링

선점형 스케줄링과 비선점형 스케줄링은 다음과 같이 정의할 수 있다.

  • 선점형 스케줄링 : 어떤 프로세스가 CPU를 할당받아 실행중이더라도 운영체제가 CPU를 빼앗을 수 있는 스케줄링 방식
  • 비선점형 스케줄링 : 어떤 프로세스가 CPU를 점유하면 다른 프로세스가 이를 빼앗을 수 없는 스케줄링 방식

선점형 스케줄링의 대표적은 예는 인터럽트 처리가 있다. CPU가 인터럽트를 받으면 현재 실행중인 작업을 중단하고 인터럽트를 처리시키며, 인터럽트 처리가 완료되면 원래의 작업으로 돌아온다. 선점형 스케줄링은 컨텍스트 스위칭 등으로 인한 부가적인 작업으로 낭비가 생기는 것이 단점이다. 하지만 어떠한 작업이 CPU를 독점할 수 없기 때문에 빠른 응답 시간을 요구하는 대화형 시스템이나 시분할 시스템에 적합하다. 대부분의 저수준 스케줄러는 선점형 스케줄러 방식을 사용한다.

비선점형 스케줄링은 어떠한 작업이 CPU를 사용하면 그 프로세스가 종료되거나 자발적으로 대기 상태에 들어가기 전까지는 계속 실행된다. 비선점형 스케줄링은 스케줄러의 작업량이 적고 컨텍스트 스위칭으로 인한 낭비도 적다. 하지만 CPU 사용시간이 길기 때문에 여러 프로세스가 오래 기다리게 되어 시스템 전체적인 처리율이 떨어진다.

2-2) 프로세스 우선순위

대부분의 CPU 스케줄러는 우선순위를 사용하며 우선순위가 있다는 것은 프로세스마다 중요도가 다르다는 것이다. 프로세스는 크게 커널 프로세스일반 프로세스로 나뉜다. 일반적으로 커널 프로세스의 우선순위가 일반 프로세스보다 높고 우선순위가 높다는 것은 더 빨리 더 자주 실행된다는 의미이다. 같은 커널 프로세스와 일반 프로세스 끼리도 우선순위가 다르다. 예를 들어 일반 프로세서인 워드프로세서와 비디오 플레이어 2개가 있다고 할 때, 비디오 플레이어의 우선순위가 더 높다. 사람이 타이핑하는 속도가 CPU의 연산 속도에 비하면 한없이 느리기 때문에 실시간으로 데이터를 읽어오는 비디오 플레이어가 우선순위가 높은 것이다.

일반 프로세스의 우선순위는 nice 명령어를 사용하여 조절할 수 있다. 단, 관리자만 우선순위를 높일 수 있고 일반 사용자는 낮추는 것만 가능하다.

2-3) CPU 집중 프로세스와 입출력 집중 프로세스

프로세스는 생성된 후 준비, 실행, 대기 상태를 거쳐 완료된다. 프로세스는 CPU를 사용하여 작업을 하는 실행 상태 또는 입출력을 요청하여 완료되기까지 기다리는 대기 상태에 있다. 이때 CPU를 할당받아 실행하는 작업을 CPU 버스트 , 입출력을 진행하는 작업을 입출력 버스트 라고 한다.

프로세스는 CPU 버스트와 입출력 버스트와 같은 작업 형태에 따라 CPU 집중 프로세스(CPU bound process)입출력 집중 프로세스(I/O bound process)로 나뉜다.

CPU집중 프로세스와 입출력 집중 프로세스가 같이 있을 때는 입출력 집중 프로세스를 먼저 실행 상태로 옮기는 것이 효율적이다. 입출력 집중 프로세스가 실행상태로 가면 입출력 요구에 의해 대기 상태로 옮겨지기 때문에 다른 프로세스가 CPU를 사용할 수 있기 때문이다.

그림처럼 입출력 집중 프로세스의 우선순위를 CPU 집중 프로세스보다 높이면 시스템의 효율이 향상된다. 입출력 집중 프로세스는 잠깐 CPU를 사용한 후 대기상태로 이동하기 때문에 다른 프로세스가 CPU를 사용할 수 있는 시간을 늘릴 수 있다. 이처럼 입출력 집중 프로세스가 실행 상태에 먼저 들어가는 경우를 사이클 훔치기 라고 한다.

2-4) 전면 프로세스와 후면 프로세스

  • 전면 프로세스 : GUI를 사용하는 운영체제에서 화면의 맨 앞에 놓인 프로세스. 현재 입출력을 사용하는 프로세스이다.
  • 후면 프로세스 : 사용자와 상호작용이 필요 없는 프로세스이다.

전면 프로세스는 사용자와 즉각적으로 상호작용해야 하므로 후면 프로세스보다 우선순위가 높다.

3. 다중 큐

프로세스의 중요도는 PCB에 표시된다. CPU 스케줄러는 모든 PCB를 뒤져서 가장 높은 우선순위의 프로세스에 CPU를 할당한다. 하지만 매번 모든 PCB를 찾는다는 것은 비효율적인 일이다.

3-1) 준비 상태의 다중 큐

위 그림에서 프로세스는 준비 상태에 들어올 때마다 자신의 우선순위에 해당하는 큐의 마지막에 삽입된다. 준비 큐를 몇개로 나눌지, 여러 개의 큐 중에서 어떤 프로세스를 CPU에 할당할 지는 스케줄링 알고리즘에 따라 달라진다.

프로세스의 우선순위를 배정하는 방식에는 고정 우선순위변동 우선순위가 있다.

  • 고정 우선순위 방식 : 운영체제가 프로세스에 우선순위를 부여하면 프로세스가 종료될 떄까지 바뀌지 않는 방식
  • 변동 우선순위 방식 : 프로세스 생성 시 부여받은 우선순위가 프로세스 작업 중간에 변하는 방식

중요한 자원을 점유하고 있으며 우선순위가 낮은 P1 이라는 프로세스가 있다고 가정하자. 해당 자원을 사용하고자 하는 다른 우선순위가 높은 프로세스들은 P1이 선점하고 있는 자원을 사용하기 위해서 기다려야하는 상황이 발생할 수 있다. 이 때 변동 우선순위 방식을 사용하여 P1의 우선순위를 높이면 다른 프로세스의 작업도 원활하게 진행될 수 있다.

3-2) 대기 상태의 다중 큐

준비 상태와 비슷하게 대기 상태에서도 다중 큐를 사용한다. 시스템 내에는 다양한 입출력 장치가 있기 때문에 대기 상태의 프로세스를 구분하여 관리하는 것이 편리하다.

준비 상태의 다중 큐와 대기 상태의 다중 큐는 차이가 있다. 준비 큐는 한 번에 하나의 프로세스를 꺼내어 CPU를 할당하는 반면, 대기 큐는 여러 개의 프로세스 제어 블록을 동시에 꺼내어 준비 상태로 옮긴다. 이렇게 동시에 끝나는 인터럽트를 처리하기 위해 인터럽트 벡터라는 자료 구조를 사용한다. 인터럽트 벡터에는 동시에 완료된 입출력 정보와 처리 방법이 담겨 있는데, 이 정보에 따라 완료된 프로세스 제어 블록은 모두 준비 상태로 이동한다.

대기 상태의 다중 큐에 있는 프로세스중 일부는 나중에 들어온 프로세스가 먼저 준비 상태로 옮겨가기도 한다. 입출력 장치는 작업 속도를 높이기 위해 작업 순서를 바꾸는 경우가 있는데 이떄는 나중에 요청된 작업이 먼저 처리되기 때문이다.

4. 스케줄링 알고리즘

스케줄링 알고리즘은 크게 비선점형 알고리즘선점형 알고리즘으로 나뉜다. 비선점형 알고리즘은 프로세스가 CPU를 할당받으면 작업이 끝날때 까지 CPU를 놓지 않기 때문에 효율이 떨어져서 지금은 거의 사용되지 않는다.

구분종류
비선점형FCFS , SJF , HRN
선점형라운드 로빈, SRT, 다단계 큐, 다단계 피드백 큐
둘 다우선순위

4-1) 알고리즘 선택 기준

알고리즘의 효율성을 판단하기 위한 평가 기준은 다음과 같다.

  • CPU 사용률 : 전체 시스템의 동작 시간 중 CPU가 사용된 시간이다.
  • 처리량 : 단위 시간당 작업을 마친 프로세스의 수
  • 대기 시간 : 작업을 요청한 프로세스가 작업을 시작하기 전까지 대기하는 시간
  • 응답 시간 : 첫 번째 출력 또는 반응이 나올 때까지 걸리는 시간
  • 반환 시간 : 사용하던 자원을 모두 반환하는 데까지 걸린 시간. (대기 시간 + 실행 시간)

보통 처리량은 계산하기 어렵기 때문에 대기 시간, 응답 시간 , 반환 시간을 계산한다.

  • 대기 시간 : 프로세스가 생성된 후 실행되기 전까지 대기하는 시간
  • 응답 시간 : 첫 작업을 시작한 후 첫 번째 반응이 나오기까지의 시간
  • 실행 시간 : 프로세스 작업이 시작된 후 종료되기까지의 시간
  • 반환 시간 : 대기 시간을 포함하여 시행이 종료될 때까지의 시간

스케줄링 알고리즘의 성능을 비교할 때는 주로 평균 대기 시간을 본다. 평균 대기 시간은 모든 프로세스의 대기 시간을 합한 뒤 프로세스의 수로 나눈 값이다.

4-2) 다양한 스케줄링 알고리즘

[a] FCFS(First Come First Served)

FCFS 스케줄링은 준비 큐에 도착한 순서대로 CPU를 할당하는 비선점형 방식으로, 선입선출 스케줄링 이라고도 한다. 큐가 하나이기 때문에 모든 프로세스의 우선순위가 동일하다.

FCFS 와 FIFO
일반적으로 FIFO는 자료구조인 큐를 가리키는 말이기 때문에 스케줄링 알고리즘에서는 FCFS라고 부른다.

* FCFS 스케줄링의 성능

도착 순서도착 시간작업 시간
P1030
P2318
P369

3개 프로세스의 평균 대기 시간은 (0+27+42)/3=23ms(0 + 27 + 42)/3 = 23ms 이다.

* FCFS 스케줄링 평가

단순하고 공평하지만 앞의 작업이 오래 걸릴 시 뒤의 작업이 지연되는 단점이 있다. 예를 들면 앞의 프로세스가 입출력 작업을 하는 동안 CPU가 idle 상태인 시간이 많아져 작업 효율이 떨어진다.

[b] SJF(Shortest Job First)

SJF 스케줄링(최단 프로세스 우선 알고리즘)은 준비 큐에 있는 프로세스 중에서 실행 시간이 가장 짧은 작업부터 CPU에 할당하는 비선점형 알고리즘이다.

* SJF 스케줄링의 성능


3개 프로세스의 평균 대기 시간은 (0+24+36)/3=20ms(0 + 24 + 36)/3 = 20ms 이다.

* SJF 스케줄링 평가

작은 작업을 먼저 실행하기 때문에 시스템의 효율성이 좋아진다. 하지만 SJF 알고리즘은 다음과 같은 단점들이 있다

  • 운영체제가 프로세스의 종료 시간을 정확히 예측하기 힘들다
  • 공평하지 못하다

이 중 두 번째 문제는 에이징(aging)으로 완화할수 있다. 에이징이란 프로세스가 양보할 수 있는 최대 상한선을 정하여 특정 카운트 이상이면 반드시 실행되도록 하는 것이다.

[c] HRN(Highest Response Ratio Next)

HRN 스케줄링은 SJF 스케줄링에서 발생할 수 있는 기아 현상을 해결하기 위해 만들어진 버선점형 알고리즘이다. HRN 스케줄링은 서비스를 받기 위해 기다린 시간과 CPU 사용 시간을 고려하여 할당하는 방식이다.

HRN 스케줄링은 우선순위를 정할 때 대기 시간을 고려함으로써 기아 현상을 완화한다.

* HRN 스케줄링의 성능


P2는 27ms간 기다렸으므로 우선순위가 2.5이고, P3는 24ms간 기다렸으므로 우선순위가 3.7이다. HRN 스케줄링에서는 숫자가 클수록 우선순위가 높기 때문에 P3 > P2 순으로 실행된다. 평균 대기시간은 동일하게 (0+24+36)/3=20ms(0 + 24 + 36)/3 = 20ms 이다.

* HRN 스케줄링 평가

SJF에 비해 여러 프로세스가 골고루 CPU를 할당받을 확률을 높였으나 여전히 공평성이 위배되어 많이 사용하지 않는다.

[d] 라운드 로빈(Round Robin, RR)

라운드 로빈 방식은 한 프로세스가 할당받은 시간 동안 작업을 하다가 작업을 완료하지 못하면 준비 큐의 맨 뒤로 가서 자기 차례를 기다리는 방식이다. 선점형 알고리즘 중 가장 간단하고 대표적인 방식으로 프로세스들이 작업을 완료할 때까지 순환하면서 실행되며, 우선 순위를 적용하지 않은 알고리즘이다.
라운드 로빈 방식은 FCFS 방식과 유사한데, 차이점은 각 프로세스마다 CPU를 사용할 수 있는 시간 제한이 있다는 것이다.

* 라운드 로빈의 성능


타임 슬라이스가 10ms인 시스템의 평균 대기 시간은 (0+7+14+19+19+8)/3=22.3ms(0 + 7 + 14 + 19 + 19 + 8)/3 = 22.3ms 이다.

타임슬라이스의 크기와 컨텍스트 스위칭

앞의 FCFS 스케줄링과 비교해서 라운드 로빈 방식이 근소한 차이로 앞서는 것을 확인할 수 있다. 그러나 라운드 로빈 방식이 FCFS 방식보다 평균 대기 시간이 적다고 단정할 수는 없다. 라운드 로빈 스케줄링 같은 선점형 방식에는 컨텍스트 스위칭의 오버헤드가 따라붙기 때문이다. 따라서 라운드 로빈 방식이 효과적으로 작동하려면 추가 시간을 고려하여 타임 슬라이스를 적절하게 설정해야 한다.

  • 타임 슬라이스가 큰 경우
    타임 슬라이스가 너무 크면 FCFS 스케줄링과 다를바 없게 된다.
  • 타임 슬라이스가 작은 경우
    타임 슬라이스를 매우 짧게 설정하면 컨텍스트 스위칭이 너무 자주 일어나 시간과 자원이 낭비되는 문제가 발생한다.

유닉스 운영체제에서는 타임슬라이스가 대략 100ms 이다.

[e] SRT 우선 스케줄링(Shortest Remaing Time)

SRT 스케줄링은 SJF 스케줄링과 라운드 로빈 스케줄링을 섞은 방식이다. SRT 스케줄링은 기본적으로 라운드 로빈을 사용하지만 CPU를 할당받을 프로세스를 선택할 때 남아 있는 작업 시간이 가장 적은 프로세스를 선택한다.

* SRT 스케줄링의 성능


타임 슬라이스가 10ms인 시스템의 평균 대기 시간은 (0+4+16+27)/3=15.7ms(0 + 4 + 16 + 27)/3 = 15.7ms 이다.

* SRT 스케줄링 평가

SRT 스케줄링이 평균 대기 시간이 가장 짧으므로 가장 좋은 알고리즘 인 것처럼 보이지만 현재 실행중인 프로세스와 큐에 있는 프로세스의 남은 시간을 주기적으로 계산하고, 남은 시간이 더 적은 프로세스와 문맥 교환을 해야하므로 추가적인 작업이 필요하게 된다. 또한 SJF 스케줄링과 마찬가지로 운영체제가 프로세스의 종료 시간을 예측하기 힘든 점, 기아 현상이 발생할 수 있는 점 때문에 잘 사용하지 않는다.

[f] 우선순위 스케줄링

프로세스가 중요도에 따라 갖는 우선순위를 반영한 알고리즘이다. 우선순위 스케-줄링은 어떤 기준에서 우선순위를 정하느냐에 따라 다양하게 구현 가능하다. 예를 들어 FCFS에서 작업 시간이 짧은 프로세스의 우선순위를 높게 설정했다고 가정해보자

도착 순서도착 시간작업 시간우선순위
P10303
P23182
P3691

* 우선순위 스케줄링의 성능


타임 슬라이스가 10ms인 시스템의 평균 대기 시간은 (0+24+36)/3=20ms(0 + 24 + 36)/3 = 20ms 이다.

이 때 우선순위는 비선점형 방식과 선점형 방식에 모두 적용할 수 있다.

  • SJF : 작업 시간이 짧은 프로세스에 높은 우선순위 부여
  • HRN : 작업 시간이 짧거나 대기 시간이 긴 프로세스에 높은 우선순위 부여
  • SRT : 남은 시간이 짧은 프로세스에 높은 우선순위 부여

또한 우선순위 알고리즘은 고정 우선순위 알고리즘가변 우선순위 알고리즘으로 나뉜다.

* 우선순위 스케줄링 평가

우선순위 스케줄링 또한 준비 큐의 순서를 무시하고 CPU를 할당하므로 공평성을 위배하고 기아 현상을 일으킨다는 단점이 있다. 하지만 프로세스의 우선순위는 시스템의 효율성이 아니라 프로세스의 중요도의 기준으로 결정된다. 커널 프로세스가 일반 프로세스와 같은 우선순위라고 할 경우 더 심각한 문제를 야기할 수 있다

[g] 다단계 큐 스케줄링

다단계 큐 스케줄링은 우선순위에 따라 준비 큐를 여러개 사용하는 방식이다. 프로세스는 운영체제로부터 부여받은 우선순위에 따라 우선순위 큐에 삽입된다. 라운드 로빈 방식으로 운영되는 큐는 우선순위에 따라 다단계로 나뉘어져 있으며 프로세스가 큐에 삽입되는 것만으로도 우선순위가 결정되는 고정형 우선순위 방식이다.

이 때 상단의 큐에 있는 모든 프로세스의 작업이 끝나야 다음 우선순위 큐의 작업이 시작된다. 해당 방식은 우선순위가 높은 프로세스 때문에 우선순위가 낮은 프로세스의 작업이 연기되는데, 이러한 문제를 해결하기 위해 다단계 피드백 큐 스케줄링이 고안되었다.

[h] 다단계 피드백 큐 스케줄링

다단계 피드백 큐 스케줄링은 우선순위가 낮은 프로세스에 불리한 다단계 큐의 문제점을 보완한 방식이다. 기본적인 방식은 동일하지만 다단계 피드백 큐 스케줄링의 경우 CPU를 사용하고 난 프로세스의 우선순위가 낮아진다. CPU를 사용하고 난 프로세스는 우선순위가 하나 낮은 큐의 끝으로 들어간다. 물론 프로세스의 우선순위가 낮아진다고 할지라도 커널 프로세스가 일반 프로세스의 큐에 삽입되지는 않는다.

다단계 피드백 큐의 또 다른 특징은 우선순위에 따라 타임 슬라이스의 크기가 다르다는 것이다. 프로세스의 우선순위가 낮아질수록 타임 슬라이스가 커진다.

다단계 피드백 큐 스케줄링은 오늘날 운영체제가 CPU 스케줄링을 위해 일반적으로 사용하는 방식으로 가변 알고리즘의 전형적인 예이다. 유닉스 운영체제에서 타임 슬라이스를 고정하지 않고 10~200밀리초 사이에서 조정할 수 있도록 한 이유는 바로 다단계 피드백 큐 알고리즘을 사용하기 때문이다.

5. 인터럽트의 처리

초기의 프로그래밍 방식은 한 줄씩 차례로 실행하는 순차적 프로그래밍이었다. 운영체제도 비슷하다. 과거에는 입출력장치가 없었기 떄문에 입출력을 요청하면 운영체제가 주기적으로 입출력장치를 직접 확인해서 처리했는데 이러한 방식을 폴링 방식이라고 한다. 하지만 다양한 입출력장치가 개발되어 운영체제가 모든 입출력 장치들을 관리하는게 어려워졌고, 입출력을 요청하고 입출력이 완료되면 이벤트를 발생시키는 방식으로 발전하였는데 이를 인터럽트라고 한다.

코딩테스트를 하면서 무한루프에 빠져 ctrl + c 키를 눌러서 프로세스를 종료해 본 경험이 있을것이다. 이러한 행위도 사용자가 직접 만든 인터럽트이다.

5-1) 동기적 인터럽트와 비동기적 인터럽트

인터럽트는 프로세스가 실행 중인 명령어로 인해 발생하는 동기적 인터럽트와 명령어와 무관하게 발생하는 비동기적 인터럽트로 나눌 수 있다.

  • 동기적 인터럽트
    - 프로그램상의 문제 때문에 발생 ( 잘못된 메모리 영역에 접근 , 오버 플로우, 언더 플로우)
    - 의도적으로 프로세스를 중단하기 위해 발생시킨 인터럽트( ctrl + c )
    - 입출력장치 같은 주변장치의 조작에 의한 인터럽트
    - 산술 연산 중 발생하는 인터럽트 ( divide by zero )

  • 비동기적 인터럽트
    - 하드디스크 읽기 오류 , 메모리 불량 , 키보드 인터럽트 등 하드웨어적인 오류

5-2) 인터럽트 처리 과정

인터럽트에는 해당 인터럽트가 발생하면 어떤 일을 할지도 정의되어 있다. 즉 인터럽트 번호와 그 번호에 붙어 있는 함수의 쌍으로 이루어져 있다. 인터럽트의 고유 번호를 윈도우에서는 IRQ라고 하며, 시스템에 인터럽트가 발생하면 IRQ로 인터럽트를 식별한다.

인터럽트는 한 번에 하나씩 발생하는 것이 아니라 여러 개가 동시에 발생하기도 한다. 이렇게 동시에 발생하는 인터럽트를 하나로 묶어서 처리하는 개념이 인터럽트 벡터이다.

인터럽트 벡터는 인터럽트의 집합으로 인터럽트와 인터럽트 핸들러를 일대일로 연결한 자료 구조이다. 인터럽트가 발생하면 인터럽트 벡터의 번호가 0 에서 1로 바뀐다. 이 때 해당 인터럽트가 발생하면 어떤 일을 처리할 것인지가 함수에 정의되어 있는데 이를 인터럽트 핸들러 라고 한다.

  1. 인터럽트가 발생하면 현재 실행 중인 프로세스는 일시 정지 상태가 되며, 재시작하기 위해 현재 프로세스 관련 정보를 저장한다.
  2. 인터럽트 컨트롤러가 실행되어 인터럽트의 처리 순서를 결정한다. 이 때 여러 개의 인터럽트가 발생했다면 우선순위를 고려하여 중요한 인터럽트부터 처리한다.
  3. 처리할 인터럽트가 결정되면 인터럽트 벡터에 등록된 인터럽트 핸들러가 실행된다.
  4. 인터럽트 벡터에 연결된 핸들러가 인터럽트 처리를 마치면 일시 정지된 프로세스가 다시 실행되거나 종료된다. 발생한 인터럽트가 일시 정지된 프로세스일 경우 추후 재시작 되며, 오류 같은 경우 종료된다.

5-3) 인터럽트와 이중 모드

프로세스는 크게 커널 프로세스와 사용자 프로세스로 나뉜다. 운영체제와 관련된 커널 프로세스가 실행되는 상태를 커널 모드 , 사용자 프로세스가 실행되는 상태를 사용자 모드라고 한다. 사용자 프로세스가 디스크 입출력 , 프로세스 생성 같은 커널 기능을 사용하려면 시스템 호출을 이용하여 커널 프로세스에 작업을 요청해야 한다. 사용자 프로세스는 시스템 호출을 요청한 후 대기 상태로 전환되고 커널 프로세스는 요청받은 작업을 처리한다. 이 처럼 운영체제가 두 모드를 전환하며 일 처리 하는 것을 이중 모드라고 한다.

이중 모드를 사용하는 이유는 프로세스가 시스템 자원에 직접적으로 접근할 수 없도록 하기 위해서이다. 하지만 커널이 제공하는 시스템 호출은 매우 어렵고 제한적이다. 운영체제는 시스템 호출을 사용하기 위해 다양한 API들을 제공하며 사용자는 API가 준비해 둔 다양한 함수를 이용하여 시스템 자원에 접근이 가능하다.

profile
FE 개발자가 되자

0개의 댓글