입출력장치 [Computer Architecture]

SnowCat·2023년 1월 9일
0
post-thumbnail

장치 컨트롤러

  • 일반적으로 입출력장치보다 CPU, 메모리보다 다루기 더 까다로움
    입출력 장치의 종류는 매우 많음 -> 다양한 입출력 장치와 정보를 주고받는 방식을 규격화하기 어려움
    CPU와 메모리의 데이터 전송률은 높지만, 입출력 장치의 데이터 전송률은 낮음
  • 따라서 입출력장치는 장치 컨트롤러를 통해 컴퓨터와 정보를 주고받게 됨

장치 컨트롤러의 역할

  • CPU와 입출력장치간의 통신중개
  • 오류 검출
  • 데이터 버퍼링 (버퍼에 데이터를 저장해 전송률을 비슷하게 맞춰줌)

장치 컨트롤러의 구조

  • 장치 컨트롤러는 버스에 연결되서 정보를 주고받게 됨
  • 정보로는 데이터, 상태, 제어가 있으며, 이는 각각의 레지스터에 저장됨
    데이터 레지스터: CPU와 입출력 장치 사이에 주고받을 데이터가 담기는 레지스터로, RAM을 사용하기도 함
    상태 레지스터: 입출력장치가 작업을 할 준비가 됬는지, 작업이 완료됬는지, 오류는 없는지 등의 상태 정보 저장
    제어 레지스터: 입출력장치가 수행할 내용에 대한 제어 정보를 저장

장치 드라이버

  • 장치 드라이버는 장치 컨트롤러의 동작을 감지하고 제어하는 프로그램
    장치 컨트롤러가 하드웨어적 통로라 하면, 장치 드라이버는 입출력장치를 연결하기 위한 소프트웨어적 통로
  • 장치 드라이버를 인식하고 실행시켜주는 것은 운영체제임

입출력 방법

1. 프로그램 입출력

  • 프로그램 속 명령어를 통해 입출력 장치를 제어하는 방법
  • 입출력 명령어를 통해 장치 컨트롤러의 레지스터 값을 읽고 씀으로서 이루어짐
    ex) 메모리에 저장된 정보를 하드 디스크에 백업시
    1. CPU가 하드 디스크 컨트롤러의 제어 레지스터에 쓰기 명령을 내보냄
    2. 하드 디스크 컨트롤러는 하드 디스크 상태를 확인하고 상태 레지스터에 준비완료 표시를 하게 됨
    3. CPU는 상태 레지스터를 주기적으로 읽어보면서 하드 디스크가 준비됨을 확인하면 백업할 메모리의 정보를 데이터 레지스터에 작성하게 됨
    4. 백업 작업이 진행중이면 1번으로 돌아가서 백업이 완료될때까지 반복해 진행함
  • 레지스터 값을 알아내는 방식에 따리 구체적인 방법으로 메모리 맵 입출력, 고립형 입출력 방식으로 나뉘게 됨

메모리 맵 입출력

  • 메모리에 접근하기 위한 주소 공간과 입출력장치에 접근하기 위한 주소 공간을 하나의 주소 공간으로 간주하는 방법
    각각의 장치의 레지스터 주소를 메모리에 부여하고 작업을 할 때 메모리 접근 명령어를 그대로 사용
  • 메모리 주소 공간이 축소됨

고립형 입출력

  • 메모리를 위한 주소 공간과 입출력 장치를 위한 주소 공간을 분리하는 방법
  • 주소 공간을 메모리와 입출력 장치 양쪽에 전부 할당할 수 있지만 입출력시에는 입출력 전용 명령어를 사용해야 함

인터럽트 기반 입출력

  • 인터럽트를 사용해 입출력 장치를 제어하는 방법
  • 하드웨어 인터럽트는 장치 컨트롤러에 의해 발생함
  • 프로그램 입출력에 비해 효율적인 CPU사용이 가능함
  • 인터럽트가 동시에 여러개가 발생했을 경우 순서대로 처리할 수도 있지만, 우선순위를 반영해 인터럽트를 처리할 수도 있음

PIC(Programmable Interrupt Controller)

  • 여러 장치 컨트롤러에 연결되어 장치 컨트롤러의 하드웨어 인터럽트의 우선순위를 판단해 CPU에 처리할 인터럽트가 무엇인지 판단하게 해주는 하드웨어
  • NMI(마스크 불가능 인터럽트 -> 매우 긴급한 인터럽트) 우선순위까지 판단하지는 않음

DMA 입출력

  • DMA 컨트롤러를 통해 CPU를 거치지 않고 입출력 장치가 메모리에 직접적으로 접근하는 방식
  • CPU가 DMA 컨트롤러에 입출력 작업을 명령하면 DMA 컨트롤러가 CPU 대신 장치 컨트롤러와 상호작용하며 입출력 작업을 함
  • 입출력 작업이 완료되면 DMA컨트롤러가 인터럽트를 통해 CPU에 작업의 완료를 알림
  • 필요한 경우 DMA 컨트롤러는 메모리에 직접 접근함
  • DMA 컨트롤러가 입출력을 할 때 시스템 버스를 사용하는데, 시스템 버스는 공용 자원이여서 CPU와 동시 사용 불가능
  • 따라서 DMA 컨트롤러는 CPU가 시스템 버스를 이용하지 않을때마다 조금씩 시스템 버스를 사용하거나, CPU가 일시적으로 시스템 버스를 이용하지 않도록 하고 시스템 버스를 사용함 -> Cycle stealing

입출력 버스

  • DMA 컨트롤러가 시스템 버스를 사용했을 때 불필요하게 시스템 버스를 2번 사용해야함 (읽고 쓸때 한번씩)
  • 입출력 버스를 활용해 DMA 컨트롤러가 시스템 버스를 사용하는 빈도를 줄이게 됨
  • 입출력 버스에는 PCI, PCIe 버스 등이 있음

출처:
https://www.youtube.com/watch?v=RRgGVu8OCP4&list=PLVsNizTWUw7FCS83JhC1vflK8OcLRG0Hl&index=23
혼자 공부하는 컴퓨터 구조+운영체제, 강민철, 한빛미디어

profile
냐아아아아아아아아앙

0개의 댓글