📱다양한 입출력 방법📱
1. 프로그램 입출력
프로그램 속 명령어로 입출력장치에 연결된 장치 컨트롤러를 제어하는 방법.
입출력 명령어를 통해 장치 컨트롤러와 상호작용
메모리에 저장된 정보를 하드디스크에 백업하는 상황을 가정해보자. (하드 디스크에 새로운 데이터 쓰기)
-> CPU가 장치 컨트롤러의 레지스터 값을 읽고 쓰면서 프로그램 입출력 방식이 이루어짐.
그런데 CPU는 여러 장치컨트롤러의 레지스터들을 어떻게 알까?
방법 1. 메모리 맵 입출력
똑같이 메모리에 접근하기 때문에 명령어가 다를 필요가 없음.
방법 2. 고립형 입출력
입출력 전용 명령어가 실행되면 입출력장치에 접근(제어버스)
2. 인터럽트 기반 입출력
CPU 사이클을 효율적으로 관리할 수 있음. cf. 프로그램 입출력 방식에서는 CPU가 상태 레지스터를 주기적으로 읽어봐야 했음.
참고
NMI(Non-Maskable-Interrupt)
인터럽트 비트가 비확성화되어 있어도 인터럽트를 막지 못하는 경우
ex. 하드웨어 고장, 정전 등 빨리 처리해야하는 중대한 인터럽트가 발생했을 경우.
현실적으로 모든 인터럽트를 순차적으로 처리할 수는 없다. 인터럽트에도 우선도가 있기 때문에.
흠 그럼 인터럽트의 우선순위는 어떻게 알지?
PIC(Programmable Interrupt Controller)
DMA(Direct Memory Access)
프로그램 입출력, 인터럽트 기반 입출력의 공통점은
입출력 장치와 메모리 간의 데이터 이동은 'CPU가 주도'하고 이동하는 데이터도 반드시 'CPU를 거친다'는 것.
CPU는 항상 바쁜데.. 하드 디스크 백업과 같이 대용량 데이터를 이동할 때도 CPU가 계속 관여해야 하나?
-> CPU를 거치지 않고 입출력장치가 메모리에 직접적으로 접근하는 기능인 DMA
이를 위해서는 DMA 컨트롤러라는 하드웨어가 필요함.
but DMA 과정에서 DMA 컨트롤러가 메모리에 직접 접근할 때 '시스템 버스'를 이용한다.(주소, 데이터, 제어)
시스템 버스는 공용 자원이기 때문에 동시 사용이 불가능하다.
즉 CPU가 시스템버스를 사용할 때는 DMA 컨트롤러가 시스템 버스를 사용할 수 없고 반대도 그렇다.
지금까지의 예시를 보면
장치컨트롤러가 전부 시스템 버스에 연결되어 있다.
여러 장치컨트롤러들이 직접 시스템 버스에 연결되어 있어도 괜찮은가?
-> DMA 컨트롤러는 시스템 버스에, 장치 컨트롤러들은 입출력 버스에 !
최근에는 입출력 전용 프로세스(채널)가 탑제되기도 함
입출력 명령어를 입출력 전용 프로세스가 처리함.
학습 출처: https://www.youtube.com/watch?v=bls_GjX-4U8&list=PLVsNizTWUw7FCS83JhC1vflK8OcLRG0Hl
'Computer Science > 컴퓨터 구조' 카테고리의 다른 글
16. 장치 컨트롤러, 장치 드라이버 (0) | 2023.08.24 |
---|---|
15. RAID (0) | 2023.08.22 |
14. 보조기억장치(하드디스크, 플래시 메모리) (0) | 2023.08.22 |
13. 캐시 메모리 (0) | 2023.08.21 |
12. 메모리의 주소 공간 (0) | 2023.08.20 |