입출력기법
보조기억장치와 입출력장치는 완전히 배타적인 관계는 아니며, 보조기억장치는 결국 메모리를 보조하는 임무를 수행하는 특별한 입출력장치로 볼 수 있다. 보조기억장치를 포함한 다양한 입출력장치가 컴퓨터 내부와 어떤 방식으로 입출력받는지 알아보자.
장치 컨트롤러와 장치 드라이버
장치 컨트롤러는 키보드, 마우스, 프린터 등 다양한 입출력 장치를 CPU와 연결하는 하드웨어이다. 각 장치는 제조사, 규격, 작동 방식이 다르기 때문에 CPU가 직접 모든 장치를 처리하기 어렵다. 따라서 장치 컨트롤러가 장치의 작동 방식을 추상화하여 CPU와 데이터를 주고받는다.
CPU는 프로그램을 실행하며, 장치 컨트롤러와 상호작용하여 입출력 장치를 제어한다. 이때 장치 컨트롤러를 제어하고 CPU와의 데이터 교환을 담당하는 프로그램이 바로 장치 드라이버이다. 장치 드라이버는 각 장치 컨트롤러의 동작 방식을 알고, 이를 통해 컴퓨터와 장치 간의 원활한 통신을 가능하게 한다.
대중적으로 사용하는 입출력장치인 경우, 운영체제 일부의 포함되는 경우가 있어 별도의 드라이버 설치 없이 사용이 가능하다. 하지만 대형 프린터 등 자주 사용하지 않는 입출력장치인 경우 드라이버를 설치하여야 한다.
입출력 작업을 수행하는 방법은 3가지가 있으며, 프로그램 입출력, 인터럽트 기반 입출력, DMA 입출력이다.
프로그램 입출력
프로그램 입출력은 프로그램의 명령어로 입출력 작업을 수행하는 방식이다. CPU는 "프린터 상태를 확인하라"거나 "하드 디스크에 데이터를 저장하라"와 같은 입출력 명령어를 실행해 장치 컨트롤러와 상호작용하며, 이를 통해 입출력 장치를 제어한다.
입터럽트 기반 입출력: 다중 인터럽트
인터럽트 기반 입출력은 인터럽트를 활용해 입출력 작업을 처리하는 방식이다.
키보드, 마우스, 모니터, 스피커 등 여러 입출력 장치를 동시에 사용할 때, CPU는 각 장치에서 발생하는 인터럽트를 처리해야 한다. 이때, 인터럽트가 동시에 발생하면 CPU는 우선순위에 따라 인터럽트를 처리하게 된다.
CPU는 인터럽트 플래그가 비활성화된 상태에서도 NMI(Non-Maskable Interrupt)와 같은 우선순위가 높은 인터럽트는 무시할 수 없다. 따라서 우선순위가 높은 인터럽트를 먼저 처리하는 것이 일반적이다.
다중 인터럽트를 효과적으로 처리하려면 프로그래머블 인터럽트 컨트롤러(PIC)를 사용한다. PIC는 여러 장치 컨트롤러에 연결되어 인터럽트 요청의 우선순위를 판단하고, CPU에 가장 중요한 인터럽트를 알려주는 역할을 한다. 이를 통해 CPU는 효율적으로 인터럽트를 처리할 수 있다.
DMA 입출력
기존 프로그램 기반 입출력과 인터럽트 기반 입출력은 CPU가 데이터를 직접 이동해야 한다는 공통점이 있다. CPU는 데이터를 장치 컨트롤러로부터 받아 레지스터에 적재하고, 이를 메모리로 전달해야 한다. 반대로, 메모리의 데이터를 입출력 장치로 보낼 때도 반드시 CPU를 거쳐야 한다. 이로 인해 CPU의 부담이 크다.
이러한 부담을 줄이기 위해 DMA(Direct Memory Access) 기술이 도입되었다. DMA는 입출력 장치가 CPU의 개입 없이 메모리에 직접 접근하여 데이터를 전송할 수 있도록 한다. 이를 위해 DMA 컨트롤러라는 하드웨어가 필요하며, 다음과 같은 구성이 필요하다.
DMA 컨트롤러는 시스템 버스에 연결되고 입출력장치들의 장치 컨트롤러는 입출력 버스라는 입출력장치 컨트롤러 전용 버스와 연결된다.
DMA 동작 방식은 다음과 같다.
- CPU의 명령: CPU는 DMA 컨트롤러에 데이터 전송 요청을 전달하고, 전송 시작 주소와 데이터 크기를 설정한다.
- 데이터 전송: DMA 컨트롤러는 CPU의 메모리 버스를 사용해 메모리와 입출력 장치 간 데이터를 전송한다.
- 작업 완료: 전송이 완료되면 DMA 컨트롤러가 CPU에 인터럽트를 발생시켜 작업 완료를 알린다.
CPU 입장에서는 입출력 작업 명령만 내리고, 작업 완료 신호(인터럽트)만 받으면 되므로, 데이터 전송에 직접 관여하지 않아도 된다. 이를 통해 CPU의 부담이 크게 줄어들고, 입출력 작업이 더 효율적으로 수행된다.
사이클 스털링
DMA 학습에 있어 중요 키워드 중에 하나가 사이클 스털링이다. 사이클 스털링은 DMA가 시스템 버스를 사용하는 양상을 나타내는 단어이다.
시스템 버스는 동시 사용이 불가하다. 이 말은 즉슨, CPU가 사용하거나 DMA가 사용하고 있을 경우 다른 접근이 불가하다는 의미이다.
따라서 DMA 컨트롤러는 CPU가 시스템 버스를 사용하지 않을 때마다 조금씩 사용하거나, CPU가 시스템버스를 사용을 양보할 경우 사용한다.
CPU 입장에선 마치 버스를 도둑맞는 기분이 들을 것이며, 이러한 의미로 DMA의 시스템버스 사용을 사이클 스털링(Cycle Stealing)이라고 한다.
PCIe
PCIe는 대표적인 입출력 버스이다. PCIe는 연결된 장치의 성능과 관련해 알아야 하는 내용은 크게 2가지이다.
- PCIe 버전에 따라 최대 속도가 달라질 수 있다는 것
- PCIe 버스가 여러 레인을 이용해 정보를 주고받을 수 있다는 것
PCIe 버스는 지속적으로 발전하고 있어 버전이 존재한다. PCIe 3.0과 같이 PCIe 뒤에 버전을 나태내는 숫자가 덧붙이며, 버전에 따라 지원되는 속도가 다르다. 버전이 올라갈 수록 최대 속도가 높아지며 이걸로 성능에 영향을 미칠 수 있다.
레인이란 PCIe 버스를 통해 정보를 송수신 하는 단위를 말하며, 레인의 수가 2개, 4개, 8개가 되면 한 번에 통신을 주고 받을 수 있는 양도 2배, 4배, 8배가 된다. 레인은 버전뒤에 'x 레인 수'와 같이 표기되며, PCIe 3.0 x4 처럼 나타낸다.
출처
'Knowledge > 컴퓨터구조&운영체제' 카테고리의 다른 글
[운영체제] 커널 영역과 사용자 영역의 프로세스 (PCB, 문맥교환, 메모리 영역) (1) | 2024.12.06 |
---|---|
[운영체제] 운영체제의 역할과 앞으로 학습할 내용 정리 (1) | 2024.12.04 |
[컴퓨터구조] 보조기억장치와 RAID (0) | 2024.12.02 |
[컴퓨터구조] 캐시메모리 (0) | 2024.11.30 |
[컴퓨터구조] 메모리의 논리주소와 물리주소 (1) | 2024.11.30 |