issues
search
1two13
/
CS
혼자 공부하는 컴퓨터 구조 + 운영체제
2
stars
0
forks
source link
[입출력장치] 다양한 입출력 방법
#19
Open
1two13
opened
1 year ago
1two13
commented
1 year ago
CPU와 장치 컨트롤러가 정보를 주고 받는 방법 3️⃣
1. 프로그램 입출력
2. 인터럽트 기반 입출력
3. DMA 입출력
1two13
commented
1 year ago
1. 프로그램 입출력
프로그램 속 명령어로
입출력장치를 제어하는 방법
CPU가 장치 컨트롤러의 레지스터 값을 읽고 씀으로써
이루어진다.
CPU는 여러 장치 컨트롤러 속 레지스터들을 모두 알고 있기는 어렵다.
명령어들이 어떻게 명령어로 표현되고, 메모리에 저장되어 있는지 아는데에는 2가지 방식이 있다. 2️⃣
1. 메모리 맵 입출력
메모리에 접근하기 위한 주소 공간과 입출력장치에 접근하기 위한 주소 공간을
하나의 주소 공간
으로 간주하는 방법이다.
즉, 메모리에 접근하는 명령어와 입출력장치에 접근하는 명령어를 굳이 구분하지 않고, 모두 똑같이 메모리 주소를 대하듯 하면 된다.
메모리 주소 공간이 축소된다.
2. 고립형 입출력
메모리에 접근하기 위한 주소 공간과 입출력장치에 접근하기 위한 주소 공간을
분리
하는 방법이다.
입출력 전용 명령어를 사용한다.
메모리 주소 공간이 축소되지 않는다.
1two13
commented
1 year ago
2. 인터럽트 기반 입출력
입출력장치에 의한 하드웨어 인터럽트는 정확히 말하자면 장치 컨트롤러에 의해 발생
한다.
장치 컨트롤러가 입출력 작업을 끝낸 뒤 CPU에게 인터럽트 요청 신호를 보내면 CPU는 하던 일을 백업하고, 인터럽트 서비스 루틴을 실행한다.
여러 입출력장치에서 인터럽트가 동시에 발생한 경우에는 인터럽트를 어떻게 처리해야 할까? 2️⃣
1. 인터럽트가 발생한 순서대로 인터럽트 처리하는 방법
하지만, 현실적으로 모든 인터럽트를 전부 순차적으로 해결할 수는 없다. 인터럽트 중에서도 더 빨리 처리해야 하는 인터럽트가 있기 때문이다.
2. 우선순위가 높은 인터럽트 순으로 인터럽트를 처리하는 방법 2️⃣
플래그 레지스터 속
인터럽트 비트가 활성화되어 있는 경우
무시할 수 없는 인터럽트인 NMI(Non-Maskable Interrupt)가 발생한 경우
NMI: 우선 순위가 가장 높다.
우선순위를 반영하여 다중 인터럽트를 처리하는 방법
많은 컴퓨터에서는
프로그래머블 인터럽트 컨트롤러
(PIC)라는 하드웨어를 사용한다.
PIC는 여러 장치 컨트롤러에 연결되어
장치 컨트롤러에서 보낸 하드웨어 인터럽트 요청들의 우선순위를 판별
한 뒤
CPU에 지금 처리해야 할 하드웨어 인터럽트가 무엇인지를 알려주는
장치이다.
PIC에는 여러 핀이 있는데, 각 핀에는
CPU에 하드웨어 인터럽트 요청을 보낼 수 있는
약속된 하드웨어가 연결되어 있다.
1two13
commented
1 year ago
PIC의 다중 인터럽트 처리 과정
PIC가 무시할 수 없는 인터럽트인 NMI까지 우선순위를 판별하지는 않는다. PIC가 우선순위를 조정해 주는 인터럽트는
인터럽트 비트를 통해 막을 수 있는 하드웨어 인터럽트
다.
더 많고 복잡한 장치들의 인터럽트를 관리하기 위해
PIC를 두 개 이상 계층적으로 구성
한다.
PIC가
장치 컨트롤러에서 인터럽트 요청 신호를 받아들인다.
PIC는 인터럽트 우선순위를 판단한 뒤
CPU에 처리해야할 인터럽트 요청 신호를 보낸다.
CPU는 PIC에 인터럽트 확인 신호
를 보낸다.
PIC는
데이터 버스를 통해
CPU에
인터럽트 벡터
를 보낸다.
CPU는 인터럽트 벡터를 통해
인터럽트 요청의 주체
를 알게 되고, 해당 장치의 인터럽트 서비스 루틴을 실행한다.
1two13
commented
1 year ago
+ 폴링(인터럽트와 자주 비교되는 개념)
입출력장치의 상태는 어떤지, 처리할 데이터가 있는지를
주기적으로 확인하는 방식
이다.
인터럽트 방식보다 CPU의 부담이 크다.
인터럽트를 활용하면 CPU가 인터럽트 요청을 받을 때까지 온전히 다른 일에 집중할 수 있기 때문이다.
1two13
commented
1 year ago
3. DMA(Direct Memory Access) 입출력
프로그램 기반 입출력과 인터럽트 기반 입출력은 입출력장치와 메모리 간의 데이터 이동은 CPU가 주도하고, 이동하는 데이터도 반드시 CPU를 거친다.
하지만 DMA 입출력 방식은
입출력장치와 메모리가 CPU를 거치지 않고
도 상호작용할 수 있다.
DMA 입출력 과정에서
CPU는
DMA 컨트롤러에서 입출력
작업 명령을 내리고, 인터럽트만 받으면 된다.
DMA 입출력을 하기 위해서는
시스템 버스에 연결된 DMA 컨트롤러
라는 하드웨어가 필요하다.
시스템 버스 동시 사용이 불가능하다. 그래서 DMA 컨트롤러는 CPU가 시스템 버스를 이용하지 않을 때 사용하거나, CPU에게 허락을 구하고 시스템 버스를 이용한다.
사이클 스틸링
: 위와 같은 DMA의 시스템 버스 이용
DMA 입출력 과정
CPU는
DMA 컨트롤러에 입출력장치의 주소, 수행할 연산(읽기/쓰기), 읽거나 쓸 메모리의 주소 등과 같은 정보로
입출력 작업을 명령한다.
DMA 컨트롤러는
CPU 대신 장치 컨트롤러와 상호작용하며 입출력 작업을 수행
한다. 이때 DMA 컨트롤러는 필요한 경우
메모리에 직접 접근하여 정보를 읽거나 쓴다.
입출력 작업이 끝나면 DMA 컨트롤러는
CPU에 인터럽트를 걸어 작업이 끝났음을 알린다.
1two13
commented
1 year ago
입출력 버스(별도의 버스)
DMA 컨트롤러는 시스템 버스를 2번 사용
하는데, 그럼 CPU가 그만큼 시스템 버스를 이용하지 못하게 된다. 이 문제는
DMA 컨트롤러와 장치 컨트롤러들을 입출력 버스라는 별도의 버스에 연결
하여 해결할 수 있다.
대부분의 컴퓨터에는 입출력 버스가 있다. 즉, 대부분의 입출력장치는 입출력 버스와 연결되는 통로를 통해 시스템 버스를 타고 CPU와 정보를 주고 받는다.
PCIe 슬롯: 여러 입출력장치들을 PCIe 버스와 연결시켜주는 통로
PCI Express(PCIE) 버스: 입출력 버스 종류 중 하나
CPU와 장치 컨트롤러가 정보를 주고 받는 방법 3️⃣
1. 프로그램 입출력
2. 인터럽트 기반 입출력
3. DMA 입출력