08-1. 장치 컨트롤러와 장치 드라이버
장치 컨트롤러
- 입출력 장치는 CPU, 메모리보다 다루기가 더 까다로움
- 키보드, 모니터, USB 메모리, CD_ROM, SSD, 마우스, 프린터, 스피커, 마우스 등 매우 많음
- 장치가 이렇게 다양하면 자연스레 장치마다 속도, 데이터, 전송 형식 등도 다양함
- 따라서 다양한 입출력장치와 정보를 주고 받는 방식을 규격화하기 어려움
- 전송률이란 데이터를 얼마나 빨리 교환할 수 있는지 나타내는 지표
- 장치 컨트롤러는 입출력 제어기, 입출력 모듈 등으로 다양하게 불리기도 함
- 모든 입출력 장치는 각자의 장치 컨트롤러를 통해 컴퓨터 내부와 정보를 주고 받음
- 장치 컨트롤러는 하나 이상의 입출력 장치와 연결되어 있음
- 버퍼링이란 전송률이 가장 높은 장치와 낮은 장치 사이에 주고 받은 버퍼라는 임시 공간에 저장하여 전송률을 비슷하게 맞추는 방법
- 일반적으로 전송률이 높은 CPU와 일반적으로 낮은 입출력 장치와의 전송률 차이를 데이터 버퍼링으로 완화 시킴
- 데이터 레지스터는 CPU와 입출력장치 사이에 주고 받을 데이터가 담기는 레지스터
- 상태 레지스터는 입출력장치가 입출력 작업을 할 준비가 되었는지, 입출력 작업이 완료되었는지, 입출력 장치에 오류는 없는지 등의 상태 정보 저장
- 제어 레지스터는 입출력장치가 수행할 내용에 대한 제어 정보와 명령을 저장
- 이러한 레지스터들이 담긴 값들은 버스를 타고 CPU나 다른 입출력 장치로 전달되기도 하며, 장치 컨트롤러에 연결된 입출력 장치로 전달됨!!
장치 드라이버
- 장치 컨트롤러의 동작을 감지하고 제어함으로써 장치 컨트롤러가 컴퓨터 내부와 정보를 주고 받을 수 있게 하는 프로그램
- 프로그램이기에 당연히 실행 과정에서 메모리에 저장됨
- 장치 컨트롤러는 입출력 장치를 연결하기 위한 하드웨어 통로, 장치 드라이버는 입출력 장치를 연결하기 위한 소프트웨어 통로
08-2. 다양한 입출력 방법
프로그램 입출력
- 기본적으로 프로그램 속 명령어로 입출력 장치를 제어하는 방법
- CPU가 프로그램 속 명령어를 실행하는 과정에서 입출력 명령어를 민나면 CPU는 입출력장치에 연결된 장치 컨트롤러와 상호작용 하며 입출력 작업을 수행함
중요!!
- CPU가 여러 장치 컨트롤러 속 레지스터를 알고 있는 방법은 다음과 같다
- 프린터 컨트롤러의 상태 레지스터를 읽어라
- 프린터 컨트롤러의 데이터 레지스터에 100을 써라
- 키보드 컨트롤러의 상태 레지스터를 읽어라
- 하드 디스크 컨트롤러의 데이터 레지스터에 'a'를 써라

메모리 맵 입출력
- 메모리에 접근하기 위한 주소 공간과 입출력장치에 접근하기 위한 주소 공간을 하나의 주소 공간으로 간주하는 방법
- 1,024개의 주소를 표현할 수 있는 컴퓨터가 있을떄 전부 메모리 주소를 표현하는데 사용하지 x
- 512는 메모리 주소, 그 나머지는 장치 컨트롤러의 레지스터를 표현하기 위해 사용함
- 메모리 맵 입출력 방식에서 CPU는 메모리의 주소들이나 장치 컨트롤러의 레지스터들이나 모두 똑같이 메모리 주소를 대하면 됨

