⚠️ 공부한 내용을 정리하는 공간입니다. 설명이 부족하거나 옳바르지 못한 부분이 있을 수 있습니다. 옳바르지 못한 내용을 발견하셨다면 댓글로 알려주시길 부탁드립니다. 수정하도록 하겠습니다.
오늘의 사족
새로운 마음 가짐으로 청소를 했습니다. 마음이 편안해졌지만 이내 공부를 해야한다는 압박감에 마음이 다시 불편해졌습니다.
내 맘이 편해졌다 불편해졌다 편해졌다해~🎵
< 목차 >
1. 징치 컨트롤러와 장치 드라이버
2. 입출력을 구현하는 방식 (Stratrgies for I/O)
2-1. I/O Register에 접근하는 방법 - Memory-mapped I/O vs. Port-mapped(=Isolated) I/O
2-2. I/O Device가 준비되었는지 감지하는 방법 - Interrupt vs. Polling
2-3. 직접 메모리에 접근할 수 있는 입출력 방법 - DMA; Direct Memory Access
1. 장치 컨트롤러와 장치 드라이버
당장 우리가 알고 있는 입출력 장치를 생각해보면 프린터기, 마우스, 키보드, 모니터, 마이크, 스피커 등 정말 다양하다. 이때 각 장치들의 속도와 데이터 전송 방식 등도 다양할 것이다. 이렇게 다양한 입출력 장치 모두 하나의 컴퓨터와 연결되는 데 이때 컴퓨터는 세상에 있는 모든 다양한 입출력 장치에 맞춰 정보를 주고 받는 방식을 규격화하는 건 매우 어렵다. 또한 일반적으로 CPU와 메모리의 데이터 전송률은 높은데 입출력장치의 데이터 전송률이 낮다는 점에서도 컴퓨터와 다양한 입출력장치를 연결하는 것에서 한계를 가진다. 이와 같은 이유로 입출력장치는 컴퓨터와 바로 연결되지 않고 장치 컨트롤러라고 불리는 하드웨어를 통해 연결된다.
장치 컨트롤러(Device Controller)
장치 컨트롤러는 CPU와 입출력장치 간의 통신을 중개하고 오류를 검출하며 데이터 버퍼링을 수행하는 역할을 한다.
장치 컨트롤러 내부에는 데이터 레지스터와 상태 레지스터, 제어 레지스터 등이 있고 이러한 레지스터를 사용하여 CPU와 I/O Device 사이서 데이터를 주고 받는다.
- Data Register: CPU와 입출력장치 사이에 주고받을 데이터가 저장
- Status Register: 입출력장치가 입출력 작업할 준비가 되었는지, 입출력 작업이 완료되었는지, 입출력장치에 오류는 없는지 등의 상태 정보가 저장
- Control Register: 입출력장치가 수행할 내용에 대한 제어 정보와 명령을 저장
장치 드라이버(Device Driver)
장치 드라이버는 장치 컨트롤러의 동작을 감지하고 제어하여 장치 컨트롤러가 컴퓨터 내부와 정보를 주고 받을 수 있도록 하는 프로그램(소프트웨어)이다. 장치 드라이버를 인식하고 실행하는 주체는 운영체제이다.
2. 입출력을 구현하는 방식 (Stratrgies for I/O)
“[1] 입출력을 구현하는 방식은 크게 두 가지 기준에 따라 분류할 수 있는데, 먼저 I/O 레지스터에 어떻게 접근하는지에 따라 Memory-mapped 방식과 Port-mapped I/O 방식으로 구분된다. 그리고 I/O 장치가 준비되었는지를 어떻게 감지하는지에 다라 Polling 방식과 Interrupt 방식으로 구분된다.”
2-1. I/O Register에 접근하는 방법 - Memory-mapped I/O vs. Port-mapped(=Isolated) I/O
Memory-mapped I/O
Memory-mapped는 가장 많이 사용되는 방식으로 주소를 메모리와 동일하게 취급한다. 즉 메모리에서 데이터를 읽는 명령어인 LDA와 메모리에 데이터를 쓰는 명령어인 STA를 동일하게 사용하여 I/O 레지스터에 접근하는 방식이다.
Port-mapped I/O
Port-mapped I/O는 아주 저렴한 CPU의 컴퓨터에 사용되는 방식으로 초기에 사용된 방식이다. 이 방식은 I/O 레지스터에 접근하기 위한 별도의 명령어(IN, OUT)이 존재한다. 이 방식은 상호 배타적으로 device에 ID를 따로 주면서 주소를 계산하는 양을 줄여서 비용을 절감한다.
2-2. I/O Device가 준비되었는지 감지하는 방법 - Interrupt vs. Polling
Interrupt
Interrupt는 I/O device가 신호를 보내 자신이 준비됐음을 알리는 방식이다. 이 방식은 CPU가 I/O device에 일을 시키고 기다리는 것이 아닌 바로 다른 일을 한다. I/O device는 CPU가 시킨 일을 다 마치면 메모리에 작성하고 CPU에게 일을 다 했다는 신호를 보내면 Interrupt를 처리하여 해당 입출력 요청을 처리한다.
여러 입출력 장치에서 인터럽트가 동시에 발생하는 경우 우선순위를 고려하여 우선순위가 높은 인터럽트를 처리한다. 이때 우선순위를 반영하여 처리하기 위해 PIC; Programmable Interrupt Controller라는 하드웨어를 사용한다.
Polling
Polling은 CPU가 수시로 I/O device가 준비됐는지를 직접 확인하는 방법이다. 이 방식은 CPU가 계속해서 I/O device에게 읽어 들일 데이터가 입력됐는지를 확인하는 방식으로 I/O device가 준비됐는지를 기다리는 동안에 CPU는 다른 작업을 수행할 수 없다.
2-3. 직접 메모리에 접근할 수 있는 입출력 방법 - DMA; Direct Memory Access
DMA는 직접 메모리에 접근할 수 있는 입출력 기능으로 DMA 컨트롤러라는 하드웨어를 통해 이루어진다. 입출력장치와 메모리 사이에서 주고받을 데이터가 CPU를 거치지 않고 이루어지기 때문에 CPU의 작업 부담을 줄일 수 있다. DMA 컨트롤러와 장치컨트롤러들을 별도의 I/O Bus로 연결하여 시스템 버스의 사용 빈도를 줄일 수 있다.
< 참조 >
[1] (2020.02.02. 21:05) [Chapter 8] IO - 입력 및 출력 장치 [Website] 검색경로 https://it-eldorado.tistory.com/24
< 출처 >
[2] PIC, 검색경로 https://www.jameco.com/z/D8259AC-NEC-Corporation-IC-8259-Programmable-Interrupt-Controller-DIP-28-pin_52775.html
'🖥️ Computer Science > Computer Architecture' 카테고리의 다른 글
[Computer Architecture] HDD와 SSD를 사용하는 기술 RAID (1) | 2024.01.10 |
---|---|
[Computer Architecture] 목차(Index) (0) | 2024.01.03 |
[Computer Architecture] 보조기억장치에 대하여_ HDD, Flash Memory (0) | 2023.12.31 |
[Computer Architecture] Cache Memory(캐시 메모리)에 대하여 (0) | 2023.12.22 |
[Computer Architecture] RAM에 대하여_DRAM, SRAM, SDRAM, DDR SDRAM (0) | 2023.12.21 |