게으른 나에게

[혼자 공부하는 컴퓨터구조+운영체제] "chapter8. 입출력장치" 본문

My Study/서적 공부

[혼자 공부하는 컴퓨터구조+운영체제] "chapter8. 입출력장치"

handbefore 2024. 8. 4. 18:23

8-1 장치 컨트롤러와 장치 드라이버

다양한 외부 장치가 컴퓨터 내부와 연결되고 소통하는 법.

 

장치 컨트롤러

입출력장치는 다루기가 까다로움.

 

1. 입출력장치는 종류가 많음.

-장치가 다양하면 각각의 방식다양함.

-다양한 입출력장치와 정보를 주고받는 방식을 규격화하기 어려움.

 

2. CPU와 메모리의 데이터 전송률은 높음. 입출력 장치의 데이저 전송률은 낮음.

-전송률: 데이터를 얼마나 빨리 교환할 수 있는지 나타내는 지표.

-전송률 차이는 CPU와 메모리, 입출력장치 간의 통신을 어렵게 함.

 

어떤 입출력장치는 전송률이 높은 경우도 있음.

결과적으로 CPU나 메모리와 전송률이 비슷하지 않기 때문에 같은 어려움 존재.

 

장치 컨트롤러(=입출력 제어기, 입출력 모듈): 입출력 장치는 컴퓨터에 직접 연결되지 않고 하드웨어를 통해 연결되는 곳.

입출력 장치: 각 장치 컨트롤러를 통해 컴퓨터 내부와 정보를 주고 받음.

장치컨트롤러: 하나이상의 입출력 장치와 연결.

 

컨트롤러의 역할

-CPU와 입출력 장치 간의 통신 중계

-오류 검출

- 데이터 버퍼링

=> "이를 통해 문제들 해결 가능."

 

데이터 버퍼링: 버퍼링(전송률이 높은 장치와 낮은 장치 사이에 주고받는 데이터)을 버퍼(임시 저장공간)에 저장하여 전송률을 비슷하게 맞추는 방법.

버퍼링은 데이터를 조금씩 모았다가 한꺼범네 내보내거나, 데이터를 한번에 많이 받아 조금씩 내보내는 방법.

장치 컨트롤러는 일반적으로 CPU와 입출력 장치와의 전송률 차이데이터 버퍼링으로 완화.

 

장치컨트롤러의 내부 구조

1. 데이터 레지스터

CPU와 입출력 장치 사이에 주고 받을 데이터가 담기는 레지스터. 전송률 차이를 완화할때 버퍼 역할.

2. 상태 레지스터

입출력 장치가 입출력 작업의 상태 정보를 저장.

3. 제어 레지스터

입출력 자치가 수행할 내용에 대한 제어 정보와 명령 저장.

 

이 레지스터에 담긴 값들은 버스를 타고 CPU나 다른 입출력 장치로 전달. 장치 컨트롤러에 연결된 입출력 장치로 전달.

 

장치 드라이버

새로운 장치를 컴퓨터에 연하려면 장치 드라이버 설치.

장치드라이버: 장치 컨트롤러의 동작을 감지하고 제어함으로써 장치 컨트롤러가 컴퓨터 내부와 정보를 주고받을 수 있게 하는 프로그램.

프로그램이기에 실행과정에서 메모리에 저장.

장치컨트롤러: 입출력장치를 연결하기 위한 하드웨어적 통로.

장치드라이버: 입출력장치를 연결하기 위한 소프트웨어적 통로.

장치드라이버를 인식하고 실행하는 주체는 운영체제.

장치드라이버는 운영체제가 기본으로 제공하기도 하지만, 장치 제작자가 따로 제공하기도 함. 따로 제공하는 경우 해당 드라이버 직접 설치해야 사용 가능.

 

 


 

 

 

8-2 다양한 입출력 방법

장치컨트롤러와 CPU가 정보를 주고 받는 방법.

-프로그램 입출력, 인터럽트 기반 입출력, DMA 입출력

프로그램 입출력

프로그램 속 명령어로 입출력 장치를 제어.

