[혼공컴운] 3주차 - 입출력장치 (chapter 8)

회색몽구스·2023년 1월 20일
0

chapter 08 입출력장치

08-1 장치 컨트롤러와 장치 드라이버

핵심 키워드: 장치 컨트롤러, 장치 드라이버

장치 컨트롤러 - 하드웨어

입출력장치는 앞서의 CPU, 메모리보다 다루기가 더 까다롭습니다. 그 이유는?

  1. 입출력장치에는 종류가 너무나도 많습니다.
  2. 일반적으로 CPU와 메모리의 데이터 전송률은 높지만 입출력장치의 데이터 전송률은 낮습니다.

이를 해결하기 위해 입출력장치는 컴퓨터에 직접 연결되지 않고, 장치 컨트롤러라는 하드웨어를 통해 연결됩니다.

장치 컨트롤러의 대표적인 역할은?

  • CPU와 입출력장치 간의 통신 중개 - 번역기 역할
  • 오류 검출
  • 데이터 버퍼링: 버퍼에 데이터를 조금씩 모았다가 한꺼번에 내보내거나 (입출력장치에서 CPU 방향), 데이터를 한 번에 많이 받아 조금씩 내보내는 (CPU에서 입출력장치 방향) 방법

개략적인 장치 컨트롤러의 구성은?

  • 데이터 레지스터: CPU와 입출력장치 사이에 주고받을 데이터가 담기는 레지스터로 버퍼 역할을 합니다.
  • 상태 레지스터: 입출력장치가 입출력 작업을 한 준비가 되었는지, 작업이 완료되었는지, 오류는 없는지 등의 상태 정보가 저장됩니다.
  • 제어 레지스터: 입출력장치가 수행할 내용에 대한 제어 정보와 명령을 저장합니다.

장치 드라이버 - 소프트웨어

장치 드라이버란 장치 컨트롤러의 동작을 감지하고 제어함으로서 장치 컨트롤러가 컴퓨터 내부와 정보를 주고받을 수 있게 하는 프로그램입니다.

08-2 다양한 입출력 방법

핵심 키워드: 프로그램 입출력, 메모리 맵 입출력, 고립형 입출력, 인터럽트 기반 입출력, DMA 입출력, 입출력 버스

프로그램 입출력

  1. CPU는 하드 디스크 컨트롤러 (장치 컨트롤러)의 제어 레지스터에게 쓰기 명령을 보냅니다.
  2. 하드 디스크 컨트롤러는 하드 디스크 상태를 확인하고 하드 디스크가 준비된 상태라면 하드 디스크 컨트롤러는 상태 레지스터 에 준비되었다고 표시합니다.
  3. CPU는 상태 레지스터를 주기적으로 읽어보며 하드 디스크의 준비 여부를 확인하고, 준비 되었음을 알게되면 메모리의 정보를 데이터 레지스터 에 씁니다.

과정은 이렇게 된다는 것은 알았는데, CPU는 장치 컨트롤러의 레지스터와 주소값을 어떻게 알 수 있을까요?

메모리 맵 입출력 (memory-mapped I/O)

메모리에 접근하기 위한 주소 공간과 입출력장치에 접근하기 위한 주소 공간을 하나의 주소 공간으로 간주하는 방법입니다.

고립형 입출력 (isolated I/O)

메모리를 위한 주소 공간과 입출력장치를 위한 주소 공간을 분리하는 방법으로 제어 버스에 ‘입출력장치 읽기/쓰기’ 선이 따로 있습니다. 이를 위해서는 입출력 전용 명령어를 사용해야 합니다.

인터럽트 기반 입출력

입출력 장치 그 자체가 아닌 장치 컨트롤러가 하드웨어 인터럽트를 발생 시킵니다.

CPU는 장치 컨트롤러에 입출력 작업을 명령하고, 장치 컨트롤러가 입출력을 수행하는 동안 CPU는 다른 작업을 할 수 있습니다.

장치 컨트롤러가 입출력 작업을 끝낸 뒤 CPU에 인터럽트 요청 신호를 보내면 CPU는 하던 일을 잠시 백업하고 인터럽트 서비스 루틴을 실행합니다.

플래그 레지스터 속 인터럽트 비트가 활성화되어 있는 경우, 혹은 인터럽트 비트를 비활성화해도 무시할 수 없는 인터럽트인 NMI (non-maskable interrupt)가 발생한 경우, PIC (programmable interrupt controller)를 이용하여 인터럽트 요청들의 우선순위를 판별한 뒤 CPU에 지금 처리해야 할 하드웨어 인터럽트는 무엇인지 알려줍니다.

더 자세히 알아 보면 (앞선 04-3 에서 나온 내용이 많습니다!)

  1. PIC가 장치 컨트롤러의 인터럽트 요청 신호를 받아 들입니다.
  2. PIC는 우선순위를 판단한 후 CPU에 인터럽트 요청 신호를 보냅니다.
  3. CPU는 PIC에 인터럽트 확인 신호를 보냅니다.
  4. PIC는 데이터 버스를 통해 CPU에 인터럽트 벡터를 보냅니다.
  5. CPU는 인터럽트 벡터를 통해 인터럽트 요청의 주체를 알게 되고, 해당 장치의 인터럽트 서비스 루틴을 실행합니다.

DMA 입출력

입출력장치와 메모리가 CPU를 거치지 않고 상호작용할 수 있는 입출력 방식입니다.

DMA (direct memory access)는 직접 메모리에 접근할 수 있으며, 시스템 버스에 연결되어 있는 DMA 컨트롤러라는 하드웨어가 필요합니다.

DMA 입출력 과정

  1. CPU는 DMA 컨트롤러에게 정보를 전달하여 입출력 작업을 명령합니다.
  2. DMA 컨트롤러는 장치 컨트롤러와 상호작용하며 입출력 작업을 수행합니다. 이때 필요한 경우 메모리에 직접 접근하여 정보를 읽거나 씁니다.
  3. 입출력 작업이 끝나면 DMA 컨트롤러는 CPU에 인터럽트를 요청하여 작업이 끝났음을 알립니다.

CPU는 오로지 입출력의 시작과 끝에만 관여하면 됩니다. 하지만, 시스템 버스를 공유하는 문제가 있어… 다음에 계속

입출력 버스

DMA 컨트롤러와 장치 컨트롤러들을 입출력 버스라는 별도의 버스에 연결하여 해결할 수 있습니다.

현대 대부분의 컴퓨터에는 입출력 버스가 있어서 시스템 버스가 아닌 입출력 버스와 연결됩니다. 그 종류에는 PCI (peripheral component interconnect) 버스, PCI Express (PCIe) 버스가 있습니다.

profile
끄아아아아 할 수 있다

0개의 댓글