인터럽트의 원리

|


‘운영체제와 정보기술의 원리’ 4장을 학습한 내용을 정리한 포스팅입니다


인터럽트의 원리

프로그램의 3요소

  • 코드
    • 우리가 작성한 프로그램 함수들의 코드가 기계어 명령으로 변환되어 저장되는 부분
  • 데이터
    • 전역 변수 등 프로그램이 사용하는 데이터를 저장하는 부분
  • 스택
    • 함수가 호출될 때 호출된 함수의 수행을 마치고 복귀할 주소 및 데이터를 임시로 저장하는 데 사용되는 공간


프로세스

​ 현재 실행 중인 프로그램


프로세스의 상태

  • 실행
    • CPU를 할당받고 기계어 명령을 수행하고 있는 프로세스의 상태
  • 준비
    • CPU만 할당받으면 당장 명령을 수행할 수 있지만 현재 CPU를 할당받지 못한 프로세스의 상태
    • 준비 상태에 있는 프로세스들을 줄 세우기 위해 준비 큐가 존재한다
    • 특정 자원을 기다리는 프로세스들을 위해 자원별로 큐가 존재한다
    • 예시 - 입출력 서비스를 요청한 프로세스는 입출력 큐에 줄서게 되고, 입출력 작업이 완료되면 입출력 큐에서 빠져나와 CPU를 기다리는 준비 큐에 줄 서게된다
  • 봉쇄
    • CPU를 할당받더라도 명령을 수행할 수 없는 프로세스의 상태
    • 예를 들어 프로세스가 요청한 입출력 작업이 진행중인 경우

인터럽트의 동작원리

​ 함수의 호출과 비슷하다. A라는 프로그램이 CPU를 할당받고 명령을 수행하고 있는데 인터럽트가 발생하면 A는 현재 수행중인 명령의 위치를 저장해 놓는다. 그 후 운영체제 내부코드인 인터럽트 처리 루틴으로 넘어가서 인터럽트 처리를 하고 다시 돌아와 A의 이전 작업 지점부터 수행을 계속 이어나가게 된다.


​ 인터럽트 때문에 CPU를 선점당한 위치를 저장하기 위한 공간은 커널부분에 존재한다 (해당 프로세스의 PCB에 저장)


커널 구조

​ 커널도 하나의 프로그램으로 code, data, stack 을 가진다

  • 코드
    • CPU, 메모리 등의 자원을 관리하기 위한 부분과 시스템콜, 인터럽트 서비스 루틴, 사용자 인터페이스를 제공하기 위한 부분이 주를 이룬다
  • 데이터
    • 각종 자원을 관리하기 위한 자료구조가 저장된다
    • 각 프로세스의 상태, CPU 사용정보, 메모리 사용정보 등을 유지하기 위한 PCB가 존재한다
  • 스택
    • 프로세스별 스택이 존재한다. 시스템 콜을 호출하고 시스템 콜 내부에서 다른 함수를 호출하는 경우 그 복 귀 주소는 커널 내부 주소가 되므로 사용자 프로그램의 스택과는 별도로 저장 공간이 필요하기 때문이다.

os_3_2




컴퓨터 시스템의 작동 개요

​ CPU는 빠른 속도로 처리하는 계산 능력은 가지고 있지만, 어떠한 작업을 수행해야 하는지에 대해 스스로 결정하는 능력은 없다

​ 현재 수행해야 할 메모리 주소의 명령을 있는 그대로 처리할 뿐이다. CPU가 수행해야 할 메모리 주소를 담고있는 레지스터를 프로그램 카운터라고 한다.


주변 장치가 CPU에게 서비스를 요청할 때 인터럽트를 발생시킨다

​ CPU는 프로그램 카운터가 가리키는 메모리 위치의 명령만 수행하고 있기 때문에 주변 장치의 상태를 지속적으로 파악할 수 없 다. 따라서, 주변장치는 CPU의 도움이 필요한 경우 인터럽트를 사용해 CPU에게 서비스를 요청하게 된다. 인터럽트를 발생시 키기 위해 주변 장치는 인터럽트 라인을 세팅하게 되고 CPU는 매번 명령을 수행한 직후 인터럽트 라인을 체크해 서비스 요청이 들어왔는지를 체크하게 된다.




프로그램의 실행

  • 디스크에 존재하던 실행 파일이 메모리에 적재됨을 의미
  • 프로그램이 CPU를 할당받고 명령을 수행하고 있는 상태를 의미
  • 프로그램 실행 파일이 메모리에 적재될 때 실행 파일 전체가 메모리에 한꺼번에 올라가기보다는 일부분만 메모리에 올라가고 나머지는 디스크의 특정 영역에 내려가 있는 것이 일반적이다
  • 각각의 프로그램은 주소공간을 별도로 가지며, 이러한 공간을 가상메모리 또는 논리적 메모리라고 부른다. 이는 물리적 메모리의 주소와 독립적으로 각 프로그램마다 독자적인 주소 공간을 가지기 때문에 지칭하는 용어이다.




인터럽트 벡터

​ 여러가지 인터럽트에 대해 해당 인터럽트 발생시 처리해야 할 루틴의 주소를 보관하고 있는 테이블을 의미한다.

​ 일종의 함수를 가리키는 포인터라고도 할 수 있다


인터럽트 핸들러

​ 실제 인터럽트를 처리하기 위한 루틴으로 인터럽스 서비스 루틴이라고도 부른다


ref. 운영체제와 정보기술의 원리

ref. https://kouzie.github.io/