입출력장치
장치 컨트롤러와 장치 드라이버
장치 컨트롤러
입출력장치는 컴퓨터에 직접 연결되지 않고 장치 컨트롤러라는 하드웨어를 통해 연결됨
이유
- CPU와 입출력장치 간의 통신 중개
- 오류 검출
- 데이터 버퍼링
➡️ 데이터 버퍼링 : 전송률이 빠른 CPU와 전송률이 느린 입출력장치를
버퍼라는 임시 저장 공간을 이용해 전송률을 비슷하게 맞추는 방법
장치 컨트롤러 : 실제론 더 복잡하지만 간략하게 데이터 레지스터 + 상태 레지스터 + 제어 레지스터
장치 드라이버 : 장치 컨트롤러가 컴퓨터 내부와 정보를 주고받을수 있게 하는 프로그램
다양한 입출력 방법
프로그램 입출력
프로그램 입출력 : 프로그램 속 명령어로 입출력장치를 제어하는 방법
- CPU가 제어 레지스터에 명령 전송
- 입출력장치가 작업 수행
- 입출력장치가 상태 레지스터에 현재 상태를 계속 업데이트하여 표시
- CPU가 상태 레지스터를 읽어 입출력장치의 상태 확인
- CPU가 데이터 레지스터에 데이터를 씀
프로그램 입출력 방식
메모리 맵 입출력:메모리에 접근하기 위한 주소 공간과 입출력장치에 접근하기 위한 주소 공간을 하나의 주소 공간으로 간주하는 입출력 방식
장점
- 같은 주소 공간을 사용하여 작업 속도가 빠름
- 메모리와 입출력장치에 같은 명령어를 사용 가능
단점
- 입출력장치가 메모리보다 느리기 때문에 효율성 저하
- 메모리 주소 공간의 일부를 입출력장치에 할당해야 되므로 사용 가능한 메모리 감소
고립형 입출력 :메모리를 위한 주소 공간과 입출력장치를 위한 주소 공간을 분리하는 입출력 방식
장점
- 별도의 주소 공간을 사용하므로 작업이 효율적
- 작업을 위한 더 큰 메모리 공간 제공
단점
- 분리된 공간을 사용해 명령어가 제한적
- 메모리형 입출력보다 작업 속도가 느림
인터럽트 기반 입출력
인터럽트 기반 입출력 : 인터럽트를 기반으로 하는 입출력
장치 컨트롤러 입출력 작업을 마침 ➡️ CPU에게 인터럽트 요청 신호 보냄 ➡️ CPU는 하던 일을 백업하고 인터럽트 서비스 루틴을 실행
여러 인터럽트가 동시에 발생했을 경우?: NMI ➡️ 우선순위 높은 인터럽트부터 순서대로 하나씩 처리, 인터럽트를 처리하기 위해 PIC를 사용
PIC: 여러 장치 컨트롤러에 연결되어 하드웨어 인터럽트 요청들의 우선순위를 판별하여 CPU에 해결 순서를 제시하는 장치
과정
- PIC가 장치 컨트롤러에서 인터럽트 요청 신호 승인
- PIC가 우선순위를 판별한뒤 CPU에 처리해야 할
인터럽트 요청 신호를 보냄 - CPU는 PIC에
인터럽트 확인 신호를 보냄 - PIC는 데이터 버스를 통해 CPU에
인터럽트 벡터를 전송 - CPU는 인터럽트 벡터를 통해 요청을 확인하고, 해당 장치의 인터럽트 서비스 루틴을 실행
DMA 입출력
DMA 입출력: 직접 메모리에 접근할 수 있는 기능, 시스템 버스에 연결된 DMA 컨트롤러라는 하드웨어가 필요함
과정
- CPU는
DMA 컨트롤러에 입출력장치의 주소, 수행할 연산, 메모리의 주소 등 정보로 입출력 작업을 명령 - DMA 컨트롤러가 CPU 대신 장치 컨트롤러와 상호작용하며 입출력 작업 수행
- 작업이 끝나면 CPU에 인터럽트를 걸어 작업 완료를 알림
‼️ 시스템 버스는 하나의 장치만 사용 가능하므로 CPU와 DMA 컨트롤러가 동시 사용 불가
➡️ 사이클 스틸링 : DMA 컨트롤러가 시스템 버스를 이용할때 CPU가 버스 사용을 일시정지 시키는 현상
입출력 버스
입출력 버스 : DMA 컨트롤러와 장치 컨트롤러들을 연결해주는 버스
➡️ DMA가 시스템 버스를 사용하면 그동안 CPU가 버스를 사용하지 못하므로 사용 빈도를 줄이기 위함
⭐️ 대표적으로 PCI,PCIe