커리큘럼 🫠


📃 기본 미션1

p.185, 확인 문제 3번 ) 다음 설명을 읽고 SRAM에 대한 설명인지 DRAM에 대한 설명인지 쓰세요.

보기 : SRAM, DRAM

① 주로 캐시 메모리로 활용됩니다.

② 주로 주기억장치로 활용됩니다.

③ 대용량화하기 유리합니다.

④ 집적도가 상대적으로 낮습니다.

 

🖍 ) 

① = SRAM

② = DRAM

③ = DRAM

④ = SRAM

 

📃 기본 미션2

p.205, 확인 문제 1번 ) 다음 보기에 있는 저장 장치들로 저장 장치 계층 구조 도식도를 채우세요.

보기 : 메모리, 보조기억장치, 캐시 메모리, 레지스터

🖍 ) 

① = 레지스터

② = 캐시 메모리

③ = 메모리

④ = 보조기억장치

 

📃 선택 미션

RAID의 정의와 종류를 간단히 정리해보기

🖍 )

문서내 위치로 이동


Chapter 6️⃣

06-1 RAM의 특징과 종류

RAM

  • 실행할 프로그램의 명령어와 데이터가 저장됨

휘발성 저장 장치

  • 전원을 끄면 저장된 명령어와 데이터가 모두 날아가는 저장 장치
  • RAM이 대표적이다.
  • CPU가 ‘실행할 대상’을 저장한다.

비 휘발성 저장 장치

  • 전원이 꺼져도 저장된 내용이 유지되는 저장 장치
  • 하드 디스크, SSD, CD-ROM, USB 메모리 등이 있다.
  • CPU가 직접 접근하지 못한다.
  • 작업 결과물과 같은 ‘보관할 대상’을 저장한다.
✅ RAM 용량이 크다면 CPU가 실행하고자 하는 프로그램을 RAM에 많이 저장 할 수 있으며, 보조 기억장치로의 접근이 최소화 되어 시간을 절약할 수 있다.

 

DRAM (Dynamic RAM)

  • 저장된 데이터가 동적으로 사라지는 RAM
  • 데이터 소멸을 막기 위해 주기적으로 재활성화 해야한다.
  • 일반적으로 메모리로써 사용하는 RAM
  • 소비 전력이 비교적 낮고, 용량 대비 저렴, 집적도가 높다
✅ 집적도가 높다 : 더 작고 빽빽하게 만들 수 있다.

 

SRAM (Static RAM)

  • 저장된 데이터가 정적인 (사라지지 않는) RAM
  • 전원 공급이 멈추면 저장된 데이터가 날아가긴 한다.
  • DRAM보다 일반적으로 더 빠름
  • 일반적으로 캐시 메모리에서 사용되는 RAM
  • 상대적으로 소비전력이 높고, 가격이 높고, 집적도가 낮다
  • 대용량으로 설계할 필요는 없으나 빨라야 하는 장치에 사용한다.

 

  DRAM SRAM
재충전 필요함 필요 없음
속도 느림 빠름
가격 저렴함 비쌈
집적도 높음 낮음
소비 전력 적음 높음
사용 용도 주기억장치(RAM) 캐시 메모리

 

SDRAM (Synchronous DRAM)

  • 발전된 형태의 DRAM
  • 클럭 신호와 동기화된 DRAM
  • 클럭 신호와 동기화 되어있다는 의미는 CPU와 정보를 주고 받을 수 있다는 의미이다.

DDR SDRAM(Double Data Rate SDRAM)

  • 발전된 형태의 SDRAM
  • 최근 가장 대중적으로 사용하는 RAM
  • 대역폭을 넓혀 속도를 빠르게 만든 SDRAM
  • 비유적으로 대역폭은 데이터를 주고 받는 길의 너비

 

06-2 메모리의 주소 공간

CPU와 실행 중인 프로그램은 메모리 몇 번지에 무엇이 저장되어 있는지 다 알지 못한다.

메모리에 저장된 값들은 시시각각 변한다

 

물리 주소

  • 메모리 하드웨어가 사용하는 주소
  • 메모리 입장에서 바라본 주소
  • 말 그대로 정보가 실제로 저장된 하드웨어상의 주소

