명령어 사이클
- 프로그램을 실행하기 위해서 메모리에서 명령어를 가져오고 실행하는 과정을 명령어 사이클( Instruction cycle ) 이라고 합니다.
인터럽트( Interrupt )란?
- 인터럽트란 '방해하다.', '중단시키다.'라는 의미를 가지고 있습니다. CPU에게 현재 수행중인 작업보다 급하게 필요한 일을 요청해야 할 때 CPU에게 인터럽트 신호를 보내서 해당하는 인터럽트의 서비스 루틴을 수행하도록 합니다.
인터럽트 서비스 루틴( Interrupt Service Routine )이란?
- 인터럽트 서비스 루틴은 해당하는 인터럽트 신호에 대한 로직을 말합니다.
- 인터럽트 서비스 루틴을 수행하기 전에 현재 수행중인 쓰레드의 레지스터 정보를 백업하고 서비스 루틴을 종료하였을 때 이를 다시 업로드합니다.
인터럽트 번호와 인터럽트 벡터( Interrupt Vector )
- 각 인터럽트 신호마다 번호가 다르며 이를 통해 어떤 인터럽트 신호인지 구분합니다.
- 인터럽트 벡터는 인터럽트 서비스 루틴에 대한 주소를 가지고 있으며 인터럽트 번호와 맵핑되어 있습니다.
인터럽트 종류
- 인터럽트 종류에는 동기 인터럽트와 비동기 인터럽트로 구분합니다.
동기 인터럽트
- CPU에 의해 발생되는 인터럽트입니다. CPU가 명령어들을 수행하다가 오류와 같은 예외적인 상황에 마주쳤을 때 발생하는 인터럽트가 동기 인터럽트입니다.
비동기 인터럽트
- 주로 입출력장치에 의해 발생하는 인터럽트로서 입출력 장치가 작업을 완료하였을 때 CPU에 완료 인터럽트를 보내 발생하는 인터럽트가 비동기 인터럽트입니다.
- 인터럽트의 우선순위가 낮고 플래그 레지스터를 확인했을 때 현재 인터럽트를 처리할 수 없다면은 인터럽트 요청을 무시합니다.
동기 인터럽트와 예외
- 동기 인터럽트 종류에는 fault, trap, abort, software interrupt 로서 4종류가 있습니다.
fault
- fault 예외가 발생되었을 때 예외를 처리한 후 예외가 발생한 명령어 지점부터 실행을 재개합니다.
- fault로는 대표적으로 Page Fault 예외가 있으며 Page Fault 예외가 발생되었을 때 보조기억장치의 페이징 파일을 확인해서 페이지 아웃된 페이지를 다시 맵핑하고 해당 명령어를 다시 재개합니다.
trap
- 예외를 처리한 직후 예외가 발생한 명령어의 다음 명령어부터 실행을 재개하는 예외입니다. 디버깅을 위해서 trap을 통해 수행중인 코드를 중단시키고 trap을 처리한 후 다음 명령어를 수행하도록 합니다.
abort
- 0으로 값을 나누는 것과 같이 프로세스를 강제로 중단시킬 수밖에 없는 심각한 오류를 발견했을 때 발생하는 예외입니다.
software interrupt
- System Call을 호출하였을 때 유저 모드에서 커널 모드로 전환되는데 이 때 소프트웨어 인터럽트가 발생됩니다.
'운영체제 > Common' 카테고리의 다른 글
외부 단편화( External Fragmentation )와 내부 단편화( Internal Fragmentation )란? (0) | 2022.11.08 |
---|---|
CPU 스케줄링( CPU Scheduling )이란? (0) | 2022.11.07 |
프로세스 ( Process ) 와 쓰레드 ( Thread ) 란? (0) | 2022.10.03 |
쓰레드 기아 ( Thread Starvation ) 현상이란? (0) | 2022.10.01 |
컨텍스트 스위칭 ( Context Switching ) 이란? (0) | 2022.09.24 |