아래 하단의 파란색 직사각형은 DRAM을 의미한다. 우측에 네 가지로 뻗어나간 장치들은 입출력 장치이다. SSD, HDD와 같은 보조기억장치 역시 입출력 장치이다.

모든 현대 컴퓨터 시스템의 시초가 되는 시스템이다.
위 사진의 메모리 내부에는 Program A, Program B, OS가 존재한다. 프로그램 카운터(PC)가 Mode Bit 메모리 주소에서 Program을 가리키면 User Mode, OS를 가리키면 Kernel Mode가 되는 것이다. 참고로 프로그램 카운터는 CPU 내부에 있는 레지스터 중의 하나로서, 다음에 실행될 명령어의 주소를 가지고 있어 실행할 기계어 코드의 위치를 지정한다.
Kernel Mode는 시스템의 핵심 부분을 관리하고 시스템 리소스에 직접 접근할 수 있으며, User Mode는 일반 프로그램이 실행되는 영역으로 시스템의 핵심 부분에 직접적인 접근을 제한한다. 이러한 분리는 시스템의 보안, 안정성, 리소스 관리 및 성능 향상을 위해 필요하다.
Timer는 Computing System에 일정 시간마다 신호를 주는 역할을 한다. 이전에 배운 Time Sharing System을 위해 가장 중요한 요소이다. 시간이 지날수록 카운터가 감소하고 0에 도달할 때 인터럽트가 발생한다.

위 그림은 Program 1과 Program 2에서 Time Sharing이 진행되는 상황이다. Program 1이 실행되는 User Mode에서 인터럽트가 발생한다. 그리고 Kernel Mode로 넘어감과 동시에 Program 1의 현재 상태가 OS에 저장된다. 그 후 OS에서 프로그램의 우선순위를 판단하고 순위에 해당하는 Program 2가 실행되는 것이다. 이런 과정의 반복으로 Time Sharing System이 진행된다.
I/O Device Controller는 원래 CPU의 역할이었지만 Multi Programming의 등장 이후 분리되었다. 시스템 버스(입출력)에 부착되어 컴퓨터와 I/O 장치 사이에 하드웨어 인터페이스를 제공한다. 다른 유형의 소형 CPU라고 생각할 수 있으며, 예로는 제어 레지스터, 상태 레지스터가 있다. I/O 처리가 끝나면 장치 컨트롤러는 CPU에 인터럽트 신호를 보낸다.
입출력 장치에도 펌웨어라고 하는 OS가 존재한다. 우리가 흔히 보는 장치 드라이버 역시 펌웨어의 일종으로, 컴퓨터에 연결된 특정 유형의 장치를 작동하거나 제어하는 컴퓨터 프로그램이다.
Exception은 특정 이벤트에 대한 응답으로 OS로 제어권을 전송하는 것이다. 쉽게 말해 정지 후 재개하는 기술이다. 그 예로는 프로세스 상태 변경이 있다.

