본문 바로가기

운영체제

[OS]인터럽트(Interrupt)

2. Interrupt

  • OS 커널에는 인터럽트가 들어왔을 때 해야할 일을 미리 다 프로그래밍 해서 보관하고 있다 → 이중 하나가 인터럽트 처리 루틴

  • 인터럽트 당한 시점의 레지스터와 program counter를 save한 후, CPU의 제어를 처리 루틴에 넘긴다

  • Software Interrupt = Trap ⇒ Exception, System call

  • I/O를 위한 인터럽트: 1) 요청: Software interrupt

    2) 종료: Hardware interrupt

  • 인터럽트 종류별로 할 일에 대해 OS에 정의가 되어 있다

  • 사용이 끝남에 때해서는 device controller가 interrupt line에 알린다

  • 점유 시간이 종료된 경우 timer가 interrupt line에 알린다

  • interrupt가 있을 경우에만 CPU가 OS에 넘어가고 이외에는 사용자 프로그램이 OS 사용을 한다

  • 인터럽트 벡터: 인터럽트의 처리 루틴 주소

  • 인터럽트 처리 루틴: 인터럽트를 처리하는 커널 함수

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

    OS 코드 부분에는 각종 인터럽트별 처리해야 할 내용이 이미 프로그램되어 있으며, 이 부분을 인터럽트 서비스 루틴 또는 인터럽트 핸들러라고 부른다

3. 시스템 콜

  • 사용자 프로그램이 운영체제의 서비스를 받기 위해 커널 함수를 호출하는 것

  • 어떤 프로그램이 CPU를 할당받고 명령을 수행하다 중간에 CPU를 선점당하는 경우는 크게 두가지 경우

    [1]타이머에 의한 인터럽트 발생

    [2]입출력 요청을 위한 시스템 콜

4. 인터럽트 핸들링

  • CPU에서 명령이 수행될 때에는 CPU 내부에 있는 임시 기억 장치인 레시스터에 데이터를 Read and Write작업을 수행하게 되는데, 인터럽트가 발생히 새로운 명령을 수행하면 기존의 레지스터 값들이 지워지게 되므로 레비스터 값 등 CPU 내의 하드웨어에 저장해 두어야한다

  • OS 커널 영역에는 현재 시스템 내에서 수행되는 프고르갬을 관리하기 위한 구조인 **프로세스 제어 블록(PCB)**을 두고 있따

    • 인터럽트 발생 시 프로그램의 어느 부분이 수행되던 중이였는지 지정하기 위해 사용

    • 저장되는 내용으로는 현재 수행중이던 메모리 주소와 레지스터 값, HW상태 등이있다

    • 인터럽트 수행이 끝나면 저장된 값을 CPU상에 다시 복원해 직전의 명령을 계속 수행할 수 있다

  • 현재 수행주인 프로그램 수가 n개라고 할 때, 커널 스택은 n만큼 독립적인 공간을 둔다

    • 인터럽트 처리 루틴으로 넘어와서 함수 호출이 이루어질 경우에는 각 프로세스별로 독자적인 커널 스택을 사용하게 된다

    • 프로그램 A가 수행중에 인터럽트가 발생하려면 현재까지 수행된 지점을 PCB에 저장하고 인터럽트 처리 루틴으로 와서 커널 코드를 수행하게 되며, 이 때 이루어지는 함수 호출은 프로세스 A의 커널 스택을 사용하게 된다

  • 통상적으로 인터럽트라 하면 HW인터럽트를 의미하고, SW는 트랩(Trap)이라는 용어를 사용한다

    • SW인터럽트에는 Exception, System Call등이 있다

    • SW인터럽트는 HW인터럽트처럼 컨트롤러가 발생시키는 인터럽트가 아니라 프로그램 수행 도중 직접 CPU에 인터럽트 라인을 셋팅하여 발생시킨다

'운영체제' 카테고리의 다른 글

[OS] 쓰레드와 멀티쓰레드  (0) 2022.08.29
[OS]시스템구조 - 컴퓨터 계층구조  (0) 2020.11.22
[OS]동기식/비동기식  (0) 2020.11.21
[OS]시스템구조  (0) 2020.11.15
[OS]운영체제 시스템 소개  (0) 2020.11.14