인프런의 개발자를 위한 컴퓨터 공학1 : 혼자 공부하는 컴퓨터 구조 + 운영체제 강의를 듣고, 학습 및 요약
장치 컨트롤러와 장치 드라이버
(여기서 입출력장치는 보조기억장치도 포함한다.)
입출력장치가 CPU, 메모리보다 다루기가 더 까다로운 이유
- 입출력장치는 종류가 많다.
- 장치가 다양하면 장치마다 속도, 데이터 전송 형식 등도 다양하다.
- 즉, 다양한 입출력장치와 정보를 주고받는 방식을 규격화하기 어렵다.
- 일반적으로 CPU와 메모리의 데이터 전송률은 높지만 입출력장치의 데이터 전송률은 낮다.
- 전송률(transfer rate) : 데이터를 얼마나 빨리 교환할 수 있는지를 나타내는 지표
이런 이유로 입출력장치는 장치 컨트롤러를 통해 컴퓨터와 연결된다. 즉 입출력장치는 장치 컨트롤러를 통해 컴퓨터 내부와 정보를 주고 받는다.
- 입출력 제어기(I/O controller), 입출력 모듈(I/O module)
장치 컨트롤러의 역할
- CPU와 입출력장치 간의 통신중개 : 일종의 번역가 역할 수행
- 입출력장치의 오류 검출
- 데이터 버퍼링
- 버퍼링 : 전송률이 높은 장치와 낮은 장치 사이에 주고받는 데이터를 버퍼라는 임시 저장 공간에 저장해 전송률을 비슷하게 맞추는 방법
장치 컨트롤러의 구조
- 상태 레지스터와 제어 레지스터는 하나의 레지스터(상태/제어 레지스터)로 사용되기도 한다.
1. 데이터 레지스터 (버퍼역할)
- CPU와 입출력장치 사이에 주고받을 데이터가 담기는 레지스터 (버퍼)
- RAM을 사용하기도
2. 상태 레지스터
- 상태 정보 저장
- 입출력장치가 입출력 작업을 할 준비가 되었는지,
- 입출력 작업이 완료되었는지,
- 입출력장치에 오류는 없는지 등의 상태 정보
3. 제어 레지스터
- 입출력장치가 수행할 내용에 대한 제어 정보
장치 드라이버
장치 컨트롤러의 동작을 감지하고 제어하는 프로그램 즉, 장치 컨트롤러가 컴퓨터 내부와 정보를 주고받을 수 있게 하는 프로그램
- 장치 컨트롤러가 입출력장치를 연결하기 위한 하드웨어적인 통로면, 장치 드라이버는 입출력장치를 연결하기 위한 소프트웨어적인 통로
- 장치 드라이버가 설치되어 있지 않다면 해당 입출력장치를 사용할 수 없다.
- 컴퓨터가 연결된 장치의 드라이버를 인식하고 실행할 수 있다면 컴퓨터 내부와 정보를 주고받을 수 있지만 컴퓨터가 장치 드라이버를 인식하거나 실행할 수 없다면 그 장치는 컴퓨터 내부와 정보를 주고받을 수 없다.
다양한 입출력 방법
세 가지 입출력 방식 : 프로그램 입출력, 인터럽트 기반 입출력, DMA 입출력
1. 프로그램 입출력
- 프로그램 속 명령어로 입출력장치를 제어하는 방법(메모리 앱 출력 방식)
- 입출력 명령어로써 장치 컨트롤러와 상호작용함(고립형 입출력 방식)
ex) 메모리에 저장된 정보를 하드 디스크에 백업하기 (== 하드 디스크에 새로운 정보 쓰기)
1. CPU는 하드 디스크 컨트롤러의 제어 레지스터에 쓰기 명령 내보내기
2. 하드 디스크 컨트롤러는 하드 디스크 상태 확인 => 상태 레지스터에 준비 완료 표시
3-1. CPU는 상태 레지스터를 주기적으로 읽어보며 하드 디스크의 준비 여부를 확인
3-2. 하드 디스크가 준비되었다면 백업할 메모리의 정보를 데이터 레지스터에 쓰기
- 아직 백업 작업(쓰기 작업)이 끝나지 않았다면 1번부터 반복, 쓰기가 끝났다면 작업 종료
프로그램 입출력방식 => CPU가 장치 컨트롤러의 레지스터 값을 읽고 씀으로써 이루어진다.
장치 컨트롤러의 레지스터 값의 명령어 들은 어떻게 명령어로 표현되고, 어떻게 메모리에 저장되는 지, 즉, CPU가 이 레지스터들(입출력장치의 주소)을 어떻게 알까?
ex) 프린터 컨트롤러의 상태 레지스터를 읽어라, 키보드 컨트롤러의 상태 레지스터를 읽어라, 하드 디스크 컨트롤러의 데이터 레지스터에 'a'를 써라 등
- 메모리 맵 입출력과 고립형 입출력으로 알 수 있다!!
- 즉 프로그램 입출력 방식에는 메모리 맵 입출력 방식과 고립형 입출력 방식이 있다.
1. 메모리 맵 입출력 방식
메모리에 접근하기 위한 주소 공간과 입출력장치에 접근하기 위한 주소 공간을 하나의 주소 공간으로 간주하는 방법
ex)
- 516번지 : 프린터 컨트롤러의 데이터 레지스터
- 517번지 : 프린터 컨트롤러의 상태 레지스터
- 518번지 : 하드 디스크 컨트롤러의 데이터 레지스터
- 519번지 : 하드 디스크 컨트롤러의 상태 레지스터
- '517번지를 읽어 들여라' == 프린터 상태 읽기, '518번지에 a를 써라' == 하드디스크에 a 쓰기
=> 메모리 접근 명령어와 입출력장치 접근 명령어가 동일하다. 왜냐면 하나의 주소 공간으로 간주하기 때문
2. 고립형 입출력
메모리를 위한 주소 공간과 입출력 장치를 위한 주소 공간을 분리하는 방법
- (입출력 읽기/쓰기 선을 활성화시키는) 입출력 전용 명령어 사용
메모리 맵 입출력 | 고립형 입출력 |
메모리와 입출력장치는 같은 주소 공간 사용 | 메모리와 입출력장치는 분리된 주소 공간 사용 |
메모리 주소 공간이 축소됨 | 메모리 주소 공간이 축소되지 않음 |
메모리와 입출력장치에 같은 명령어 사용 가능 | 입출력 전용 명령어 사용 |
2. 인터럽트 기반 입출력
- (하드웨어) 인터럽트의 개념, 플래그 레지스터 속 인터럽트 비트, 인터럽트 요청 신호, 인터럽트 서비스 루틴
- 하드웨어 인터럽트는 장치 컨트롤러에 의해 발생한다.
- CPU는 장치 컨트롤러의 요청이 있을 때만 확인하기 때문에(상태레지스터를 주기적으로 읽어보지 않아도 됨) 효율적으로 일할 수 있다. => 콜링
- 모든 인터럽트를 순차적으로 처리할 수 없고, 인터럽트 중에서도 우선 순위가 높은 인터럽트가 있다.
- 동시다발적인 인터럽트 : 우선 순위를 반영한 인터럽트
동시다발적인 인터럽트의 한 종류
PIC(Programmable Interrupt Controller)
여러 장치 컨트롤러에 연결되어 장치 컨트롤러의 하드웨어 인터럽트의 우선순위를 판단한 뒤 CPU에게 지금 처리해야 하는 인터럽트가 무엇인지 판단하는 하드웨어
프로그램 입출려과 인터럽트 기반 입출력의 공통점 : 입출력 장치와 메모리 간의 데이터 이동은 CPU가 주도하고 이동하는 데이터도 반드시 CPU를 거친다.
DMA 입출력(Direact Memory Acess)
CPU를 거치지 않고 입출력장치가 메모리에 직접적으로 접근하는 기능
DMA 컨트롤러를 통해 DMA를 할 수 있다.
- CPU는 DMA 컨트롤러에 입출력 작업을 명령
- DMA 컨트롤러는 CPU 대신 장치 컨트롤러와 상호작용하며 입출력 작업을 수행
- 이 때 DMA 컨트롤러는 필요한 경우에 메모리에 직접 접근
- 입출력 작업이 끝나면 DMA 컨트롤러는 인터럽트를 통해 CPU에 작업이 끝났음을 알림
=> 즉 CPU는 입출력 작업의 시작과 끝만 관여하게 된다.
- 앞선 예시의 DMA 과정에서 시스템 버스를 이용하게 되는데, 시스템 버스는 공용 자원이기 때문에 동시 사용이 불가능하다.
- 그래서 CPU가 시스템 버스를 사용할 때 DMA 컨트롤러는 시스템 버스를 사용할 수 없고, DMA 컨트롤러가 시스템 버스를 사용할 때는 CPU가 시스템 버스를 사용할 수 없음
그래서 DMA 컨트롤러는
- CPU가 시스템 버스를 이용하지 않을 때마다 조금씩 시스템 버스를 이용함
- CPU가 일시적으로 시스템 버스를 이용하지 않도록 허락을 구하고 시스템 버스를 이용함
=> Cycle stealing이라고도 함
- 장치 컨트롤러가 시스템에 직접적으로 연결되어 있으면 좋지 않다. (DMA 컨트롤러가 시스템 버스를 불필요하게 두 번 이용할 수 있다)
- 입출력 버스를 통해 시스템 버스의 이용 빈도를 낮출 수 있다.
'cs' 카테고리의 다른 글
[혼공운영체제] 프로세스의 개요 및 상태와 계층 구조 (0) | 2023.05.04 |
---|---|
[혼공운영체제] 운영체제를 알아야 하는 이유와 운영체제의 큰 그림 (0) | 2023.05.01 |
[혼공운영체제] 보조기억장치(하드디스크, 플래시 메모리, RAID) (0) | 2023.04.30 |
[혼공운영체제] 캐시메모리 (0) | 2023.04.26 |
[혼공운영체제] 메모리의 주소 공간 (0) | 2023.04.21 |