Aesthetic Algorithm
[혼공학습단] Week 3 메모리와 보조기억장치, 입출력장치 본문
🟦 이번 주 범위 🟦
Chapter 06. 메모리와 캐시 메모리
06-1 RAM의 특징과 종류
06-2 메모리의 주소 공간
06-3 캐시 메모리
Chapter 07. 보조기억장치
07-1 다양한 보조기억장치
07-2 RAID의 정의와 종류
Chapter 08. 입출력장치
08-1 장치 컨트롤러와 장치 드라이버
08-2 다양한 입출력방법
Chapter 06. 메모리와 캐시 메모리
06-1. RAM의 특징과 종류
✔️ RAM 용량이 컴퓨터 성능에 어떤 영향을 미치는지
✔️ DRAM, SRAM, SDRAM, DDR SDRAM의 개념과 특징
휘발성 저장 장치 | 전원을 끄면 저장된 내용이 사라지는 저장 장치 ex) RAM |
실행할 대상 |
비휘발성 저장 장치 | 전원이 꺼져도 저장된 내용이 유지되는 저장 장치 ex) 하드디스크, SSD, CD-ROM, USB메모리와 같은 보조기억장치 |
보관할 대상 |
CPU가 실행할 프로그램을 보조기억장치로부터 RAM으로 복사하여 저장한 뒤 실행한다.
따라서 RAM은 CPU가 실행할 대상(명령어와 데이터)을 불러와 저장하는 작업 공간이라고 볼 수 있다. 이 공간은 넓을수록 여러 작업을 동시에 빠르게 처리할 수 있게 된다. 우리가 일상 속 컴퓨터를 사용할 때 버벅이거나 렉이 자주 발생할 때 RAM 업그레이드를 고려하는 것과 밀접한 관련이 있다.
그렇다면 RAM의 용량에 대해 알아보자.
CPU가 필요한 프로그램들이 책장에 꽂혀 있다고 생각해 보고, 그 책들을 가져올 수 있는 공간을 책상(RAM)이라고 가정해 보자.
또한 책상의 크기가 클수록 한 번에 가져올 수 있는 책의 권수가 많을 것이다.
내가 만약 10권의 책을 읽어야 하는데 책상이 너무 좁아 책을 한 번에 1권씩 가져올 수 있다면, 책장에 10번이나 왔다갔다해야할 것이다.
반면 책상이 충분히 넓어 한 번에 10권의 책을 모두 가져올 수 있다면, 나는 책장에 1번만 다녀와도 될 것이다.
마찬가지로 RAM 공간이 충분하다면, 프로그램을 실행하는 데 시간이 단축될 것이다. 그러나 RAM 공간의 크기가 아주 크다고 해서 실행 속도가 비례하여 증가하지는 않는다.
RAM의 종류에 대해 알아보자.
DRAM(Dynamic RAM) | 저장된 데이터가 시간이 지남에 따라 점차 사라진다. 데이터의 소멸을 막으려면 일정 주기로 데이터를 재활성화해야 한다. 소비 전력이 낮고, 저렴하며, 집적도가 높은 장점이 있다. |
SRAM(Static RAM) | 저장된 데이터가 변하지 않으며, DRAM보다 속도가 더 빠르다. |
SDRAM(Synchronous Dynamic RAM) | 클럭 신호와 동기화된, 발전된 형태의 DRAM이다. |
DDR SDRAM(Double Date RateSCRAM) | 가장 흔히 사용되며, 대역폭을 넓혀 속도를 빠르게 한 SDRAM이다. |
✅대역폭(data rate): 데이터를 주고받는 길의 너비, 초당 처리 가능한 데이터 속도
06-2. 메모리의 주소 공간
우리는 'CPU와 실행 중인 프로그램'의 관점에서 생각을 해 보아야 한다.
CPU와 실행 중인 프로그램은 메모리의 몇 번지에 무엇이 저장되어 있는지 알 수 없다.
그 이유는, 메모리는 프로그램이 적재되었다가, 삭제되었다가, 다시 적재되었다 하기 때문이다.
같은 프로그램을 실행하더라도, 프로그램이 저장된 주소 또한 시시때때로 달라진다.
그렇다면, CPU와 실행 중인 프로그램이 이해하는 주소를 정리해보도록 하자.
항목 | 논리 주소 | 물리 주소 |
정의 | CPU와 실행 중인 프로그램이 사용하는 주소 (가상 주소) | 실제 메모리 하드웨어가 사용하는 주소 |
생성 시점 | 프로그램 실행 시, CPU의 메모리 관리 장치(MMU)가 생성 | 메모리에 실제 접근할 때 사용 |
예시 | 0x0040FF12 (가상의 주소) | 0xA02CFF12 (실제 메모리의 주소) |
내 기준으로, 현재 메모리에는 내가 작성 중인 티스토리, PC의 메모장, Pycharm이 실행 중이다.
메모리는 하드웨어상 실제 물리 주소를 사용하지만,
내가 사용 중인 저 프로그램들은 서로가 메모리 몇 번지에 저장되어 있는지 알 필요가 전혀 없다. 메모장을 갑자기 끌 수도 있고, 티스토리를 임시저장하고 꺼버릴 수도 있기 때문이다. 그러면 메모리에서도 지워지겠지.
그렇기 때문에, 티스토리, 메모장, Pycharm은 각각 자신만을 위한 0번지부터의 논리 주소를 갖고 있다.
예를 들어,
티스토리는 논리 주소 0x00000000에서 시작해서 0x001FFFFF까지 사용하고,
메모장은 논리 주소 0x00000000에서 시작해서 0x0000AFFF까지,
Pycharm은 논리 주소 0x00000000에서 시작해서 0x01000000까지 사용하는 식이다.
실제 메모리에서는 운영체제가 물리 주소에 맞게 매핑해주기 때문에 서로 충돌할 일 없이 동시에 실행될 수 있다고 한다.
그러나, CPU가 메모리와 상호작용하려면 논리 주소와 물리 주소 간 변환이 이루어져야 한다.
이 변환 과정은 메모리 관리 장치인 MMU라는 하드웨어에 의해 수행되는데, CPU가 발생시킨 논리 주소에 베이스 레지스터 값을 더하여 물리 주소로 변환하게 된다.
✅베이스 레지스터: 프로세스가 사용할 수 있는 메모리의 시작점을 저장해주는 레지스터이다.
예를 들어 보자, 현재 베이스 레지스터 값이 1000번지이고, CPU가 논리 주소 200번지에 접근하고자 한다면 실제 접근하는 물리 주소는 1000+200=1200번지가 된다.
마지막으로 한계 레지스터에 대해 알아보자.
한계 레지스터는 실행 중인 프로그램의 논리 주소의 최대 크기를 저장하는데, 이는 해당 프로세스가 접근 가능한 메모리 범위의 끝지점을 의미한다. CPU가 메모리에 접근할 때, 논리 주소가 한계 레지스터에 저장된 값보다 크면 메모리를 침범했다고 판단하여 인터럽트(트랩)을 발생시켜 실행을 중단시킨다.
이로써 프로그램이 자신의 메모리 영역을 벗어나지 않도록 보호하는 역할을 한다.
06-3. 캐시 메모리
✔️저장 장치 계층 구조 -> 저장 장치
✔️ CPU와 메모리 사이 위치한 캐시 메모리
CPU 내의 레지스터, RAM, USB메모리는 CPU와의 거리, 용량, 접근 시간에 따른 장단점이 확실하다.
그래서 우린 어느 하나의 저장 장치만을 고집할 수 없고, 다양한 저장 장치를 모두 사용하게 된다.
컴퓨터의 저장 장치들을 CPU와의 거리를 기준으로 계층적으로 나타낼 수 있는데, 이를 저장 장치 계층 구조라고 부른다.
위 계층일수록 CPU와 가깝고 용량은 작지만 빠르다. 아래 계층일수록 CPU와 멀고 용량은 크지만 느리다.
기술이 더 발전하면, 빠르고 용량이 크며 가격도 착한 저장 장치가 나올 수 있을까?
CPU가 메모리에 접근하는 속도 < 레지스터에 접근하는 속도
즉, CPU가 메모리에 접근하는 속도가 느리면 CPU가 아무리 연산을 빨리 해도 전체 프로그램 실행 속도가 느릴 수밖에 없다.
이를 완화하기 위한 저장 장치가 캐시 메모리(cache memory)다.
이는 CPU와 메모리 사이에 위치하며, 레지스터보다 용량은 크고 메모리보다 빠른 SRAM기반 저장 장치이다.
메모리에서 CPU가 사용할 일부 데이터를 미리 캐시 메모리로 가져와서 활용한다.
캐시 메모리들은 CPU(코어)와 가까운 순서대로 계층을 구성하는데, 순서대로 L1캐시(내부), L2캐시(내부), L3캐시(외부)라고 부른다.
내가 라면을 사기 위해 집 앞 편의점(캐시 메모리)을 두고 도보 15분 거리의 홈플러스(메모리)를 갈 필요는 없다.그렇다면, 그 편의점에는 어떤 물건을 팔아야 할까?마찬가지로, 캐시 메모리에는 어떤 것들을 저장해야 CPU의 연산 능력을 충분히 활용할 수 있을까?캐시 메모리는 CPU가 사용할 법한 대상을 예측한다. 그 예측한 대상이 실제로 맞다면, 캐시 히트라고 부른다. 반대로 예측이 틀려서 메모리에서 데이터를 직접 가져와야 할 경우에는 캐시 미스라고 부른다.
tmi를 덧붙이자면 추천 시스템의 성능을 평가할 때도 이 hit라는 지표가 쓰인다.
케이팝을 주로 듣는 유저의 취향을 기반으로 선호할 만한 음악 순위를 제시하고, 실제로 유저가 선호한다면 hit ✔️ 으로 점수를 매기는 것이다.
1) 켄드릭 라마-luther ❌ 2) 에스파-아마겟돈 ✔️ 3) 데이식스-예뻤어 ✔️ 4) 테일러 스위프트-cruel summer ❌ 5) BTS-봄날 ✔️ // 이런 식으로 말이다.
그렇다고 캐시 메모리가 예측을 때려맞추는 식으로 하는 건 아니다.
참조 지역성의 원리를 바탕으로 메모리로부터 가져올 데이터를 결정하게 된다.
1️⃣CPU는 최근에 접근했던 메모리 공간에 다시 접근하려는 경향이 있다. (시간 지역성)
2️⃣CPU는 접근한 메모리 공간 근처를 접근하려는 경향이 있다. (공간 지역성)
1️⃣부터 살펴보자면,
x = 10
for i in range(10):
x = x + 1
이 프로그램을 실행하며 변수 x는 CPU가 반복적으로 접근하게 되므로 시간 지역성이 나타난다.
2️⃣에 관해서는,
CPU가 실행하려는 프로그램은 보통 관련 데이터들끼리 한데 모여 있는 점을 우선 알아야 한다.
예를 들어 내가 파워포인트를 실행다면, 슬라이드 디자인이나 글꼴, 애니메이션 등 PPT와 관련된 데이터들이 메모리상에 인접하게 된다. 이처럼 PPT가 사용하는 데이터들은 서로 연관이 높고 물리적으로도 가까운 위치에 저장된다.
이처럼 접근한 메모리 공간 근처를 접근하려는 경향을 공간 지역성이라고 부른다.
Chapter 07. 보조기억장치
07-1. 다양한 보조기억장치
✔️하드디스크
✔️플래스 메모리
가장 대표적인 보조기억장치로, 하드디스크와 플래시 메모리에 대해 알아보자.
하드 디스크(HDD; Hard Disk Drive)
자기적인 방식으로 데이터를 저장하는 보조기억장치이다.
✅자기적인 방식이 뭘까?: 데이터를 자성(자석처럼 작용하는 성질)을 이용해 0과 1로 표현하는 것이다.
하드디스크의 플래터 표면은 자성을 띤 물질로 코팅되어 있는데, 데이터를 저장할 때 쓰기 헤드가 이 자기층 위를 지나가면서 미세한 자성 방향을 바꾼다. 한 방향으로 자성을 정렬하면 0, 반대 방향이면 1로. 데이터를 읽을 땐 읽기 헤드가 자성의 방향을 감지하여 0과 1을 구분한다.
플래터를 회전시키는 구성 요소는 스핀들(spindle)이라고 하는데, 스핀들이 플래터를 돌리는 속도는 분당 회전수를 나타내는 RPM(Revolution Per Minute)이라는 단위로 표현된다. 보통 5,400~7,200rpm을 갖는다고 한다.
하드디스크에는 많은 양의 데이터를 저장해야 한다. 윈도우와 같은 운영체제만 수십 GB이상이고, 사용자 데이터(사진, 영상, 음악)도 많기 때문이다. 또한, 기업은 10TB HDD도 부족할 정도로 많은 데이터가 필요하기에, 대용량 저장에 특화된 HDD가 필요하다. (SSD보다 가격도 저렴하다.)
따라서 하드디스크는 여러 겹의 플래터로 이루어지며, 양면 사용가능하다.
플래터는 트랙과 섹터 단위로 데이터를 저장한다. 트랙은 플래터를 동심원으로 나눈 조각 중 하나이고, 섹터는 그 트랙을 여러 조각으로 나눈 것 중 한 조각이다. 섹터는 하드디스크의 가장 작은 전송 단위이다.
여러 겹에의 플래터 상에서 같은 트랙이 위치한 곳을 모아 연결한 논리적 단위를 실린더라고 부른다.
모든 플래터의 헤드는 디스크 암을 움직이지 않고도 같은 위치의 트랙을 동시에 읽거나 쓸 수 있다. 그래서 이것을 하나의 그룹으로 묶어서 부른 것이 실린더다.
이젠 하드 디스크가 저장된 데이터에 접근하는 시간을 알아보자:
종류 | 설명 |
탐색 시간(seek time) | 접근하려는 데이터가 저장된 트랙까지 헤드를 이동시키는 시간 |
회전 지연(rotational latency) | 헤드가 있는 곳으로 플래터를 회전시키는 시간 |
전송 시간(transfer time) | 하드 디스크와 컴퓨터 간에 데이터를 전송하는 시간 |
공부를 하다보니, 대체 이런 건 누가 처음 만들었을까 경외심을 느끼게 된다. RESPECT
다음으로 플래시 메모리에 대해 알아보자.
우리가 흔히 사용하는 USB메모리, SD카드, SSD가 모두 플래시 메모리 기반의 보조기억장치라고 한다.
플래시 메모리는 전기적으로 데이터를 읽고 쓸 수 있는 반도체 기반의 저장 장치다.
2가지 종류로 나뉜다고 한다:
종류 | 설명 |
NAND 플래시 메모리 | NAND 게이트 기반 메모리 EX) 플래시 메모리 |
NOR 플래시 메모리 | NOR 게이트 기반 메모리 |
플래시 메모리에는 셀(cell)이라는 단위가 있다. 플래시 메모리에서 데이터를 저장하는 가장 작은 단위로, 이 셀이 모여 MB, GB, TB용량을 갖는 저장 장치가 된다.
1개의 셀에 몇 비트를 저장할 수 있냐에 따라 플래시 메모리의 종류가 나뉜다:
유형 | 셀당 저장 비트수 | 저장 가능한 값 개수 | 특징 | 속도 | 수명 | 가격 | 용도 |
SLC (Single Level Cell) | 1bit | 2 (0,1) | 가장 단순, 안정적 | 매우 빠름 | 매우 김 | 가장 비쌈 | 산업용, 서버, 고급 SSD |
MLC (Multi Level Cell) | 2bit | 4 (00~11) | 일반 소비자용 초기 SSD에 사용 | 보통 | 보통(3000~10000회) | 보통 | 고급 소비자용 SSD |
TLC (Triple Level Cell) | 3bit | 8 (000~111) | 요즘 가장 많이 쓰임 | 느림 | 짧음(1000~3000회) | 저렴 | 일반 소비자용 SSD, USB |
QLC (Quad Level Cell) | 4bit | 16 | 고용량 저가형 SSD에 사용 | 더 느림 | 더 짧음(약 1000회 이하) | 매우 저렴 | 대용량 저장용, 캐시 적음 |
셀들이 모여 만들어진 단위를 페이지, 페이지가 모여 만들어진 단위를 블록, 블록이 모여 플레인, 플레인이 모여 다이가 된다.
플래시 메모리에서 읽기와 쓰기는 페이지 단위로 이루어진다. 하지만 삭제는 페이지보다 큰 블록 단위로 이루어지는 차이점이 있다. 삭제 시, 페이지는 3가지의 상태를 가질 수 있다.
1) Free
데이터를 저장하고 있지 않아, 새로운 데이터를 저장할 수 있다.
2) Valid
이미 유효한 데이터를 저장하고 있는 상태
3) Invalid
유효하지 않은 데이터를 저장하고 있는 상태
07-2. RAID의 정의와 종류
✔️ 보조기억장치를 더욱 안전하고 빠르게 활용하는 방법
세상은 갈수록 복잡해지고, 하루에도 어마어마한 양의 데이터들이 오간다.
빅테크 기업의 경우 개인정보 및 민감정보 등의 데이터를 안정적으로 빠르게 처리해야 할 필요도 생겼다.
그러나, 기존 단일 HDD만으로 속도와 안정성을 둘 다 잡을 수 있을까?
HDD가 1개만 고장나도 전체 데이터를 잃을 수도 있다. 이러한 한계를 극복하기 위해 등장한 것이 바로 RAID다.
RAID (Redundant Array of Independent Disks)는,
여러 개의 HDD나 SDD를 묶어서 마치 하나의 디스크처럼 동작하도록 구성하는 기술이다.
속도, 안정성, 용량 등 다양한 목적에 따라 설정할 수 있다.
RAID의 구성 방법은 RAID 레벨이라고 표현한다:
레벨 | 최소 디스크 수 | 속도 | 안정성 | 저장 효율 | 특징 |
RAID 0 | 2 | 빠름 | 없음 | 100% | Striping. 속도↑, 복구 불가 |
RAID 1 | 2 | 느림 | 매우 강함 | 50% | Mirroring. 디스크 복제 |
RAID 5 | 3 | 빠름 | 보통 | 약 67~80% | Striping + 패리티. 균형형 |
RAID 6 | 4 | 보통 | 더 강함 | 약 50~75% | RAID 5 + 추가 패리티. 2개 고장까지 OK |
RAID 10 (1+0) | 4 | 빠름 | 강함 | 50% | RAID 1과 0의 결합. 성능 + 안정성 |
하나하나 살펴보도록 하자.
✅ RAID 0
여러 개의 보조기억장치에 데이터를 단순히 나누어 저장하는 구성 방식이다.
1TB HDD 2개로 RAID 0을 구성했다고 가정해 보자, 어떤 데이터를 저장할 때 A1-A2 / A3-A4 이런 식으로 번갈아 가며 데이터를 저장한다. 4개를 저장하면 HDD 개수인 2만큼 나누어 저장된다.
줄무늬처럼 분산된 데이터를 스트라입, 분산하여 저장하는 것을 스트라이핑이라고 한다.
스트라이핑된 데이터는 2TB 1개를 읽고 쓰는 속도보다 RAID 0 으로 구성된 1TB 2개의 속도가 더 빠르다.
그러나, RAID 0에 저장된 정보는 안전하지 않다는 단점이 있다. 나머지 디스크 중 1개에 문제가 생기면 다른 모든 디스크의 정보를 읽는 데 문제가 생기기 때문이다.
✅ RAID 1
이 방식은 복사본을 만드는 것과 같다고 생각하자.
그래서 미러링 방식이라고도 부른다.
RAID 0처럼 스트라이핑을 사용하지만, 두 HDD는 완전히 동일한 내용을 저장하고 있다.
쓰기 속도는 RAID 0 보다 느리지만, 복구가 매우 간단한 장점이 있다.
✅ RAID 4
RAID 4는 RAID 0처럼 완전한 복사본을 만들지만, 패리티 비티를 둔다는 차이가 있다.
패리티 비트란, 오류를 검출하고 복구하기 위한 정보를 말한다.
예를 들어 패리티 A는 A1~A3의 오류 검출 정정을 가리킨다.
새로운 데이터가 저장될 때마다 패리티 저장 디스크에도 데이터를 쓰기 때문에, 해당 장치에 병목 현상이 발생하는 단점이 있다.
✅ RAID 5
RAID 5는 패리티 정보를 분산하여 저장함으로써 RAID 4의 병목 현상을 해소한다.
✅ RAID 6
RAID 5의 구성과 같으나, 서로 다른 두 개의 패리티를 둠으로써 오류 검출/복구 수단이 2개 있는 셈이다.
따라서 좀 더 안전한 구성으로 볼 수 있다.
데이터 저장 속도가 좀 느려지긴 하겠지만, 데이터를 안전하게 보관하고 싶다면 사용할 수 있는 방법이다.
Chapter 08. 입출력장치
08-1. 장치 컨트롤러와 장치 드라이버
✔️ 입출력장치가 컴퓨터 내부와 어떻게 연결되어 있을까?
어쩌면 컴퓨터와 관련된 장치 중 가장 우리와 가까이 있는 것들이 바로 입출력장치가 아닐까?
마우스, 키보드, 모니터는 가장 앞에 튀어나와 사람과 마주하고 상호작용한다.
그렇다면, 그 입출력장치들은 사람의 의도를 어떻게 컴퓨터 내부로 전달할까?
바로 장치 컨트롤러와 장치 드라이버를 사용하게 된다.
장치 컨트롤러
입출력장치의 종류는 굉장히 많아서, 정보를 주고받는 방식을 표준화하기 어렵다.
CPU와 메모리의 데이터 전송률이 높은 것과 달리, 입출력장치의 데이터 전송률은 낮다.
✅전송률(transfer): 데이터를 얼마나 빨리 교환할 수 있는지를 나타내는 지표
키보드와 마우스가 데이터가 뭐 얼마나 많이 나오겠나? 따라서 CPU, 메모리와 전송률이 달라서 어려움이 생긴다.
따라서 입출력장치는 컴퓨터에 직접 연결되는 대신 장치 컨트롤러라는 하드웨어로 연결된다.
장치 컨트롤러는 다양한 역할을 수행하는데,
1) CPU와 입출력장치 간 통신 중개
2) 오류 검출
3) 데이터 버퍼링
등의 문제를 해결한다.
✅버퍼링(buffering): 전송률이 높은 장치와 낮은 장치 사이에 주고받는 데이터를 버퍼라는 임시 저장공간에 저장하여, 전송률을 비슷하게 맞추는 방법이다.
장치 컨트롤러의 내부 구조를 살펴보자:
구조 | 설명 |
데이터 레지스터 | CPU와 입출력장치 사이에 주고받을 데이터가 담기는 레지스터(버퍼 역할) |
상태 레지스터 | 상태 정보(입출력장치가 입출력 작업 준비가 되었는지, 작업이 완료됐는지, 오류는 없는지)가 저장됨 |
제어 레지스터 | 입출력장치가 수행할 내용에 대한 제어정보와 명령을 저장함 |
장치 드라이버
장치 컨트롤러의 동작을 감지하고 제어함으로써, 컴퓨터 내부와 정보를 주고받을 수 있게 하는 프로그램이다.
'프로그램'이라 실행 과정이 메모리에 저장되며, 소프트웨어적인 통로라고 볼 수 있다.
08-2. 다양한 입출력방법
✔️프로그램 입출력
✔️인터럽트 기반 입출력
✔️DMA 입출력
이전 장에서 입출력 작업을 수행하려면 CPU와 장치 컨트롤러가 정보를 주고받아야 한다고 했다.
그렇다면, 어떻게 그것이 가능한지? 를 살펴보도록 하겠다.
프로그램 입출력(Programmed I/O)
프로그램 속 명령어로 입출력장치를 제어하는 방법으로, CPU가 입출력장치와 직접 통신하며 데이터를 주고받는다.
1) CPU가 I/O장치 제어를 위해 명령어를 실행
2) I/O 장치의 상태를 계속 확인함
3) 준비되면 데이터를 전송하거나 읽어옴
4) 작업 완료될 때까지 CPU는 대기함
궁금해서 I/O 명령어 예시를 가져와봤다.
MOV DX, 0x60 ; 키보드 포트 주소 (예: 0x60)
IN AL, DX ; 해당 포트로부터 데이터를 읽어 AL 레지스터에 저장
MOV DX, 0x64 ; 포트 주소
MOV AL, 0xD2 ; 보낼 데이터
OUT DX, AL ; 데이터를 포트에 출력
CPU가 장치 컨트롤러의 레지스터 값을 읽고 씀으로써 이루어지는데, 어떻게 그 주소들을 아는 걸까?
여기에는 2가지 방식이 있다:
항목 | 메모리 맵 I/O | 고립형 I/O |
제어 방식 | I/O 장치를 메모리처럼 다룸 | 별도의 I/O 공간을 사용 |
주소 공간 | 메모리 주소 공간 공유 | 메모리 주소와 분리된 I/O 주소 공간 사용 |
사용 명령어 | 일반 LOAD/STORE/MOV 명령어로 입출력 | 전용 IN / OUT 명령어 사용 |
주소 공간 제약 | 메모리 공간 차지 (I/O 때문에 RAM 줄어듦) | 메모리 공간 보호, 분리된 영역 |
하드웨어 구현 | 단순 (버스 설계 일원화) | 복잡 (메모리 버스와 I/O 버스 분리 필요) |
범용성 | 고급 시스템, 마이크로컨트롤러에서 많이 사용 | x86 계열에서 전통적으로 사용 |
예시 | ARM, RISC-V 기반 시스템 | 인텔 x86 구조 등 |
솔직히 무슨 소린지 100% 이해되지는 않는다.
C언어나 어셈블리어를 알면 좀 더 이해가 쉬울 것 같은데.. 일단 대충 넘어가자.
인터럽트 기반 입출력
예전에 학습한 인터럽트 개념을 적용하면, 장치 컨트롤러가 입출력 작업을 끝낸 뒤 CPU에게 인터럽트 요청 신호를 보내면 CPU는 잠시 하던 일을 백업하고 인터럽트 서비스 루틴을 실행한다.
우린 실생활에서 유튜브로 스터디 브이로그를 틀어놓고 티스토리에 기술 블로그를 작성한다.이처럼 여러 입출력장치에서 인터럽트가 동시에 발생하는 경우 이를 어떻게 처리할까?물론 인터럽트 발생 순서대로 처리하는 방법이 있다. 그러나, 인터럽트에도 우선 순위가 있는 경우도 있기에, 우선순위가 높은 순서대로 여러 인터럽트를 처리할 수도 있다.
1) 플래그 레지스터 속 인터럽트 비트가 활성화된 경우2) NMI(Non-maskable Interrupt)처럼 무시할 수 없는 인터럽트가 발생한 경우
CPU는 우선순위가 높은 인터럽트부터 처리한다.
많은 컴퓨터에서는 프로그래머블 인터럽트 컨트롤러(PIC)를 사용하는데, 이는 여러 장치 컨트롤러에 연결되어 인터럽트 요청들의 우선순위를 파악한 뒤 CPU에 지금 네가 처리해야 할 하드웨어 인터럽트는 무엇인지를 알려준다.
DMA 입출력
앞선 두 가지의 입출력은 공통적으로 데이터 이동을 CPU가 주도한다는 점이다.
그러나 CPU는 바쁜 몸이라, 입출력장치와 메모리가 CPU를 안 거치고도 상호작용할 수 있는 DMA가 등장했다.Direct Memory Access라는 이름처럼, 메모리에 직접 접근 가능한 입출력 기능이다. DMA 입출력을 하기 위해서는 시스템 버스에 연결된 DMA 컨트롤러라는 하드웨어가 필요하다.
시스템 버스는 공용 자원이라, DMA 컨트롤러와 CPU가 동시에 사용할 수 없다.
그래서 CPU가 시스템 버스를 사용하지 않을 때 DMA 컨트롤러가 조금씩 이용한다. (사이클 스틸링)
이 방식으로 CPU와 DMA가 완전한 병렬 동작을 할 수는 없으나, 전체 시스템의 효율은 높일 수 있다.
✅입출력 버스: 입출력장치와 컴퓨터의 전용 통로로, 시스템 버스와 독립적으로 동작하여 입출력 작업 과정에서 데이터 전송이나 시스템 버스 부하를 줄이는 데 기여한다.
✅ 이번 주 숙제
[1] 185p, 3번
1) 주로 캐시 메모리로 활용되는 것은 SRAM
2) 주로 주기억장치로 활용되는 것은 DRAM
3) 대용량화하기 유리한 것은 DRAM
4) 집적도가 상대적으로 낮은 것은 SRAM
[2] 205p, 1번
1) 레지스터
2) 캐시 메모리
3) 메모리
4) 보조기억장치
'Computer Science > 컴퓨터구조&운영체제' 카테고리의 다른 글
[혼공학습단] Week 6: 가상 메모리, 파일 시스템혼공학습단] Week 6: 가상 메모리, 파일 시스템 (2) | 2025.08.24 |
---|---|
[혼공학습단] Week 5: 프로세스 동기화, 교착 상태 (12) | 2025.08.12 |
[혼공학습단] Week 4: 운영체제, 프로세스와 스레드, CPU스케줄링 (11) | 2025.07.30 |
[혼공학습단] Week 2: CPU의 작동원리와 성능 향상 기법 (3) | 2025.07.18 |
[혼공학습단] Week 1 (0) | 2025.07.06 |