새소식

Computer Science/Computer Architecture

[혼자 공부하는 컴퓨터 구조] Chapter 08. 다양한 입출력 방법

  • -

 

본 게시물은 ‘강민철, ⌜혼자 공부하는 컴퓨터구조 + 운영체제⌟, 한빛미디어, 2022’ 을 인용하였습니다.

 

프로그램 입출력

프로그램 속 명령어로 입출력장치를 제어하는 방법

 

  • CPU가 입출력 명령어를 만나면 입출력장치와 연결된 장치 컨트롤러와 상호작용하며 입출력 작업 수행

 

▶ 메모리에 저장된 정보를 하드 디스크에 백업하는 상황에서 CPU의 입출력 작업 과정

 

1. CPU는 하드 디스크 컨트롤러의 제어 레지스터에 쓰기 명령 보냄

 

2. 하드 디스크 컨트롤러는 하드 디스크 상태를 확인하고 준비된 상태라면 상태 레지스터에 준비되었다고 표시

 

3. ① CPU는 상태 레지스터를 주기적으로 읽으며 하드 디스크의 준비 여부 확인

     ② 하드 디스크가 준비됐음을 CPU가 알게 되면 백업할 메모리의 정보를 데이터 레지스터에 씀

     아직 백업 작업(쓰기 작업)이 끝나지 않았다면, 처음부터 반복하고 쓰기가 끝나면 작업 종료

 

  • 프로그램 입출력 방식에서 입출력 작업은 CPU가 장치 컨트롤러의 레지스터 값을 읽고 씀으로써 이루어짐

 

명령어들이 메모리에 저장되어 있는 방법

1. 메모리 맵 입출력

메모리에 접근하기 위한 주소 공간과 입출력장치에 접근하기 위한 주소 공간을 하나의 주소 공간으로 간주하는 방법

 

▶ 예시 : 1,024개 주소를 표현할 수 있는 컴퓨터가 있을 때 1,024개 전부 메모리 주소를 표현하는데 사용하지 않고, 512개는 메모리 주소 512개는 장치 컨트롤러의 레지스터 표현 위해 사용

 

  • CPU는 메모리 주소들, 장치 컨트롤러의 레지스터들 모두를 똑같이 메모리 주소를 대하듯 함
    • 메모리에 접근하는 명령어, 입출력장치에 접근하는 명령어가 굳이 다를 필요X

 

2. 고립형 입출력

메모리에 접근하기 위한 주소 공간과 입출력장치에 접근하기 위한 주소 공간을 별도로 분리하는 방법

 

▶ 예시 : 제어 버스에 ‘메모리 읽기/쓰기’선 외에 ‘입출력장치 읽기/쓰기’선이 따로 있으면 메모리에도 1,024개 주소 공간 활용하고 입출력장치도 1,024개 주소 공간 활용

 

  • CPU가 메모리 읽기/쓰기 선이 활성화되는 명령어를 실행할 때는 메모리에 접근, 입출력장치가 읽기/쓰기 선이 활성화되는 명령어를 실행할 때는 장치 컨트롤러에 접근

  • CPU는 입출력장치에 접근하기 위해 메모리에 접근하는 명령어와 다른 입출력 명령어 사용

 

3. 메모리 맵 입출력&고립형 입출력 비교

메모리 맵 입출력 고립형 입출력
메모리, 입출력장치 같은 주소 공간 사용 메모리, 입출력장치 분리된 주소 공간 사용
메모리 주소 공간 축소 메모리 주소 공간 축소X
메모리, 입출력장치 같은 명령어 사용O 입출력 전용 명령어 사용

 

 

 

인터럽트 기반 입출력

