* I/O 모듈
I/O 모듈의 필요성
- 주변 장치들의 종류가 다양하며 운용 방식이 각기 다르다.
- 주변 장치의 데어터 전송률보다 기억장치나 CPU의 데이터 전송률이 빠르다.(전송 속도 불일치)
- 데이터 형식 및 단어의 길이가 각기 다르다.
위와 같은 이유들로 주변 장치들이 시스템 버스에 직접 연결될 수 없다.
따라서 I/O 모듈이 필요하다.
- 프로세서, 기억장치와 더불어 컴퓨터 시스템의 주요 구성 요소이다.
- 주변 장치를 시스템 버스에 연결하여 주변 장치와 버스 사이의 통신이 가능하게 한다.
- 시스템 버스를 통한 CPU와 주기억장치 간 인터페이스 역할을 한다.
- 데이터링크를 통한 하나 이상의 주변 장치들과의 인터페이스 역할을 한다.
외부 장치의 종류
- 인간이 읽을 수 있는 장치: 스크린, 프린터, 키보드
- 기계가 읽을 수 있는 장치: 센서, 구동장치
- 통신 장치: Modem, NIC(Network Interface Card)
외부 장치와 I/O 모듈과의 인터페이스
- 제어 신호(Control): INPUT/READ, OUTPUT/WRITE, 상태 보고, 제어 기능 수행
- 상태 신호(Status): READY/NOT-READY
- 데이터: 입력, 출력
I/O 모듈의 기능
I/O 모듈의 주요 기능에는 제어와 타이밍, 프로세서와의 통신, 장치들과의 통신, 데이터 버퍼링, 오류 검출이 있다.
제어와 타이밍
내부 자원과 외부 장치들 사이의 통신 흐름을 조정한다.
ex) 외부 장치에서 CPU로 데이터 전송 제어
1. CPU가 I/O 모듈에게 모듈에 부착된 장치의 상태를 검사하도록 요청한다.
2. I/O 모듈이 그 장치의 상태를 알려준다.
3. 그 장치가 작동 및 전송 가능한 상태라면 CPU는 I/O 모듈에게 데이터 전송을 요청한다.
4. I/O 모듈은 외부 장치로부터 데이터를 수신한다.
5. 데이터가 I/O 모듈로부터 프로세서로 전송된다.
프로세서와의 통신
- 명령 해독: 프로세서로부터 수신한 명령어를 해독한다.
- 데이터 교환: 데이터 버스를 통해 프로세서와 I/O 모듈 간 데이터를 교환한다.
- 상태 보고: BUSY 또는 READY
- 주소 인식: I/O 모듈이 제어하는 주변장치의 주소를 인식한다.
장치들과의 통신
명령, 상태 정보, 데이터 전송
데이터 버퍼링
버퍼를 통해 주기억장치/CPU와 주변장치 간의 데이터 전송률의 불일치를 해소한다.
다시 말해, 데이터는 I/O 모듈 내에 일시적으로 저장되었다가 적절한 속도로 주변장치로 전송된다.
오류 검출
패리티 비트를 사용하여 오류를 검출한다.
I/O 모듈의 조직
I/O 모듈은 시스템 버스를 통해 컴퓨터 내의 다른 부분들과 연결된다.
주소 선은 자신이 제어하는 장치의 주소를 인식 및 식별한다.
상태/제어 레지스터는 현재 상태를 제공하고, CPU로부터 제어 정보를 수신한다.
* I/O 동작 기법
I/O 동작 기법 3가지에는 프로그램 I/O, 인터럽트 구동 I/O, 직접 기억장치 액세스가 있다.
I/O 동작 기법 1 - 프로그램 I/O(Programmed I/O)
프로그램 I/O에서는 프로세서와 I/O 모듈 사이에 데이터가 교환된다.
프로세서는 주변 장치의 상태 감지, 읽기/쓰기 명령 전송, 데이터 전송 등과 같은 I/O 동작을 직접 제어한다.
프로그램 I/O의 동작
1. CPU는 I/O 동작을 요청한다.
2. I/O 모듈은 동작을 수행한다.
3. I/O 모듈은 상태 비트를 세트한다.
4. CPU는 주기적으로 상태 비트를 체크한다.
5. CPU는 동작이 완료될 때까지 주기적으로 I/O 모듈의 상태를 검사한다.
I/O 주소지정 방식
I/O 주소지정 방식에는 기억장치 사상 I/O와 고립형 I/O가 있다.
1. 기억 장치 사상 I/O(Memory Mapped I/O)
기억장치 사상 I/O에서는 기억장치와 I/O 장치들이 하나의 주소 공간을 공유한다.
프로세서는 I/O 모듈 내의 레지스터들을 기억 장소들과 같이 취급하기에, 기억장치와 I/O 장치들을 액세스 할 때 동일한 기계 명령어를 사용한다.
예를 들어 10개의 주소 선을 가진 시스템의 경우, 전체 1024개의 주소 중 기억장치 주소와 I/O 주소가 임의의 형태로 조합된다.
2. 고립형 I/O(Isolates I/O)
고립형 I/O에서는 I/O 주소 공간과 주기억장치 주소 공간이 분리되어 있다.
따라서 I/O와 주기억장치 선택선이 필요하고, I/O를 위한 특정 명령어가 필요하다.
I/O 동작 기법 2 - 인터럽트 구동 I/O(Interrupt-Driven I/O)
프로그램 I/O는 I/O 모듈이 데이터 수신/송신할 준비가 될 때까지 프로세서가 대기하므로 전체 시스템의 성능이 저하된다.
이와 달리, 인터럽트 구동 I/O는 프로세서가 I/O 명령을 보낸 다음에 I/O 모듈이 그 일을 완료하고 인터럽트를 보낼 때까지 다른 명령어들을 수행한다.
인터럽트 구동 I/O의 동작
I/O 모듈 관점(읽기 동작)
1. 프로세서가 I/O 모듈로 읽기 명령을 보낸다.
2. I/O 모듈이 주변 장치로부터 데이터를 읽는다. 그동안 프로세서는 다른 일을 처리한다.
3. I/O 모듈이 프로세서로 인터럽트 신호를 보낸다.
4. 프로세서가 데이터를 요구한다.
5. I/O 모듈이 데이터를 전송한다.
CPU 관점(읽기 동작)
1. 읽기 명령을 보낸다.
2. 다른 일을 처리한다.
3. I/O 인터럽트 발생 시, 현재 문맥 저장 후 인터럽트를 처리한다.
4. 이전 프로그램으로 문맥을 복귀한다.
인터럽트 처리 과정
1. 장치가 프로세서로 인터럽트를 보낸다.
2. 프로세서는 인터럽트에 응답하기 전에 현재 실행 중인 명령어의 실행을 완료한다.
3. 프로세서는 인터럽트를 검사하고 인터럽트가 있다면 그 요구를 발생한 장치에 확인 신호를 보낸다.
4. 프로세서는 인터럽트 루틴으로 제어를 넘겨줄 준비를 한다.
→ PSW(프로그램 상태 단어)와 PC(프로그램 카운터)의 내용을 스택에 저장한다.
5. 인터럽트 처리 프로그램의 시작 주소를 PC(프로그램 카운터)에 저장한다. → 인터럽트 서비스 시작
6. PC는 인터럽트 서비스 루틴의 시작 위치를 가리키도록 갱신한다.
7. 인터럽트 처리기가 인터럽트를 처리한다.
8. 인터럽트 처리가 완료되면 저장된 레즈스터의 내용들이 스택으로부터 인출되어 레지스터들로 복원된다.
9. PSW와 PC의 내용을 스택으로부터 복원한다.
I/O 동작 기법 3 - 직접 기억장치 액세스(DMA: Direct Memory Access)
프로그램 I/O와 인터럽트 구동 I/O는 I/O 전송률이 프로세서가 장치를 검사하고 서비스하는 속도에 의해 제한되고,
프로세서가 I/O 전송을 위해 많은 명령어들을 수행하기에 많은 시간이 소모된다.
이와 달리, 직접 기억장치 액세스는 I/O 모듈과 주기억장치가 프로세서의 개입 없이 데이터를 직접 교환한다.
DMM의 동작
기억장치와 I/O 모듈 간의 데이터 전송을 별도의 하드웨어인 DMA 모듈(제어기)이 처리하며, 프로세서는 개입하지 않는다.
프로세서는 전송의 시작과 끝에만 관여한다.
1. CPU가 DMA 제어기로 다음 정보를 포함한 명령을 전송한다.
2. DMA 제어기는 CPU로 버스 요구 신호를 전송한다.
3. CPU가 DMA 제어기로 버스 승인 신호를 전송한다.
4. DMA 제어기가 주기억장치로부터 데이터를 읽거나 쓴다.
5. 전송할 데이터가 남아있으면 2~4번을 반복한다.
6. 모든 데이터들의 전송이 완료되면 CPU로 INTR 신호를 전송한다.
성결대학교 정보통신공학과 컴퓨터구조 강의(2023)
William Stallings, 「컴퓨터시스템구조론(10판)」
본 게시물은 위 강의 및 교재를 기반으로 정리한 글입니다.
'전공수업 > 컴퓨터 구조' 카테고리의 다른 글
x86 Architecture - 8086, 80386 CPU (1) | 2024.04.10 |
---|---|
Operating System (0) | 2024.04.09 |
[컴퓨터 구조] 외부 기억장치 #2 - RAID (0) | 2023.12.11 |
[컴퓨터 구조] 외부 기억장치 - 자기 디스크 (1) | 2023.12.10 |
[컴퓨터 구조] 내부 기억장치 #2 - 오류 정정 (1) | 2023.11.28 |
댓글