[컴퓨터구조] 입출력장치

diveintoo·2024년 3월 6일
0

혼공컴운

목록 보기
8/15

📑 본 글은 <혼공컴운>을 읽고 정리한 글입니다.

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

까다로운 입출력장치..

  • 입출력장치에는 종류가 너무너무 많다.
    • 다양한 입출력장치와 정보를 주고받는 방식을 규격화하기 어렵다.
    • 사용하는 언어가 다 다르다고 생각해보자.
  • CPU와 메모리의 데이터 전송률은 높지만, 입출력장치의 데이터 전송률은 낮다.
    • 전송률(transfer rate) : 데이터를 얼마나 빨리 교환할 수 있는지
    • 전송률의 차이로 CPU와 메모리 - 입출력장치 간의 통신이 어렵다.

1-1. 장치 컨트롤러

장치 컨트롤러(device controller)

  • 모든 입출력장치는 장치 컨트롤러를 통해 컴퓨터 내부와 정보를 주고받는다.
    • 직접 연결 X, 이 하드웨어로 연결됨
    • 얘는 시스템 버스와 연결됨
  • = 입출력 제어기, 입출력 모듈
  • 장치 컨트롤러는 하나 이상의 입출력장치와 연결되어 있다.

장치 컨트롤러의 역할

  • CPU와 입출력장치 간의 통신 중계
  • 오류 검출
  • 데이터 버퍼링
    • 전송률이 높은 장치와 낮은 장치 사이에 주고받는 데이터를
    • 버퍼(임시 저장 공간)에 저장하여 전송률을 비슷하게 맞춘다.

장치 컨트롤러의 구조

  • 데이터 레지스터
    • 버퍼 역할
    • 최근에는 용량 때문에 레지스터 대신 RAM 사용하기도..
  • 상태 레지스터
    • 입출력장치의 상태 정보 저장(오류 있는지도)
  • 제어 레지스터
    • 제어 정보와 명령 저장

1-2. 장치 드라이버

새로운 장치를 컴퓨터에 연결하려면 장치 드라이버를 설치해야 한다.

장치 드라이버

  • 장치 컨트롤러가 컴퓨터 내부와 정보를 주고받을 수 있게 하는 소프트웨어 프로그램
    • 실행 과정에서 메모리에 저장!
  • 운영체제가 장치 드라이버를 인식하고 실행할 수 있다면 그 장치는 컴퓨터 내부와 정보를 주고받을 수 O

2. 다양한 입출력 방법

장치 컨트롤러는 어떻게 CPU와 정보를 주고받을까요??????????

2-1. 프로그램 입출력

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

  • 프로그램 속 명령어로 입출력장치를 제어한다.
  • CPU가 장치 컨트롤러의 레지스터 값을 읽고 씀으로써 이루어진다.
    • CPU가 컨트롤러의 제어 레지스터에 쓰기 명령 보냄
    • 상태 레지스터의 값을 주기적으로 읽어서 준비됐는지 체크함
      • 폴링(polling) : 입출력장치의 상태가 어떤지 주기적으로 확인하는 방식
    • 데이터 레지스터에 값 싹 보내버린다. 알아서 버퍼링하거라.
    • 상태 레지스터에 다 썼다 올라오면 확인.하고 끝

CPU가 장치 컨트롤러의 레지스터들을 어떻게 알고 read/write 할까?

  • 메모리 맵 입출력(memory-mapped I/O)
    • 메모리 안에 입출력장치를 위한 주소 공간을 매핑해둔다.
    • CPU가 메모리 주소나 장치 컨트롤러의 레지스터를 걍 똑같이 대하면 됨.
    • BUT! 메모리 주소 공간이 축소됨
  • 고립형 입출력(isolated I/O)
    • 메모리와 입출력장치를 위한 주소 공간 분리합니다.
    • 제어 버스에 ‘메모리 r/w’랑 ‘입출력장치 r/w’선을 따로 둔다.
    • 두 개에 접근하는 명령어가 달라진다…
    • 메모리 주소 공간 굳건하다.

2-2. 인터럽트 기반 입출력

인터럽트 기반 입출력

  • CPU는 장치 컨트롤러에 입출력 작업을 명령한다.
  • 장치 컨트롤러가 입출력을 수행하는 동안 CPU는 딴 일 함
  • 다 하면 CPU에 인터럽트 요청 신호를 보낸다.
  • CPU는 하던 일을 잠시 백업하고 인터럽트 서비스 루틴을 실행한다.

여러 입출력 장치에서 인터럽트가 동시에 발생하면 어떡해?

⇒ 우선순위가 높은 인터럽트 순. ex) NMI(non-maskable interrupt)

using 프로그래머블 인터럽트 컨트롤러(PIC: programmable interrupt controller)

  • 여러 장치 컨트롤러에 연결됨 HW
  • 걔네가 보낸 인터럽트 요청들의 우선순위 판별함
  • CPU에 뭘 먼저 해야하는지 알려줌.
  • PIC가 데이터 버스에 인터럽트 벡터 태워보냄
  • CPU가 그거 보고 인터럽트 서비스 루틴 실행함

2-3. DMA 입출력

CPU의 역할 DMA가 대신해드림. 원래 레지스터 맨날 거쳐가서 힘들었다구.

DMA(Direct Memory Access) 입출력

  • 입출력장치와 메모리가 CPU를 거치지 않고도 상호작용할 수 있는 입출력 방식
  • 시스템 버스에 연결된 DMA 컨트롤러 필요 HW
  • DMA 입출력 과정
    1. CPU는 DMA 컨트롤러에 입출력 작업 명령을 내리고 딴 일함.
    2. DMA는 메모리와 직접 상호작용하며, 입출력 작업 진두지휘.
    3. 끝나면 CPU에 인터럽트 걸어.

Nevertheless! 시스템 버스는 한 번에 한 장치만 쓸 수 있음

DMA 컨트롤러와 CPU의 시스템 버스 쟁탈기.. to be continued

방법 1) CPU가 안 쓸 때 조금씩 쓰기

방법 2) CPU에게 양해를 구하고 부리나케 쓴다.

사이클 스틸링(cycle stealing) : CPU 입장에서는 도둑맞은 심정


문제 상황

ㄱ. 원래 시스템 버스에 DMA 컨트롤러랑 장치 컨트롤러 줄줄이 연결됨

ㄴ. 그럼 메모리 접근, 장치 컨트롤러 접근 = 2번씩 시스템 버스 써야함

ㄷ. CPU 눈치보여요.

입출력 버스

  • 장치 컨트롤러들만의 버스 생성
  • 메모리 --시스템 버스-- DMA 컨트롤러 —입출력 버스-- 장치 컨트롤러
  • 시스템 버스 1회만 사용하겠음
  • 요새 대부분의 입출력장치(장치 컨트롤러)는 시스템 버스가 아닌 입출력 버스와 연결됨

0개의 댓글