Uknow's Lab.
article thumbnail

 

 

 

혼공 컴퓨터구조 + 운영체제 3주차

컴퓨터구조+운영체제 벌써 3주차 입니다.

 

 

 

메모리와 캐시 메모리

주기억장치에는 RAM과 ROM이 있습니다.

보통 주기억장치를 말하면 RAM을 의미하며,

RAM은 전원을 끄면 내용이 사라져 '휘발성' 저장장치라 부릅니다.

 

반면 하드 디스크, SSD, USB와 같은 보조기억장치는 전원을 껏다 켜도 남아있기에 '비휘발성'이라 합니다.

 

보조기억장치는 CPU가 직접 접근하지 못하기에,

보조기억장치에는 주로 보관할 대상을,

RAM에는 실행할 대상을 저장합니다.

 

 

 

 

보통 램은 다다익선이라며 지갑이 허락하는 한도 내에서 램의 용량은 큰 게 좋다고 하는데요

램의 용량이 작다면 프로그램 A를 RAM으로 갖고오고,

B를 실행시키려면 B를 RAM으로 가지고 와야 합니다.

반면 램의 용량이 크다면 여러 프로그램을 동시에 실행시킬 수 있지요.

 

모니터에 비유하자면

모니터가 작다면 한 화면에 하나만 볼 수 있지만,

와이드 모니터 or 듀얼 모니터라면 여러 창을 동시에 켜놓을 수 있어 훨씬 생산성이 증가하는 느낌이죠.

 

 

 

DRAM

DRAM은 Dynamic RAM의 줄임말로써, 저장된 데이터가 동적으로 변하는(사라지는) RAM을 말합니다.

DRAM은 시간이 지나면 저장된 데이터가 점차 사라지기에,

소멸을 막기 위해 일정 주기로 다시 재활성화(다시 저장)합니다.

 

우리가 일반적으로 사용하는 RAM으로써,

위의 단점이 있지만 전력이 낮고 가격이 싸고, 집적도가 높아 대용량으로 설계하기 용이합니다.

 

 

 

SRAM

Dynanic(동적)이 있다면, Static(정적)인 것도 있을까요?

네. SRAM은 Static RAM의 줄임말입니다.

SRAM은 DRAM과는 달리 시간이 지나도 저장된 데이터가 사라지지 않아 주기적으로 재활성할 필요도 없고,

일반적으로 DRAM에 비해 속도도 바릅니다.

 

예상하셨겠지만, 당연히 비쌉니다. 전력도 크고, 집적도도 낮습니다.

때문에 DRAM에 비해 적게 사용됩니다.

 

 

 

SDRAM

SDRAM은 Synchronous Dynamic RAM으로써, 클럭 신호가 동기화된 DRAM 입니다.

클럭 타이밍에 맞춰 CPU와 정보를 동기화할 수 있습니다.

 

 

DDR SDRAM

뭐가 점점 더 붙습니다. 밸런스 붕괴를 보는 것 같네요.

DDR SDRAM은 Double Data Rate SDRAM으로써, 대역폭을 넓혀 속도를 빠르게 만든 SDRAM 입니다.

사실 뉴스에서 메모리에 관한 뉴스를 볼 때

DDR 3, DDR 4 등 가장 많이 언급되기에 익숙하신 분들도 꽤 있으실텐데요.

 

대역폭을 넓혔다는 이야기는 2차선 도로와 같습니다.

두 배의 대역폭으로 한 클럭 당 두 번씩 CPU와 데이터를 주고 받을 수 있습니다.

 

DDR 2는 DDR SDRAM보다 2배 넓은 SDRAM 입니다.

2차선 도로 두개가 붙은 것과 같습니다.

 

DDR 3는 DDR 2의 두배로, SDR SDRAM의 8배입니다.

DDR 4는 SDR SDRAM에 비해 16배 넓은 대역폭을 가집니다. 굉장하네요.

 

 

 

 

메모리의 주소 공간

주소에는 두 가지 종류가 있습니다.

메모리 하드웨어가 사용하는 물리 주소와,

CPU와 실행되는 프로그램이 사용하는 논리 주소. 이렇게 두 가지 입니다.

 

물리 주소는 말 그대로 정보가 실제로 저장된 하드웨어 상의 주소를,

논리 주소는 실행 중인 프로그램 각각에게 부여된 0번지 부터 시작하는 주소를 의미하며,

 

인터넷 브라우저, 롤, 계산기 이렇게 세 프로그램을 동시에 실행중일 때,

각 프로그램의 물리 주소가 어디인지 굳이 알 필요는 없습니다.

메모리는 프로그램이 계속 적재되고, 사라지는 곳이기 때문입니다.

 