CPU가 프로그램 속 명령어를 실행하는 과정에 CPU는 입출력장치에 연결된 장치 컨트롤러와 상호작용하며 입출력 작업 수행.

 

메모리에 저장된 정보 하드디스크에 백업하는 상황.

메모리에 저장된 정보 하드 디스크에 백업 = 하드 디스크에 새로운 정보 쓴다.

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

하드디스크 상태 확인. 

준비된 상태 -> 상태 레지스터준비 표시

CPU는 주기적으로 하드디스크 준비여부 확인.

준비 됐음을 메모리 정보를 데이터 레지스터에 씀.

백업 작업(쓰기작업)이 끝나지 않았으면 처음 순서부터 반복. 쓰기가 끝났으면 작업 종료.

 

입출력작업은 CPU가 장치 컨트롤러의 레지스터 값 읽고씀으로써 이루어짐.

CPU 내부에 있는 레지스터와 달리 CPU는 여러 장치 컨트롤러 속 레지스터들을 아는 방법 어려움.

이를 알기 위한 2가지 방법.

 

1. 메모리 맵 입출력

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

1024개의 주소를 표현할 수 있는 컴퓨터 -> 512개 메모리 주소, 512개 장치 컨트롤러 레지스터 표현하기 위해 사용.

메모리 맵 입출력 방식에서 CPU는 메모리의 주소들이나 장치 컨트롤러의 레지스터들이랑 똑같이 메모리 주소를 대하듯. 명령어는 다를 필요 없음.

 

2. 고립형 입출력

메모리를 위한 주소 공간과 입출력 장치를 위한 주소 공간을 분리하는 방법.

1024개 주소 공간을 가진 컴퓨터 -> 제어버스에 (메모리 읽기/쓰기)선과 (입출력장치 읽기/쓰기)선이 따로 있다면 -> 메모리에도 1024개 주소 공간활용, 입출력장치도 1024개 공간 활용.

CPU는 입출력 장치에 접근하기 위해 메모리에 접근하는 명령어와는 다른 (입출력 읽기/쓰기 선을 활성화 시키는)입출력 명령어 사용.

 

인터럽트 기반 입출력

입출력장치에 의한 하드웨어 인터럽트는 입출력장치가 아닌 장치 컨트롤러에 의해 발생.

장치 컨트롤러가 입출력 작업을 끝낸 뒤 CPU에게 인터럽트 요청 신호 보내면 CPU는 하던 일을 잠시 백업하고 인터럽트 서비스 루틴 실행.

인터럽트 기반입출력: 인터럽트 기반으로 하는 입출력.

폴링: 입출력장치의 상태를 주기적으로 확인하는 방식.

 

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

 

1. 인터럽트가 발생한 순서대로 인터럽트 처리하는 방법.

인터럽트 A 서비스 루틴일 끝나면 인터럽트 B 서비스 루틴 실행.

CPU가 플래그 레지스터 속 인터럽트 비트를 비활성화한 채 다른 인터럽트 무시.

모든 인터럽트는 순차적으로 해결할 순 없음. 빨리 처리해야하는 인터럽트 있기 때문.

 

2. CPU는 인터럽트 간에 우선순위 고려해 처리 가능.

플래그 레지스터 속 인터럽트 비트가 활성화 된 경우, 비활성화 해도 무시할 수 있는 인터럽트(NMI)가 발생한 경우 CPU는 우선순위가 높은 인터럽트부터 처리.

 

프로그래머블 인터럽트 컨트롤러(PIC): 많은 컴퓨터에서 이 하드웨어 사용.

PIC는 인터럽트 요청의 우선순위 판별해 알려주는 장치.

PIC는 여러 핀이 있음. 각 핀에는 CPU에 하드웨어 인터럽트 요청을 보낼 수 있는 하드웨어 연결.

 

 

PIC의 다중 인터럽트 처리과정

① PIC가 장치 컨트롤러에서 인터럽트 요청신호 받음.

② PIC는 인터럽트 우선순위 판단. -> CPU에 처리해야 할 인터럽트 요청 신호.

③ CPU는 PIC에 인터럽트 확인 신호 보냄.

④ PIC 데이터 버스 통해 CPU에 인터럽트 벡터 보냄.

