* '혼자서 공부하는' 컴퓨터구조+운영체제 이지만, 혼자보단 여럿이하면 더 좋으니 혼공 학습단 13기와 함께합니다 :)
[3주차 학습 목록] ʕo•ᴥ•ʔ✎
Ch06. 메모리와 캐시 메모리
01. RAM의 특징과 종류
02. 메모리의 주소 공간
03. 캐시 메모리
Ch07. 보조 기억장치
01. 다양한 보조기억장치
02. RAID의 정의와 종류
Ch08. 입출력 장치
01. 장치 컨트롤러와 장치 드라이버
02. 다양한 입출력 방법
Ch06. 메모리와 캐시 메모리
6-1. RAM의 특징과 종류
RAM의 특징
RAM은 전원이 꺼지면 저장된 명령어와 데이터가 모두 날아간다. 이러한 특성을 가진 장치를 휘발성 저장 장치라고 한다. 이와 반대의 특성을 가진 장치는 비휘발성 저장 장치라고 한다.
- 휘발성 저장 장치(volatile memory) : 전원을 끄면 저장된 명령어와 데이터가 모두 날아가는 저장 장치
- 비휘발성 저장 장치(non-volatile memory) : 전원을 꺼도 저장된 내용이 유지되는 저장 장치
(ex. 하드 디스크, SSD, CD-ROM, USB 메모리 메모리와 같은 보조기억장치)
* RAM은 휘발성 저장 장치, 보조기억장치는 비휘발성 저장 장치에 해당한다.
보통 비휘발성 저장 장치에는 '보관할 대상'을, 휘발성 저장 장치에는 '실행할 대상'을 저장한다.
RAM의 용량과 성능
RAM 용량과 컴퓨터 성능은 서로 어떤 영향이 있을까?
실행하고 싶은 프로그램이 보조기억장치에 있다면 RAM으로 가져와야 한다. 만일, RAM 용량이 작다면, 보조기억장치에서 가져오는 일이 잦아져서 실행 시간이 길어질 것이다. 반대로 RAM 용량이 크다면, 보조기억장치에서 한번에 데이터를 많이 가져와 미리 RAM에 저장할 수 있게 된다. 즉, RAM 용량이 크면 많은 프로그램을 동시에 빠르게 실행하는데 유리하다. (*하지만 RAM 용량이 무조건적으로 커진다고 해서 실행 속도가 무조건적으로 비례하여 빨라지는 것은 또 아니다! 어느 기준치 이상으로 용량이 커지면 속도가 증가하지는 않는다.)
RAM의 종류
RAM 종류에는 크게 4가지가 있다.
1) DRAM
- Dynamic RAM의 줄임말
- 저장된 데이터가 동적으로 변하는(=사라지는) RAM을 의미
- 단점 : 시간이 지나면 저장된 데이터가 점차 사라짐
- 보완점 : 단점을 막기 위해 일정 주기로 데이터를 재활성화 즉, 재저장을 해야 함
- 사용하는 이유: 이러한 단점이 있음에도 사용하는 이유는, 소비전력이 비교적 낮고, 가격이 저렴하고 또한 *집적도가 높기 때문에 대용량으로 설계할 때 용이하기 때문 -> 일반적으로 우리가 사용하는 RAM에 해당한다!
* 집적도가 높다 = 더 작고 빽빽하게 만들 수 있다
2) SRAM
- Static RAM의 줄임말
- 저장된 데이터가 변하지 않는 RAM을 의미
- 장점 : DRAM보다 일반적으로 속도가 더 빠름
- 이러한 장점이 있음에도 일반적으로 사용하지 않는 이유 : DRAM보다 집적도가 낮고, 소비 전력이 크고, 가격이 더 비싸기 때문
- 사용하기 적합한 경우 : 대용량으로 만들어질 필요는 없고 속도가 빨라야 하는 저장 장치여야 하는 경우 = 캐시 메모리인 경우
* SRAM이 저장된 데이터가 변하지 않는다고 해서 비휘발성 메모리는 아니다. SRAM도 전원 공급이 되지 않으면 저장된 내용은 날라간다.
3) SDRAM
- Synchronous Dynamic RAM으로 클럭과 동기화된 DRAM이다.
- 클럭 신호에 맞춰 동작하며 클럭마다 CPU와의 정보를 주고받을 수 있음을 의미
4) DDR SDRAM
- Double Data Rate SDRAM으로 대역폭이 두배 넓은 SDRAM이다.
- 대역폭(data rate)이란, 데이터를 주고받는 길의 너비를 의미하며 대역폭이 넓으면 속도가 빨라진다.
- SDRAM보다 두배의 대역폭으로 한 클럭당 두번씩 CPU와 데이터를 주고받을 수 있어, 전송 속도가 두 배정도 더 빠르다.
* 이렇게 대역폭의 배수별로 아래와 같이 SDRAM 이름이 다르다.
- SDR SDRAM(Single Data Rate SDRAM) : 한 클럭당 하나씩 데이터를 주고받을 수 있는 SDRAM
- DDR2 SDRAM : SDR SDRAM보다 대역폭이 4배 넓은 SDRAM
- DDR3 SDRAM : SDR SDRAM보다 대역폭이 8배 넓은 SDRAM
- DDR4 SDRAM : SDR SDRAM보다 대역폭이 16배 넓은 SDRAM
6-2. 메모리의 주소 공간
물리 주소와 논리 주소
메모리에 저장된 정보의 위치는 주소로 나타낼 수 있다고 했는데, 주소에는 두가지 종류가 있다.
- 물리 주소(physical address) : 메모리가 사용하는 주소, 하드웨어 상의 실제 주소
- 논리 주소(logical address) : CPU와 실행 중인 프로그램이 사용하는 주소, 실행 중인 프로그램 각각에게 부여된 주소
--> CPU가 이해하는 주소가 논리 주소라고 해도 메모리와 상호작용을 하기 위해선 논리 주소와 물리 주소 간의 변환이 이루어져야한다.
논리 주소와 물리 주소 간 변환은 메모리 관리 장치(Memory Management Unit)에 의해 수행된다.
- 메모리 관리 장치(이하 MMU) : CPU와 주소 버스 사이에 위치한 하드웨어
- 변환 방법 : CPU가 발생시킨 논리 주소 + *베이스 레지스터 값 => 물리 주소로 변환
* 베이스 레지스터란, 프로그램의 가장 작은 물리 주소를 의미한다. 프로그램의 첫 물리 주소를 저장한다.
메모리 보호 기법
다른 프로그램의 영역을 침범하는 명령어는 위험하기에 논리 주소 범위를 벗어나는 실행을 방지하거나 실행 중인 프로그램이 다른 프로그램에 영향을 받지 않도록 보호가 되어야한다. 이를 위해 한계 레지스터(limit register)라는 레지스터가 필요하다.
- 한계 레지스터 : 실행 중인 프로그램의 논리 주소의 최대 크기를 저장
이렇게 한계 레지스터를 논리 주소의 최대 크기로 지정해버려서 CPU가 접근하려는 논리 주소의 범위를 지정해버리는 것이다.
--> CPU가 접근하고자 하는 논리 주소가 한계 레지스터보다 작은지를 검사함으로써 메모리 내의 프로그램을 보호할 수 있게 된다.
6-3. 캐시 메모리
저장 장치 계층 구조
캐시 메모리를 이해하려면 우선 저장 장치 계층 구조 개념을 이해해야 한다.
저장 장치는 일반적으로 다음과 같은 명제를 따른다.
1. CPU와 가까운 저장 장치는 빠르고, 멀리 있는 저장 장치는 느리다.
2. 속도가 빠른 저장 장치는 저장 용량이 작고, 가격이 비싸다.
--> 낮은 가격대의 대용량 저장 장치를 원한다면 느린 속도는 감수해야 하고, 빠른 메모리를 원한다면 작은 용량과 비싼 가격을 감수해야 한다. 이렇기 때문에 어느 하나의 저장 장치만을 사용할 수는 없다. 결국 다양한 저장 장치를 사용할 수밖에 없게 된다.
위의 두가지 명제를 생각해보면 사진과 같이 나타낼 수 있다.
저장 장치 계층 구조(memory hierarchy)란, 각기 다른 용량과 성능의 저장 장치들을 계층화하여 표현한 구조를 말한다.
캐시 메모리
- 캐시 메모리(cache memory) : CPU의 연산 속도와 메모리 접근 속도의 차이를 줄이기 위한 저장 장치
- CPU와 메모리 사이에 위치하고, 레지스터보다 용량이 크고, 메모리보다 빠른 SRAM 기반 저장 장치이다.
우리가 사용하는 컴퓨터에는 여러 개의 캐시 메모리가 있는데, 이 캐시 메모리들은 CPU(코어)와 가까운 순서대로 계층을 구성한다. 코어와 가장 가까운 캐시 메모리를 L1(level 1)캐시, 그 다음으로 가까운 캐시 메모리를 L2(level 2)캐시, 그 다음으로 가까운 캐시 메모리를 L3(level 3)캐시라고 한다.
* 분리형 캐시(split cache) : 코어와 가장 가까운 L1 캐시는 접근 속도를 빠르게 만들기 위해 명령어만 저장하는 L1 캐시(=L1l 캐시)와 데이터만을 저장하는 L1 캐시(=L1D 캐시)로 분리하는 경우
참조 지역성 원리
캐시 메모리는 메모리가 보조기억장치의 일부를 복사하여 저장하듯 메모리의 일부를 복사하여 저장한다. 보조기억장치는 전원이 꺼져도 기억할 대상을 저장하고, 메모리는 실행 중인 대상을 저장한다면 캐시 메모리는 CPU가 사용할 법한 대상을 예측하여 저장한다.
이때 사용하는 빈도수가 높을 것 같다고 예측한 데이터가 실제로 그러하여 캐시 메모리 내 데이터가 CPU에서 활용될 경우를 캐시 히트(cahce hit)라고 한다. 반대로 사용 빈도수가 높을 것 같다고 예측한 데이터를 캐시 메모리에 저장했지만, 실제로는 아니어서 메모리에서 필요한 데이터를 직접 가져와야 하는 경우를 캐시 미스(cache miss)라고 한다. 캐시 히트와 캐시 미스 각각의 횟수를 가지고 캐시가 히트되는 비율 즉, 캐시 적중률(cache hit ratio)을 계산할 수 있다.
* 캐시 적중률 = 캐시 히트 횟수 / (캐시 히트 횟수 + 캐시 미스 횟수)
--> 캐시 적중률이 높으면 CPU의 메모리 접근 횟수를 줄일 수 있다.
CPU가 메모리에 접근할 때의 주된 경향을 바탕으로 만들어진 원리를 참조 지역성의 원리(locality of reference, principle of locality)라고 한다. 이 원리는 다음과 같다.
1. CPU는 *최근에 접근했던(=변수가 저장된) 메모리 공간에 다시 접근하려는 경향이 있다.
* 시간 지역성(temporal locality) : 최근에 접근했던 메모리 공간에 다시 접근하려는 경향
2. CPU는 접근한 메모리 공간 근처를 접근하려는 경향이 있다.
* 공간 지역성(spatial locality) : 접근한 메모리 공간 근처를 접근하려는 경향
캐시 메모리는 이 참조 지역성의 원리에 따라 CPU가 사용할 법한 데이터를 예측하여 메모리로부터 가져올 데이터를 결정한다.
Ch07. 보조 기억장치
7-1. 다양한 보조기억장치
보조기억장치의 대표적인 예는 하드 디스크와 플래시 메모리이다. 여기서 플래시 메모리란, 우리가 흔히 사용하는 USB 메모리, SD 카드, SSD와 같은 저장 장치를 말한다.
하드 디스크
- 하드 디스크(HDD: Hard Disk Drive) : 자기적인 방식으로 데이터를 저장하는 보조기억장치, 자기 디스크(magnetic disk)라고도 지칭
하드 디스크 부품 용어를 알아보자.
- 플래터(platter) : 하드 디스크에서 실제로 데이터가 저장되는 동그란 원판
- 스핀들(spindle) : 플래터를 회전시키는 구성 요소
* RPM(Revolution Per Minute) : 스핀들이 플래터를 돌리는 속도를 분당 회전수로 표현하는 단위
(ex. 15,000 RPM = 1분에 15,000바퀴를 회전)
- 헤드(head) : 플래터를 대상으로 데이터를 읽고 쓰는 구성 요소, 바늘같이 생긴 부품
- 디스크 암(disk arm) : 헤드가 부착되어 있는 부품, 헤드를 원하는 위치로 이동시키는 구성 요소
여기서 플래터는 트랙과 섹터라는 단위로 데이터를 저장 한다.
- 트랙(track) : 플래터를 여러 동심원으로 나누었을 때, 그 중 하나의 원을 지칭하는 단위
- 섹터(sector) : 트랙이 피자처럼 여러 조각으로 나누어져 있는데, 그 중 한 조각을 지칭하는 단위
* 하나 이상의 섹터를 묶어서 블록(block)이라고 표현
- 실린더(cylinder) : 여러 겹의 플래터 상에서 같은 트랙이 위치한 곳을 모아 연결한 논리적 단위
* 트랙 - 한 플래터를 동심원으로 나눈 공간, 실린더 - 같은 트랙끼리 연결한 원통 모양의 공간
하드 디스크의 섹터, 트랙, 실린더에 데이터가 저장된다는 것을 알게 되었다. 그렇다면 그 저장된 데이터에 접근은 어떻게 할까?
일단 하드 디스크가 저장된 데이터에 접근하는 시간은 크게 다음과 같이 3가지로 나뉜다.
데이터 접근 시간
- 탐색 시간(seek time) : 접근하려는 데이터가 저장된 트랙까지 헤더를 이동시키는 시간
- 회전 시간(rotational latency) : 헤드가 있는 곳으로 플래터를 회전시키는 시간
- 전송 시간(transfer time) : 하드 디스크와 컴퓨터 간에 데이터를 전송하는 시간
위와 같은 시간들은 성능에 큰 영향을 끼치는 시간들이다. 다음의 표는 구글의 AI를 주도하는 제프 딘의 '프로그래머가 꼭 알아야 할 컴퓨터 시간들'의 일부 발췌한 내용이다.
L1 캐시 참조 시간 | 0.5ns |
L2 캐시 참조 시간 | 5ns |
메모리 참조 시간 | 7ns |
메모리에서 1MB를 순차적으로 읽는 시간 | 250,000ns |
(하드)디스크 탐색 시간 | 10,000,000ns |
(하드)디스크에서 1MB를 순차적으로 읽는 시간 | 30,000,000ns |
한 패킷이 캘리포니아에서 네덜란드까지 왕복하는 시간 | 150,000,000ms |
* ns(나노초) : 10^-9초 / 패킷(packet) : 네트워크의 기본적인 전송 단위
플래시 메모리
우리가 많이들 사용하는 USB 메모리, SD 카드, SSD가 플래시 메모리(flash memory) 기반의 보조기억장치에 해당한다.
플래시 메모리는 전기적으로 데이터를 읽고 쓸 수 있는 반도체 기반의 저장 장치를 말한다. 우리가 일상에서 접하는 거의 모든 전자 제품 안에는 이 플래시 메모리가 내장되어 있다고 봐도 될 것이다.
* 두 종류의 플래시 메모리
- NAND 플래시 메모리 : NAND 연산을 수행하는 회로(NAND 게이트) 기반으로 만들어진 메모리
--> 대용량 저장 장치에 용이(우리가 배우는 플래시 메모리는 NAND 플래시 메모리라고 생각해도 무방하다!)
- NOR 플래시 메모리 : NOR 연산을 수행하는 회로(NOR 게이트) 기반으로 만들어진 메모리
플래시 메모리에는 '셀(cell)'이라는 단위가 있다.
셀(cell)이란, 플래시 메모리에서 데이터를 저장하는 가장 작은 단위이다. 이 셀이 모여서 우리가 아는 MB, GB, TB 용량을 가지는 저장 장치가 되는 것이다! 하나의 셀에 몇 비트를 저장할 수 있는지에 따라 플래시 메모리 종류가 나뉘는데, 다음의 3가지 타입의 종류와 특징들을 알아보자.
가장 작은 셀 단위 종류 in 플래시 메모리
첫번째, 한 셀에 1비트를 저장할 수 있는 플래시 메모리인 SLC(Single Level Cell) 타입
- 한 셀로 2개의 정보를 표현할 수 있다.
- 단점 : 용량 대비 가격이 비쌈
- 장점 : 다른 두 타입에 비해 빠른 비트의 입출력이 가능하고, 수명이 더 길다.
- 데이터를 읽고 쓰기가 매우 많이 반복되어 고성능의 빠른 저장 장치가 필요한 경우에 용이함
두번째, 한 셀에 2비트를 저장할 수 있는 플래시 메모리인 MLC(Multiple Level Cell) 타입
- 한 셀로 4개의 정보를 표현할 수 있다.
- 단점 : SLC 타입보다 속도와 수명은 떨어짐
- 장점 : 한 셀에 2bit씩 저장 가능하다는 점에서 SLC타입보다 용량 대비 가격 저렴함
- 사용되는 많은 플래시 메모리 저장 장치들이 이 타입에 해당됨
세번째, 한 셀에 3비트를 저장할 수 있는 플래시 메모리인 TLC(Triple-Level Cell) 타입
- 한 셀로 8개의 정보를 표현할 수 있다.
- 단점 : 일반적으로 SLC, MLC 타입보단 수명과 속도가 떨어짐
- 장점 : 한 셀당 3bit씩 저장할 수 있기에 용량 대비 가격이 저렴하여 대용량화 하기에 용이함
구분 | SLC | MLC | TLC |
셀당 bit | 1bit | 2bit | 3bit |
수명 | 길다 | 보통 | 짧다 |
읽기/쓰기 속도 | 빠르다 | 보통 | 느리다 |
용량 대비 가격 | 높다 | 보통 | 낮다 |
셀 단위보다 더 큰 단위 in 플래시 메모리
- 페이지(page) : 셀들이 모여 만들어진 단위, 읽기/쓰기의 단위
--> 페이지의 3가지 상태
- Free 상태 : 어떠한 데이터도 저장하고 있지 않아 새로운 데이터를 저장할 수 있는 상태
- Valid 상태 : 이미 유효한 데이터를 저장하고 있는 상태
- Invalid 상태 : 유효하지 않은 쓰레기같은 데이터를 저장하고 있는 상태
- 블록(block) : 페이지가 모여 만들어진 단위, 삭제 단위
- 플레인(plane) : 블록이 모여 만들어진 단위
- 다이(die) : 플레인이 모여 만들어진 단위
* 단위 크기 순서 : 페이지 --> 블록 --> 플레인 --> 다이
* 플래시 메모리의 가장 큰 특징 : 읽기/쓰기 단위(페이지)와 삭제 단위(블록)가 다르다!
* 플래시 메모리는 덮어쓰기가 불가능하여 Valid 상태인 페이지에는 새로운 데이터 저장이 불가능하다!
* 최근 플래시 메모리에는 가비지 컬렉션(garbage collection)기능을 제공한다!
- 가비지 컬렉션(garbage collection)이란, 유효한 페이지들만 새로운 블록으로 복사한 후 기존 블록을 삭제하여 공간을 정리하는 기능을 말한다.
7-2. RAID의 정의와 종류
RAID 정의
앞서 배운 하드디스크 또는 플래시 메모리 같은 보조기억장치에는 수명이 존재한다.
따라서 이러한 보조기억장치에 그저 데이터를 저장만 해서는 데이터를 안전하게 관리가 되진 않을 것이다!
이렇게 데이터를 안전하게 관리하고 싶을 때 사용할 수 있는 방법 중 하나가 바로 RAID이다.
RAID(Redundant Array of Independent Disks)란, 데이터의 안정성 혹은 높은 성능을 위해서 여러 하드 디스크나 SSD를 마치 하나의 장치처럼 사용하는 기술을 의미한다.
RAID 종류
RAID를 구성하는 방법은 여러가지가 있다. RAID 구성 방법을 RAID 레벨이라고 표현한다.
여러 레벨 중 대표적인 RAID 레벨에 대해서 알아보자.
1) RAID 0
- 여러 개의 보조기억장치에 데이터를 단순히 나누어 저장하는 구성 방식
--> 저장되는 데이터가 하드 디스크 개수만큼 나뉘어 저장된다.
- 단점 : 저장된 정보가 안전하지 않다.
--> RAID 0으로 구성된 하드 디스크 중 하나만이라도 문제가 생기게 된다면 다른 모든 하드 디스크의 정보를 읽는 데에도 문제가 생길 수 있다..!
* 스트라입(stripe) : 분산되어 저장된 데이터, 스트라이핑(striping) : 분산하여 저장하는 것
2) RAID 1
- 완전한 복사본을 만드는 구성 방식, 미러링(mirroring)이라고도 불림
- RAID 1방식으로 어떤 데이터를 쓸 때는 원본과 복사본 두 군데에 쓰이게 된다. --> RAID 0보다 쓰기 속도 느림!
- 장점 : 복구가 매우 간단하다.
- 단점 : 하드 디스크 개수가 한정되었을 때, 사용 가능한 용량이 적어진다.
3) RAID 4
- 오류를 검출하고 복구하기 위한 정보를 저장한 장치를 두는 구성 방법
- 패리티 비트(parity bit) : 오류를 검출하고 복구하기 위한 정보
* 패리티 비트는 본래 오류 검출용 정보이지만, RAID에서는 오류 복구도 가능하다!
4) RAID 5
- 패리티 정보를 분산하여 저장하는 방식
- RAID 4의 *병목 현상 문제를 해소
* 어떤 새로운 데이터가 저장될 때마다 패리티를 저장하는 디스크에도 데이터를 쓰게된다.
--> 패리티를 저장하는 장치에 병목 현상 문제가 발생함
5) RAID 6
- 서로 다른 두 개의 패리티를 두는 방식(오류를 검출하고 복구할 수 있는 수단이 두 개가 생긴 것!)
* RAID4, RAID5 보단 안전한 구성이지만, 새로운 정보를 저장할 때마다 함께 저장할 패리티가 두 개여서, 쓰기 속도는 RAID 5보다 느리다.
이 외에도 RAID 0과 RAID 1을 혼합한 RAID10 방식도 있고, RAID 0과 RAID 5를 혼합한 RAID 50방식도 있는데,
이러한 혼합 방식을 Nested RAID 라고 한다.
Ch08. 입출력장치
8-1. 장치 컨트롤러와 장치 드라이버
장치 컨트롤러
입출력 장치는 아래와 같은 이유로 CPU, 메모리보다 다루기가 더 까다롭다.
1. 입출력장치에는 종류가 너무 많다.
--> 키보드, 모니터, USB 메모리 등 입출력장치에는 종류가 엄청 다양하다.
장치마다 속도, 데이터, 전송 형식 등도 너무 다양하다보니 이러한 방식들을 규격화하기가 어렵다.
2. 일반적으로 CPU와 메모리의 데이터 전송률은 높지만 입출력장치의 데이터 전송률은 낮다.
여기서 전송률(transfer rate)이란, 데이터를 얼마나 빨리 교환할 수 있는지를 나타내는 지표를 말한다.
이렇게 CPU나 메모리와 전송률이 비슷하지 않기 때문에 입출력장치는 컴퓨터에 직접 연결하지 않고 장치 컨트롤러(device controller)라는 하드웨어를 통해 연결하게 된다.
--> 입출력장치는 장치 컨트롤러를 통해 컴퓨터 내부와 정보를 주고 받는다!
장치 컨트롤러의 역할에는 3가지가 있다.
1) CPU와 입출력장치 간의 통신 중개
2) 오류 검출
3) 데이터 버퍼링
앞서 말한 입출력장치의 종류가 많아 정보 규격화가 어렵다고 했던 문제를 장치 컨트롤러가 일종의 번역가 역할을 하면서 해결할 수가 있다. 이 과정에서 장치 컨트롤러는 자신과 연결된 입출력장치에 문제가 있는지 없는지 오류를 검출하기도 한다!세번째 기능인 데이터 버퍼링에서 버퍼링(buffering)이란, 전송률이 높은 장치와 낮은 장치 사이에 주고받는 데이터를 버퍼(buffer)라는 임시 저장 공간에 저장하여 전송률을 비슷하게 맞추는 방법을 말한다.
즉, 이 데이터 버퍼링 기능으로 CPU와 입출력장치와의 전송률 차이를 완화시키는 것이다!
장치 컨트롤러의 간략한 내부 구조
데이터 레지스터와 상태 레지스터, 제어 레지스 세가지를 기억하면 된다.
- 데이터 레지스터(data register) : CPU와 입출력장치 사이에 주고받을 데이터가 담기는 레지스터 (버퍼 역할)
- 상태 레지스터(status register) : 입출력장치의 입출력 작업 상태 정보를 저장하는 레지스터
- 제어 레지스터(controller register) : 입출력장치가 수행할 내용에 대한 제어 정보와 명령을 저장하는 레지스터
장치 드라이버
새로운 장치를 컴퓨터에 연결하기 위해서는 장치 드라이버를 설치해야 한다.
장치 드라이버(device driver)란, 장치 컨트롤러가 컴퓨터 내부와 정보를 주고받을 수 있게 하는 프로그램이다.
입출력장치를 연결하기 위한 하드웨어적 통로가 장치 컨트롤러라면, 소프트웨어적인 통로는 장치 드라이버이다.
8-2. 다양한 입출력 방법
장치 컨트롤러는 CPU와 크게 아래와 같이 3가지 방법으로 정보를 주고 받는다.
1. 프로그램 입출력
프로그램 입출력(programmed I/O) : 프로그램 속 명령어로 입출력 작업을 하는 방식
CPU가 프로그램 속 명령어를 실행하는 과정에서 입출력 명령어를 만나면, CPU는 입출력장치에 연결된 장치 컨트롤러와 상호작용하며 입출력 작업을 수행한다. 프로그램 입출력 방식에서의 입출력 작업은 CPU가 장치 컨트롤러의 레지스터 값을 읽고 씀으로써 이루어지는데, CPU 내부에 있는 레지스터들과는 다르게 여러 장치 컨트롤러 속 레지스터들에 대해서는 모두 다 알고 있긴 어렵다.
이때, 메모리에 어떻게 저장되어 있는지에 따라 2가지 방식으로 크게 나뉜다.
첫번째, 메모리 맵 입출력(memory-mapped I/O)
- 메모리에 접근하기 위한 주소 공간과 입출력장치에 접근하기 위한 주소 공간을 하나의 주소 공간으로 간주하는 입출력 방식
ex) 1,024개의 주소 = 512개(메모리를 위한 주소) + 512개(입출력을 위한 주소 즉, 장치 컨트롤러의 레지스터를 표현하기 위한 주소)
* 이때 중요한 점, 해당 방식에서 CPU는 메모리의 주소들이나 장치 컨트롤러의 레지스터들이나 모두 똑같은 메모리 주소를 대하듯 하면 된다! 따라서 메모리에 접근하는 명령어와 입출력장치에 접근하는 명령어가 같다.
두번째, 고립형 입출력(isolated I/O)
- 메모리에 접근하기 위한 주소 공간과 입출력장치에 접근하기 위한 주소 공간을 분리하는 입출력 방식
ex) 1,024개의 주소 = 1,024개(메모리를 위한 주소) / 1,204개(입출력장치를 위한 주소)
* 메모리 맵 입출력 방식과 다르게, 해당 방식에서 CPU는 입출력장치에 접근하기 위해서는 메모리에 접근하는 명령어와는 다른 입출력 명령어를 사용한다.
2. 인터럽트 기반 입출력
인터럽트 기반 입출력(Interrupt-Driven I/O) : 인터럽트로써 입출력을 수행하는 방법
CPU는 장치 컨트롤러에 입출력 작업을 명령하고, 장치 컨트롤러가 입출력 작업을 수행하는 동안 CPU는 다른 일을 할 수가 있다.
장치 컨트롤러가 작업을 끝낸 뒤 다시 CPU에게 인터럽트 요청 신호를 보내면 CPU가 하던 일을 잠시 백업하고 인터럽트 서비스 루틴을 실행한다. 이렇게 인터럽트를 기반으로 하는 입출력을 의미한다.
그렇다면 여러 입출력장치에서 인터럽트가 동시에 발생한 경우는 어떻게 처리가 되느냐?
간단하게 생각한다면 인터럽트가 발생한 순서대로 처리하는 방법이 있을 것이다. 하지만, 모든 인터럽트를 순차적으로만 해결할 수는 없을 것이다. 인터럽트 간에도 더 빨리 처리해야 하는 인터럽트가 있을 것이기 때문이다. 이렇게 CPU가 우선순위가 높은 인터럽트부터 처리하는 경우는 플래그 레지스터 속 인터럽트 비트가 활성화가 되어 있는 경우, 혹은 인터럽트 비트를 비활성화해도 무시할 수 없는 인터럽트 NMI(Non-Maskable Interrupt)가 발생한 경우이다.
우선순위를 반영하여 다중 인터럽트를 처리하는 방법에는 여러가지가 있지만 그 중 많은 컴퓨터에서는 프로그래머블 인터럽트 컨트롤러(PIC:Programmable Interrupt Controller)라는 하드웨어를 사용한다. PIC는 여러 장치 컨트롤러에 연결되어 장치 컨트롤러에서 보낸 하드웨어 인터럽트 요청들의 우선순위를 판별한 뒤 CPU에 지금 처리해야 할 하드웨어 인터럽트는 무엇인지 알려주는 장치이다.
* 인터럽트와 비교되는 개념 '폴링'
- 폴링(polling) : 입출력의 상태는 어떤지, 처리할 데이터가 있는지를 주기적으로 확인하는 방식
3. DMA 입출력
DMA 입출력(Direct Memory Access I/O) : CPU를 거치지 않고 메모리와 입출력장치 간의 데이터를 주고받는 입출력 방식
앞서 나온 두가지 방식의 입출력의 공통점은, 입출력장치와 메모리 간의 데이터 이동은 CPU가 주도하고 이동하는 데이터도 반드시 CPU를 거친다는 점이다. 반드시 CPU를 거쳐야 하다보니 시간을 빼앗기게 된다는 문제가 생기게 된다. 하드 디스크 백업과 같이 대용량 데이터를 옮길 때는 CPU 부담이 더 커질 것이다. 그래서 DMA 입출력 방식이 등장한 것이다!
이 방식의 입출력을 하기 위해선 시스템 버스에 연결된 DMA 컨트롤러라는 하드웨어가 필요하다.
CPU는 DMA 컨트롤러에게 입출력 작업 명령을 내리고, 인터럽트만 받으면 되기 때문에 작업 부담을 훨씬 줄일 수가 있다. 즉, CPU는 오로지 입출력의 시작과 끝에만 관여하면 된다는 것이다!
DMA 컨트롤러는 시스템 버스로 메모리에 직접 접근이 가능하다. 하지만 시스템 버스는 공용 자원이기 때문에 동시 사용이 불가능하여 CPU가 시스템 버스를 사용할 때 DMA 컨트롤러는 사용 불가능하고, 반대로 DMA 컨트롤러가 시스템 버스를 사용할 때는 CPU가 사용할 수가 없다. 그래서 DMA 컨트롤러는 CPU가 시스템 버스를 사용하지 않을 때마다 조금씩 사용하거나, 일시적으로 CPU가 사용하지 않도록 허락을 구하고 집중적으로 시스템 버스를 이용한다.
DMA 컨트롤러와 장치 컨트롤러의 연결 방식과 입출력 버스에 대해 알아보자.
CPU, 메모리, DMA 컨트롤러, 장치 컨트롤러가 모두 같은 버스를 공유하는 구성에선 DMA를 위해 한번 메모리에 접근할 때마다 시스템 버스를 두 번 사용하게 되는 부작용이 있다. 이러한 점을 해결하기 위해 입출력 버스(input/output bus)라는 별도의 버스에 DMA 컨트롤러와 장치 컨트롤러를 연결한다. 즉, 입출력장치와 컴퓨터 내부를 연결 짓는 통로로, 입출력 작업 과정에서 시스템 버스 사용 횟수를 줄여주는 것이다.
[과제]
- 필수과제
01) 185p
03. 다음 설명을 읽고 SRAM에 대한 설명인지 DRAM에 대한 설명인지 쓰시오.
[보기] SRAM, DRAM
- 주로 캐시 메모리로 활용된다. ( 1 )
- 주로 주기억장치로 활용된다. ( 2 )
- 대용량화하기 유리하다. ( 3 )
- 집적도가 상대적으로 낮다. ( 4 )
DRAM은 시간이 지나면 저장된 데이터가 점차 사라지는 RAM이고, 가격이 비교적 저렴하고 집적도가 높기에 대용량으로 사용하기에 용이하여 우리가 보통 사용하는 RAM에 해당한다.
SRAM은, 시간이 지나도 저장된 데이터가 사라지지 않는 RAM으로 DRAM보다 일반적으로 속도가 더 빠르지만 집적도가 낮고, 가격이 비교적 비싸기 때문에 대용량으로 사용하기에는 적합하지 않아 주로 캐시 메모리에 사용된다.
(1) : SRAM
(2) : DRAM
(3) : DRAM
(4) : SRAM
02) 205p
01. 다음 보기에 있는 저장 장치들로 저장 장치 계층 구조 도식도를 채우시오.
[보기] 메모리, 보조기억장치, 캐시 메모리, 레지스터
(1) : 레지스터
(2) : 캐시 메모리
(3) : 메모리
(4) : 보조기억장치
'Studying > 혼공학습단' 카테고리의 다른 글
[혼공컴운]6주차_Ch.14 - 15 (0) | 2025.02.23 |
---|---|
[혼공컴운]5주차_Ch.12 - 13 (0) | 2025.02.18 |
[혼공컴운]4주차_Ch.09 - 11 (0) | 2025.02.13 |
[혼공컴운] 2주차_Ch.04 - 05 (0) | 2025.01.20 |
[혼공컴운] 1주차_Ch.01 - 03 (0) | 2025.01.12 |