각 프로그램은 모두 물리 주소가 아닌 0부터 시작하는 자신만의 논리 주소를 가지고 있습니다.

CPU는 해당 논리 주소를 바탕으로 프로그램에 접근합니다.

 

 

하지만 하드웨어는 CPU의 논리 주소를 알지 못합니다.

때문에 메모리 관리 장치(MMU, Memory Management Uint)에 의해

논리 주소와 물리 주소의 변환이 이루어집니다.

 

CPU의 논리 주소에 베이스 레지스터의 값을 더해 물리 주소로 변환합니다.

논리 주소 100을 전달받으면 베이스 레지스터의 15000을 더해 15100에 접근하는 것이지요.

 

 

 

캐시 메모리

CPU가 메모리에 접근하는 시간은 CPU의 연산 속도보다 느립니다.

때문에 CPU가 아무리 빨리 연산하여도,

메모리에 접근하는 속도가 늦다면 아무 소용 없지요.

 

이를 해결하기 위해 캐시 메모리가 있습니다.

 

CPU와 가까울 수록 CPU가 기억 장치에 접근하는 속도는 빠릅니다.

CPU가 메모리에 접근하는 속도는 레지스터에 비해 느립니다.

 

캐시 메모리는 CPU와 메모리 사이에 위치하여

메모리에서 CPU가 사용할 일부 데이터를 미리 캐시 메모리로 가지고 와

CPU의 계산 속도와 메모리 접근 속도의 차이를 조금이나마 줄일 수 있습니다.

 

 

캐시 메모리를 저장 장치 계층 구조에 넣었을 때

 

 

 

 

참조 지역성 원리

당연하게도, 캐시 메모리는 메모리에 비해 용량이 작습니다.

메모리가 하드 디스크의 일부를 복사해 사용하듯이

캐시 메모리는 메모리의 일부를 복사해 저장합니다.

 

캐시 메모리는 대게 CPU가 사용할 법한 대상을 예측하여 저장하는데,

이 때 저장한 데이터가 실제로 들어맞아 캐시 메모리 내 데이터가 CPU에서 활용될 경우

이를 캐시 히트(Cache Hit)라고 합니다.

 

 

 

반대로, 자주 사용할 것 같아 가져왔지만,

예측이 틀려 CPU가 메모리에서 직접 가져와햐 할 경우는 캐시 미스(Cache Miss)라고 합니다.

 

당연하게도, 캐시 미스가 적고 캐시 히트가 높을수록 성능이 좋습니다.

캐시 적중률은 캐시 히트 횟수 / (캐시 히트 횟수 + 캐시 미스 횟수)로 계산합니다.

 

보편적으로 캐시 적중률은 85~95% 이상인데,

100번 중 85~95번을 맞추는 셈입니다. 굉장하네요.

 

그럼 캐시 메모리는 어떻게 CPU가 사용할 법한 데이터를 예측할까요?

바로 참조 지역성의 원리(Locally of Reference, Principle of Locality) 입니다.

 

1. CPU는 최근에 접근했던 메모리 공간에 다시 접근하려는 경향이 있다.
2. CPU는 접근한 메모리 공간 근처를 접근하려는 경향이 있다.

 

 

 

최근에 접근했던 메모리 공간에 다시 접근하려는 경향

 

 

위 코드는 구구단 2단을 출력하는 간단한 프로그램입니다.

위 프로그램에서 변수 num과 i가 선언되었고, 여러 번 사용되었습니다.

 

즉, CPU는 변수가 저장된 메모리 공간을 여러 번 참조했음을 알 수 있습니다.

때문에 CPU는 최근 접근한 메모리 공간을 다시 접근하려는 경향이 있는 것입니다.

이 경향을 '시간 지역성'이라 합니다.

 

 

 

접근한 메모리 공간 근처를 접근하려는 경향

위 경우는 변수를 선언하여 여러 번 접근하니, 어느정도 알겠습니다.

그럼, 접근한 메모리 공간 근처를 접근하려는 경향은 무엇일까요?

 

데이터들은 서로 관련있는 것 끼리 모여 저장됩니다.

워드 프로세서는 워드 프로세서끼리,

게임은 게임끼리,

웹 브라우저는 브러우저끼리 서로 모여 저장되어 있으며,

 

워드 프로세서의 경우, 자동 저장 기능, 입력 기능, 출력 기능은

또다시 각각 관련있는 기능끼리 서로 모여 저장되어 있습니다.

 

즉, CPU가 워드 프로세서를 실행할 때에는 실행할 때,

워드 프로세서 프로그램이 모여있는 공간 근처를 집중적으로 접근하게 됩니다.

