profile image

L o a d i n g . . .

입출력 시스템

- 컴퓨터의 주요한 두 가지 작업은 연산 작업, 입출력 작업

- 마우스, 키보드, 모니터와 같은 다양한 장치들이 컴퓨터와 잘 동작하게 하려면 둘 사이에 공통된 인터페이스 존재해야 함

- 컴퓨터와 하드웨어 장치 사이의 공통된 인터페이스 역할을 수행하는 것이 입출력 관리의 핵심

- 운영체제 커널이 다양한 입출력 장치들의 차이를 가려주기 위해 장치 구동기 모듈 사용

- 장치 구동기는 모든 하드웨어를 일관된 인터페이스로 표현


입출력 하드웨어의 구성

- 하드웨어 장치는 케이블을 통하거나, 무선으로 신호를 보내어 컴퓨터와 통신 함

- 이때, 포트를 통해 컴퓨터에 접속하는데 하드웨어 장치의 또 다른 구성요소는 제어기임

  • 제어기: 포트 또는 입출력 장치를 제어하는 전자회로의 집합체, 많은 입출력 장치는 제어기를 내장함

- 모든 제어기는 레지스터를 가짐

- 컴퓨터 프로세스는 제어기 레지스터에 bit pattern 을 쓰거나 읽음으로써 입출력을 실행함


입출력 하드웨어 동작

폴링

- 장치 제어기의 레지스터에는 busy bit이 있음

  • busy bit: 현재 장치가 사용 가능한 상태인지, 다른 작업을 처리하는 중이어서 사용이 불가능한 상태인지를 나타내는 bit
  • 1: 제어기 작업 중
  • 0: 제어기 준비 중

- 컴퓨터는 장치가 사용 중인지를 알기 위해 주기적으로 busy bit을 검사해야 하는데, 이 과정을 폴링이라고 함

- 폴링 자체는 컴퓨터 자원 많이 소요 안 하지만, 장치가 준비하는 시간이 길어질 경우 매우 비효율적인 단점 존재

- 이런 경우, 제어기가 자신의 상태가 바뀔 때 컴퓨터에 통보해주는 방식으로 비효율을 막을 수 있음

- 이때 발생시키는 신호가 인터럽트


인터럽트

- 인터럽트: CPU가 프로그램을 실행하고 있을 때, 입출력 하드웨어 등의 장치나 예외상황이 발생하여 처리가 필요한 경우에 CPU에게 알려 처리할 수 있도록 하는 것

- CPU는 인터럽트 요청 라인이라는 선을 가지는데 CPU는 매번 명령어를 끝내고 다음 명령어를 수행하기 전에 이 선을 검사함

- 만약 입출력 장치의 준비가 완료되어서 인터럽트 요청 라인에 신호를 보내면, CPU는 인터럽트 확인 후 인터럽트 핸들러 실행함

  • 인터럽트 핸들러: 입출력 장치를 서비스함으로써 입터럽트 처리

- CPU는 인터럽트 발생 시, 직전 작업 상태를 저장해두고 인터럽트 처리함

- 인터럽트 처리가 완료된 이후에는 인터럽트가 발생하기 전의 상태로 복구시켜 중단되었던 작업 재개함

 


인터럽트 작업 순서

  1. 사용자가 키보드를 사용해 입력하면 키보드 컨트롤러가 인터럽트를 발생, CPU에게 알림
  2. CPU는 현재 수행 중이던 작업의 상태를 저장, 인터럽트 요청을 처리하기 위해 운영체제 내에 정의된 키보드 인터럽트 처리 루틴을 찾음
  3. 키보드 인터럽트 처리 루틴을 실행, 완료
  4. 인터럽트 처리가 끝나면 인터럽트가 발생하기 직전 상태를 복구시켜 중단되었던 작업을 재개

직접 메모리 접근 (DMA, Direct Memory Access)

왼쪽: DMA 장치가 없는 경우, 오른쪽: DMA 장치가 있는 경우, 출처: www.quora.com/What-is-the-function-of-DMA-in-a-computer

- CPU를 사용하여 디스크와 같은 대용량 입출력 장치의 데이터를 읽으면 CPU 사용량이 매우 많아져 컴퓨터 성능이 심각하게 저하되는 문제 발생함

- 이러한 CPU의 낭비를 막기 위해서 PIO를 DMA 제어기라고 불리는 특수 프로세서에게 위임하여 CPU의 일을 줄임

// PIO: CPU가 1 Byte씩 옮기는 입출력 방식

- 컴퓨터는 메모리에 DMA 명령 블록을 쓰는데, 이 블록에는 전송할 데이터가 있는 곳의 포인터 + 전송할 장소에 대한 포인터 + 전송될 바이트 수가 기록 됨

- CPU는 DMA 명령 블록의 주소를 DMA에게 알려주고 자신의 다른 일을 처리함

- DMA는 CPU의 도움 (개입) 없이 자신이 직접 버스를 통해 DMA 명령 블록에 접근하여 입출력을 실행함


DMA의 작업 순서

  1. CPU가 입출력 요청을 보냄
  2. DMA 제어기의 레지스터에 주소와 전송 길이가 저장
  3. DMA 제어기는 한 블록의 입출력 동작을 수행, 그동안 CPU는 다른 작업을 함
  4. 입출력 동작 완료 시 DMA 제어기는 CPU에게 완료했다는 인터럽트를 보냄

참고

1. https://velog.io/@ragi/Back-end-%EC%9E%85%EC%B6%9C%EB%A0%A5IO-%EA%B4%80%EB%A6%AC

복사했습니다!