위의 그림에서처럼 User Code에서 어떤 이벤트가 발생했을 경우에, 그리고 그 이벤트가 User Mode에서 해결이 불가능하다면 시스템에서 Exception을 발생시킨다. 그 후 Kernel Mode로 변경하여 OS에서 그 이벤트를 해결한 후, 결과를 다시 User Code로 전송한다. Exception은 다음과 같이 크게 네 가지로 나눌 수 있다. Asynchronous Exception인 Interrupt와 Synchronous Exception인 Traps, Faults, Aborts가 있다.
Asynchronous(비동기)는 동시에 똑같이 진행되지 않는다는 뜻을 가지고 있다. 따라서 요청을 보낸 후 응답과 관계없이 다음 동작을 실행할 수 있다.
Interrupt
Interrupt는 입출력 장치와 같이, 프로세서 외의 하드웨어에서 발생하는 이벤트가 원인이 되어 진행 중인 프로그램을 중지시킨다. 요청을 받아 중지가 되고, 그것이 해결되면 다음 명령으로 진행돼야 한다. 특징이 있다. 대표적인 Interrupt로는 다음 두 가지가 있다.
Timer Interrupt
I/O Interrupt from External Device
Synchronous(동기)는 동시에 똑같이 진행된다는 뜻을 가지고 있다. 따라서 요청을 보낸 후 해당 요청의 응답을 받아야 다음 동작을 실행할 수 있다. Synchronous Exception은 Asynchronous Exception인 Interrupt와 달리 프로세서(CPU)에서 발생하거나 명령어 수행 결과로 발생하는 이벤트가 원인이 되어 진행 중인 프로그램을 중지시킨다. 다음 세 가지 예시를 살펴보자.
Traps
사용자가 의도할 때 사용된다. 대표적인 예로 System Calls가 있다. Traps 역시 다음 명령을 Return하며 끝난다.
Faults
사용자의 의도와 상관없이 발생한다. 일부는 복구가 가능하고 나머지는 복구가 불가능하여 시스템 재시동이 필요하다. 대표적인 예로 Page Faults가 존재한다. Fault는 다음 명령을 Return하지 않고 Fault가 발생한 명령을 다시 수행한다.
Aborts
역시 사용자의 의도와 상관없이 발생하고 복구가 불가능하다. 예로는 Illegal Instruction이 있다.
Abort는 실행 중인 명령이나 프로그램을 중단한다.
다음 표는 위의 Exception들을 요약한 것이다.

초기 컴퓨터 시스템에서 사용된 입출력으로, CPU가 입출력 장치와 버스를 통해 데이터 전송을 직접 제어했다. 그러기 위해서 CPU는 명령어를 반복적으로 실행하고, 입출력 장치의 상태를 주기적으로 확인해야 했다. 또한 CPU는 입출력 작업을 완료할 때까지 다른 작업을 수행할 수 없어 효율적이지 못했다.
이러한 문제를 해결하기 위해 발전된 버전의 입출력이다. 입출력 장치가 데이터 전송을 완료하면 CPU에게 Interrupt Signal을 발생시킨다. 따라서 CPU는 작업을 수행하다가 Interrupt를 수신하면 Interrupt Handling의 과정을 진행하면 되는 것이다. 덕분에 CPU는 입출력 작업의 완료를 기다리는 동안 다른 작업을 수행하는 것이 가능하다. 하지만 여전히 CPU의 버스를 통해서 메모리 주소나 어떤 데이터를 전송할지 등을 전송해야 한다.
Direct Memory Access라는 뜻의 DMA는 Interrupt Driven I/O의 성능 향상을 위해 개발된 하드웨어이다. DMA는 CPU의 개입 없이 메모리(DRAM)와 입출력 장치 간의 직접적인 데이터 전송이 가능하게 한다. CPU는 DMA에게 데이터 전송을 위한 파라미터를 제공하고, DMA가 전송을 완료하면 Interrupt를 발생시켜 CPU에게 알린다. 아래 사진을 확인해보자.

앞서 얘기했듯이 입출력 장치가 메모리에 데이터를 넣고 싶으면 CPU에 얘기하지 않고 DMA에 얘기해야 한다. 이것이 그림에 나와있는 DRQ(Direct Request)이다. 입출력 장치가 DMA를 통해 메모리와 데이터를 주고 받기 위해 CPU에게 DMA 작업을 요청할 때 사용된다. 마지막으로 DMA Ack(Acknowledge) 작업이 DMA에서 입출력 장치에 전달되면 버스를 사용하여 메모리와 데이터를 주고 받을 수 있게 된다.
버스에 대한 권한을 기준으로 우선 순위를 다르게 하는 세 가지 모드가 있다.
⠀⠀
⠀⠀
⠀⠀
⠀⠀
⠀⠀
분량이 너무 많아요 교수님!