21강 : 다양한 입출력 방법
입출력 방식 :
메모리에 저장된 정보를 하드 디스크에 백업(=하드 디스크에 새로운 정보 쓰기)
CPU가 하드 디스크 컨틀롤러의 제어 레지스터에 쓰기 명령 내보냄
하드 디스크 컨트롤러가 하드 디스크 상태 확인 → 상태 레지스터에 준비 완료 표시
CPU가 상태 레지스터를 주기적으로 읽어보며 하드 디스크의 준비 여부 확인
하드 디스크가 준비가 되면, 백업할 메모리의 정보를 데이터 레지스터에 쓰기
(백업(쓰기)작업이 끝나지 않으면 1번부터 다시 반복, 쓰기 끝나면 종료)
CPU가 장치 컨트롤러의 레지스터의 위치를 아는 방법
메모리 맵 입출력 : 메모리에 접근하기 위한 주소공간과, 입출력장치에 접근하기 위한 주소공간을 하나의 주소 공간으로 간주하는 방법
고립형 입출력 : 메모리와 입출력 장치를 위한 주소공간을 분리하는 방법
처리방식 → 동시다발적인 인터럽트 : 우선순위를 반영한 인터럽트
How? → PIC(Programmable Interrupt Controller) 를 통해
여러 장치 컨트롤러에 연결
장치 컨트롤러의 하드웨어 인터럽트의 우선순위를 판단(NMI는 판단 안함)
CPU에게 지금 처리해야 하는 인터럽트가 무엇인지 알려주는 하드웨어
주로 더 많고 복잡한 장치들의 인터럽트를 관리하기 위해 PIC 두개 이상 계층적으로 구성
프로그램 입출력, 인터럽트 기반 입출력 공통점
DMA 입출력(Direct Memory Access)
: CPU를 거치지 않고 입출력장치가 메모리에 직접적으로 접근하는 기능(대신, DMA컨트롤러 필요)
CPU가 DMA 컨트롤러에 입출력 작업 명령
DMA 컨트롤러가 CPU 대신 장치 컨트롤러와 상호작용하며 입출력 작업 수행
입출력 작업 끝나면 DMA 컨트롤러가 인터럽트를 통해 CPU한테 작업 끝났다고 알림
⇒결과적으로 CPU는 입출력 작업의 시작과 끝만 관여하면 됨
문제1 : DMA 컨트롤러도 시스템 버스를 사용하는데, 시스템 버스는 공용자원이라서 동시사용 불가
→그래서 (Cycle stealing)
문제2 : 사실 장치 컨트롤러를 시스템 버스에 연결시키는게 효율적인 면에서 너무 안 좋음
→ 그래서 입출력버스라는 별도의 버스를 만들어 그림과 같은 구조로 해결
현대에는 DMA가 발전해서 입출력장치 자체에서 DMA가 일을 처리하게 함 : 입출력 프로세서