인터럽트로써 입출력을 수행하는 방법

 

  • 입출력장치에 의한 하드웨어 인터럽트는 입출력장치X, 장치 컨트롤러 의해 발생
  • CPU는 장치 컨트롤러에 입출력 작업 명령하고, 장치 컨트롤러가 입출력장치를 제어하며 입출력을 수행하는 동안 CPU는 다른 일을 할 수 있음
  • 장치 컨트롤러가 입출력 작업을 끝낸 뒤 CPU에게 인터럽트 요청 신호를 보내면, CPU는 하던 일을 잠시 백업하고 인터럽트 서비스 루틴을 실행함
  • cf. 폴링(polling) : 입출력장치 상태는 어던지, 처리할 데이터가 있는지 주기적으로 확인하는 방식 ≠ 인터럽트
    • 인터럽트 방식보다 CPU 부담이 더 큼(인터럽트 활용 시 CPU가 인터럽트 요청 받기 전까지 다른 일에 더 집중할 수 있기 때문)

 

여러 입출력장치에서 인터럽트가 동시에 발생한 경우

 

  • CPU의 플래그 레지스터 속 인터럽트 비트 비활성화된 경우 -> 순서대로 인터럽트 처리
    • 다른 입출력 장치 의한 하드웨어 인터럽트 받아들이지 않음 -> CPU는 순차적으로 하드웨어 인터럽트 처리
  • 그러나 현실적으로 모든 인터럽트의 순차적 처리 불가
  • CPU의 플래그 레지스터 속 인터럽트 비트 활성화된 경우 -> 우선순위 고려해 인터럽트 처리
  • 인터럽트 비트 비활성화하여도 무시할 수 없는 인터럽트인 NMI(Non-Maskable Interrupt) 발생한 경우 -> 우선순위 고려해 인터럽트 처리
  •  
  • 우선순위 반영해 다중 인터럽트 처리하는 경우, 많은 컴퓨터에서 PIC(Programmable Interrupt Controller)라는 하드웨어 사용
    • 여러 장치 컨트롤러에 연결돼 장치 컨트롤러에서 보낸 하드웨어 인터럽트 요청들의 우선순위를 판별한 후 CPU에 지금 처리해야 할 하드웨어 인터럽트는 무엇인지 알려주는 장치
    • 각 핀에 CPU에 하드웨어 인터럽트 요청을 보낼 수 있는 약속된 하드웨어 연결되어 있음
    • PIC에 연결된 장치 컨트롤러들이 동시에 하드웨어 인터럽트 요청을 보내면, PIC는 이들의 우선순위를 판단해 CPU에 가장 먼저 처리할 인터럽트를 알려줌

PIC

 

  • PIC의 다중 인터럽트 처리 과정
    1. PIC가 장치 컨트롤러에서 인터럽트 요청 신호(들)를 받아들임
    2. PIC는 인터럽트 우선순위를 판단한 뒤 CPU에 처리해야 할 인터럽트 요청 신호를 보냄
    3. CPU는 PIC에 인터럽트 확인 신호를 보냄
    4. PIC는 데이터 버스를 통해 CPU에 인터럽트 벡터를 보냄
    5. CPU는 인터럽트 벡터를 통해 인터럽트 요청의 주체를 알게 되고, 해당 장치의 인터럽트 서비스 루틴 실행
  • 일반적으로 많고 복잡한 인터럽트 관리 위해 PIC를 2개 이상 계층적으로 구성
  • cf. PIC가 무시할 수 없는 인터럽트인 NMI까지 우선순위 판별X
    • NMI는 우선순위 가장 높아 판별 불필요

 

 

 

DMA 입출력

입출력장치와 컴퓨터 내부를 연결 짓는 통로로, 입출력 작업 과정에서 시스템 버스 사용 횟수를 줄여줌

 

  • 프로그램 기반 입출력, 인터럽트 기반 입출력은 입출력장치와 메모리 간의 데이터 이동은 CPU가 주도하고 이동하는 데이터도 반드시 CPU를 거침
  • 입출력장치와 메모리가 CPU를 거치지 않고 직접 메모리에 접근해 상호작용 할 수 있는 입출력 방식이 DMA(Direct Memory Access) 입출력
  • DMA 입출력을 위해 시스템 버스에 연결된 DMA 컨트롤러라는 하드웨어 필요

 

