[혼공컴운] 혼공단 11기 - 3주차 (8장)

shyn26·2024년 1월 21일
0

혼공학습단

목록 보기
8/20

8. 입출력장치

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

장치 컨트롤러

  • 장치 컨트롤러는 입출력 제어기(I/O controller), 입출력 모듈(I/O module) 등으로 다양하게 불리지만, 여기서는 장치 컨트롤러라고 부르겠음
  • 입출력장치는 앞서 학습한 CPU, 메모리보다 다루기가 더 까다로운 두 가지 이유
    1. 종류가 너무 많음
    2. CPU와 메모리의 데이터 전송률은 높지만, 입출력장치의 데이터 전송률은 낮음

[장치 컨트롤러의 역할]

  • CPU와 입출력장치 간의 통신 중개
  • 오류 검출
  • 데이터 버퍼링

[장치 컨트롤러의 간단한 내부 구조]

  • 데이터 레지스터(data registe) : CPU와 입출력장치 사이에 주고받을 데이터가 담기는 레지스터
  • 상태 레지스터(status register) : 입출력장치가 입출력 작업을 할 준비가 되었는지, 입출력 작업이 완료되었는지, 입출력장치에 오류는 없는지 등의 상태 정보가 저장
  • 제어 레지스터(control register) : 입출력장치가 수행할 내용에 대한 제어 정보와 명령을 저장

장치 드라이버

  • 장치 컨트롤러의 동작을 감지하고 제어함으로써 장치 컨트롤러가 컴퓨터 내부와 정보를 주고받을 수 있게 하는 프로그램

8-2. 다양한 입출력 방법

프로그램 입출력(programmed I/O)

  • 기본적으로 프로그램 속 명령어로 입출력장치를 제어하는 방법
  1. 메모리에 저장된 정보를 하드 디스크에 백업한다.
    = 하드 디스크에 새로운 정보를 쓴다.
    → CPU는 하드 디스크 컨트롤러의 제어 레지스터에 쓰기 명령을 보냄

  2. 하드 디스크 컨트롤러는 하드 디스크 상태를 확인
    → 하드 디스크가 준비된 상태라면 하드 디스크 컨트롤러는 상태 레지스터에 준비되었다고 표시

  3. CPU는 상태 레지스터를 주기적으로 읽어보며 하드 디스크의 준비 여부를 확인 → 하드 디스크가 준비됐음을 CPU가 알게 되면 백업할 메모리의 정보를 데이터 레지스터에 씀


인터럽트 기반 입출력(Interrupt-Driven I/O)

[폴링(polling)]

  • 인터럽트와 자주 비교되는 개념
  • 입출력장치의 상태는 어떤지, 처리할 데이터가 있는지를 주기적으로 확인하는 방식
  • 인터럽트 방식보다 CPU의 부담이 더 큼

🤔 컴퓨터 속 CPU가 동시다발적으로 발생하는 키보드, 마우스, 모니터, 스피커 인터럽트를 모두 처리해야 한다.
→ 여러 입출력장치에서 인터럽트가 동시에 발생한 경우에는 인터럽트들을 어떻게 처리해야 할까?

  • 순차적으로 처리할 때도 있지만, 보통 우선순위를 고려해서 여러 인터럽트를 처리함
  • 우선순위를 반영해서 인터럽트들을 처리하는 여러가지 방법이 있지만, 보통 프로그래머블 인터럽트 컨트롤러 (PIC; Programmable Interrupt Controller) 라는 하드웨어를 사용

[PIC]

  • 여러 장치 컨트롤러에 연결되어 장치 컨트롤러에서 보낸 하드웨어 인터럽트 요청들의 우선순위를 판별한 뒤 CPU에 지금 처리해야 할 하드웨어 인터럽트는 무엇인지를 알려주는 장치

DMA 입출력

  • 입출력장치와 메모리가 CPU를 거치지 않고도 상호작용할 수 있는 입출력 방식인 DMA(Direct Memory Access)가 등장
  • DMA 입출력을 하기 위해서는 시스템 버스에 연결된 DMA 컨트롤러라는 하드웨어가 필요
profile
Without haste, but without rest - J.W. von Goethe

0개의 댓글