1. 컴퓨터 시스템의 일반적인 구조
컴퓨터 시스템의 일반적인 구조는 아래와 같습니다.
CPU, memory로 이루어진 것이 우리가 일반적으로 이야기 하는 컴퓨터이고,
disk, mouse, keyboard, monitor는 I/O device로 호스트의 컴퓨터에서 데이터를 컴퓨터 안으로 입력하는 것과 데이터를 출력하는 역할을 하는 장치입니다.
조금 더 구체적인 컴퓨터 시스템의 구조는 아래 사진과 같습니다.
이번 포스팅에서는 위 사진에서 I/O Device와 관련된 구조, interrupt, mode bit, timer, DMA controller를 알아보겠습니다.
우선 I/O Device와 관련된 구조부터 간단히 살펴보겠습니다.
각각의 Device에는 디바이스를 전담하기 위한 Device Controller가 있습니다.
이 Device Controller는 I/O Device를 통해서 데이터를 주고 받기 위해 작업 데이터를 Local buffer에다가 저장합니다.
CPU한테 무언가를 요청할때에는 Device Controller가 Interrupt(인터럽트)를 걸어 알려줍니다.
I/O Device와 관련된 구조를 요약하자면 아래와 같습니다.
· Local Buffer : I/O Device 작업 데이터를 저장
· Device Controller : 각 디바이스마다 전담하기 위한 작은 하드웨어 장치
· Device Driver : 각 디바이스를 처리하기 위한 Software
(장치 컨트롤러의 작동에 맞추어져있고, 다른 운영체제에게 장치에 대한 일관된 인터페이스를 제공)
2. Interrupt (인터럽트)
위에서 언급한, Device Controller가 Interrupt(인터럽트)를 걸어 알려준다고 하는 것에 대해 더 알아보겠습니다.
우선, CPU가 어떻게 동작하는지를 알아야합니다.
CPU가 어떻게 동작하는지에 대한 구체적인 설명은 아래 링크에서 참고하시면 됩니다.
https://www.youtube.com/watch?v=Fg00LN30Ezg
영상이 길지만 간단히 요약하자면, CPU는 매 순간 메모리에 올라와있는 Instruction(기계어)를 처리합니다.
여기서 메모리란, CPU 안의 저장 공간인 Register 중 Program Counter Register를 의미합니다. Program Counter가 가리키고 있는 메모리 위치에서 Instruction을 하나 읽어와서 실행하고 나면 Program Counter Register는 다음 주소를 가리키고 읽어와서 실행하고 다음 주소를 가리킵니다.
이처럼 CPU는 항상 메모리의 다음에 있는 Instruction을 순차적으로 실행합니다.
그렇다면 항상 메모리의 Instruction을 순차적으로 실행하는 CPU에게 Device Controller가 작업을 완료했다는 사실을 어떻게 알릴 수 있을까요?
이때, Interrupt(인터럽트) 라는 개념이 등장합니다. CPU는 Instruction을 실행하기 전에 Interrupt가 들어온 것이 있는지를 먼저 체크합니다.
(1) 인터럽트 벡터
인터럽트는 매우 빈번하게 발생하기 때문에 빠르게 처리되어야합니다.
어떤 인터럽트가 요청되면, 그 인터럽트를 유발한 장치를 위한 인터럽트 서비스 루틴의 주소를 제공하기 위해 주소의 배열인 '인터럽트 벡터'가 인터럽트 요청과 함께 주어진 고유의 유일한 장치 번호로 색인됩니다.
쉽게 설명하자면, 인터럽트 벡터는 인터럽트 번호와 해당 인터럽트의 처리 루틴 주소를 쌍으로 갖고 있는 것으로 인터럽트 종류 별로 몇 번 라인의 인터럽트가 들어왔는지를 나타내는 엔트리가 있고, 그 인터럽트가 들어왔을 때 운영체제 메모리의 어디로 접근해라는 정보가 있는 것입니다.
아래 사진은 한 예시로, 인텔 프로세서의 인터렙터 벡터 테이블입니다.
(2) 인터럽트 처리 루틴 (Interrupt Service Routine)
Interrupt가 들어왔을 경우 CPU는 하던 일을 중단하고 CPU 제어권을 OS 커널에 넘겨줍니다. Interrupt는 매우 빈번하게 발생하기 때문에, 운영체제에는 Interrupt에 따라 처리하는 작업이 커널 함수로 정의되어 있습니다.
해당 Interrupt를 처리하는 커널 함수를 Interrupt 처리 루틴(=인터럽트 서비스 루틴)이라고 합니다.
Interrupt 서비스 루틴의 실행이 완료되면, CPU는 Interrupt 되었던 연산을 재개합니다.
연산의 time line은 아래 사진과 같습니다.
인터럽트-구동 IO 사이클을 요약한 그림은 아래와 같습니다.
인터럽트-구동 IO 사이클은 아래와 같은 단계를 거칩니다.
- CPU에서 장치 드라이버 입출력을 개시합니다.
- I/O controller에서 입출력을 개시합니다.
- I/O controller에서 입력 준비 및 출력 완료, 혹은 에러 발생시 인터럽트 신호를 발생시킵니다.
- CPU에서 인터럽트를 전달받으면, 제어를 인터럽트 핸들러에게 넘깁니다.
- 인터럽트 핸들러가 데이터를 처리하고 인터럽트에서 복귀합니다.
- CPU는 인터럽트로 중단된 작업의 처리를 재개합니다.
3. Mode bit
사진을 보면 CPU 안에 Mode bit이 있습니다. Mode bit은 CPU에서 지금 실행되고 있는 것이 운영체제인지 사용자 프로그램인지를 구분해주는 역할을 수행합니다.
만약 CPU 제어권이 운영체제에 있으면 mode bit은 0으로, 사용자 프로그램에 있을 경우 mode bit은 1이 됩니다. 즉, mode bit가 0이면 CPU는 모든 Instruction을 사용할 수 있으며 mode bit이 1이면 사용자 프로그램의 Instruction만 사용할 수 있습니다. 모든 Instruction을 사용할 수 있다는 뜻은 다른 사용자 프로그램의 메모리 영역을 볼 수도 있고 I/O 디바이스에 접근도 할 수 있다는 것입니다.
사용자 프로그램 실행 시, mode bit을 이용하여 메모리 접근을 제한적으로 두는 이유는 해당 사용자 프로그램을 100% 믿을 수 없기 때문입니다. 사용자 프로그램이 다른 프로그램의 메모리 주소를 본다거나 운영체제 커널의 메모리 주소에 접근해 시스템을 망가뜨릴 수 있습니다. 그래서 자기 자신의 메모리 주소 영역만 볼 수 있게 되어있습니다.
I/O Device는 사용자 프로그램은 접근하지 못하고 운영체제만 접근(Mode bit 0)을 할 수 있습니다. 그래서 사용자 프로그램이 I/O 작업을 하고 싶을 때에는 System Call로 운영체제에 요청(운영체제의 커널 함수를 호출)을 해야합니다. System Call을 하면 인터럽트 라인을 세팅한 후, CPU는 인터럽트 라인이 생성되었으니 하던 일을 멈추고 CPU 제어권을 운영체제에게 넘겨주게 됩니다.
4. Timer
Timer는 특정 프로그램이 CPU를 독점하는 것을 막기 위한 장치입니다.
만약 사용자의 특정 프로그램에서 무한 for문이 돈다고 가정을 해보겠습니다. 이렇게 상황이라면 사용자의 프로그램이 CPU를 계속 잡고있어 제어권을 운영체제로 넘겨주지 않기 때문에 제어권을 다시 뺏어올 방법이 없게 됩니다.
이런 일을 방지하기 위해 Timer라는 하드웨어가 존재합니다. 운영체제가 사용자 프로그램에 CPU 제어권을 넘겨주면서, Timer에 정해진 시간을 세팅 후 CPU 제어권을 넘겨주게 됩니다. 할당된 시간이 끝나면 Timer는 CPU에 인터럽트를 걸어주어 CPU 제어권을 다시 운영체제로 넘기게 됩니다.
5. DMA(Direct Memory Access) controller
DMA controller는 CPU의 인터럽트 빈도수를 줄여주는 역할을 하는 장치입니다.
DMA controller의 역할은 위에서 언급한 인터럽트 벡터가 존재하는 이유와 비슷합니다. 인터럽트는 매우 빈번하게 발생하기 때문에, CPU가 일일히 인터럽트를 처리한다면 CPU가 방해를 많이 받게됩니다. 그렇기에 I/O device의 local buffer에서 들어오는 작업이 종료되었다면, DMA controller가 직접 그 내용을 메모리로 block 단위로 직접 전송해줍니다. 그리고 복사가 끝나면 CPU에 인터럽트를 걸어 메모리에 작업이 복사된 것을 알려주고 CPU는 인터럽트를 처리하게 됩니다.
참고자료
[KOCW 이화여대 반효경 교수님 - System Structure & Program Execution 1]
https://core.ewha.ac.kr/publicview/C0101020140311132925816476?vmode=f
[Operating System Concepts - Abraham Silberschatz]
https://www.yes24.com/Product/Goods/89496122