CS/운영체제

Interrupt

이충무 2022. 9. 20. 22:48

정의

CPU가 작업을 처리하던중 특수한 상황이 예기치 못하게 발생하였을떄 작업을 중단하는것입니다. 인터럽트는 외부, 내부, 소프트웨어 인터럽트로 분류 되는데 외부나 내부 인터럽트는 CPU의 하드웨어에서의 신호에 의해 발생하고 소프트웨어 인터럽트는 명령어의 수행에 의해 발생합니다.

인터럽트 당한 시점에 레지스터와 PC(Program Counter)를 PCB(Process Control Block)에 저장한후 CPU의 제어를 인터럽트 핸들러(Interrupt Handler) 또는 인터럽트 서비스 루틴(Interrupt Service Routine)에 넘기게 됩니다.

인터럽트 핸들러, 인터럽트 서비스 루틴

  • 인터럽트 접수에 의해 발생되는 인터럽트에 대응하여 특정 기능을 처리하는 기계어 루틴, 운영 시스템이나 임베디드에서 장치 드라이버에서 요구하는 일을 처리하는 기능적 코드 집합으로 콜백 루틴 방식으로 처리됨.

그리고 그러한 ISR들의 주소를 가지고 있는 공간을 Interrupt Descripter Table(IDT)라고 합니다.

  • 멀티 스레드 멀티 프로세싱 환경에서는 PC값을 PCB(process control block)가 아닌 TCB(thread control block)에 저장을 합니다. 프로세스 A 에 a,b,c 쓰레드가 있다고 생각해볼게요. a, b, c쓰레드에 해당하는 정보를 저장해두는 a,b,c TCB는 A PCB에 연결이 되어 있습니다. PCB에는 PC값을 저장하지 않고, TCB에서 각각 저장을 해두고 있습니다. 이 때도 TCB는 PC 값을 저장하고 있지만 PC register는 CPU에 속해있습니다. 또한 Context switch가 될 때마다 TCB에 저장되어있는 PC 값을 PC register에 저장을 하는 것입니다.

PCB(Process Control Block)

PCB(프로세스 제어 블록)은 프로세스를 제어하기 위해 필요한 정보를 가지고 있는 운영체제 커널의 자료구조입니다.

프로세스마다 고유의 PCB(프로세스 제어 블록)을 가지고 있습니다.

PCB(프로제스 제어 블록)에 유지되는 정보

  • process state(프로세스 상태) : new, ready, waiting, running, terminated
  • program counter(프로그램 카운터) : 다음에 실행할 명령어의 주소
  • resgisters(레지스터) : 실행중 상태에서 대기중 또는 준비중으로 변경될때 현재 레지스터의 값을 여기에 보관합니다. 이것은 프로그램 카운터와 함께 다시 실행중 상태로 옯길때 필요합니다.
    • PSW(Program status word): 시스템 내부의 순간순간의 상태를 기록하고 있는 정보
    • SP(Stack Pointer) : 현재 스택 영역에서 가장 마지막 부분(가장 최근에 저장된 )을 가르킵니다.
  • cpu 스케줄링 정보 : 우선순위와 같은 스케줄링에 필요한 정보
  • 그외 주 기억장치 관리 정보, 회계 정보, 입출력 상태 정보등을 가지고 있습니다.

PCB가 프로세스의 중요한 정보를 포함하고 있기 때문에, 일반 사용자가 접근하지 못하도록 보호된 메모리 영역 안에 남는다. 일부 운영 체제에서 PCB는 커널 스택의 처음에 위치한다. (이 메모리 영역은 편리하면서도 보호를 받는 위치이기 때문이다.)

외부 인터럽트

주로 하드웨어 적인 요소로 인하여 발생하는 인터럽트로써 아래와 같습니다.

  • 전원 이상 인터럽트(Power fail interrupt) : 정전 또는 파워 이상오류 등
  • 기계 착오 인터럽트(Machine check interrupt) : Cpu의 기능적인 오류
  • 외부 신호 인터럽트(Extrenal Interrupt)
    • 타이머에 의한 인터럽트 (자원이 할당된 시간이 다 끝난 경우)
    • 키보드로 인터럽트 키를 누른 경우 (대표적으로 Ctrl + ALT + DEL)
    • 외부장치로부터 인터럽트 요청이 있는 경우
  • 입출력 인터럽트(I/O interrupt)
    • 입출력 장치가 데이터 전송을 요구하거나 전송이 끝나 다음 동작이 수행되어야 할 경우
    • 입출력 데이터에 이상이 있는경우

내부 인터럽트

잘못된 명령이나 잘못된 데이터를 사용할때 발생

trap이라고도 함

  • 프로그램 검사 인터럽트(Program check interrrupt)
    • Division by zero
    • Overflow / Underflow
    • 기타 프로그램 Exception

소프트웨어 인터럽트

프로그램 처리중 명령의 요청에 의해서 발생

대표적인 형태는 프로그램에서 감시 프로그램(SVC) 호출

  • SVC(SuperVisor Call)
    • 사용자가 프로그램을 실행시키거나 감시프로그램(Supervisor)을 호출하는 동작을 수행하는 경우
    • 복잡한 입출력 처리를 하는 경우

인터럽트 요청시 처리과정

  1. 인터럽트 요청 발생
  2. 프로그램 실행 중단 : 현재 실행중인 Micro operation 까지 수행한다.
  3. 현재의 프로그램 상태 보전 : 현재 수행중인 작업의 정보를 PCB에 저장합니다.
  4. 인터럽트 처리 루틴 실행 : 인터럽트를 요청한 장치를 식별한다.
  5. 인터럽트 서비스 루틴 실행 : 인터럽트 원인을 파악하고 실질적인 작업을 수행합니다.
  6. 상태 복구 : 인터럽트 발생시 저장해둔 PC를 다시 복구합니다.
  7. 중단된 프로그램 실행 재개 : PCB값을 이용하여 이전에 수행중이던 프로그램을 재개합니다.

Interrupt 발생 → ISR(인터럽트 처리함수)의 시작 주소로 jump함(벡터링) → 현재 실행중인 프로세스의 문맥(registers)을 PCB에 저장 (문맥저장) → Interrupt Handler(ISR)함수 실행 **[ex) Network device ISR은 Ethernet → IP → TCP 함수를 호출한후 해당 device의 대기큐에서 데이터를 기다리던 프로세스를 찾음 → 데이터를 전달하고 blocked 상태에서 ready 상태로 변환 → 대기큐에서 프로세스 구조체를 제거하고 ready 큐로 옮김 ]**→ 모든 ISR의 마지막엔 Scheduler() 함수를 호출합니다. 다음에 실행할 최우선 순위 프로세스를 선택한후 이 프로세스를 Ready 상태에서 Running 상태로 변경 PCB에 저장된 문맥을 processor로 load함(문맥 복구)

우선순위

  1. 전원 이상
  2. 기계 착오
  3. 외부 신호
  4. 입출력
  5. 명령어 잘못
  6. 프로그램 검사
  7. SVC(Supervisor Call)

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

프로세스 주소 공간  (0) 2022.09.20
PCB와 Context Switching  (0) 2022.09.20
Deadlock  (1) 2022.09.20
페이지 교체 알고리즘  (0) 2022.09.20
Memory  (1) 2022.09.20