본문 바로가기
개발자 일지/컴퓨터구조, 운영체제

[혼공컴운] 3주차 메모리와 캐시 메모리, 보조기억장치, 입출력장치

by 네빌링 2025. 1. 19.
반응형

혼공학습단13기 3주차 활동의 일환으로 혼자공부하는 컴퓨터구조 + 운영체제 학습 내용을 정리해보는 포스팅입니다.

오늘은 챕터6 메모리와 캐시 메모리, 챕터7 보조기억장치, 챕터8 입출력장치를 정리해보겠습니다.

 

혼공학습단13기-혼공컴운-3주차-썸네일

 

[목차]

  1. 메모리와 캐시 메모리
  2. 보조기억장치
  3. 입출력장치
  4. 마무리

1. 메모리와 캐시 메모리

1) RAM의 특징과 종류

 

주기억장치인 램은 대표적으로 RAM, ROM이 있고

보통 RAM을 지칭합니다.

 

RAM의 가장 큰 특징은 휘발성입니다.

전원을 끄면 말그대로 데이터가 날라간다는 것입니다.

 

데이터는 평소에 보조기억장치(하드디스크, SSD) 등에 보관이 되고

메모리에 데이터를 읽어와서 명령어를 수행하는 방식으로

프로그램을 수행합니다.

 

컴퓨터 구매할 때 RAM이 몇기가인지 많이 언급이 되는데요.

RAM 용량이 속도에 직접적으로 영향을 미칩니다.

 

용량이 작으면 데이터를 많이 못가져오기 때문에,

메모리에 올라오지 못한 프로그램을 실행한다면

보조기억장치에 접근을 해야하기 때문입니다.

 

반면, 용량이 크다면 많은 데이터를 메모리에 올려둘 수 있기 때문에

여러 프로그램을 동시에 빠르게 실행할 수 있습니다.

 

램용량이 무한대로 커질수록 실행속도가 꼭 비례하는 것은 아닙니다.

이 책에서는 작은 책상, 큰 책상으로 적절하게 비유를 해줬는데요.

큰 책상(용량 많은 RAM)에 책이 많다고 그걸 더 빠르게 읽진 못하는 것과

마찬가지입니다.

 

그리고 램의 종류는 크게 2가지가 있는데

DRAM, SRAM입니다.

 

아래 간단히 표로 비교 정리를 해봤습니다.

 

DRAM SRAM
시간 지나면 데이터 날라감(일정주기 데이터 재활성화 필요) 시간 지나도 데이터 안 날라감
소비전력이 낮고 저렴 소비전력이 높고 비쌈
SRAM에 비해 속도 느림 SRAM에 비해 속도 빠름
집적도가 높아서 대용량 설계 가능 집적도가 낮음
일반적으로 쓰이는 RAM 캐시

 

 

그리고 SDRAM이라는 D+S같은 느낌의 램이 있는데

사실은 DRAM의 발전된 형태로 클럭 신호와 동기화된

DRAM입니다.(S는 Synchronous)

 

그래서 클럭타이밍에 맞춰 CPU와 정보를 주고받을 수 있습니다.

 

DDR SDRAM은 최근 가장 흔히 사용되는 램이고

대역폭을 넓혀 속도를 빠르게 만든 SDRAM입니다.

(대역폭은 데이터를 주고받는 길의 너비)

 

자동차 도로에 대역폭을 비유할 수 있습니다.

 

SDRAM은 한 클럭에 한 번씩 CPU와 데이터를 주고받을 수 있습니다.

반면 DDR SDRAM은 두 배의 대역폭으로 한 클럭당 두번씩 CPU와

데이터를 주고받을 수 있습니다.

 

DDR2는 DDR보다 대역폭이 2배 높고, DDR3은 DDR2보다 2배 높은 등

이런식으로 최근 DDR4 또는 DDR5를 많이 사용합니다.(아래 이미지 참고)

 

네이버에서 DDR5를 검색해보니 많은 RAM을 확인 가능

 

 

