ComputerScience/컴퓨터 구조

[컴퓨터 구조] 장치 컨트롤러, 장치 드라이버

ruu++ 2024. 9. 6. 23:04

이 글은 혼자 공부하는 컴퓨터 구조 + 운영체제 (저자 : 강민철)의 책과 유튜브 영상을 참고하여 개인적으로 정리하는 글이라는 것을 알립니다!!.

1. 장치 컨트롤러

1.1 입출력 장치의 종류는 너무 많습니다.

  • 장치마다 속도, 데이터, 전송 방식 모두 다양한 방식을 제공합니다.
  • 어떤 것은 한국어지만, 어떤 장치는 영어 기반, 어떤 장치는 중국어 기반일 수도 있습니다.

1.2 CPU와 메모리의 데이터 전송률보다 입출력 장치의 데이터 전송률은 낮습니다.

  • what? 전송률: 얼마나 데이터를 빨리 교환할 수 있는지를 나타내는 지표
  • 전송률차이는 컴퓨터와 입출력 장치의 소통을 어렵게 합니다.
  • 그래서 장치 컨트롤러에 의해서 관리됩니다.
  • 장치 컨트롤러입출력 제어기,입출력 모듈 등 으로 다양하게 불립니다.

1.3 장치 컨트롤러

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

데이터 버퍼링?

전송률 차이로 버퍼라는 임시 공간에 데이터를 한 번에 많이 받아 조금씩 보내는 방식입니다.

1.3.1 데이터 레지스터

레지스터 구조
레지스터 구조

  • CPU와 입출력장치 사이에서 주고 받을 데이터가 담기는 레지스터입니다.
  • 데이터 레지스터가 버퍼 역할을 하며, 레지스터 대신 RAM을 사용하기도 합니다.

1.3.2 상태 레지스터

  • 입출력장치가 입출력 작업 진행 전인지, 작업이 완료 되었는지 오류가 없는지에 대한 상태 정보가 저장됩니다.

1.3.3 제어 레지스터

  • 입출력 장치가 수행할 내용에 대한 제어 종보와 명령을 저장합니다.

1.4 장치 드라이버

  • 장치 컨트롤러의 동작을 감지하고 제어
  • 장치 컨트롤러가 컴퓨터 내부와 정보를 주고받을 수 있게 하는 프로그램
  • 장치 컨트롤러가 입출력 장치와 연결을 위한 하드웨어라면 장치 드라이버는 소프트웨어 입니다.

2. 다양한 입출력 방법

2.1 프로그램 입출력

  • 프로그램 속 명령어로 입출력장치를 제어하는 방법

2.2.1 프로그램 입출력의 동작

흐름1
흐름1

  1. 제어 레지스터에 새로운 정보를 쓰기위해 CPU가 명령을 보냅니다.

제어 레지스터
흐름 2

  1. 하드 디스크 컨트롤러가 하드 디스크의 상태를 확인하고 준비된 상태라면 상태 레지스터에 표시합니다.

흐름3
흐름 3

  1. 상태 레지스터는 주기적으로 읽으면서 하드 디스크의 준비 여부를 확인합니다.
  2. 하드 디스크가 준비 상태임을 알게 되면 백업할 메모리의 정보를 데이터 레지스터에 씁니다.
  3. 쓰기 작업이 끝나지 않았다면 1번 작업부터 다시 시작하고 그게 아니라면 종료합니다.

2.2 메모리 맵 입출력

메모리 맵
메모리 맵 입출력

  • 메모리에 접근하기 위한 주소 공간과 입출력장치에 접근하기 위한 주소공간을 하나의 주소 공간으로 간주하는 방법입니다.
  • 1024개의 주소를 절반으로 나눠 512개의 메모리 주소, 512개의 장치 컨트롤러 레지스터를 표현하기 위해서 사용하는 것입니다.

2.3 고립형 입출력

  • 고립형 입출력은 메모리 주소를 위한 주소 공간과 입출력 장치를 위한 주소 공간을 분리하는 방법입니다.
  • CPU가 입출력장치에 접근하기 위해 메모리에 접근하는 명령어와 다른 입출력 명령어를 사용합니다.

