Skip to content

Commit efbae83

Browse files
committed
docs: 컴퓨터 구조론 12
- 시스템 버스, 입출력(I/O) 장치 및 인터럽트 처리에 대한 개념과 동작 원리를 설명합니다
1 parent 141986b commit efbae83

File tree

1 file changed

+128
-0
lines changed
  • docs/컴퓨터-구조론

1 file changed

+128
-0
lines changed

docs/컴퓨터-구조론/12.md

Lines changed: 128 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,128 @@
1+
---
2+
sidebar_position: 12
3+
title: 시스템버스, I/O 및인터럽트(2)
4+
description: 시스템 버스, 입출력(I/O) 장치 및 인터럽트 처리에 대한 개념과 동작 원리를 설명합니다.
5+
---
6+
7+
## 1. I/O 장치의 접속 및 제어
8+
9+
컴퓨터 시스템에서 I/O 장치들은 CPU와 직접 접속되지 않으며, **I/O 제어기(I/O controller)**라는 인터페이스 장치를 통해 시스템 버스에 연결됩니다. 이는 다음과 같은 여러 이유 때문입니다.
10+
11+
- **다양한 제어 방식 및 CPU의 한계**
12+
- "I/O 장치들은 종류에 따라 제어 방법이 서로 다르며, 그러한 제어 회로들을 CPU 내부에 모두 포함시키는 것이 불가능하기 때문에 CPU가 그들을 직접 제어할 수가 없음."
13+
- **속도 차이**
14+
- "I/O 장치들의 데이터 전송 속도가 CPU의 데이터 처리 속도에 비하여 훨씬 더 느리고 속도가 서로 다르기 때문에, 고속의 시스템 버스와 I/O 장치들 사이에 직접 데이터를 교환하는 것은 불가능함."
15+
- **데이터 형식 불일치**
16+
- "I/O 장치들과 CPU가 사용하는 데이터 형식의 길이가 서로 다른 경우가 많음."
17+
18+
### I/O 제어기의 주요 기능
19+
20+
I/O 제어기는 이러한 문제들을 해결하며 다음과 같은 핵심 기능을 수행합니다:
21+
22+
- I/O 장치의 제어와 타이밍 조정
23+
- CPU와의 통신 담당
24+
- I/O 장치와의 통신 담당
25+
- 데이터 버퍼링(data buffering) 기능 수행
26+
- 오류 검출
27+
28+
### I/O 제어기의 내부 구성
29+
30+
I/O 제어기는 일반적으로 **상태/제어 레지스터****데이터 레지스터**를 포함합니다.
31+
32+
- **상태/제어 레지스터**: I/O 장치의 상태, 오류 검사 결과, 그리고 CPU가 보낸 I/O 명령 단어를 저장합니다. (내부적으로 두 개의 레지스터로 구성되지만 주소는 하나만 지정)
33+
- **상태 레지스터**: I/O 장치의 상태 및 오류 검사 결과를 나타내는 비트들로 구성 (CPU가 읽기 동작 시 사용)
34+
- **제어 레지스터**: CPU가 보낸 I/O 명령 단어를 저장 (CPU가 쓰기 동작 시 사용)
35+
- **데이터 레지스터**: I/O 장치와 CPU 간에 실제 데이터가 전송되는 경로. 데이터 블록 전체를 한꺼번에 전송받아 처리할 수 있도록 '데이터 버퍼(data buffer)'로 대체될 수 있음
36+
37+
### 프로그램을 이용한 I/O (programmed I/O)
38+
39+
이는 CPU가 I/O 장치의 상태를 반복적으로 검사(폴링)하면서 I/O 동작을 처리하는 방식입니다.
40+
41+
- **장점:** 간단하며, 별도의 하드웨어가 필요하지 않습니다.
42+
- **단점:** "CPU가 I/O 동작에 직접 관여해야 하므로, 그 동안에 다른 일을 하지 못함."
43+
44+
### I/O 주소지정(I/O addressing) 방법
45+
46+
I/O 제어기 내의 레지스터들(데이터 레지스터, 상태/제어 레지스터)에 주소를 할당하는 방식은 크게 두 가지로 나뉩니다.
47+
48+
#### 기억장치-사상 I/O (memory-mapped I/O)
49+
50+
- **개념:** "기억장치 주소 영역의 일부분을 I/O 제어기 내의 레지스터들의 주소로 할당하는 방식."
51+
- **특징:** 프로그래밍에서 LOAD, STORE와 같은 기억장치 관련 명령어를 I/O 장치 제어에도 사용 가능. 별도의 I/O 제어 신호가 필요 없음.
52+
- **장점:** "프로그래밍이 용이함 (사용 가능한 명령어들이 다양함)."
53+
- **단점:** "기억장치 주소 공간이 감소함 (절반)."
54+
55+
#### 분리형 I/O (isolated-I/O)
56+
57+
- **개념:** "I/O 장치 주소공간을 기억장치 주소 공간과는 별도로 할당하는 방식."
58+
- **특징:** IN, OUT과 같은 별도의 I/O 명령어와 I/O 읽기/쓰기 신호가 필요합니다.
59+
- **장점:** "I/O 주소공간으로 인하여 기억장치 주소 공간이 줄어들지 않음."
60+
- **단점:** "I/O 제어를 위해 I/O 명령어들만 이용할 수 있으므로, 프로그래밍이 불편함."
61+
62+
---
63+
64+
## 2. 인터럽트를 이용한 I/O
65+
66+
**인터럽트-구동 I/O(interrupt-driven I/O)**는 "인터럽트 메커니즘을 이용함으로써, I/O 동작이 진행되는 동안에 CPU가 다른 작업을 처리할 수 있도록 하는 방식"입니다. 이는 프로그램된 I/O 방식의 단점(CPU가 I/O 작업에 묶이는 문제)을 보완합니다.
67+
68+
### 동작 순서
69+
70+
1. CPU가 I/O 제어기에게 명령을 전송하고, CPU는 다른 작업을 수행합니다.
71+
2. 제어기가 I/O 장치를 제어하여 I/O 명령을 수행합니다.
72+
3. I/O 명령 수행이 완료되면, 제어기는 CPU로 인터럽트 신호를 전송합니다.
73+
4. CPU는 인터럽트 신호를 받는 즉시 원래의 프로그램으로 복귀하여 수행을 계속합니다.
74+
75+
### 인터럽트-구동 I/O의 구현 방법
76+
77+
여러 I/O 장치에서 동시에 인터럽트가 발생할 경우, CPU가 어떤 장치에서 인터럽트가 발생했는지 식별하고 적절하게 처리하기 위한 방법들입니다.
78+
79+
| 방식 | 개념 | 장점 | 단점 |
80+
| ------------------- | ---------------------------------------------------------------------------------------- | -------------------------------------------------- | ------------------------------------------------------------------------- |
81+
| **다중-인터럽트** | 각 I/O 제어기와 CPU 사이에 별도의 인터럽트 요구(INTR) 선과 인터럽트 확인(INTA) 선을 접속 | CPU가 인터럽트를 요구한 장치를 쉽게 찾아낼 수 있음 | 하드웨어가 복잡, I/O 장치 수가 CPU의 인터럽트 요구 입력 핀 수에 의해 제한 |
82+
| **데이지-체인** | CPU의 INTA 출력 선을 I/O 제어기들에 직렬로 접속, 인터럽트 장치가 고유 ID(벡터) 전송 | 하드웨어가 간단함 (INTR/INTA 신호선 각각 1개) | 우선순위 낮은 장치가 오랫동안 대기(starvation) |
83+
| **소프트웨어 폴링** | CPU가 TEST I/O 선으로 각 I/O 제어기의 인터럽트 플래그를 순서대로 검사 | 우선순위 변경이 용이 | 처리 시간이 오래 걸림 |
84+
85+
---
86+
87+
## 3. 직접 기억장치 액세스 (DMA, Direct Memory Access)
88+
89+
DMA는 "CPU의 개입 없이 I/O 장치와 기억장치 사이에 데이터를 전송하는 방식"으로, 사이클 스틸링(cycle stealing)이라고도 불립니다. 이는 주로 "주기억장치와 보조저장장치(HDD, SSD 등) 사이의 블록-단위 데이터 전송에 주로 사용됨"니다.
90+
91+
### DMA의 필요성
92+
93+
대량의 데이터를 I/O 장치와 기억장치 간에 전송할 때, CPU가 매번 개입하는 것은 비효율적이며 시스템 성능 저하를 야기합니다. DMA는 이 문제를 해결합니다.
94+
95+
### DMA 처리 순서
96+
97+
1. CPU가 DMA 제어기(DMA controller)로 I/O 장치 주소, 연산 종류(쓰기/읽기), 주기억장치 시작 주소, 전송될 데이터 단어 수 등의 명령을 전송합니다.
98+
2. DMA 제어기는 CPU로 버스 요구(BUS REQ) 신호를 전송하여 시스템 버스 사용 권한을 요청합니다.
99+
3. CPU가 DMA 제어기로 버스 승인(BUS GRANT) 신호를 전송하여 버스 사용을 허가합니다. 이 때 CPU는 잠시 버스 사용을 중단하고 내부 작업을 수행합니다.
100+
4. DMA 제어기는 CPU 개입 없이 주기억장치와 I/O 장치(예: 디스크 제어기) 사이에 직접 데이터를 전송합니다. 이 과정에서 "각 데이터에 대하여 번을 두 번 반복(주기억장치 <-> DMA 제어기 & DMA 제어기 <-> 디스크 제어기 데이터 저장) 시스템 버스 두 번 사용"합니다.
101+
5. 모든 데이터 전송이 완료되면, DMA 제어기는 CPU로 INTR 신호를 전송하여 작업 완료를 알립니다.
102+
103+
### DMA의 문제점 및 해결책
104+
105+
- **버스 사용량 증가:** 각 데이터 전송 때마다 시스템 버스를 두 번씩 사용함 → 시스템 성능 저하
106+
- **해결책:** I/O 버스(I/O bus)를 사용하여 한 개의 DMA 제어기가 다수의 I/O 장치들을 지원함으로써 시스템 버스 사용량을 줄일 수 있음
107+
- **DMA 제어기의 한계:** I/O 장치들은 종류와 속도가 다양하고 제어 방법도 복잡하기 때문에 간단한 DMA 제어기로 모든 I/O 장치를 효율적으로 지원하는 데 한계가 있음 (특히 대용량 데이터 버퍼링 필요)
108+
- **해결책:** I/O 프로세서(IOP, I/O processor) 또는 I/O 채널(I/O channel) 사용
109+
110+
#### IOP의 구성 요소
111+
112+
- I/O 제어 프로그램(OS의 I/O device driver 프로그램)을 수행할 수 있는 프로세서
113+
- 데이터 블록을 임시 저장(버퍼링)할 수 있는 용량의 지역 기억장치 (local memory)
114+
- 시스템 버스 인터페이스 및 버스 마스터 회로
115+
- I/O 버스 중재 회로
116+
117+
IOP는 CPU로부터 I/O 명령을 받으면, 자체적으로 I/O 작업을 처리하고 CPU는 다른 작업을 계속 수행할 수 있도록 하여 시스템의 전반적인 효율성을 크게 향상시킵니다.
118+
119+
---
120+
121+
## 요약
122+
123+
이 문서는 컴퓨터 시스템의 I/O 처리 방식에 대한 핵심 개념들을 다루었습니다.
124+
125+
- **I/O 장치 접속:** I/O 제어기를 통해 CPU와 다양한 I/O 장치 간의 비동기적 통신 및 데이터 형식 불일치를 해결합니다.
126+
- **I/O 주소지정:** 기억장치-사상 I/O와 분리형 I/O 두 가지 방식으로 I/O 제어기 레지스터에 주소를 할당합니다.
127+
- **인터럽트 기반 I/O:** CPU가 I/O 작업 중에도 다른 작업을 수행할 수 있도록 하는 효율적인 방법으로, 다중-인터럽트, 데이지-체인, 소프트웨어 폴링 등의 구현 방식이 있습니다.
128+
- **DMA:** CPU의 개입 없이 대량의 데이터를 기억장치와 I/O 장치 간에 직접 전송하는 방식으로, 시스템 성능을 향상시키며, 복잡한 I/O 처리를 위해 I/O 프로세서(IOP)가 사용될 수 있습니다.

0 commit comments

Comments
 (0)