Mano의 컴퓨터시스템구조

[mano의 컴퓨터시스템 구조] 11장 입출력 구조

studyingalone 2025. 3. 3. 14:28

11.1 주변 장치

 

  • 컴퓨터의 입출력(I/O) 시스템은 중앙 처리 장치(CPU)와 외부 환경 간의 데이터 교환을 담당.
  • 프로그램과 데이터는 저장 장치(디스크, 테이프 등)에 미리 저장되어야 하며, 결과는 출력 장치를 통해 사용자에게 제공됨.

11.2 입출력 인터페이스

I/O 버스와 인터페이스 모듈

  • I/O 버스는 데이터 라인, 주소 라인, 제어 라인으로 구성.
  • 각 주변 장치는 인터페이스 유닛을 통해 CPU와 연결됨.
  • CPU는 주소 라인을 이용해 특정 장치를 선택하고, 제어 라인을 통해 명령을 전달함.
  • I/O 명령어 유형:
    1. 제어 명령(Control Command): 주변 장치 활성화 및 동작 지시.
    2. 상태 명령(Status Command): 주변 장치의 상태 점검.
    3. 데이터 출력 명령(Data Output Command): 데이터를 주변 장치로 전송.
    4. 데이터 입력 명령(Data Input Command): 데이터를 주변 장치에서 수신.

I/O 버스와 입출력 장치의 연결


I/O 버스와 메모리 버스

  • 버스가 메모리, I/O와 통신하는 방법
    1. 별도 버스 사용: 메모리 버스와 I/O 버스를 분리하여 독립적으로 운영.
    2. 공용 버스 + 개별 제어 라인: 하나의 버스를 사용하되, 메모리와 I/O를 위한 개별 제어 라인 활용.
    3. 완전 공용 버스: 단일 버스로 메모리와 I/O를 모두 처리(제어 라인 공유).

격리형 I/O vs 메모리 매형 I/O

  • 독립형 I/O (Isolated I/O)
    • 메모리와 I/O 주소를 구분하여 별도 관리.
    • CPU는 특정 입출력 명령어를 사용하여 I/O 장치를 제어.
    • I/O 주소가 메모리 주소 공간에 영향을 주지 않음.
  • 메모리 매핑 I/O (Memory-Mapped I/O)
    • 메모리와 I/O가 같은 주소 공간을 공유.
    • CPU는 일반적인 메모리 명령어(LOAD, STORE 등)를 사용하여 I/O 장치를 제어 가능.
    • 단점: I/O 주소가 메모리 주소를 차지하여 전체 메모리 사용 가능 공간이 줄어듦.

11.3 비동기 데이터 전송

  • 디지털 시스템의 내부 동작은 공통 클럭 펄스로 동기화된다. 그러나 CPU와 I/O 인터페이스는 서로 독립적으로 설계되므로 각 장치의 내부 타이밍이 다를 수 있다. 이런 경우 두 장치는 비동기적(asynchronous) 이라고 한다.
    • 키보드

비동기 데이터 전송을 위해 제어 신호를 사용하여 데이터 전송 시점을 알려야 한다. 이를 위한 방법으로 스트로브 펄스(strobe pulse) 방식핸드셰이킹(handshaking) 방식이 있다.


1. 스트로브 제어 방식

스트로브 펄스(strobe pulse)디지털 시스템에서 CPU와 메모리 모듈 또는 I/O 장치와 같은 두 장치 간의 데이터 전송 타이밍을 조정하는 데 사용되는 제어 신호. 데이터가 유효하며 읽거나 써야 하는 시기를 나타내는 짧은 지속 시간의 신호이다.

 

스트로브 (strobe)란 데이터 전송을 동기화하기 위해 스트로브 펄스를 생성하거나 사용하는 메커니즘

  • 송신기(Source unit)가 전송을 시작하는 경우
    1. 송신기가 데이터 버스에 데이터를 올림.
    2. 스트로브 신호를 활성화하여 수신기(destination)에게 데이터 전송을 알림.
    3. 수신기가 데이터를 읽고, 송신기는 스트로브 신호를 비활성화.