이를 공간 지역성이라 합니다.

 

위 두 가지 원리로 캐시 메모리는 CPU가 사용할 법한 데이터를 예측하는 것이죠. 대단합니다.

 

 

 

RAID

 

1TB 4개와 4TB 한개를 사용할 때 무엇을 사용하는게 나을까요?

보통 컴퓨터의 메인보드에는 포트 수 때문에 4TB를 선택하시는 분들도 있겠지만,

꽂을 수 있는 / 인식할 수 있는 하드 수의 제한에서 벗어난다면

1TB 4개를 사용하면 4TB 하드 한 개의 성능과 안전성을 능가할 수 있습니다.

 

 

컴퓨터 부품을 포함한 기계에는 수명이 있고, 보조기억장치도 마찬가지로 수명이 존재합니다.

이럴 때 사용할 수 있는 방법이 RAID인데요.

RAID는 Redundant Array of Independent Disks의 줄임말로써,

하드 디스크와 SSD 여러 개를 논리적 보조기억장치 하나로 사용하는 기술입니다.

 

 

RAID 0

 

RAID 0은 여러 개 보조기억장치에 데이터를 단순이 나눠 저장하는 방식입니다.

저장하려는 데이터를 단순히 여러 하드 디스크를 번갈아가며 저장하는 것이죠.

 

저장된 데이터가 마치 줄무니같다하여 스트라입(Stripe)이라 하고,

분산하여 데이터를 저장하는 것을 스트라이핑(Striping)이라고 합니다.

 

하나의 대용량 저장장치에 여러 번 걸쳐 읽고 쓰는 것 보다,

4개 하드 디스크를 동시에 읽고 쓰기 때문에 RAID 0 으로 구성된

1 TB 저장 장치 네 개의 속도가 이론상으론 4배 더 빠릅니다.

 

하지만 디스크 중 하나가 고장이 나버린다면

다른 모든 하드 디스크의 정보를 읽는데 문제가 생길 수 있습니다.

 

 

 

RAID 1

RAID 1은 복사본을 만드는 방식으로,

거울처럼 완전한 복사본을 만들기에 미러링(Mirroring)이라고도 합니다.

 

 

RAID 0 처럼 스트라이핑을 하면서 동시에 오른쪽 디스크에는 동일한 내용을 저장합니다 (백업)

데이터를 읽고 쓸 때 두 군데에 쓰기 때문에 RAID 0 보다는 느릴 수 밖에 없습니다.

 

RAID 1은 복구가 상당히 간편한 편인데요.

완전히 미러링되어 있기 때문에 하나가 고장나 데이터가 다 날아가버려도

백업본이 있으니, 상대적으로 수월하게 복구가 가능합니다.

 

 

 

RAID 4

RAID 4는 RAID 1 처럼 완전한 복사를 하는 대신

오류를 검출하고 복구하기 위한 정보를 저장한 저장 장치를 두는 방식입니다.

이 때, 오류를 검출하고 복구하기 위한 정보를 패리티 비트(Parity bit)라고 합니다.

 

 

RAID 4에서는 패리티를 저장한 장치를 사용해

나머지 디스크의 오류를 검출 및 복구합니다.

 

 

 

RAID 5

RAID 4는 새로운 데이터를 저장할 때 마다 패리티로 사용하는 디스크를 쓰게 되므로,

해당 장치에 병목 현상이 발생할 수도 있습니다.

 

하드 디스크 1~3과 패리티 디스크 1개가 있을 때,

하드 디스크 1~3에 각각 접근할 때 마다 패리티 디스크를 접근해야 하니,

아무래도 패리티 디스크의 부담이 커질 수 밖에 없습니다.

 

 

RAID 5는 패리티 정보를 분산저장하여 RAID 4의 병목 현상을 완화시켰습니다.

 

 

 

 

RAID 6

 

RAID 6는 5와 크게 다르지 않습니다.

서로 다른 두 개의 패리티 비트를 저장하는 방식이죠.

다만 새 정보를 저장할 때 마다 패리티를 두 개씩 저장하므로,

RAID 5 보다는 느리지만, 보다 안전한 구성을 설계할 수 있습니다.

 

RAID는 각각 장단점이 있으며,

운영 환경에 따라 최선의 선택이 달라지기 마련이므로,

각 RAID의 특성과 장단점을 알아두는 것이 좋습니다.

 

 

 

 

장치 컨트롤러

입출력 장치는 CPU, 메모리 보다 다루기가 더 어렵습니다.

키보드, 모니터, USB, SSD, 마우스, 프린터 등 입출력 장치의 종류가 너무 많기도 하고

속도, 데이터, 전송 방식도 서로 상이하기 때문입니다.

