운영체제(OS)

[운영체제] 2. 인터럽트란? 컴퓨터 시스템 동작원리로 알아보자 Easy with TMI

김민석(갈레, 페퍼) 2022. 2. 15. 22:08
반응형

<운영체제 TIL 목록>
1. 운영체제란? 목적? 분류? 
2. 인터럽트란? 컴퓨터 시스템 동작원리로 알아보자.
3. 하드웨어, 메모리 및 메모리 보안 방법?
4. 프로그램의 구조, 실행 시 작동 과정?
5. 프로세스란? 6가지 상태? PCB?
6. 스레드, 멀티스레드란? 프로세스와의 차이?

7. CPU 스케줄링?

8. ''업데이트 예정''

 

1. 인터럽트를 활용한 운영체제의 하드웨어 및 소프트웨어 관리

- 운영체제는 cpu의 인터럽트(Interrupt) 기능을 활용하여 프로그램들의 cpu 사용 순서 및 I/O 장치 사용을 관리한다. 인터럽트 기능은 cpu가 메모리를 읽으며 Instruction을 실행하는 행위를 방해할 수 있는 유일한 기능이다. cpu는 Instruction을 한줄 실행, 자신의 인터럽트 공간을 한번 살펴보기를 반복한다. 인터럽트 기능을 활용하여 cpu를 제어할 수 있는 경우는 크게 두가지가 있다. 이에 대해 알아보자.

 

&amp;amp;amp;lt;그림3 컴퓨터 시스템 동작의 원리&amp;amp;amp;gt;

 

1. cpu 사용 프로그램 변경

  • 프로그램이 cpu를 사용하는 시간이 끝났을 경우(할당 받은 사용 시간이 끝났을 경우), Timer controller가 cpu의 인터럽트에 '사용 시간 끝'의 문맥을 가진 인터럽트를 설정한다.
  • cpu는 현재 읽고 있던 Instruction을 읽고, 수행 후 인터럽트 라인을 살펴본다. Timer Interupt가 설정돼 있다.
  • cpu의 모드비트(mode bit)가 1(사용자 모드=프로그램 내 명령어만 실행 가능)에서 0(커널 모드=커널 내 명령어 실행 가능)로 바뀌어 cpu의 제어권이 커널로 넘어간다.
  • 커널은 프로그램의 상태를 유지하기 위해 PCB(program control block) 자료 구조에 프로그램 카운터, 레지스터 상태 등 프로그램 실행 정보를 저장한다.
  • 커널이 인터럽트 라인의 내용을 읽고 해당 인터럽트 관련 내용을 수행 하기 위해 무얼 해야할지 판단하기 위해 인터럽트 벡터(인터럽트 종류마다 번호를 정해서, 번호에 따라 처리해야 할 코드가 위치한 부분을 가리키는 자료구조)로 이동한다.
  • 인터럽트 벡터에서 타이머 인터럽트에 해당되는 코드를 찾는다. 해당 코드를 인터럽트 처리 루틴(Interrupt service routine) 혹은 인터럽트 핸들러라고 부른다. 인터럽트 핸들러에서 타이머 인터럽트에 대한 내용을 커널이 cpu를 가지고 이행한다.
  • 다음 차례를 위해 대기하고 있는 프로그램에게 cpu 제어권을 넘겨주고 cpu의 모드비트를 1(사용자모드)로 변경한다.

&amp;amp;amp;lt;그림4. 인터럽트 벡터 및 처리 루틴&amp;amp;amp;gt;

 

 

2. 프로그램이 I/O 장치 사용을 원할 경우

  • 프로그램 사용중 I/O 장치를 사용하기 원하는 Instruction이 발생했다고 가정하자.
  • I/O 장치에 접근 하는 것은 메모리를 바꿀 수 있는 위험한 일이기에 기본적으로 프로그램이 직접 실행할 수 없다. 따라서 운영체제(커널)이 이를 대리해야한다. 이를 위해 프로그램은 '시스템 콜' 인터럽트를 사용한다.
  • 프로그램이 I/O 정보가 필요할 때 시스템 콜을 하여 cpu에 직접 인터럽트를 설정한다.
  • 모드 비트가 바뀌고 커널로 cpu 제어권이 넘어간다. cpu는 인터럽트 벡터->인터럽트 처리루틴으로 가서 I/O 관련 코드를 실행한다.
  • I/O 장치에서 값을 읽어들이는 작업은 cpu가 Instruction을 실행하는 작업보다 오래 걸리기 때문에 대부분의 경우 cpu는 I/O를 신청한 프로그램을 I/O 장치 대기열에 줄 세워 놓고 돌아와 다른 프로그램을 실행한다.(I/O를 동기, 비동기로 실행에 따라 달라진다.
  • I/O 작업은 I/O 컨트롤러가 장치로 부터 값을 읽어들인 후 local 버퍼 내에 값을 저장한다. 이후 I/O 장치 컨트롤러가 cpu에게 인터럽트를 설정한다(혹은 DMA=Device memory controller에게 알린다). 커널로 제어권 변경 후 인터럽트 처리 루틴 후 커널이 cpu를 가지고 I/O 버퍼에 접근하여 값을 가져와 I/O를 신청한 프로그램 내 코드를 변경한 후 방금 하던 프로그램 실행 상태로 돌아온다(극히 드문 경우 우선 순위에 의해 I/O 신청한 프로그램으로 돌아온다). 
반응형