2) 메모리의 주소 공간

 

앞에서 메모리의 저장된 정보는 주소값을 통해 읽고 쓸 수 있음을

얘기했으나, 실제로 주소값으로 읽고 쓰는 게 간단한 읽은 아닙니다.

 

CPU는 실행중인 프로그램이 메모리의 몇번지에 저장되어있는지

다 알지 못합니다.

 

A프로그램이 1번지에 있다가 다시 지워졌다 로드되면

3번지에 있을 수도 있고 또 같은 번지에 다시 로드될 수도 있습니다.

 

그래서 주소는 논리주소물리주소로 나뉘고, 이를 조합해서

메모리 읽기쓰기가 가능한 것입니다.

 

논리주소는 프로그램 각각에 부여된 주소,

물리주소는 하드웨어상 주소를 의미합니다.

 

그래서 0부터 시작하는 논리주소는

프로그램마다 중복된 주소가 충분히 있을 수 있습니다.

 

예를들어 A프로그램도 554번지가 있고, B프로그램도 554번지가

있을 수 있습니다.

 

이 논리주소와 물리주소 간의 변환이 이루어져야

CPU와 메모리가 상호작용이 가능합니다.

 

이를 위해 MMU라는 하드웨어가 중간에서 역할을 해줍니다.

(MMU는 Memory Management Unit)

 

MMU는 CPU가 발생시킨 논리주소에 베이스레지스터 값을 더해서

논리주소를 물리주소로 변환합니다.

 

베이스레지스터에 15000이 저장되어있고 메모장 쓰기 명령어가 5번지라면

15005로 물리주소 접근을 해서 명령어를 읽고 해석합니다.

 

이런 방식을 자유롭게 쓰기 위해 알아야 할 것이 메모리 보호 기법입니다.

예를 들어 메모장 쓰기 명령을 위해 베이스레지스터+논리주소로 접근했는데

메모장의 끝주소를 넘어 게임의 주소로 접근한다면 오류가 발생할 수 있습니다.

 

이를 위해 한계 레지스터라는 레지스터가 담당합니다.

다른 프로그램 주소범위에 침범하지 않도록 보호할 수 있습니다.

 

만약 메모리에 접근하고자 논리주소가 한계 레지스터보다 높으면

인터럽트를 발생시켜 실행을 중단시킵니다.

 

3) 캐시 메모리

 

일반적으로 CPU의 레지스터 접근 속도는 메모리 접근속도보다 빠릅니다.

CPU 속도가 빨라도 메모리 접근속도가 느리면 효율이 떨어지기 때문에

그 중간에 두는 메모리캐시메모리입니다.

 

이는 앞에서 언급한 SRAM으로 보통 사용합니다.

 

캐시메모리는 레지스터보단 느리지만, 레지스터보다 용량이 큽니다.

 

RAM을 차타고 가는 이마트, 캐시메모리는 집앞 편의점으로 책에서 설명한대로

기억하면 될 것 가습니다.

 

캐시메모리에는 L1,L2,L3가 있고, L1,L2는 각각 코어 내부에 있으나
L3는 코어 외부에서 공유하는 식으로 사용합니다.

 

이 캐시메모리에 CPU가 어떤 데이터를 올릴지도 생각해봐야합니다.

그래서 CPU는 어떤 룰을 통해 데이터를 올리는데

이 룰이 참조 지역성의 원리입니다.

 

CPU가 최근 접근한 메모리 공간의 데이터를 캐시메모리로 올리거나,

그 근처 데이터를 캐시메모리로 올립니다.

 

전자의 경향을 시간지역성이라고 하며,

후자의 경향을 공간지역성이라고 합니다.

 

실제로 CPU에서 이 데이터가 활용되면 캐시히트라고 하며

활용이 안 되면 캐시미스라고 합니다.

 

2. 보조기억장치

1) 다양한 보조기억장치

 

가장 대중적인 보조기억장치는 하드디스크와 플래시 메모리입니다.