데이터 전송을 위한 소스 개시의 스트로브

  • 수신기(Destination unit)가 전송을 요청하는 경우
    1. 수신기가 스트로브 신호를 활성화하여 데이터를 요청.
    2. 송신기가 데이터 버스에 데이터를 올림.
    3. 수신기가 데이터를 읽고, 스트로브 신호를 비활성화.

데이터 전송을 위한 목적지 개시의 스트로브


✅ 단점: 송신기가 수신기가 데이터를 제대로 받았는지 확인할 방법이 없다.


2. 핸드셰이킹 방식

스트로브 방식의 단점을 보완하기 위해 2개의 제어 신호를 사용한다.

  • 데이터 유효(data valid): 송신기가 데이터를 올렸음을 알리는 신호
  • 데이터 수락(data accepted): 수신기가 데이터를 받았음을 알리는 신호

(1) 송신기 주도 전송

  1. 송신기가 데이터 버스에 데이터를 올리고 데이터 유효 신호를 활성화.
  2. 수신기가 데이터를 받고 데이터 수락 신호를 활성화.
  3. 송신기가 데이터 유효 신호를 비활성화(데이터 무효화).
  4. 수신기가 데이터 수락 신호를 비활성화(다음 데이터 수신 준비 완료).

핸드셰이킹을 사용한 소스 개시의 전송

 

(2) 수신기 주도 전송

  1. 수신기가 데이터 준비 완료(ready for data) 신호를 활성화.
  2. 송신기가 데이터를 올리고 데이터 유효 신호를 활성화.
  3. 수신기가 데이터를 받고 데이터 수락 신호를 활성화.
  4. 송신기가 데이터 유효 신호를 비활성화.
  5. 수신기가 데이터 수락 신호를 비활성화(다음 데이터 요청 준비 완료).

핸드셰이킹을 사용한 목적지 개시의 전송

 

핸드셰이킹 방식의 장점

  • 송신기와 수신기가 데이터를 확실히 주고받았는지 확인 가능.
  • 각 장치는 자신의 속도에 맞춰 데이터를 주고받을 수 있음.
  • 타임아웃 기능을 추가하여 일정 시간 내 응답이 없을 경우 오류 감지 가능.

비동기 직렬 전송

 

1. 직렬 전송과 병렬 전송

  • 병렬 전송: 여러 개의 비트가 동시에 여러 개의 경로를 통해 전송됨. 빠르지만 많은 전선이 필요함.
  • 직렬 전송: 데이터를 한 비트씩 순차적으로 전송함. 느리지만 전선이 적게 필요하여 비용이 저렴함.

2. 동기식과 비동기식 직렬 전송

  • 동기식 전송: 송신기와 수신기가 공통된 클럭 신호를 공유하여 일정한 속도로 데이터를 전송함.
  • 비동기식 전송: 데이터가 필요할 때만 전송되며, 전송되지 않을 때는 회선이 유휴 상태로 유지됨.

비동기 직렬 전송

 

3. 비동기식 직렬 전송 방식

  • 데이터의 시작과 끝을 구별하기 위해 시작 비트(Start Bit)와 정지 비트(Stop Bit) 사용.
  • 시작 비트(0) → 데이터 비트 → 정지 비트(1) 순서로 전송됨.
  • 수신기는 1에서 0으로의 전환을 감지하여 새로운 데이터 수신을 시작함.

