다양한 입출력 방법

song·2023년 5월 1일
0

장치 컨트롤러와 CPU가 정보를 주고 받는 방법

  • 프로그램 입출력
  • 인터럽트 기반 입출력
  • DMA 입출력

프로그램 입출력

  • 프로그램 속 명령어로 입출력장치를 제어하는 방법
  • CPU가 프로그램 속 명령어를 실행하는 과정에서 입출력 명령어를 만나면 CPU는 입출력장치에 연결된 장치 컨트롤러와 상호작용하여 수행
  • CPU가 장치 컨트롤러의 레지스터 값을 읽고 씀으로써 이루어짐


    ex) 메모리에 저장된 정보를 하드 디스크에 백업하는 과정

근데, CPU는 레지스터들을(입출력장치들의 주소) 어떻게 알까 ❓❓

💡 2가지 방식이 있음

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


    • 메모리 맵 입출력 방식에서 CPU는 메모리의 주소들이나 장치 컨트롤러의 레지스터들이나 모두 똑같이 메모리 주소를 다룸



  • 고립형 입출력
    • 메모리를 위한 주소 공간과 입출력장치를 위한 주소 공간을 분리하는 방법


    • CPU가 메모리 읽기/쓰기 선이 활성화되는 명령어를 실행하면 메모리에 접근하고, 입출력장치 읽기/쓰기 선이 홠성화되면 명령어를 실행하면 장치 컨트롤러에 접근
      즉, 사용 목적에 따라 전용 명령어가 있음

정리

인터럽트 기반 입출력

  • 말 그대로 인터럽트를 기반으로 하는 입출력
  • 입출력장치에 의한 하드웨어 인터럽트는 정확히 말하면 입출력장치가 아닌 장치 컨트롤러에 의해 발생


    CPU가 장치 컨트롤러에 입출력 작업 명령

    장치 컨트롤러가 입출력장치를 제어하며 입출력을 수행하는 동안 CPU는 다른 작업 가능

    장치 컨트롤러가 입출력 작업 완료하고 CPU에게 인터럽트 요청 신호 보냄

    CPU 하던 작업 백업시키고 인터럽트 서비스 루틴 실행


동시에 여러 인터럽트가 발생한다면❓❓

💡 간단한 방법: 순차적으로 처리
하지만, 현실적으로 모든 인터럽트를 순차적으로 처리할 순 없음 😭

  • 이유
    • NMI(Non Mask Interrupt)가 발생하면 우선순위가 높은 인터럽트부터 처리되기 때문.
    • 플래그 레지스터 속 인터럽트 비트가 활성화되어있는 경우


💡 우선순위를 반영하여 인터럽트를 처리하는 방법

프로그래머블 인터럽트 컨트롤러(PIC)라는 하드웨어를 사용

  • PIC
    • 여러 장치 컨트롤러에 연결됨
    • 장치 컨트롤러의 하드웨어 인터럽트의 우선순위 판단해줌 (NMI 우선순위는 판단 안함)
    • CPU에게 지금 처리해야 할 인터럽트 알려줌
    • 보통 여러 개를 계층적으로 사용

Q. 프로그램 기반 입출력, 인터럽트 기반 입출력에 공통점은❓❓

A. 입출력장치와 메모리 간의 데이터 이동을 CPU가 주도하고, 이동하는 데이터도 반드시 CPU를 거친다는 점

🚨 혼자서 하는 일도 많은 CPU는 입출력장치를 위한 연산 때문에 더 바빠짐

그래서 나온 게 DMA(Direct Memory Access)

DMA 입출력

  • 직접 메모리에 접근할 수 있는 입출력 기능
  • 시스템 버스에 연결된 DMA 컨트롤러라는 하드웨어가 필요

과정

CPU는 DMA 컨트롤러에 입출력 작업을 명령

DMA 컨트롤러는 CPU 대신 장치 컨트롤러와 상호작용하며 입출력 작업을 수행
(필요하면 DMA 컨트롤러는 메모리에 직접 접근)

입출력 작업이 끝나면 DMA 컨트롤러는 인터럽트를 통해 CPU에 작업이 끝났음을 알림

📍 생각해볼 문제

DMA 컨트롤러는 시스템 버스로 메모리에 직접 접근 가능하다. (시스템 버스는 동시 사용 불가)
그럼, DMA 컨트롤러와 CPU가 시스템 버스를 동시에 써야 한다면?

  • CPU가 쓰지 않을 때, 사용하기
  • CPU가 일시적으로 사용하지 않는다는 허락을 구하고 사용

✍ 용어

사이클 스틸링: CPU입장에 시스템 버스 사용 주기를 뺏았긴 기분을 뜻함


입출력 버스

시스템 버스를 너무 자주 이용하는 DMA 컨트롤러
그래서, 시스템 버스 이용 빈도를 낮추기 위해 입출력 버스가 생김
ex)
PCI 버스, PCI express (PCIe) 버스 등등

<출처>
"혼자 공부하는 컴퓨터구조+운영체제".강민철.https://www.youtube.com/playlist?list=PLVsNizTWUw7FCS83JhC1vflK8OcLRG0Hl (2023.05.01)


책과 강의를 통해 학습한 내용을 요약 정리했습니다.
profile
인간은 적응의 동물

0개의 댓글