이 중, 하드디스크를 먼저 알아보려고합니다.

 

하드디스크는 자기적인 방식으로 데이터를 저장합니다.

LP판을 생각하면 되고 유사하게 작동합니다.

 

하드디스크를 분해하면, 데이터가 저장되는 동그란 원판을

플래터라고 합니다. 그리고 이 플래터를 회전시키는 요소를

스핀들이라고 합니다. 

 

하드디스크는 이 플래터들이 위아래로 여러 개 겹쳐져 있습니다.

 

플래터를 대상으로 데이터를 읽고 쓰는 구성요소를 헤드라고합니다.

바늘같이 생긴 부품으로 이를 통해 데이터를 읽고 씁니다.

이 헤드를 원하는 위치로 움직이는 걸 디스크 암이라고 합니다.

 

플레터는 또 여러 구성 요소의 키워드들이 있습니다.

데이터를 저장할 때 플래터의 아무곳에나 저장하는 게 아니라,

트랙과 섹터 단위로 데이터를 저장합니다. 

 

트랙은 동심원의 한 부분이고, 섹터는 트랙의 일부입니다.

섹터가 하드디스크의 가장 작은 전송단위입니다.

 

그리고 이 트랙들을 같은 트랙끼리 위아래로 연결한 원통 모양의 공간을

실린더라고 합니다.

 

연속된 정보는 보통 한 실린더에 기록되는데, 

여러 섹터에 걸쳐서 데이터를 저장하면 디스크암을 계속 움직여야 하기 때문에

속도가 느려지기 때문입니다.

 

데이터 접근 시간은 크게 탐색 시간, 회전 지연, 전송 시간으로 나뉩니다.

 

탐색시간데이터가 저장된 트랙까지 헤드를 이동시키는 시간,

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

전송 시간하드디스크와 컴퓨터 간 데이터를 전송하는 시간을 의미합니다.

 

참고로 탐색시간이 0인 다중 헤드 디스크(고정 헤드 디스크)가 있는데

헤드가 트랙별로 여러개 달려서 헤드를 이동시킬 필요가 없습니다.

 

그리고 플래시 메모리가 있으며 보통 SSD에 많이 사용됩니다.

전기적으로 데이터를 읽고 쓸 수 있습니다.

 

플래시 메모리는 이라는 단위로 구성되어 있는데

데이터를 저장하는 가장 작은 단위입니다.

 

셀에 1비트만 저장가능하면 SLC,

2비트 저장가능하면 MLC,

3비트 저장가능하면 TLC라고 부릅니다.

 

비트를 많이 저장할수록 좋을 것 같지만

좀 다르게 이해해야합니다.

 

셀을 집으로 생각하면 쉬운 것 같습니다.

집 1개에 두개의 정보만 왔다갔다 한다면

빠른 입출력이 가능합니다. 그러나 비쌉니다.

 

MLC는 SLC보다 속도와 수명이 떨어지지만

대용량화가 유리합니다.

 

TLC는 MLC보다 수명,속도가 떨어지지만

대용량화가 더 유리하고 저렴합니다.

 

그리고 이 셀들이 모여 만들어진 단위페이지라고합니다.

이 페이지가 모여서 블록, 블록이 모여 플레인,

플레인이 모여 다이라고 합니다.

 

특히 페이지 단위로 읽기 쓰기가 이루어지며, 

삭제는 블록 단위로 이루어집니다.

 

이 페이지에 어떤 데이터도 없는 경우 Free 상태,

데이터가 있는 경우 Valid 상태,

안 쓰는 값이 있는 경우 Invalid 상태라고 부릅니다.

 

플래시메모리는 하드디스크와 달리 덮어쓰기가 불가능하여

Valid 상태 페이지에는 새 데이터 저장이 불가능합니다.

그래서 한 블록에 A라는 정보가 저장된 페이지에

A2를 덮어쓰는 건 불가능합니다.

A를 Invalid처리 후, 블록내 다른 페이지에 A2를 저장합니다.