DMA 입출력 과정

  • 일반적인 DMA 입출력 과정
    1. CPU는 DMA 컨트롤러에 입출력장치의 주소, 수행할 연산(읽기/쓰기), 읽거나 쓸 메모리의 주소 등 정보로 입출력 작업 명령
    2. DMA 컨트롤러는 CPU 대신 장치 컨트롤러와 상호작용하며 입출력작업 수행
    3. 단, DMA 컨트롤러는 필요한 경우 메모리에 직접 접근해 정보를 읽거나 씀
    4. 입출력 작업이 끝나면 DMA 컨트롤러는 CPU에 인터럽트를 걸어 작업이 끝났음을 알림

▶ 예시 : DMA 입출력으로 메모리 내 정보를 HDD에 백업하는 작업

1. CPU는 DMA 컨트롤러에 HDD 주소, 수행할 연산(쓰기), 백업할 내용이 저장된 메모리 주소 등 정보와 함께 입출력 작업 명령

 

2. ① DMA 컨트롤러는 CPU를 거치지 않고 메모리와 직접 상호작용하며 백업할 정보 읽어옴

    ② 정보를 하드 디스크의 장치 컨트롤러에 내보냄

 

3. 백업이 끝나면 DMA 컨트롤러는 CPU에게 인터럽트를 걸어 작업이 끝났음을 알림

 

  • DMA 컨트롤러의 시스템 버스 이용 방법
    • DMA 컨트롤러는 시스템 버스로 메모리에 직접 접근 가능하나, 시스템 버스는 동시 사용 불가
      • 시스템 버스는 공용 자원이기 때문
      • CPU가 시스템 버스 사용 시 DMA 컨트롤러는 시스템 버스 사용X,
        DMA 컨트롤러가 시스템 버스 사용 시 CPU가 시스템 버스 사용X
    • DMA 컨트롤러는 CPU가 시스템 버스를 이용하지 않을 때마다 조금씩 시스템 버스를 이용하거나,
      CPU가 일시적으로 시스템 버스를 이용하지 않도록 허락을 구하고 시스템 버스를 집중적으로 이용

 

입출력 버스

  • CPU, 메모리, DMA 컨트롤러, 장치 컨트롤러가 모두 같은 버스를 공유하는 구성에서 DMA를 위해 1번 메모리에 접근할 때마다 시스템 버스를 2번 사용하게되는 부작용이 있음

 

① 메모리에서 DMA 컨트롤러로 데이터를 가져오기 위해 시스템 버스 사용 - 1번

② DMA 컨트롤러 데이터 → 장치 컨트롤러로 옮기기 위해 시스템 버스 사용 - 2번

  • DMA를 위해 시스템 버스를 너무 자주 사용하면 그만큼 CPU가 시스템 버스 이용X
    • 입출력 버스라는 별도에 버스에 DMA 컨트롤러, 장치 컨트롤러들을 연결해 해결
    • 장치 컨트롤러들이 시스템 버스가 아닌 입출력 버스로 DMA 컨트롤러에 연결되면 DMA 컨트롤러와 장치 컨트롤러가 서로 데이터를 전송할 때는 시스템 버스를 이용할 필요가 없어 시스템 버스의 사용 빈도를 줄일 수 있음
  • 현대 대부분의 컴퓨터에는 입출력 버스 있음
    • 대부분의 입출력장치(장치 컨트롤러)는 시스템 버스가 아닌, 입출력 버스와 연결됨
    • 입출력 버스는 입출력장치를 컴퓨터 내부와 연결 짓는 통로
  • 입출력 버스에는 PCI(Peripheral Component Interconnect)버스, PCI Express(PCle) 버스 등 여러 종류 있음
  • 거의 모든 입출력장치들은 입출력 버스와 연결되는 통로를 통해 시스템 버스를 타고 CPU와 정보를 주고받음!
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.