11.4 전송 모드

 

  1. 프로그램된 I/O (Programmed I/O)
    • CPU가 직접 I/O 장치를 제어하며, 데이터 전송을 위해 명령어를 실행한다.
    • CPU는 인터페이스 상태를 지속적으로 모니터링해야 하며, 플래그(Flag) 비트를 확인해 데이터 전송을 수행한다.
    • CPU가 지속적으로 확인해야 하므로 비효율적이며, 저속 장치나 전용 시스템에서 주로 사용된다.
  2. 인터럽트 기반 I/O (Interrupt-Initiated I/O)
    • CPU가 I/O 장치의 상태를 지속적으로 감시하지 않고, 장치가 데이터 전송이 가능할 때 인터럽트 신호를 보낸다.
    • CPU는 인터럽트가 발생하면 현재 작업을 일시 중단하고 I/O 작업을 처리한 후 원래 작업으로 복귀한다.
    • 인터럽트 방식에는 벡터 인터럽트(Vectored Interrupt)비벡터 인터럽트(Nonvectored Interrupt) 가 있다.
      • 벡터 인터럽트: 인터럽트 발생 시 특정 메모리 주소에서 서비스 루틴을 찾아 실행.
      • 비벡터 인터럽트: 고정된 메모리 위치에서 서비스 루틴을 실행.
  3. 직접 메모리 접근 (DMA, Direct Memory Access)
    • CPU 개입 없이 데이터가 직접 메모리와 I/O 장치 간에 전송된다.
    • CPU는 초기 설정만 하고, 이후에는 DMA 컨트롤러가 데이터 전송을 담당.
    • CPU는 메모리 접근을 일시 중단하는 방식으로 DMA 전송을 허용한다.
    • 빠르고 효율적이며, 대용량 데이터 전송에 적합하다.

 


11.5 우선순위 인터럽트

  • CPU는 I/O 장치와 데이터를 전송할 때 장치가 준비되었는지를 확인해야 한다. 이를 위해 인터럽트 신호를 사용하며, CPU는 인터럽트 요청을 받으면 현재 실행 중인 프로그램의 주소를 스택에 저장하고, 인터럽트 서비스 루틴(ISR)으로 분기한다.
  • 여러 개의 I/O 장치가 인터럽트를 요청할 수 있으며, 동시에 여러 요청이 들어올 경우 우선순위(priority) 를 정해야 한다. 속도가 빠른 장치(예: 하드디스크)는 높은 우선순위를, 속도가 느린 장치(예: 키보드)는 낮은 우선순위를 갖는다.

 

  1. 소프트웨어 방식 (Polling Method)
    • 인터럽트 요청이 발생하면, CPU가 순차적으로 모든 장치를 검사하여 가장 높은 우선순위를 가진 장치를 찾는다.
    • 단점: 인터럽트 요청이 많으면 처리 속도가 느려질 수 있음.
  2. 하드웨어 방식 (Priority Interrupt Controller, PIC)
    • 하드웨어가 자동으로 우선순위를 판별하여 가장 높은 우선순위를 가진 장치만 인터럽트를 허용한다.

 


데이지 체인 우선순위 인터럽트

 

  • 장치들을 직렬(Serial)로 연결하여, 가장 높은 우선순위를 가진 장치가 인터럽트 요청을 먼저 처리함.
  • 장점: 하드웨어 구성이 간단함.
  • 단점: 장치의 개수가 많아지면 응답 속도가 느려질 수 있음.

병렬 우선순위 방식 (Parallel Priority Method)

  • 각 장치별로 인터럽트 비트를 갖는 레지스터를 사용하여 인터럽트 요청을 판별.
  • 마스크 레지스터를 사용해 특정 인터럽트를 비활성화(masking) 할 수도 있음.
  • 장점: 빠르고 효율적임.
  • 단점: 하드웨어 설계가 복잡함.

우선순위 인터럽트 하드웨어

 


우선순위 인코더

  • 두 개 이상의 입력이 동시에 들어왔을 때 높은 우선순위를 가진 입력에 우선권을 주는 것

우선순위 인코더 진리표

  • X: don't care 조건
  • IST: 인터럽트 상태 비트