논리 주소

  • CPU와 실행 중인 프로그램이 사용하는 주소
  • CPU와 실행 중인 프로그램 입장에서 바라본 주소
  • 실행 중인 프로그램 각각에게 부여된 0번지부터 시작하는 주소
  • 새롭게 실행되는 프로그램은 새롭게 메모리에 적재
  • 실행이 끝난 프로그램은 메모리에서 삭제
  • 같은 프로그램을 실행하더라도 실행할 때마다 적재되는 주소는 달라짐

결국엔 논리 주소를 물리 주소로 변환해야 한다. → 실질적인 메모리 접근을 위해서

MMU (메모리 관리 장치)라는 하드웨어에 의해 변환

MMU는 논리 주소와 베이스 레지스터 값을 더하여 논리 주소를 물리 주소로 변환한다.

대충 말하면 찰떡같이 알아낸다!

 

 

✅ 베이스 레지스터 : 프로그램의 기준 주소, 프로그램의 시작 주소(물리 주소)
2주차 강의 중 레지스터 항목을 참고 (https://goming0925.tistory.com/16)

정리하면,

베이스 레지스터는 프로그램의 가장 작은 물리 주소, 프로그램의 첫 물리 주소를 저장한다.

논리 주소는 프로그램의 시작점으로부터 떨어진 거리이다.

 

메모리 보호 기법

  • 가정 : 본인 프로그램 논리 주소번지를 벗어나는 값의 데이터를 변경한다 ➡️ 타 프로그램의 데이터에 변화가 생긴다 ➡️ 으악☠️
  • 논리 주소 범위를 벗어나는 명령어 실행을 방지하고 실행 중인 프로그램이 다른 프로그램에 영향을 받지 않도록 보호할 방법이 필요 : 한계 레지스터
  • CPU는 메모리에 접근하지 전에 접근하고자 하는 논리 주소가 한계 레지스터보다 작은지를 항상 검사한다.
  • 실행 중인 프로그램의 독립적인 실행 공간을 확보
  • 하나의 프로그램이 다른 프로그램을 침범하지 못하게 보호

타 프로그램의 메모리 영역을 침범하는건 해킹? 🧑‍💻

 

한계 레지스터

  • 프로그램의 영역을 침범할 수 있는 명령어의 실행을 막을때 사용
  • 베이스 레지스터가 실행 중인 프로그램의 가장 작은 물리 주소를 저장한다면, 한계 레지스터는 논리 주소의 최대 크기를 저장
  • 베이스 레지스터 값 ≤ 프로그램의 물리 주소 범위 < 베이스 레지스터 + 한계 레지스터 값

CPU가 접근하려는 논리 주소는 한계 레지스터가 저장한 값보다 커서는 안된다.

06-3 캐시 메모리

저장 장치의 일반적인 명제 (저장 장치 계층 구조의 개념)

  1. CPU와 가까운 저장 장치는 빠르고, 멀리 있는 저장 장치는 느리다.
  2. 속도가 빠른 저장 장치는 저장 용량이 작고, 가격이 비싸다.
  • 낮은 가격대의 대용량 저장 장치를 원한다면 느린 속도를 감수해야 하고, 빠른 속도의 저장 장치를 원한다면 작은 용량과 비싼 가격을 감수해야 한다.모든 것을 만족시키기엔 현실적으로 어렵다!

트라이포스!! 내 소원을 들어줘!! 🧝🗡️🏹🛡️

 

저장 장치의 계층 구조 (memory hierachy)

  • 일반적으로 컴퓨터는 다양한 저장 장치를 모두 사용한다.
  • 컴퓨터가 사용하는 저장 장치들을 ‘CPU에 얼마나 가까운지’를 기준으로 계층적으로 나타낼 수 있다. → 저장 장치 계층 구조

저장 장치에도 계층이 있다니...

 

캐시 메모리

  • CPU와 메모리 사이에 위치한, 레지스터보다 용량이 크고 메모리보다 빠른 SRAM 기반의 저장 장치
  • CPU의 연산 속도와 메모리의 접근 속도의 차이를 조금이나마 줄이기 위해 탄생
  • 매번 CPU와 메모리의 접근이 발생하면 시간이 오래 걸리니, 메모리에서 CPU가 사용할 일부 데이터를 미리 캐시 메모리로 가지고 와서 쓰자는 컨셉
  • 저장 장치의 계층 구조상으로는 레지스터와 메모리의 사이에 위치한다.
  • 캐시 메모리는 여러 개가 존재하며, CPU(코어)와 가까운 순서대로 계층을 구성한다.
  • 코어와 가장 가까운 캐시 메모리를 L1(level 1) 캐시, L2(level 2) 캐시, L3(level 3) 캐시 순서로 나열할 수 있다.
  • 용량 : L1 < L2 < L3
  • 속도 : L1 > L2 > L3
  • 가격 : L1 > L2 > L3

CPU 살때 캐시 메모리 보는 사람?

✅ 코어와 가장 가까운 L1 캐시는 조금이라도 접근 속도를 빠르게 만들기 위해 명령어만을 저장하는 L1I 과 데이터만을 저장하는 L1D 캐시로 분리하는 분리형 캐시(split cache)도 존재한다.
✅ 계층을 나누게 된 저장 장치의 특징이 중요하다 (속도, 용량, 가격의 변동)

 

참조 지역성의 원리

  • 캐시 메모리는 CPU가 자주 사용할 법한 내용을 예측해서 저장해야한다.
  • CPU가 사용할 법한 데이터를 예측하는 방법을 참조 지역성의 원리라고 한다.
  • CPU가 메모리에 접근할 때의 주된 경향을 바탕으로 만들어진 원리
    1. CPU는 최근에 접근했던 메모리 공간에 다시 접근하려는 경향이 있다.
    2. CPU는 접근한 메모리 공간 근처를 접근하려는 경향이 있다.

참조 지역성의 원리 1

  • 변수에 저장한 값을 다시 접근해서 사용하려는 형태

참조 지역성의 원리 2

  • 공간 지역성
  • 메모리 공간을 구획으로 나누어 만들어진 프로그램은 인접한 영역에서 관련 기능 및 데이터가 존재한다.

끼리끼리 모인다. 👥

 

캐시 히트

  • CPU가 캐시 메모리에 저장된 값을 활용할 경우, 즉 예측이 들어맞을 경우를 ‘캐시 히트’라고 표현한다.

캐시 미스

  • CPU가 캐시 메모리에 저장된 값을 활용하지 않는 경우(메모리에 접근해야 하는 경우), 즉 예측이 틀린 경우를 ‘캐시 미스’라고 표현한다.

캐시 적중률

  • 캐시 히트 횟수 / (캐시 히트 횟수 + 캐시 미스 횟수)
  • 캐시 적중률이 높을 수록 성능이 좋다 → CPU와 메모리와의 접근 횟수를 줄일 수 있다.
  • 최근 CPU의 캐시 적중률은 80퍼센트에 육박한다. (무려!!)

Chapter 7️⃣

07-1 다양한 보조기억장치

하드 디스크

  • 자기적인 방식으로 데이터를 저장하는 보조기억장치
  • 자기 디스크의 일종
  • 실질적으로 데이터가 저장되는 플래터 : 자기 물질로 덮여 있어 N극과 S극의 정보를 저장 (0과 1의 역할)
  • 플래터를 회전시키는 스핀들

동작할때 흔들면 난리나는 이유 (물리적 충격에 약한 이유)

✅ 일반적으로 플래터 양면을 모두 사용한다.
✅ RPM(Revolution Per Minute) : 분당 회전수, 스핀들이 플래터를 돌리는 속도 단위
  • 플래터를 대상으로 데이터를 읽고 쓰는 헤드, 플래터 위에서 미세하게 떠 있는 채로 데이터를 읽고 쓴다.
  • 헤드를 원하는 위치로 이동시키는 디스크 암, 일반적으로 모든 헤드가 디스크 암에 부착되어 함께 이동한다.

플래터의 면마다 헤드가 존재한다.

하드 디스크 - 저장 단위

  • 기본적으로 트랙(track)과 섹터(sector) 단위로 데이터를 저장
  • 플래터를 이루고 있는 동심원을 트랙
  • 섹터는 트랙의 일부로 플래터 위의 부채꼴 모양의 영역을 의미
  • 섹터의 크기는 512 바이트 ~ 4096 바이트
  • 하나 이상의 섹터를 묶어 블록(block)이라고 표현하기도 한다.
  • 실린더 : 여러 겹의 플래터 상에서 같은 트랙이 위치한 곳을 모아 연결한 논리적인 단위
  • 연속된 정보 실린더에 기록된다. : 헤드를 따로 움직이지 않고 한번에 읽을 수 있기 때문에 (플래터 사이사이에 많기 때문에)

하드 디스크 - 데이터 접근 과정

  • 하드 디스크가 저장된 데이터에 접근하는 시간을 크게 3개로 나눌 수 있다.
  1. 탐색 시간 (seek time)
  2. 회전 지연 (rotational latency)
  3. 전송 시간 (transfer time)
  • 하드 디스크의 작업 성능은 많이 향상되었지만 컴퓨터 작업내에선 정말 많은 시간이 소요된다.

 

탐색 시간 (seek time)

  • 접근하려는 데이터가 저장된 트랙까지 헤드를 이동시키는 시간

 

회전 지연 (rotational latency)

  • 헤드가 있는 곳으로 플래터를 회전시키는 시간

 

전송 시간 (transfer time)

  • 하드 디스크와 컴퓨터 간에 데이터를 전송하는 시간

탐색, 회전, 전송!!! 💿

 

 

플래시 메모리

  • 전기적으로 데이터를 읽고 쓰는 반도체 기반 저장 장치
  • 플래시 메모리는 범용성이 넓어서 보조기억장치에만 쓰이지 않고 다양하게 쓰인다.
✅ 플래시 메모리는 NAND 연산을 수행하는 회로 기반으로 만들어진 NAND 플래시 메모리와 NOR 연산 회로 기반으로 만들어진 NOR 플래시 메모리가 있다. 대용량 저장 장치로 많이 사용되는건 NAND 플래시 메모리이다.

 

셀 (cell)

  • 플래시 메모리에서 데이터를 저장하는 가장 작은 단위
  • 셀이 모여서 MB, GB, TB 저장 장치가 된다.
  • 한 셀에 1 비트를 저장할 수 있는 플래시 메모리 : SLC
  • 한 셀에 2 비트를 저장할 수 있는 플래시 메모리 : MLC
  • 한 셀에 3 비트를 저장할 수 있는 플래시 메모리 : TLC
  • 한 셀에 4 비트를 저장할 수 있는 플래시 메모리 : QLC
  • 셀에 저장할 수 있는 비트 수에 따라 플래시 메모리의 수명, 성능, 가격에 영향을 미친다.

SLC

  • 한 셀로 두 개의 정보를 표현할 수 있다.
  • 비트의 빠른 입출력
  • 긴 수명
  • 용량 대비 가격이 높다

MLC

  • 한 셀에 네 개의 정보를 표현할 수 있다. (대용량화하기 유리하다.)
  • SLC 보다 느린 입출력
  • SLC 보다 짧은 수명
  • SLC 보다 저렴하다.
  • 시중에서 많이 사용 (MLC, TLC, QLC)

TLC

  • 한 셀에 여덟 개의 정보를 표현할 수 있다. (대용량화하기 유리하다.)
  • MLC 보다 느린 입출력
  • MLC 보다 짧은 수명
  • MLC 보다 저렴하다.
  • 시중에서 많이 사용 (MLC, TLC, QLC)

플래시 메모리 - 저장 단위

  • 셀들이 모여서 페이지(page)
  • 페이지들이 모여서 블록(block)
  • 블록이 모여서 플레인(plane)
  • 플레인이 모여서 다이(die)
  • 읽기와 쓰기는 페이지 단위로 이루어진다.
  • 삭제는 (페이지보다 큰) 블록 단위로 이루어진다.

중요한건 읽기/쓰기 와 삭제의 단위가 다르다는 점?!

페이지의 상태

  • Free 상태 : 어떠한 데이터도 저장하고 있지 않아 새로운 데이터를 저장할 수 있는 상태
  • Valid 상태 : 이미 유효한 데이터를 저장하고 있는 상태
  • Invalid 상태 : 유효하지 않은 데이터(쓰레기값)를 저장하고 있는 상태
✅ 플래시 메모리는 하드 디스크와 달리 덮어쓰기가 불가능하다. (invalid 상태가 존재한다.)

 

가비지 컬렉션 (garbage collection)

  • 플래시 메모리 사용 중에 invalid 페이지가 용량을 차지하므로 공간을 정리하기 위한 기능 (공간을 관리하는 기능)
  1. 유효한 페이지들만을 새로운 블록으로 복사
  2. 기존의 블록을 삭제

여유 공간이 없으면요...? 🙀

 

07-2 RAID의 정의와 종류

RAID (Redundant Array of Independent Disks)

  • 하드 디스크와 SSD로 사용하는 기술
  • 데이터의 안전성 혹은 높은 성능을 위해 여러 물리적 보조기억장치를 마치 하나의 논리적 보조기억장치처럼 사용하는 기술

RAID 레벨

  • RAID를 구성하는 기술
  • RAID 0, RAID 1, RAID 2, RAID 3, RAID 4, RAID 5, RAID 6
  • 그로부터 파생된 RAID 10, RAID 50 등이 있다.
  • RAID 0, RAID 1, RAID 4, RAID 5, RAID 6 이 대중적으로 사용된다.

RAID 0

  • 데이터를 단순히 나누어 저장하는 구성 방식
  • 각 보조기억장치는 번갈아 가며 데이터를 저장한다.
  • 저장되는 데이터가 보조기억장치의 갯수만큼 나뉘어 저장된다.
  • 장점 : 입출력 속도의 향상 (여러개의 보조기억장치로부터 동시에 입출력을 발생시킨다.)
  • 단점 : 저장된 정보가 안전하지 않음 (하나의 장치만 고장나도 데이터를 사용할 수 없다.)

✅ 스트라입 (stripe) : 마치 줄무늬처럼 분산되어 저장된 데이터
✅ 스트라이핑 (striping) : 분산하여 저장하는 것

 

RAID1

  • 미러링 (mirroring) : 복사본을 만드는 방식
  • 데이터를 쓸 때 원본과 복사본 두 군데에 씀 (느린 쓰기 속도)

  • 장점 : 백업과 복구가 쉽다. (데이터가 안전하다.)
  • 단점 : 하드 디스크 개수가 한정되었을 때 사용 가능한 용량이 적어짐
  • 복사본이 만들어지는 용량만큼 사용 불가 ➡️ 많은 양의 하드 디스크가 필요 ➡️ 비용 증가

RAID 4

  • (RAID 1처럼 완전한 복사본을 만드는 대신) 오류를 검출하고 복구하기 위한 정보를 저장
  • 패리티 비트 : 오류를 검출하고 복구하기 위한 정보
  • 패리티를 저장한 장치를 이용해 다른 장치들의 오류를 검출하고, 오류가 있다면 복구할 수 있다.

✅ 원래 패리티 비트는 오류 검출만 가능할 뿐 오류 복구는 불가능하다. RAID에서 사용하는 패리티는 오류 검출 뿐만 아니라 복구도 가능하다.
  • 단점 : 패리티 디스크의 병목 현상이 발생 할 수 있다. (디스크에 저장될때 마다 패리티 디스크에 저장을 하기 때문에…)

RAID 5

  • 패리티 정보를 분산하여 저장하는 방식

RAID 6

  • 두 종류의 패리티 (오류를 검출하고 복구할 수 있는 수단)을 저장한다.
  • RAID 5 보다 안전하지만 쓰기는 RAID 5보다 느리다.

정리

  • 각 RAID 레벨마다 장단점이 있음
  • 어떤 상황에서 무엇을 최우선으로 원하는지에 따라 최적의 RAID 레벨은 달라질 수 있음
  • 각 RAID 레벨의 대략적인 구성과 특징을 아는 것이 중요하다.

8️⃣ 입출력장치

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

입출력장치가 CPU, 메모리보다 다루기 까다로운 이유

  1. 입출력장치는 종류가 너무나도 많다.
    1. 장치가 다양하면 장치마다 속도, 데이터 전송 형식 등도 다양하다.
    2. 다양한 입출력장치와 정보를 주고받는 방식을 규격화하기 어렵다.
  2. 일반적으로 CPU와 메모리의 데이터 전송률은 높지만 입출력장치의 데이터 전송률은 낮다.
    • 전송률 (transfer rate) : 데이터를 얼마나 빨리 교환할 수 있는지를 나타내는 지표

장치 컨트롤러

  • 위와 같은 어려움을 해결하기 위해 입출력장치는 장치 컨트롤러를 통해 컴퓨터와 연결된다.
  • 입출력 제어기 (I/O controller), 입출력 모듈 (I/O module)이라고 불리기도 한다.

장치 컨트롤러의 역할

  • CPU와 입출력장치 간의 통신중개 : 까다로운 이유 1번을 해결
  • 오류 검출 : 장치의 오류 상태를 확인
  • 데이터 버퍼링 : 데이터를 모았다가 조금씩 내보내거나, 한 번에 내보내서 전송률을 맞춰준다. (까다로운 이유 2번)
✅ 버퍼링 : 전송률이 높은 장치와 낮은 장치 사이에 주고받는 데이터를 버퍼라는 임시 저장 공간에 저장하여 전송률을 비슷하게 맞추는 방법

 

장치 컨트롤러의 구조

  • 입출력버스 (시스템버스)에 연결되어 정보를 주고 받게 된다.
  • 주고 받는 정보는 크게 3개의 레지스터에 저장된다.
  • 데이터 레지스터, 상태 레지스터, 제어 레지스터

상태/제어 레지스터로 묶기도 한다

장치 컨트롤러 - 데이터 레지스터

  • CPU와 입출력장치 사이에 주고받을 데이터가 담기는 레지스터 (버퍼)
  • 최근엔 데이터 양이 많아짐에 따라 RAM을 사용하기도 한다.

장치 컨트롤러 - 상태 레지스터

  • 상태 정보 저장
  • 입출력장치가 입출력 작업을 할 준비가 되었는지 상태를 저장
  • 입출력 작업이 완료되었는지 상태를 저장
  • 입출력장치에 오류는 없는지 등의 상태 정보를 저장한다.

장치 컨트롤러 - 제어 레지스터

  • 입출력장치가 수행할 내용에 대한 제어 정보

장치 드라이버

  • 장치 컨트롤러의 동작을 감지하고 제어하는 프로그램
  • 장치 컨트롤러는 입출력장치를 연결하기 위한 하드웨어적인 통로
  • 장치 드라이버는 입출력장치를 연결하기 위한 소프트웨어적인 통로
  • 컴퓨터(운영체제)가 연결된 장치의 드라이버를 인식하고 실행할 수 있어야 컴퓨터 내부와 정보를 주고 받을 수 있음

 

08-2 다양한 입출력 방법

입출력 방식

  1. 프로그램 입출력
  2. 인터럽트 기반 입출력
  3. DMA 입출력

프로그램 입출력

  • 프로그램 속 명령어로 입출력장치를 제어하는 방법
  • 입출력 명령어로써 장치 컨트롤러와 상호작용
  • CPU가 장치 컨트롤러의 레지스터 값을 읽고 씀으로써 이루어진다.
  • CPU 내부에 있는 레지스터들과 달리 여러 장치 컨트롤러 속의 레지스터들을 모두 알고 있을 수 없다. (메모리 맵 입출력, 고립형 입출력)

메모리 맵 입출력 방식

  • 메모리에 접근하기 위한 주소 공간과 입출력장치에 접근하기 위한 주소 공간을 하나의 주소 공간으로 간주하는 방법
  • 주어진 메모리내에 주소공간을 ‘메모리를 위한 주소 공간’, ‘입출력장치를 위한 주소 공간’으로 나누어서 관리한다.
  • 메모리 접근 명령어 == 입출력장치 접근 명령어

고립형 입출력 방식

  • 메모리를 위한 주소 공간과 입출력 장치를 위한 주소 공간을 분리하는 방법
  • 주어진 메모리내에 모든 공간을 메모리를 위한 공간이나 입출력장치를 위한 주소 공간으로 쓸 수 있다.
  • (입출력 읽기/쓰기 선을 활성화 시키는) 입출력 전용 명령어를 사용한다.
메모리 맵 입출력 고립형 입출력
메모리와 입출력장치는 같은 주소 공간 사용 메모리와 입출력장치는 분리된 주소 공간 사용
메모리 주소 공간이 축소됨 메모리 주소 공간이 축소되지 않음
메모리와 입출력장치에 같은 명령어 사용 가능 입출력 전용 명령어 사용

인터럽트 기반 입출력

  • 하드웨어 인터럽트는 장치 컨트롤러에 의해 발생
  • 인터럽트 발생전까지 CPU가 다른 작업을 수행할 수 있다 ➡️ 효율적인 방식
✅ 폴링(polling) : 입출력장치의 상태와 처리할 데이터가 있는지를 주기적으로 확인하는 방식, 인터럽트 보다 CPU의 부담이 더 크다.

 

동시다발적인 인터럽트

  • 입출력장치가 많을 때 동시다발적인 인터럽트 요청이 발생한다.
  • 플래그 레지스터 속 인터럽트 비트를 비활성화한채 요청을 전부 순차적으로 해결할 순 없다. ➡️ NMI
  • 우선순위를 반영해서 다중 인터럽트를 처리해야한다.
✅ NMI (Non-Maskable Interrupt) : 중요도가 높아서 비활성화로 무시할 수 없는 인터럽트

 

프로그래머블 인터럽트 컨트롤러(PIC, Programmable Interrupt Controller)

  • 우선순위를 반영하여 다중 인터럽트를 처리하는 하드웨어
  1. 여러 장치 컨트롤러에 연결
  2. 장치 컨트롤러의 하드웨어 인터럽트의 우선순위를 판단한다.
  3. CPU에게 지금 처리해야 하는 인터럽트가 무엇인지 판단하여 알려준다.
  • NMI 우선순위까지 판단하지는 않음
  • PIC는 여러개를 사용하여 두 개 이상의 계층적으로 구성한다.

✅ 프로그램 입출력, 인터럽트 기반 입출력의 공통점은 입출력장치와 메모리 간의 데이터 이동은 CPU가 주도하고, 이동하는 데이터도 반드시 CPU를 거친다.

 

DMA 입출력 (Direct Memory Access)

  • 입출력장치와 메모리가 CPU를 거치지 않고도 상호작용할 수 있는 입출력 방식

  • DMA 컨트롤러라는 하드웨어가 필요하다.
  • CPU는 시간을 효율적으로 사용하면서 입출력 장치와 상호작용할 수 있다. (다른 작업에 집중할 수 있다.)

DMA 입출력 과정

  1. CPU는 DMA 컨트롤러에 입출력 작업을 명령
  2. DMA 컨트롤러는 CPU 대신 장치 컨트롤러와 상호작용하며 입출력 작업을 수행 (DMA 컨트롤러는 필요한 경우 메모리에 직접 접근한다.)
  3. 입출력 작업이 끝나면 DMA 컨트롤러는 인터럽트를 통해 CPU에 작업이 끝났음을 알림
  • DMA 입출력 과정에서 시스템 버스를 이용 ➡️ 시스템 버스는 공용 자원이기에 동시 사용이 불가능
  • CPU가 시스템 버스를 이용하지 않을 때마다 조금씩 시스템 버스를 이용하거나
  • CPU가 일시적으로 시스템 버스를 이용하지 않도록 허락을 구하고 시스템 버스를 이용한다.
✅ 사이클 스틸링 (cycle stealing) : CPU 입장에선 시스템 버스에 접근하는 주기를 도둑맞은 기분이 들기에, DMA의 시스템 버스 이용을 사이클 스틸링이라고 부르기도 한다.

 

입출력 버스

  • DMA가 시스템 버스를 불필요하게 점거하는 문제를 해결하기 위해 입출력 버스라는 별도의 버스를 이용한다.
  • PCI 버스, PCI express (PCIe) 버스와 입출력 장치를 연결짓는 슬롯
  • 슬롯 ➡️ 입출력 버스 ➡️ 시스템 버스

✅ 최근엔 DMA가 더욱 발전해서 입출력 전용 CPU가 만들어지기도 함 ➡️ 입출력 프로세서 혹은 입출력 채널

 

+ Recent posts