또한, 입출력장치의 전송률은 CPU에 비해 느립니다.

 

이와 같은 이유로 입출력장치는 컴퓨터에 직접 연결되는 것이 아닌

장치 컨트롤러를 통해 연결됩니다.

장치 컨트롤은 CPU <-> 입출력장치간 통신을 중개하고, 오류를 검출하고

버퍼라는 임시 공간을 사용해 입출력장치와 CPU간의 전송률을 비슷하게 맞춥니다.

 

 

장치 드라이버

장치 드라이버란 장치 컨트롤러의 동작을 감지하고 제어함으로써

컴퓨터 내부와 장치가 정보를 주고받을 수 있게 하는 프로그램입니다.

 

장치 컨트롤러가 하드웨어적인 통로라면,

장치 드라이버는 소프트웨어적인 통로입니다.

 

프린터를 설치할 때 특정 드라이버를 깔고 나서야 프린터로 인쇄할 수 있던 것을 떠올리면 쉽습니다.

 

 

 

 

다양한 입출력 방법

 

장치 컨트롤러와 CPU가 정보를 주고 받는데에는

프로그램 입출력, 인터럽트 기반 입출력, DMA 입출력 등이 있습니다.

 

 

 

프로그램 입출력

프로그램 입출력(Program I/O)은 프로그램 속 명령어로 입출력을 제어합니다.

메모리에 저장된 정보를 하드 디스크로 옮기는 과정을 생각해봅시다.

 

 

 

위와 같은 흐름으로 CPU와 하드 디스크가 서로 상호작용합니다.

 

 

 

인터럽트 기반 입출력

지난 주차에 잠시 나왔던 인터럽트 기반 입출력입니다.

 

 

 

프린트를 해야할 일이 생겼을 때,

프린트가 완료될 때 까지 기다리는 것이 아닌,

CPU는 자신의 할 일을 하다가

프린터(장치 컨트롤러)로부터 완료 메시지(인터럽트)를 받으면

그 때 CPU가 일을 처리하는 방식입니다.

 

디자인 패턴에 비유하자면 옵저버 패턴과도 비슷한 느낌인데요.

https://uknowblog.tistory.com/389

 

[디자인 패턴] Observer(옵저버) 패턴

Observer Pattern (옵저버 패턴) 옵저버 패턴은 특정 객체를 관찰(Observe)하다가, 해당 객체의 상태가 변경된다면 이를 관측하고 있는 객체들에게 연락을 하는 일대다(one-to-many) 의존성을 정의합니다.

uknowblog.tistory.com

 

기다리거나, 주기적으로 프린터를 확인하는 것이 아닌

알람(인터럽트)를 받으면 움직이는 방식이 닮았네요.

 

 

 

DMA 기반 입출력

앞선 두 방법의 공통점은 입출력장치와 메모리간의 데이터 이동을 CPU가 주도 및 CPU를 거친다는 점이였습니다.

 

모든 데이터가 CPU를 거쳐 이동할 경우,

안그래도 바쁜 CPU는 핫식스와 커피를 먹으며 더 빨리 일해야합니다.

 

때문에 CPU를 거치지 않아도

입출력장치와 메모리가 상호작용 할 수 있는 DMA(Direct Memory Access)가 등장하였습니다.

 

CPU는 DMA 컨트롤러에 입출력 작업 명령을 내리고,

인터럽트만 받으면 되기 때문에 부담을 줄여줍니다.

 

 

 

 

미션

p. 185 3번

주로 캐시 메모리로 사용됩니다 -> SRAM

주로 주기억장치로 활용됩니다 -> SRAM

대용량화하기 유리합니다 -> DRAM

집적도가 상대적으로 낮다 -> DRAM

 

p. 205 1번

1 : 레지스터

2 : 캐시메모리

3 : 메모리

4 : 보조기억장치

 

선택미션

RAID의 정의와 종류 정리

본문 내용으로 대체

 

 

 

마치며

길고 긴 컴퓨터구조 파트가 끝났습니다.

다음 주차부터는 이 책과 스터디에 참여한 주 목적이기도 했던 운영체제 파트네요.

 

컴퓨터 구조론을 주 목적으로 한 건 아니였지만

1~3주차 동안 생각보다 정말 알찬 내용으로 구성되어 있어 몰랐던 것도 꽤 많이 얻어가는 것 같습니다.

학기중에 분명히 배웠던 것들도 까먹은게 상당히 많아서

사람의 뇌는 역시 휘발성임을 상기했네요 😓

profile

Uknow's Lab.

@유노 Uknow

인생은 Byte와 Double 사이 Char다. 아무말이나 해봤습니다.