그리고 이 블록을 다른 블록으로 옮기고 이전블록을 삭제합니다.

 

참고로 이 Invalid값들을 정리하기 위해  최근 SSD는

가비지컬렉션(GC) 기능을 제공합니다.

 

3) RAID의 정의와 종류

 

엄청난 데이터들을 하나의 보조기억장치에 저장한다면

불안할 것 같습니다.

 

그래서 구글, 아마존 등은 이런 중요 데이터들을

RAID 방식으로 구성한다고 합니다.

 

RAID데이터의 안전성과 높은 성능을 위해 여러개의 

물리적 보조기억장치를 논리적 보조기억장치로 구성하는 기술입니다.

 

RAID는 레벨별로 RAID0, RAID1 등으로 나뉘는데

여기서 대중적인 RAID를 표로 정리하였습니다.

하드디스크가 4개 있고, 이 4개로 구성한다고 가정합니다.

 

RAID 종류 특징
RAID 0  - 여러 하드디스크에 데이터를 단순히 나누어 저장
- 분산저장을 스트라입이라하며 스트라이핑된다고 함
- CPU는 4TB 저장장치 1개를 읽고쓰는 것보다, 1TB 4개를 읽고 쓰는 것이 이론상 4배 빠름
- 그러나 저장된 정보가 불안전. 4번째 하드디스크 고장시 전체 문제
RAID 1 - 미러링이라고도 함
- 하드디스크 2개에 저장, 나머지 2개는 복사본으로 만듦
- RAID0보다 속도는 느리지만 복구 간단
- 하드디스크가 많이 필요하게 되고 비용 비쌈
RIAD 4 - 하나의 하드디스크를 패리티 비트 정보를 두는 복구용으로 사용
- 참고로 패리티 비트는 오류 검출용이지만, RAID에서는 오류 수정도 가능
RAID 5 - RAID4는 하드디스크에 데이터 저장시 오류검출용 하드에 패리티 비트를 써야 하여 병목현상이 발생할 수 있음
- 이를 해결하기 위해 패리티비트를 각 하드에 데이터와 함께 분산 저장 
RAID 6 - RAID5와 비스하지만 패리티비트를 2개 정도 두는 방법
- 가장 안전한 구성(속도는 좀 희생)

 

참고로 여러 RAID를 혼합할 수 있으며

이를 NESTED RAID라고 합니다.

 

이 RAID는 무조건 어느게 좋다 나쁘다가 아니라

상황에 맞게 사용하는 것이 중요합니다.

 

3.입출력장치

 

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

 

입출력장치는 수 없이 많고 이를 컴퓨터와 연결하여

데이터를 주고받기는 쉽지 않습니다.

 

그리고 데이터 전송률이 CPU, 메모리보다 낮습니다.(일반적으로)

 

이를 해결하기 위해 컴퓨터에 입출력장치가 직접 연결되는 것이 아닌

장치 컨트롤러라는 하드웨어를 통해 연결됩니다.

 

장치컨트롤러는 중간에서 통신 중계를 해주고 오류를 검출해주며,

특히 데이터 버퍼링 기능으로 전송률 싱크를 맞춰줍니다.

 

버퍼에 데이터를 모았다 내보내거나, 조금씩 내보내는 방법입니다.

 

장치 컨트롤러의 구조 내부는 데이터 레지스터, 상태 레지스터, 제어 레지스터로 

구성되어 있습니다.

 

데이터 레지스터는 CPU와 입출력장치 사이에 주고받을 데이터가 담기는 레지스터,

상태 레지스터는 입출력장치가 입출력 작업 준비가 되었는지 상태 정보가 저장,

제어 레지스터는 입출력장치가 수행할 내용에 대한 제어정보와 명령이 담깁니다.

 

그리고 장치 드라이버라는 것이 있는데 

우리가 프린터 설치하기 위해 프린터 드라이버를 설치하는 걸

생각해보면 될 것 같습니다.

 

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

 