2.4 인터럽트 기반 입출력

  • 인터럽트 기반의 입출력을 말합니다.
  • 장치 컨트롤러가 작업을 끝내고 CPU에ㅔ게 인터럽트 요청 신호를 보냅니다. 그리고 인터럽트 서비스 루틴을 실행합니다.

2.4.1 인터럽트의 처리 방법

  • 인터럽트간 우선순위를 고려해서 우선순위가 높은 인터럽트 순으로 여러 인터럽트를 처리합니다.
  • 인터럽트 비트를 비활성화해도 무시할 수 없는 NMI가 발생한 경우 CPU는 우선순위가 높은 인터럽트부터 처리합니다.

2.4.2 다중 인터럽트 처리를 위한 PIC

  • 프로그래머블 인터럽트 컨트롤러(Programmable Interupc Controller)라는 하드웨어를 사용합니다.
  • PIC가 무시할 수 없는 인터럽트 NMI의 우선순위는 처리하지 못합니다.
  • PIC가 우선순위를 조정해줄 수 있는 것은 인터럽트 비트를 통해서 막을 수 있는 인트럽트 뿐 입니다.

2.4.2 PIC의 처리 과정

PIC 처리과정

  1. PIC가 장치 컨트롤러에서 인터럽트 요청 신호를 받습니다.
  2. PIC는 인터럽트 우선순위를 판단하고 CPU에 처리해야 할 인터럽트 요청 신호를 보냅니다.
  3. CPU는 PIC에서 인터럽트 확인 신호를 보냅니다.
  4. PIC는 데이터 버스를 통해 CPU에 인터럽트 벡터를 보냅니다.
  5. CPU는 인터럽트 벡터를 통해 인터럽트 요청의 주체를 알게 되고, 해당 장치의 입터럽트 서비스 루틴을 실행합니다.

2.5 DMA 입출력

  • 입출력 장치와 장치 컨트롤러의 데이터 전송에는 반드시 CPU가 거쳐야 하는 문제가 발생합니다.
  • 특히, HDD와 같은 장치에 대용량 백업을 하는 경우 CPU 부담이 더욱 커질 수 있습니다.
  • 그래서, 입출력장치와 메모리가 CPU를 거치지 않고도 상호작용이 가능한 DMA(Direct Memory Access)가 등장합니다.
  • DMA 컨트롤러라는 하드웨어를 사용합니다.

2.5.1 DMA 입출력 과정

  • 메모리 내의 정보를 하드디스크에 백업하는 경우의 DMA 과정입니다.

DMA 입출력 과정
DMA 입출력 과정

  1. CPU는 DMA 컨트롤러에 하드 디스크 주소, 수행할 연산, 백업할 내용이 저장된 메모리 주소 등의 정보와 함께 입출력 작업을 명령합니다.
  2. DMA 컨트롤러는 CPU를 거치지 않고 메모리와 직접 상호작용하며 백업할 정보를 읽어오고, 이를 하드 디스크의 장치 컨트롤러에 내보냅니다.
  3. 백업이 끝났으면 DMA 컨트롤러는 CPU에게 인터럽트 요청 신호를 보내 작업이 끝났음을 알립니다.

2.5.2 DMA 컨트롤러는 시스템 버스를 사용합니다.

  • CPU가 시스템 버스를 이용하지 않을 때마다 조금씩 시스템 버스를 이용합니다.
  • CPU가 일시적으로 시스템 버스를 사용하지 않도록 허락을 구하고 시스템 버스를 집중적으로 사용합니다.

2.6 입출력 버스

  • 2.5.1의 입출력 과정 2번에서 데이터를 가져오기 위해 1번 사용하고 DMA 컨트롤러의 데이터를 장치로 옮기는 것까지 2번의 접근이 필요합니다. 이러면 CPU가 시스템 버스를 그만큼 사용하지 못하게 됩니다. 그래서 나온 방식이 입출력 버스 입니다.

 

입출력 버스
입출력 버스

  • 입출력 버스를 별도로 DMA 컨트롤러와 연결되어 서로 데이터를 전송할 때, 시스템 버스를 사용할 일이 없게 됩니다.
  • 입출력 버스는 PCI 버스, PCL Express(PCle) 버스 등 여러 종류가 있습니다.
  • 여러 버스와 연결해 주는 통로를 PCie 슬롯이라고 합니다.

 

긴 글 읽어주셔서 감사합니다.