[혼공] CH08. 입출력장치

2023. 7. 27. 01:01카테고리 없음

컴퓨터의 4가지 주요장치 파트의 마지막이다.

01. 장치 컨트롤러와 장치 드라이버

사실 CPU와 입출력장치는 장치 컨트롤러 라는 하드웨어를 통해 간접적으로 정보를 주고받는다.
왜 장치컨트롤러가 사용될까?

 

장치 컨트롤러를 사용하는 이유

  1. 입출력장치의 종류는 너무나도 많다.
    필자가 사용중인 로지텍사의 버티컬 마우스, 삼성의 키보드 등등
    입출력장치 제작회사는 많고 입출력장치 종류도 너무나도 다양하다.

    그렇기 때문에 규격화하기엔 쉬운 일이 아니다.
  2. CPU와 메모리 전송률과 입출력장치 전송률의 상대적인 속도 차이
    * 전송률(transfer time) : 데이터를 얼마나 빨리 보낼 수 있는지에 대한 지표. 

    CPU는 전송률이 높아, 예를 들어 1초에 n천번 처리한다면,
    입출력장치는 전송률이 낮아 예를 들어 1초에 n백번 처리한다.

장치 컨트롤러의 역할

  1. CPU와 입출력장치의 통신 중개
  2. 오류 검출
  3. 데이터 버퍼링
    * 버퍼링 : 전송률 차이가 있는 기기 사이에서 버퍼라는 임시 저장공간에 데이터를 적재함. 한꺼번에 방출하거나, 조금씩 내보낸다.

     

장치 컨트롤러 버퍼링 처리

장치 컨트롤러 구조

장치 컨트롤러의 구조는 다음과 같다.

  • 데이터 레지스터
    CPU와 입출력 장치 사이에 주고받을 데이터가 담기는 레지스터이다. 
    앞서서 말한 버퍼 역할을 수행한다.
  • 상태 레지스터
    입출력장치의 상태, 오류확인 등의 상태 정보가 저장되어있다.
  • 제어 레지스터
    입출려장치가 수행할 내용에 대한 제어정보와 명령이 저장되어있다.

장치 드라이버

 장치 드라이버는 장치컨트롤러가 컴퓨터 내부와 정보를 주고받을 수 있게 하는 프로그램이다.

 


02. 다양한 입출력방법

그렇다면 장치 컨트롤러는 어떤 방법으로 CPU와 정보를 주고받을까?

여기에는 크게 3가지 방법이 존재한다.

 

    • 프로그램 입출력
      프로그램 속 명령어로 입출력 장치를 제어한다.
      즉, CPU가 입출력 관련 명령어를 만난다면 장치컨트롤러와 상호작용해서 입출력 작업을 수행한다.

      그렇다면 CPU는 어떻게 작업할 입출력장치의 레지스터 값들을 알고 있을까?
      여기에는 메모리 맵 입출력, 고립형 입출력으로 나뉜다. 

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

      입출력, 메모리 접근 시 주소공간이 같기 때문에 명령어가 같다.


메모리맵 입출력




- 고립형 입출력
메모리에 접근하기 위한 주소공간과 입출력장치에 접근하기 위한 메모리주소공간을 별도의 주소공간으로 간주한다.

고립형 입출력

  • 인터럽트 기반 입출력
    장치 컨트롤러가 입출력 작업 종료 등의 이유로 CPU에게 인터럽트를 날릴 때 발생한다.

    CPU는 입출력에 의한 인터럽트에 대한 처리를 하게 되는데, 동시다발적으로 인터럽트 처리요청이 오면 여러 규칙 중 하나를 적용해서 처리한다.
    • 순차적으로 인터럽트 처리하기(플래그 레지스터 > 인터럽트 비트 비활성화한 상태)
    • 우선순위 고려해서 처리하기(플래그 레지스터 > 인터럽트 비트 활성화한 상태 or NMI 발생한 경우 - 인터럽트 비트 비활성시에도 우선순위 고려함)
       이 경우, CPU는 이미 처리 중인 인터럽트 보다 우선순위가 높은 인터럽트 요청이 오면, 
      우선순위가 높은 인터럽트부터 처리한다.

      * NMI(Non-Maskable Interupt) : 무시할 수 없는 인터럽트 

  • DMA 입출력
    CPU는 입출력 동작에 관여하지 않고, DMA와 메모리가 입출력 동작을 수행한다.
    DMA 입출력을 위해서는 DMA 컨트롤러 라는 하드웨어가 필요하다.

    왜 CPU는 동작 관여하지 않는 방식이 생겼을까?
    그 이유는 입출력 처리와 동시에 타 작업을 수행하는 CPU의 부담을 줄여주기 위해서다.

 

  • 입출력 버스
    DMA 입출력은 시스템 버스를 이용한다. DMA 입출력 시, 시스템 버스를 2번 이용한다면, CPU는 그만큼 시스템 버스 이용이 불가능하다.

    그래서 입출력 버스라는 별도의 버스에 연결하는 방식으로 처리한다.

입출력 버스를 사용한 DMA 컨트롤러