고립형 입출력
- 메모리를 위한 주소 공간과 입출력 장치를 위한 주소 공간을 분리하는 방법
- 고립형 입출력 방식에서 CPU는 입출력장치에 접근하기 위해 메모리에 접근하는 명령어와는 다른 입출력 명령어를 사용함
인터럽트 기반 입출력
- 입출력 장치에 의한 하드웨어 인터럽트를 더 정확하고 자세하게 이해가능
- CPU는 장치 컨트롤러에 입출력 작업을 명령하고, 장치 컨트롤러가 입출력 장치를 제어하며 입출력을 수행하는 동안 CPU는 다른일 가능 o
- 장치 컨트롤러가 입출력 작업을 끝낸 뒤 CPU에게 인터럽트 요청 신호를 보내면 CPU는 하던 일을 잠시 백업하고 인터럽트 서비스 루틴 실행
- 인터럽트를 기반으로 하는 입출력을 인터럽트 기반 입출력 이라고 함
- 폴링이란 입출력 장치의 상태는 어떤지, 처리할 데이터가 있는지를 주기적으로 확인하는 방식
- NMI가 발생한 경우 CPU는 우선순위가 높은 인터럽트 부터 처리함
- 프로그래머블 인터럽트 컨트롤러(PIC)는 여러 장치 컨트롤러에 연결되어 장치 컨트롤러에서 보낸 하드웨어 인터럽트 요청들의 우선 순위 판단 후 CPU에 지금 처리해야 하는 하드웨어 인터럽트는 무엇인지 알려주는 장치
DMA 입출력
- DMA는 입출력장칭롸 메모리가 CPU를 거치지 않고도 상호작용 할 수 있는 입출력 방식
- 직접 메모리에 접근 할 수 있는 입출력 기능
- DMA 입출력을 하기 위해서는 시스템 버스에 연결된 DMA 컨트롤러라는 하드웨어 필요!!
DMA 입출력 과정
- CPU는 DMA 컨트롤러에 입출력 장치의 주소, 수행할 연산(읽기/쓰기), 읽거나 쓸 메모리의 주소 등과 같은 정보로 입출력 작업을 명령함
- DMA 컨트롤러는 CPU 대신 장치 컨트롤러와 상호작용하며 입출력 작업을 수행함
- 이때 DMA 컨트롤러는 필요한 경우 메모리에 직접 접근하여 정보를 읽거나 씀
- 입출력 작업이 끝나면 DMA 컨트롤러는 CPU에 인터업트를 걸어 작업이 끝났음을 알림
- 사이클 스틸링은 CPU 입장에서는 마치 버스에 접근하는 주기를 도둑맞은 기분이 드는 DMA의 시스템 버스 이용
입출력 버스
- 장치 컨트롤러들이 시스템 버스가 아닌 입출력 버스로 DMA 컨트롤러를 입력하게 해 시스템 버스의 사용 빈도를 줄임
- 입출력 버스에는 PCI 버스, PCI Express(PCIe) 버스 등이 있음
- 우리가 사용하는 거의 모든 입출력 장치들은 이렇게 입출력 버스와 연결되는 통로를 통해 시스템 버스와 CPU를 주고 받음
'공부 기록일지' 카테고리의 다른 글
유성이의 공부일지(10) - 혼자공부하는 컴퓨터 구조 + 운영체제 10장 (0) | 2024.07.10 |
---|---|
유성이의 공부일지(9) - 혼자공부하는 컴퓨터 구조 + 운영체제 9장 (0) | 2024.07.09 |
유성이의 공부일지(7) - 혼자공부하는 컴퓨터 구조 + 운영체제 7장 (0) | 2024.07.07 |
유성이의 공부일지(6) - 혼자공부하는 컴퓨터 구조 + 운영체제 6장 (0) | 2024.07.06 |
유성이의 공부일지(5) - 혼자공부하는 컴퓨터 구조 + 운영체제 5장 (0) | 2024.07.04 |