2) 다양한 입출력 방법

 

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

크게 3가지 있습니다.

 

우선 프로그램 입출력 방식입니다.

기본적으로 프로그램 속 명령어로 입출력장치를 제어하는 방법입니다.

CPU가 프로그램 속 명령어 처리 중, 입출력 명령어를 만나면 장치컨트롤러와

상호작용하여 입출력을 수행합니다.

 

메모리의 정보 일부를 하드디스크에 백업하는 상황을 예로들면,

CPU가 장치컨트롤러의 제어 레지스터에 쓰기 명령을 보내고,

하드디스크가 쓰기 준비가 되면 상태 레지스터에 준비 표시를 해줍니다.

CPU는 메모리 정보를 데이터 레지스터에 쓰는 과정을 거칩니다.

 

CPU는 입출력 장치의 주소, 장치컨트롤러의 레지스터를 모두 알기 어렵습니다.

그래서 이 명령어들이 저장된 방식이 2가지 있습니다.

 

메모리맵 입출력은 메모리에 접근하기 위한 주소 공간과

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

1024개 주소 표현이 가능한 메모리라면 512개는 일반 메모리주소,

나머지 512개는 장치컨트롤러의 레지스터를 표현하기 위해 사용됩니다.

 

고립형 입출력은 메모리를 위한 주소 공간과 입출력장치를 위한

주소 공간을 분리하는 방법입니다.

 

일반 메모리에 접근하는 제어버스, 장치컨트롤러에 접근하는 제어버스가 따로 있도록

구성합니다. 그래서 일반 메모리에 접근하는 명령어와 다른 명령어를 사용합니다.

 

그리고 인터럽트 기반 입출력 방식이 있습니다.

 

이전 포스팅에서 설명한 입출력장치에 의한 인터럽트는

사실 정확히 장치 컨트롤러에 의해 발생합니다.

 

인터럽트가 동시에 발생하면 순서대로 처리, 우선 순위대로 처리 등의 방식으로

할 수 있습니다.

플래그 레지스터 속 인터럽트 비트를 비활성화해도 무시할 수 없는 인터럽트

NMI(Non-Maskable Interrupt)라고 합니다.

 

우선순위 반영 다중 인터럽트를 처리하는 방식은 주로 PIC 하드웨어를 사용합니다.

(PIC: Programmable Interrupt Controller)

 

PIC에서 인터럽트 우선순위 판별 후, CPU에 지금 처리해야할 인터럽트를 알려줍니다.

이 PIC는 여러개로 구성될 수 있습니다.

 

그리고 마지막으로 DMA 입출력 방식이 있습니다.

입출력시 CPU가 주도하고 이동데이터도 CPU를 거치기 때문에

CPU에 부담이 발생합니다. 이를 해결하기 위해 DMA 컨트롤러를 시스템버스에

따로 연결시켜 사용합니다.

그러면 CPU를 거치지않고 입출력장치를 사용할 수 있습니다.

 

여기서 생각해볼 문제는 DMA 컨트롤러가 시스템 버스로 접근하기 때문에
CPU가 이 때 시스템 버스를 사용할 수 없는 문제가 발생합니다.

 

그래서 별도의 입출력버스에 DMA컨틀로러와 장치컨트롤러를 연결해서 사용합니다.

 

추가로 DMA가 더욱 발전한 형태로 입출력 채널이 있는데,

입출력장치 각각에 입출력전용 CPU가 포함된 방식입니다.

 

4. 마무리

여기까지 컴퓨터 구조였고, 다음부터 운영체제를 나가네요.

다음주부터 장기 해외여행 일정이 있어서 4주차 스터디는 미리 해야할 것 같기에(..)

스피드하게 진행해봤습니다.

 

이상으로 숙제를 올리며 마무리합니다.

 

감사합니다!

 

혼공학습단13기-혼공컴운-3주차-숙제1
185p / 확인문제 3번

 

혼공학습단13기-혼공컴운-3주차-숙제2
205p / 확인문제1번

반응형