주변장치와 입출력 장치의 관리를 위해 사용하는 시그널이다. 주변장치들은 CPU의 서비스가 필요한 경우 신호를 발생시켜 서비스를 요청하는데, 이때 발생시키는 신호를 인터럽트라고 한다. 운영체제는 인터럽트가 발생할 때에만 실행되며 운영체제가 직접 CPU를 점유하는 경우는 인터럽트에 의하지 않고는 발생하지 않는다.
CPU의 서비스가 필요한 경우, CPU 옆에 있는 인터럽트 라인에 신호를 보내서 인터럽트가 발생했음을 알려주는 방식은 동일하다.
인터럽트 발생
>>
CPU 하던 일 멈추고 운영체제 커널 내에서 해당 인터럽트 벡터를 통해 탐색
>>
인터럽트 핸들러 실행
현재 처리 중인 인터럽트보다 더 높은 우선순위의 인터럽트 발생
>>
현재 처리 중이던 인터럽트 코드 수행 지점 저장
>>
우선순위 높은 인터럽트 처리
>>
저장된 주소로 복귀 후 이전 인터럽트 수행
컨트롤러 등 하드웨어 장치가 CPU의 인터럽트 라인을 세팅한다.
소프트웨어가 CPU의 인터럽트 라인을 세팅한다. 트랩(trap)으로 주로 불린다.
예외상황(Exception)
: 비정상적인 작업 시도, 메모리 바깥 접근 등 권한 없는 작업 시도할 때 발생하는 인터럽트시스템 콜(System Call)
: 사용자 프로그램이 운영체제 내부에 정의된 코드를 실행하고 싶을 때 운영체제에 서비스 요청모든 프로그램은 독자적인 주소 공간을 가지고 자신의 공간 내에서 함수 호출이 이뤄진다. 그러나 시스템 콜은 자신의 주소 공간을 거스르는 영역에 존재하는 함수를 호출한다. 즉, 커널이라는 다른 프로그램의 주소 공간에 존재하는 함수를 호출한다.
위에서 인터럽트를 설명하였다. 시스템 콜이란 소프트웨어 인터럽트의 한 종류로, 프로그램 자신이 인터럽트 라인에 인터럽트를 세팅하는 명령을 통해 이뤄진다.
프로세스의 상태는 실행(Running), 준비(Ready), 봉쇄(Blocked, wait, sleep)의 세 가지로 구분할 수 있다.
프로세스가 CPU를 보유하고, 기계어 명령을 실행하고 있는 상태
프로세스가 CPU만 보유하면 당장 명령을 실행할 수 있지만 CPU를 할당받지 못한 상태
CPU를 할당받더라도 당장 명령을 실행할 수 없는 프로세스의 상태
컴퓨터의 자원을 효율적으로 관리하기 위해서
운영체제는 현재 시스템 내에서 실행되는 프로그램들을 관리하기 위해 PCB(Process Control Block)라는 자료구조를 둔다. PCB는 각각의 프로그램마다 하나씩 존재하며 해당 프로그램의 어느 부분이 실행 중이었는지 저장한다.
프로세스들의 메타 데이터
프로그램 실행 중 인터럽트 발생
>>
프로그램 실행 상태 PCB에 저장
>>
CPU 제어권 인터럽트 처리 루틴으로 이동, 처리
>>
저장된 상태를 PCB로부터 CPU에 복원해 인터럽트 직전 위치부터 실행
Linked List 방식으로 관리된다.
PCB List Head에 PCB들이 생성될 때마다 붙는다. 프로세스가 생성되면 PCB가 생성되고 프로세서 완료시 제거된다.
수행 중인 프로세스를 변경할 때, CPU의 레지스터 정보가 변경되는 것을 Context Switching이라고 한다.
실행시킬 프로세스를 변경하기 위해 원래 수행 중이던 프로세스의 문맥을 저장하고 새로운 프로세스의 문맥을 세팅하는 과정
그 밖의 인터럽트나 시스템 콜 발생 시에는 Context Switching이 일어나지 않고 실행 모드만이 변경된다.
준비 상태(Ready)에 있는 프로세스들 중에서 CPU를 할당받을 프로세스를 선택한 후 실제로 CPU의 제어권을 넘겨받는 과정을 CPU Dispatch라고 한다.