⑤ CPU는 인터럽트 벡터를 통해 인터럽트 요청 주체 알고, 해당 장치 인터럽트 서비스 루틴 실행.

 

더 많고 복잡한 장치들의 인터럽트 관리 위해 PIC를 두개 이상 계층적으로 구성. 훨씬 더 많은 하드웨어 인터럽트 관리 가능.

DMA 입출력

프로그램 기반 입출력, 인터럽트 기반 입출력 공통점: 서로 간의 데이터 이동은 CPU가 주도, 이동하는 데이터 반드시 CPU 거침.

 

입출력 장치 데이터를 메모리에 저장하는 경우

① 장치 컨트롤러에서 입출력장치 데이터 읽어 레지스터 적재.

② 적재한 데이터 메모리 저장.

 

메모리 속 데이터를 입출력장치에 내보내는 경우

① 메모리에서 데이터 읽어 레지스터 적재.

② 적재한 데이터 입출력장치 내보냄.

 

모든 데이터가 반드시 CPU 거쳐야 하면 시간 부담 존재.

DMA: 입출력장치와 메모리가 CPU를 거치지 않고 상호작용할 수 있는 입출력 방식. 직접 메모리에 접근할 수 있는 입출력 기능.

DMA 컨트롤러: DMA 입출력 위해 시스템버스에 연결된 하드웨어.

 

DMA 입출력 과정

메모리 내의 정보를 하드 디스크에 백업하는 작업

 

CPU는 DMA 컨트롤러에 하드디스크 주소, 수행할 연산, 백업할 내용이 저장된 메모리의 주소 등 정보와 함께 입출력 작업 명령.

DMA 컨트롤러는 CPU 거치지 않고 메모리와 직접 상호작용해 백업할 정보 읽어옴. 이를 하드디스크의 장치 컨트롤러에 내보냄.

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

CPU는 DMA컨트롤러에게 입출력 작업 명령 내리고, 인터럽트만 받으면 됨. 입출력 시작과 끝에만 관여.

 

문제 존재.

시스템 버스는 동시에 사용 불가능. 공용 자원이기 때문.

-> DMA 컨트롤러는 CPU가 시스템 버스 이용하지 않을 때마다 이용. CPU가 일시적으로 시스템 버스를 이용하지 않도록 허락을 구하고 이용.

사이클 스틸링: DMA 시스템 버스 이용.

 

입출력 버스

DMA를 위해 한 번 메모리에 접근할 때마다 시스템 버스를 두번 사용하게 되는 부작용.

 

메모리 내 정보를 하드디스크로 백업하는 상황

DMA 컨트롤러 데이터를 가져오기 위해, DMA 컨트롤러 데이터를 장치 컨트롤러로 옮기기 위해 시스템 버스 2번 사용.

시스템 버스 자주사용하면 그만큼 CPU가 시스템 버스 이용 불가능.

=> DMA 컨트롤러, 장치컨트롤러들은 입출력 버스라는 별도 버스에 연결해 해결.

시스템 버스 사용 빈도 줄임.

대부분의 입출력장치는 입출력 버스와 연결.

입출력 버스: 입출력 장치를 컴퓨터 내부와 연결 짓는 통로. PCI버스, PCI Express(PCle) 버스.

PCle 슬록: 여러 입출력 장치들을 PCle 버스와 연결해주는 통로

슬롯 -> 입출력 버스 -> 시스템버스 

 

 

 


출처

https://hongong.hanbit.co.kr/%ec%bb%b4%ed%93%a8%ed%84%b0-%ea%b5%ac%ec%a1%b0-%ec%9a%b4%ec%98%81%ec%b2%b4%ec%a0%9c/

 

[한빛미디어] 혼자 공부하는 컴퓨터 구조+운영체제

좋은 개발자는 컴퓨터를 분석의 대상으로 바라볼 뿐, 두려워하지 않는다!‘전공서가 너무 어려워서 쉽게 배우고 싶을 때’, ‘개발자가 되고 싶은데 뭐부터 봐야 하는지 모를 때’ ‘기술 면접

hongong.hanbit.co.kr