입출력 관리

최정은·2022년 11월 2일
0

Backend Roadmap

목록 보기
20/23
post-thumbnail

컴퓨터의 주요한 두가지 작업은 연산 작업과 입출력 작업이다. 그중 입출력 작업은 컴퓨터에 연결된 다양한 입출력 하드웨어 장치들과 어떤 식으로 상호작용하는지에 관한 작업이다.

마우스, 키보드, 모니터 등 다양한 장치들이 컴퓨터와 잘 동작하게 하려면 둘 사이에 공통된 인터페이스가 존재해야 한다. 컴퓨터와 하드웨어 장치 사이의 공통된 인터페이스 역할을 수행하는 것이 입출력 관리의 핵심이다.

입출력 장치의 구성

하드웨어 장치는 케이블을 통해 또는 무선으로 신호를 보냄으로써 컴퓨터와 통신한다. 이때 포트를 통해 컴퓨터에 접속하는데, 하드웨어의 또 다른 구성요소는 제어기이다.

제어기는 포트나 입출력 장치를 제어하는 전자회로의 집합체이며, 많은 입출력 장치는 제어기를 내장하고 있다.

입출력 장치의 동작

1) 폴링 (polling)

모든 제어기는 레지스터를 가지는데, 제어기의 레지스터에는 busy bit 가 존재한다. busy bit는 현재 장치가 사용 가능한 상태인지, 다른 작업을 처리중이라 사용이 불가능한 상태인지를 나타내는 bit이다. 컴퓨터는 장치가 사용중인지 파악하기 위해 주기적으로 busy bit를 검사해야 한다. 이처럼 CPU가 입출력 장치의 상태를 수시로 체크하여 명령을 받을 수 있는지 확인하는 것을 폴링이라고 한다.

  • bit == 1 : 제어기가 작업하느라 바쁜 경우
  • bit == 0 : 제어기가 준비중인 경우

폴링 자체는 컴퓨터 자원이 많이 소요되지 않지만 CPU가 모든 입출력 작업에 관여하면 작업 효율이 현저하게 떨어진다. 제어기가 자신의 상태가 바뀔 때 컴퓨터에 통보해주는 방식으로 문제를 해결할 수 있다. 이때 발생시키는 신호를 인터럽트라고 한다.

2) 인터럽트 (interrupt)

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

CPU는 인터럽트 요청 라인이라고 하는 선을 가지는데 CPU는 매번 명령어를 끝내고 다음 명령어를 수행하기 전에 이 선을 검사한다. 만약 입출력 장치의 준비가 완료되어 인터럽트 요청 라인에 신호를 보내면, CPU는 인터럽트를 확인하고 인터럽트 핸들러를 실행한다.

인터럽트 핸들러는 입출력 장치를 서비스함으로써 인터럽트를 처리한다.

CPU는 인터럽트 발생 시, 직전 작업의 상태를 저장하고 인터럽트를 처리한다. 처리가 완료된 후, 인터럽트가 발생하기 전의 상태로 복구시켜 중단되었던 작업을 재개한다.

인터럽트 작업 예시

1) 사용자가 키보드를 사용해 입력하면 키보드 컨트롤러가 인터럽트를 발생시키고, CPU에게 알린다.

2) CPU는 수행중이던 작업의 상태를 저장하고 인터럽트 요청을 처리하기 위해 OS내에 정의된 키보드 인터럽트 처리 루틴을 찾는다.

3) 키보트 인터럽트 처리 루틴을 실행한다.
4) 인터럽트 처리가 끝나면 인터럽트가 발생하기 직전 상태를 복구시켜 중된되었던 작업을 재개한다.

3) DMA (Direct Memory Access)

메모리는 CPU만 접근 권한을 가진 작업 공간이다. DMA를 통해 입출력 장치와 메모리 사이의 데이터 전송을 CPU 개입 없이 수행한다.

만약 CPU를 사용하여 디스크와 같은 대용량 입출력 장치의 데이터를 읽으면 CPU 사용량이 매우 높아져 컴퓨터 성능을 저하시킨다.

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

PIO는 CPU가 데이터를 1바이트씩 옮기는 입출력 방식을 말한다.

입출력이 발생하면 컴퓨터는 메모리에 DMA 명령 블록을 쓴다. 이 블록에는 전송할 데이터가 있는 곳의 포인터와 전송할 장소에 대한 포인터, 전송될 바이트 수가 기록된다. CPU는 DMA 명령 블록의 주소를 DMA에게 알려주고 자신은 다른 일을 처리한다. 따라서 DMA는 CPU의 도움없이 자신이 직접 버스를 통해 DMA 명령 블록에 접근하여 입출력을 실행한다.

버스는 CPU와 메모리, 주변장치 간에 데이터를 주고받을 때 사용한다.

DMA 입출력 방식의 동작 과정


1) CPU가 DMA 제어기에 입출력 요청을 보낸다.

2) DMA 제어기의 레지스터에는 주소와 전송 길이가 저장된다.

3) DMA 제어기는 한 블록의 입출력 동작을 수행하고 그동안 CPU는 다른 작업을 수행한다.

4) 입출력 동작이 완료되면 DMA 제어기는 CPU에게 완료했다는 인터럽트를 전달한다.

사이클 훔치기

  • CPU와 DMA 제어기가 동시에 메모리 액세스를 시도할 경우 충돌이 발생한다. CPU의 작업 속도보다 입출력 장치의 속도가 느리기 때문에 DMA 제어기에 우선권을 부여한다. 이러한 상황을 "사이클 훔치기" 라고 한다.

Reference

입출력 관리

profile
https://dolmeng22.tistory.com 로 이전했습니다~

0개의 댓글