23.07.06 최초 작성
대부분의 컴퓨터는 다음과 같은 구조로 구성되어 있으며 CPU는 프로세서, 디바이스는 저장장치, I/O 장치, 네트워크 사용을 위한 랜카드 등이 있다.
운영체제는 이런 하드웨어를 다음 형태로 각 하드웨어를 제어한다.
프로세서 | 메모리 | 저장장치 | I/O 장치 | 네트워크 |
---|---|---|---|---|
프로세스&메모리 | 가상 메모리 | 볼륨, 디렉토리, 파일 | 파일 | 파일 |
연산을 담당하는 장치인 CPU(프로세서)는 버스를 통해 메모리, 기타 장치와 연결되어 있다. 각 장치가 사용 될 시 CPU의 인터럽트 핀에 버스(interrupt request line)를 통해 전압이 걸리며 특정 프로그램이 실행된다. 이 때 이 동작을 "인터럽트" 라고 하며 실행되는 프로그램을 "interrupt service routine", "interrupt handler routine", "interrupt handler" 라고 한다.
인터럽트 발생 시 메모리에 저장된 인터럽트 서비스 루틴의 주소값을 통해 interrupt handler을 실행한다. 이 주소값을 저장하는 메모리상의 공간을 "Interrupt Vector", "Interrupt Descriptor Table(IDT)" 이라 한다.
외부장치와 CPU간의 인터럽트 동작은 다음과 같이 일어난다.
운영체제는 동작 모드를 분리해(user mode
/ kernel mode
) 특정 인스트럭션이 특정 모드에서 실행되는 것을 막는다. 이 특정 인스트럭션을 "Previleged instruction" 이라 한다.
유저 모드에서 특정 인스트럭션을 실행하려고 할 경우 "Exception" 이 발생한다. 익셉션은 하드웨어에서 발생하는 신호에 의해 동작하는 인터럽트와 달리 소프트웨어에서의 동작에 의해 동기적으로 발생한다. 인터럽트와 마찬가지로 익셉션일때 실행하는 프로그램인 "Exception Handler" 가 있다.
user mode
: 사용자 애플리케이션이 실행되는 모드로 시스템 접근에 제약이 있어 system call
을 통해 하드웨어에 접근kernel mode
: 리눅스 커널이 실행되는 모드로 커널함수를 직접 호출해 시스템 정보를 획득 가능하며 레지스터에 접근 가능유저 모드에서 커널 모드로 변경되는 경우는 System call, interrupt 이 발생했을 때이다.