컴퓨터 구조 + 운영체제/컴퓨터 구조

혼자 공부하는 컴퓨터 구조 + 운영체제 3주차 (메모리, 캐시, 보조기억장치, RAID, 입출력장치)

dash758 2024. 7. 22. 06:16

 

 

 

 

 컴퓨터 구조 + 운영체제 3주차 입니다. 이번 글에서는 어쩌면 컴퓨터를 아예 모르는 사람일지라도 가장 익숙할 저장 장치에 관하여 알아보고, 입출력장치에 대해 짤막하게 알아보겠습니다. 또한 지금까지 배웠던 컴퓨터 구조를 다시 한 번 복습하여 보겠습니다.

 

 오늘은 메모리에 관한 내용 외에는 많이 언급할 내용이 없어서 글이 짧을 수 있습니다.

 

 

도서 정보

 

책 제목: 혼자 공부하는 컴퓨터 구조 + 운영체제

저자: 강민철

출판사: 한빛미디어

책 정보 및 구매 사이트:

https://www.hanbit.co.kr/store/books/look.php?p_code=B9177037040

 

혼자 공부하는 컴퓨터 구조+운영체제

어려운 컴퓨터 구조와 운영체제의 원리를 누구나 쉽게 이해할 수 있도록 용어와 개념은 한 번 더 풀어쓰고, 적절한 예시와 이해하기 쉬운 그림으로 재미있게 구성했다. 또한 일상 소재를 활용한

www.hanbit.co.kr

저자의 유튜브 강의:

https://www.youtube.com/playlist?list=PLYH7OjNUOWLUz15j4Q9M6INxK5J3-59GC

 

혼자 공부하는 컴퓨터구조 + 운영체제

 

www.youtube.com

 

 

 

 

 

목차

6. 메모리와 캐시 메모리

6.1 RAM의 특징과 종류

6.2 메모리의 주소 공간

6.3 캐시 메모리

 

7. 보조기억장치

7.1 보조기억장치의 종류

7.2 RAID의 정의와 종류

 

8. 입출력장치

 

부록 - 기본 숙제

추가 숙제 - RAID의 정의와 종류를 간단히 정리해보기

토막 지식 - 버퍼 오버 플로우

 

 

 

 

6. 메모리와 캐시 메모리

6.1 RAM의 특징과 종류

 메모리는 컴퓨터 구조 1주차 때 알아봤듯이 전원이 공급되지 않으면 그 안에 있는 내용들이 싹 다 날아가는 특성을 갖고 있습니다. 보통 메모리를 RAM 이라고 지칭하며, 그 뜻은 Random Access Memory입니다. 왜 메모리의 이름이 RAM인 이유는 Random Access에 있습니다. Random Access의 의미는 메모리의 위치에 일정 확률로 접근하는 것이 아닌, 읽거나 쓰려고 하는 정보가 메모리의 어느 위치에 있든지 항상 동일한 시간에 데이터에 접근할 수 있다는 점입니다.

 

 메모리의 특성에 대하여 다시 한 번 상기시켜 보겠습니다. 메모리의 가장 큰 특징은 휘발성입니다. 앞서 설명했기 때문에 이하 생략하겠습니다. 그 다음으로는 프로그램이 실행되기 위해 필요한 데이터와 명령어를 메모리에 저장합니다. 메모리는 데이터를 읽고 쓰는 속도가 빠르기 때문에 빠른 접근 속도와 더불어 프로그램의 전반적인 실행 속도를 증가시키는 장점이 있습니다.

 

 이러한 메모리는 컴퓨터의 역사가 시작되면서 메모리 역시 같이 발전되어 왔습니다. 이번 절에서는 메모리의 진화 과정과 현재에는 어떤 방식의 메모리를 쓰는지 알아보겠습니다.

 

 메모리는 DRAM, SRAM, SDRAM, DDR SDRAM 이렇게 크게 네 가지로 진화해 왔습니다. 각각을 정리하면 다음과 같습니다.

 

--------------------------------------------------------------

DRAM(Dynamic RAM) - 일정 시간이 지나면 데이터가 사라지는 메모리

SRAM(Static RAM) - 저장된 데이터가 사라지지 않는 메모리

SDRAM(Synchronous Dynamic RAM) - 클럭 신호와 동기화된 메모리

DDR SDRAM(Double Date Rate SDRAM) - SDRAM보다 더 빠른 메모리

--------------------------------------------------------------

 

DRAM

 DRAM(Dynamic RAM)에서 Dynamic은 '동적의' 라는 의미를 담고 있습니다. 무언가가 변한다는 이야기인데, 이는 메모리에 저장된 데이터가 변한다는(사라지는) 뜻입니다. 설명만 들어보면 전혀 쓸 이유가 없는 메모리 같지만 DRAM은 현재 우리가 쓰고 있는 메모리입니다. 그 이유는 비교적 낮은 소비 전력과, 집적도(더 작고, 빽빽하게)가 높아 대용량으로 설계하기 좋고, 무엇보다 저렴하기 때문입니다.

 

SRAM

 SRAM(Static RAM)에서 Static은 '정적의' 라는 의미를 담고 있습니다. '동적의' 라는 단어와 반대되는 뜻이기 때문에 DRAM은 메모리에 저장된 프로그램이 사라지지 않습니다. SRAM이 일반적으로 많이 사용되지 않는 이유는 DRAM과 완벽히 반대입니다. 하지만 SRAM은 DRAM에 비해 속도가 빠릅니다. 이는 굳이 용량이 클 필요는 없으나 속도가 빨라야 한다는 점에 착안하여 '캐시 메모리' 에서 쓰이게 됩니다.

 

 앞서 '정적의' 와 '동적의' 라는 단어에 익숙해지는 것이 좋습니다. 대표적으로 리버싱 혹은 그 외에서 프로그램을 분석하는 방법은 크게 프로그램의 코드를 뜯어보아 분석하는 정적 분석과 프로그램을 실행하여 분석하는 동적 분석으로 나뉩니다. 그렇기 때문에 이 단어의 이름과 뜻을 익혀두시는게 좋습니다.

 

SDRAM

 SDRAM(Synchronous Dynamic RAM)은 클럭 신호와 동기화된 메모리입니다. DRAM에서 진화한 메모리로, Static RAM과 Dynamic RAM의 합성어가 아닙니다. 컴퓨터구조 2주차에서 알아보았던 클럭 신호에 맞추어 CPU와 정보를 주고받는다는 특징이 있습니다.

 

DDR SDRAM

 DDR SDRAM(Double Date Rate Synchronous RAM)은 SDRAM 앞에 DDR이라는 Double Date Rate가 붙은 것을 보아 무언가를 두 배로 늘렸다는 것을 알 수 있습니다. 여기서 Data Rate는 '대역폭' 이라는 의미로, 대역폭은 '데이터를 주고받는 길의 넓이'를 의미합니다. Data Rate 앞에 Double이 붙은 것을 보아 DDR SDRAM이 두 배로 넓힌 것은 대역폭이라는 것을 알 수 있습니다. 정보를 송수신 하는데에는 통로가 필요합니다. DDR SDRAM은 데이터가 지나다니는 통로를 두 배로 넓힌 메모리입니다.

 

 쇼핑몰에 메모리를 검색해보면 DDR4 16GB 메모리, DDR5 16GB 메모리와 같은 상품들이 노출됩니다. DDR SDRAM은 SDRAM에 비해 두 배 넓은 대역폭을 가졌습니다. 그렇다면 DDR2 SDRAM은 DDR SDRAM에 비해 두 배 넓은 대역폭을 가졌으므로, SDRAM에 비해 4배 넓은 대역폭을 가진 것입니다. 마찬가지로 DDR4 메모리는 SDRAM에 비해 16배 넓은 대역폭을 가진 메모리이며, DDR5 메모리는 SDRAM에 비해 대역폭이 32배 넓은 메모리입니다.

 

6.2 메모리의 주소 공간

지금까지는 '명령어 혹은 데이터를 가져올 때 메모리 주소에 접근한다.' 라고 알아보았습니다. 여기서 막연히 '메모리 주소'를 한 개 라고 생각할 수도 있겠지만, 정확히 말하여 메모리 주소에는 물리 주소논리 주소 두 가지가 있습니다. 먼저 물리 주소와 논리 주소를 정리하면 다음과 같습니다.

 

-------------------------------------------------------------

물리 주소 - 정보가 실제로 저장된 하드웨어상의 주소

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

-------------------------------------------------------------

 

 이 개념이 어려우실 수도 있습니다. 조금 더 쉽게 표현해 보겠습니다. 컴퓨터는 메모리 상에 존재하는 모든 주소와 그 안에 들어있는 정보를 알고 있지 않습니다. 그 이유는 '메모리 관리 장치' 에서 설명해 드리겠습니다. 물리 주소는 메모리 그 자체로 네모난 컨테이너 그 자체입니다. 논리 주소는 그러한 네모난 컨테이너 내부를 구분짓는 가벽입니다. 이렇게 비유해도 뭔가 와닿지 않습니다.

 

*설명을 위해 글이 다소 난잡할 수 있습니다.*

지금까지 알아보았던 컴퓨터 구조를 요리 하는 과정으로 비유하여 다시 한 번 복습해보겠습니다.

 

 메모리는 전기가 공급되지 않으면 그 안에 있는 정보가 싹 날아간다는 것을 알고 있습니다. 반대로 보면 전기가 공급되지 않은 상태에서는 메모리에 어떠한 정보도 저장되어 있지 않다는 뜻입니다. 우리가 주방에서 요리할 때를 생각하여 봅시다. 우리는 냉장고에서 양배추, 당근, 고등어, 삼겹살과 같은 재료들을 꺼내와 도마 위에 올려두고 재료를 손질하고, 그 재료를 냄비에 올리며, 조리합니다.

 

 먼저 냉장고보조기억장치로 비유할 수 있습니다. 양배추, 당근, 고등어, 삼겹살과 같은 재료와 같은 70GB 넘는 프로그램들을 저장하는 아주 큰 냉장고입니다.

 

 양배추, 당근, 고등어, 삼겹살과 같은 재료들은 아직 가공되지 않은 신선한 식재료들입니다. 이 식재료들은 프로그램으로 비유할 수 있습니다. 삼겹살을 생으로 잡고 뜯어먹을 수는 없을 뿐더러 조리과정을 거쳐야 합니다. 프로그램 역시 CPU가 프로그램을 날 것으로 먹으면 용량이 매우 크기 때문에 필요한 정보들만 가져와서 메모리로 전달해야 합니다.

 

 재료들을 냉장고로부터 도마로 꺼내오는 과정과 손질한 재료를 냄비로 올리는 과정시스템 버스를 통해 보조기억장치로부터 자료들이 각각 메모리, CPU로 전달되는 과정으로 비유할 수 있습니다. 도마 위에서 손질된 재료들이 갑자기 냄비 위로 뿅 하고 순간이동되는 것이 아니듯, 데이터와 명령어들은 시스템 버스를 통해 각각 필요한 곳에 전달되기 때문입니다.

 

 그렇다면 도마는 이번에 배운 메모리입니다. 요리를 하지 않을 때에 도마는 비어 있습니다. 마찬가지로, 전원이 공급되지 않을 때의 메모리 역시 비어있습니다. 만약 우리가 3미터 짜리 도마를 사용한다고 생각해봅시다. 세상 어느 누구도 같은 도마의 같은 공간 위에서 야채와 생선, 고기를 함께 손질하지 않습니다. 길이가 긴 3미터짜리 도마인 만큼, 위에 1미터는 야채를 손질하고, 가운데 1미터는 생선을 손질하고, 아래 1미터는 고기를 손질합니다.

 

 메모리 역시 마찬가지입니다. 16GB 크기의 메모리를 사용한다고 생각해봅시다. 크기가 큰 만큼 메모리에서 임의의 공간인 1GB는 워드를 실행하는데에 사용하고, 2GB는 웹 서핑을 하는데에 사용하고, 0.5GB는 게임을 하는데에 사용할 것입니다. 이는 작업 관리자의 프로세스 탭에서 확인할 수 있습니다.

 빨간 네모 칸을 보시면 사용하고 있는 프로그램들이 각각 차지하고 있는 영역을 알 수 있습니다. 여기서 16GB짜리 메모리 그 자체를 물리 주소, 프로그램들이 각각 차지하고 있는 영역을 메모리 주소의 0번지 부터 시작하는 논리 주소입니다.

 

 재료들을 도마 위에 올려둠으로써 프로그램은 각자의 논리 주소를 가졌습니다.

 

 재료들을 손질하고, 조리하는 것은 CPU에서 데이터와 명령어들을 처리하는 것과 같습니다. 레지스터로부터 읽어들인 정보를 제어장치가 해석하고, ALU가 연산하면서 프로그램은 비로소 실행됩니다. 

 

 요리가 완벽하게 끝났으니 사용자는 이 요리를 맛있게 먹으면 되겠네요. 컴퓨터가 열심히 만들어준 프로그램을 재미있게 즐기면 그만입니다.

 

위 비유는 챗GPT의 도움을 일절 빌리지 않았음을 알립니다. 글이 형형색색으로 난잡한 이유는 각각의 조리과정과 컴퓨터의 역할을 대응시키기 위하여 시각적으로 표현을 하기 위함이었습니다.

 

도마와 메모리, 물리 주소와 논리 주소의 관계를 조금이라도 이해하기 쉽도록 표현해보았습니다.

 

 컴퓨터를 구매할 때 메모리의 크기가 좋을수록 뭐가 좋은지 모르시는 분들이 계실 것입니다. 앞서 메모리를 도마에 비유했습니다. 도마는 재료들을 손질해야 하는데 만약 도마가 작다면 야채 손질하고 도마 씻고 냉장고에서 생선 가져오고, 생선 손질하고 도마 씻고 냉장고에서 육류 가져오고, 육류 손질하고 도마를 씻겨야 할 것입니다. 이는 시간적으로 굉장히 비효율적입니다.

 

 메모리 역시 마찬가지입니다. CPU는 계속 메모리에 접근해야 합니다. 하지만 메모리의 크기가 작다면 CPU가 명령어를 처리하는 동안 메모리는 보조 기억 장치에서 정보들을 가져와야 합니다. 당연한 이야기지만 CPU가 명령어 싸이클을 돌리는 시간보다 메모리가 보조 기억 장치에서 정보들을 가져오는 시간이 훠어얼씬 느립니다. 이러한 순환이 계속 반복된다면 CPU가 일하는데 공백이 생길 것이고, 프로그램은 더욱 느려질 것입니다. 그렇기 때문에 메모리는 클 수록 좋다고 합니다.

 

 현재 기준 자신이 문서 작업만 하고, 게임 포토샵 등 무거운 프로그램은 일절 돌리지 않겠다. 라고 하시는 분들은 8GB 메모리로 충분하실 것입니다. 만약 자신이 게임도 하고 포토샵도 쓸건데 돈이 부족하다. 하시는 분들은 16GB 사용하셔도 됩니다. 하지만 게임과 포토샵, 문서 작업을 동시에 다 같이 돌린다면 컴퓨터에 무리가 갈 수 있습니다. 난 부자다 하시는 분들은 32GB 메모리, 그 이상 사용하셔도 무방합니다. 하지만 메모리는 어디까지나 공간이기 때문에 메모리가 너무 크면 남는 공간이 발생하여 비효율적일 수 있으니 주의하시길 바랍니다. 저는 16GB 메모리로 게임, 각종 어도비 편집 툴, 가상머신, 문서 작업 무리 없이 잘 돌리고 있습니다.

 

 

 

 지금까지 알고 있었던 '메모리에 주소를 읽고 쓴다'는 것이 사실은 두 가지의 주소를 말하는 것이었고, CPU와 메모리는 각각 이것을 어떻게 이해하고 있으며, 어떻게 정보를 주고받는 것인지에 대해 의문이 들 수도 있습니다. 우선 메모리는 물리주소를 이해하고, CPU는 논리 주소를 이해하고 있습니다. 만약 위 그림에서 CPU가 "0x00...번지에 'A'를 저장해" 라고 했을 때 메모리는 어디에 저장할까요? 메모리가 이해하고 있는 물리 주소 그 자체에 있는 0x00번지에 저장할까요? 아니면 실행되고 있는 프로그램 3가지 중 어느 프로그램에 'A'를 저장할까요?

 

 메모리가 CPU의 명령을 이해하기 위해서는 논리 주소와 물리 주소간의 변환이 이루어져야 합니다. 그리고 이 변환을 담당하는 장치는 CPU와 주소 버스 사이에 위치하며, 앞서 언급했던 '메모리 관리 장치'(MMU - Memory Management Unit)라는 장치에 의해 변환됩니다.

 

 앞서 MMU에 대해 언급하면서 CPU는 메모리 상에 존재하는 모든 주소, 즉 물리 주소를 알고 있지 않다고 하였습니다. CPU는 논리 주소를 이해하며, 메모리와 원할한 소통을 위해 MMU가 두 주소를 변환하는 것입니다. 그렇다면 두 주소간의 변화는 어떻게 이루어질까요? 그 답은 컴퓨터 구조 2주차에서 알아보았던 레지스터 중 '베이스 레지스터(Base Register)'에서 담당합니다.

 

 지난 시간에 베이스 레지스터의 역할은 '기준 주소, 프로그램의 시작 주소를 저장한다.' 라고 하였습니다. 프로그램의 시작 주소는 예를 들어 위 그림의 메모리에서 실행되는 프로그램 중 워드를 보면 오른쪽에 0x00... 이라고 표현된 것을 알 수 있습니다. 이 '0x00...'이 프로그램의 시작 주소, 즉 논리 주소의 시작 주소입니다.

 

 CPU는 논리 주소를 이해하고 있다고 하였습니다. CPU가 메모리에게 "워드의 70번지 데이터에 'A'를 입력하라"고 가정합시다. 그림에는 표현해놓지 않았지만, 물리 주소상 워드는 3000번지에서 시작되고 있다고 가정해 봅시다. 이 때 MMU의 베이스 레지스터에는 '3000'이라는 값이 저장되어 있습니다. 거기에 CPU의 논리 주소인 '70'을 더하여 메모리에게 물리 주소 '3070번지'라는 정보를 전달합니다. 이렇게 하여 논리 주소와 물리 주소간 변환이 이루어진 것입니다.

 

메모리 보호 기법

 하지만 문제가 있습니다. (앞의 상황은 모두 가정입니다.) 물리 주소상 워드는 3000번지에서 시작되며 1000바이트의 크기를 갖고 있습니다. 즉 물리 주소상 워드의 시작 주소는 3000번지이고, 끝 주소는 4000번지입니다. 그 다음으로 물리 주소상 인터넷의 시작 주소는 4001번지이며, 2000바이트의 크기를 갖고 있습니다. 다시 말하여 끝 주소는 6001번지입니다.

 

 앞서 MMU에 의해 두 주소간 변환이 일어난다고 하였습니다. 만약 CPU가 "워드의 1500번지 데이터부터 1700번지 데이터를 제거하라"고 명령하였습니다. MMU는 4500번지와 4700번지의 물리 주소로 변환하고, 메모리는 명령대로 물리 주소 4500번지와 4700번지 사이의 데이터를 제거합니다. 하지만 물리 주소상 4500번지부터 4700번지는 인터넷이 차지하고 있는 영역입니다. 즉, CPU는 워드의 데이터를 제거하라고 명령했지만 정작 인터넷의 데이터가 지워질 위기에 처했습니다.

 

 이러한 상황을 해결하기 위한 기법이 메모리 보호 기법입니다. 다른 프로그램의 영역 침범을 저지하기 위하여 '한계 레지스터(Limit Register)'가 이를 담당합니다. 한계 레지스터는 프로그램의 크기를 담고 있습니다. 워드의 크기는 1000바이트 라고 했을때 한계 레지스터에는 1000이라는 정보가 들어갑니다. 레지스터에는 프로그램의 시작 주소를 알 수 있는 베이스 레지스터가 있지만, 프로그램의 끝 주소를 알 수 있는 레지스터는 없으며, 필요가 없습니다. 끝 주소는 다음과 같이 나타낼 수 있습니다.

 

프로그램의 끝 주소 = 베이스 레지스터 + 한계 레지스터

 

 앞서 워드를 예시로, 워드의 시작 주소는 3000번지이고, 한계 레지스터에는 1000이라는 숫자가 들어가 있습니다. 이로인해 프로그램의 끝 주소는 4000이라는 것을 CPU와 메모리는 알 수 있습니다. 베이스 레지스터와 한계 레지스터를 더한 값이 MMU가 전달한 물리 주소보다 작다면 그 명령어는 실행되지 않아야 합니다. 즉 인터럽트를 일으켜 명령어의 실행을 중단합니다. 이러한 방식으로 메모리 상에서 프로그램간 영역 침범이 일어나지 않도록 보호합니다.

 

6.3 캐시 메모리

 CPU는 메모리에 자주 접근합니다. 앞서 설명했듯 CPU가 연산하는 속도가 CPU에서 메모리까지 정보들을 가져오는 시간보다 훨씬 빠릅니다. 그래서 사람들은 메모리보다 더 가까운 위치에 저장장치를 하나 더 만들게 됩니다. 이것이 '캐시 메모리(Cache Memory), 소형 고속 기억 장치' 입니다.

 

저장 장치 계층 구조

 지금까지 알아본 저장 장치는 레지스터, 캐시 메모리, 주기억장치, 보조기억장치 이렇게 존재합니다. 각 기억 장치들을 나열한 순서는 CPU에서 가까운 순서입니다. 기억 장치의 특징은 CPU에 가까울 수록 빠른 속도와 작은 용량, 비싼 가격입니다.

 

캐시 메모리

 앞서 SRAM은 DRAM에 비해 속도가 빠르고, 비싸며 용량이 작다고 하였습니다. 이는 저장 장치 계층 구조에서 상위 계층에 속하는 조건과 완벽하게 부합합니다. 이 점에서 SRAM은 캐시 메모리로 쓰이게 되었습니다. 레지스터보다 큰 용량이지만 CPU와 가까운 거리로 인해 프로그램의 더 빠른 실행이 가능해졌습니다. 캐시 메모리는 이 중에서 L1 캐시, L2 캐시, L3 캐시로 나뉩니다. 여기서 L은 Level을 의미하며, 숫자가 낮을 수록 저장 장치 계층이 높은 저장 장치입니다. 이들의 용량 역시 작업 관리자의 성능 탭에서 확인이 가능합니다.

각 캐시의 용량을 보면 숫자가 낮을수록 낮은 용량을 갖고 있으며, L3 캐시라도, GB의 단위를 갖고있는 메모리에 비해 한없이 작은 용량을 갖고 있음을 알 수 있습니다.

 

참조 지역성의 원리

 하지만 의심이 듭니다. 저렇게 큰 프로그램을 실행하는데 고작 512KB의 용량으로 커버가 될 지 의심이 듭니다. 캐시의 특징은 CPU가 사용할만한 정보들을 예측하여 저장합니다. CPU가 자주 사용할 것으로 예측한 정보들이 실제로 CPU가 필요한 정보인 경우를 '캐시 히트(Cache Hit)'라고 합니다. 추가로 캐시 메모리의 예측이 틀렸다면 '캐시 미스(Cache Miss)'라고 합니다. 만약 캐시 미스가 발생할 경우 CPU는 메모리로부터 직접 정보들을 가져옵니다. 이렇게 된다면 프로그램의 실행 속도가 느려질 수 밖에 없습니다. 그렇기 때문에 캐시 메모리의 캐시 히트의 비율인 '캐시 적중률(Cache Hit Ratio)'을 올리기 위하여 한 가지의 원칙을 만듭니다. 이것이 바로 참조 지역성의 원리(Locality od Reference, Principle od Locality) 입니다.

 

 참조 지역성의 원리는 다음과 같은 조항을 내포하고 있습니다.

 

---------------------------------------------------------------------------------

- CPU는 최근에 접근했던 메모리 공간에 다시 접근하려는 경향이 있다.

- CPU는 접근한 메모리 공간 근처를 접근하려는 경향이 있다.

---------------------------------------------------------------------------------

 

 먼저 첫 번째 조항에 대해 알아봅시다. 우리는 코딩할 때 대부분 이미 선언된 변수를 계속해서 사용합니다. 심지어 반복문을 사용해서 사용된 변수들을 계속해서, 심지어 무한으로 사용합니다. 이처럼 최근에 접근했던 메모리에 다시 접근하려는 경향을 '시간 지역성(Temporal Locality)'라고 합니다.

 

 두 번째 조항은 '공간 지역성(Spatial Locality)'라고 하는데, 그 이유는 프로그램이 실행될 때 필요한 기능들은 모여서 저장됩니다. 만약에 우리가 게임을 하고 있다면 CPU는 게임 관련된 정보들을 처리하고 있기 때문에 게임이 차지하고 있는 메모리 공간 근처를 접근할 것 이라는 내용입니다.

 

 여담으로, 캐시 적중률의 계산 식은 다음과 같습니다.

 

--------------------------------------------------------

캐시 히트 횟수 / (캐시 히트 횟수 + 캐시 미스 횟수)

--------------------------------------------------------

 

 현재의 캐시 적중률은 약 85% ~ 95%라고 합니다.

 

 

 

7. 보조기억장치

7.1 보조기억장치의 종류

플래시 메모리

 보조기억장치는 여러분들이 가장 많이 들어보고, 컴퓨터를 구매하는데 결정적인 요소인 용량과 관련있는 장치입니다. 보조기억장치는 크게 플래시 메모리와 하드 디스크로 나뉩니다. 먼저 플래시 메모리입니다. 플래시 메모리는 반도체 기반의 저장 장치로, 전기적으로 데이터를 읽고 씁니다. 또한 플래시 메모리는 오늘날 개인용 컴퓨터에서 많이 쓰이는 USB 메모리, SD 카드, SSD로 사용되는 보조기억장치 입니다. 

 

플래시 메모리의 구조

 플래시 메모리는 '셀(Cell)' 이라는 가장 작은 정보 단위부터 시작합니다. 셀들이 모여서 MB, GB와 같은 크기의 저장 장치가 되는 것입니다. 이때 이 셀에 몇 비트를 저장할 수 있는가에 따라서 SLC(Single Level Cell). MLC(Multiple Level Cell), TLC(Triple Level Cell)로 나뉩니다. 셀에 몇 비트를 저장할 수 있는가에 따라, 저장할 수 있는 비트가 많아질 수록 수명이 짧아지고, 속도가 느려지며, 가격이 낮아집니다.

 

 플래시 메모리에서 셀이 모이면 페이지(Page), 페이지가 모이면 블록(Block), 블록이 모이면 플레인(Plain), 플레인이 모이면 다이(Die)라고 합니다. 플래시 메모리에서 읽기와 쓰기 단위는 페이지에서 이루어 지지만, 삭제는 페이지보다 큰 단위로 실행됩니다.

 

 페이지는 Free, Valid, Invalid와 같이 3가지 상태를 가질 수 있습니다. 각 상태의 정보는 다음과 같습니다.

 

---------------------------------------------------------

Free - 데이터를 저장하고 있지 않음, 새로운 데이터를 저장할 수 있다.

Valid - 유효한 데이터를 저장하고 있다.

Invalid - 유효하지 않은 데이터(쓰레기 값)을 가지고 있다.

---------------------------------------------------------

 

하드 디스크

 하드 디스크는 아마 고등학교 물리학 시간에 한 번 쯤은 들어보셨을 것입니다. 아마 강자성체의 원리를 이용하여 정보를 저장한다고 배웠던 것 같은데, 이러한 방식 때문에 하드 디스크를 '자기 디스크' 라고 부르기도 합니다.

 

 하드 디스크는 플래터, 스핀들(Spindle), 헤드(Head), 디스크 암(Disk Arm)으로 구성되어 있습니다. 각 부품들의 역할은 다음과 같습니다.

 

------------------------------------------------------------------------

플래터(Platter) - 정보가 저장되는 원판 모양의 공간

스핀들(Spindle) - 원판 모양의 플래터를 회전시키는 부품

헤드(Head) - 데이터를 읽고 쓰는 부품, 플래터 위에 미세하게 떠 있습니다.

디스트 암(Disk Arm) - 헤드를 원하는 위치로 이동시켜 줍니다.

------------------------------------------------------------------------

 

 약간 LP플레이어와 비슷한 느낌인 것 같습니다. 하지만 하드 디스크는 LP판에 비해 더 많은 정보를 저장해야 하기 때문에 여러개의 플래터와 헤드로 구성되어 있습니다.

 

플래터 구성 요소

 앞서 플래터에 정보가 저장된다고 하였습니다. 플래터는 '트랙'과 '섹터'라는 단위로 데이터를 저장합니다. 동그란 원판을 점차 지름이 커지도록 나누어봅시다. 그리고 그 원판을 등분 내봅시다. 그렇네 나누어진 작은 조각을 '섹터'라고 부르고, 섹터가 모여서 원이 된 것을 '트랙'이라고 부릅니다. 플래터는 한 개의 하드 디스크 내에 여러개 존재한다고 하였습니다. 그렇기 때문에 트랙 역시 여러개가 됩니다. 트랙이 여러개 모이면 '실린더'라고 부릅니다.

 

 사람들은 더욱 빠른 컴퓨터를 원한다고 하였습니다. 하지만 하드 디스크는 정보를 가져오고, 데이터에 접근하는데에 크게 탐색 시간(Seek Time), 회전 지연(Rotational Latency), 전송 시간(Transfer Time)으로 나뉩니다. 하드 디스크에서 정보를 찾아오는데 이 세 가지 과정을 전부 거쳐야 하며, 각 단계별 시간 또한 만만치않게 오래 걸립니다.

 

7.2 RAID의 정의와 종류

RAID(Redundant Array of Independent Disks)란 여러개의 보조기억장치를 이용하여 데이터들을 안전하고 효율적으로 보관할 수 있는 기술입니다. RAID는 구성 방법에 따라 RAID 레벨로 나뉘는데 RAID0, RAID1, RAID2 ... RAID6, RAID10, RAID50 등이 있습니다.

 

RAID0

 RAID0은 그저 여러개의 보조기억장치에 하나의 데이터를 여러개로 분산시켜 저장한 방식입니다. 1TB의 보조기억장치 4개를 연결시켜 구성하였을 때 4TB 보조기억장치 하나보다 효율은 더 뛰어나게 됩니다. 같은 정보를 빼오더라도 한 개의 보조기억장치에서 빼오는 것 보다 여러개의 보조기억장치에서 정보를 빼오는 것이 더 빠르기 때문입니다. 하지만 이 구성 방식에는 문제가 있습니다. 바로 데이터의 안전성이 보장되지 않는다는 점입니다. RAID0은 하나의 데이터를 여러개로 분산시켜서 보조기억장치에 저장한다고 하였습니다. 이는 여러개 중 하나의 보조기억장치가 고장나면 그 데이터 전체를 쓰지 못한다는 의미입니다.

 

RAID1

 RAID0의 데이터 안전성 문제를 해결하기 위해 RAID1 구성 방식이 만들어졌습니다. RAID1은 복사본을 만드는 방식으로, 완전히 같은 복사본을 만든다는 특징이 있습니다. 그렇기 때문에 안전한 복구와 데이터를 보장하지만, 완전히 같은 복사본을 만든다는 특징 때문에 RAID0 방식보다 두배 적은 용량을 갖게 됩니다.

 

RAID4

 RAID4 부터는 패리티 비트(Parity Bit)라는 '오류를 검출하고 복구하기 위한 정보'가 등장하게 됩니다. RAID4는 RAID1 처럼 완전한 복사본을 만드는 대신 이를 패리티 비트에 저장하여 다른 장치들의 오류를 검출하고 복구합니다. 그렇기 때문에 RAID1에 비해 더 많은 하드 디스크를 이용할 수 있게 됩니다.

 

RAID5

 하지만 RAID4에는 각 하드 디스크에 데이터를 썼을 때 패리티를 저장하는 디스크에는 그 만큼의 데이터가 한꺼번에 저장되어 병목현상이 발생되는 문제점이 있습니다. RAID5는 패리티 정보를 각 하드 디스크에 분산하여 RAID4의 병목 현상을 해결하였습니다.

 

RAID6

 RAID6은 RAID5 처럼 패리티 디스크를 분산하여 저장하였으나 서로 다른 두 개의 패리티를 두는 구성 방식입니다. 즉 오류를 검출하고, 복구할 수 있는 수단을 더 늘림으로써 더욱 확실한 데이터 안전성과 복구를 위한 구성이 되었습니다. 그러나 저장할 패리티가 두 개이므로, 쓰기 속도가 느려지기 때문에 저장 속도가 느려집니다. 더욱 안전한 데이터 안전을 위해 쓰이는 구성 방식입니다.

 

RAID10, RAID50

 RAID10과 RAID50은 각각 RAID1과 RAID0을 합한 방식이고, RAID5와 RAID0을 합한 방식입니다. 각 RAID마다 장단점이 있으므로 사용자가 데이터의 안전성을 원하는지 혹은 빠른 속도를 원하는지에 따라 하드 디스크의 구성 방식이 바뀔 수 있습니다.

 

 

 

8. 입출력장치

 컴퓨터 구조 첫 번째 글에서 입출력장치는 마우스, 키보드, 프린터기, 모니터와 같은 입출력을 담당하는 장치라고 하였습니다. 저희는 지금까지 컴퓨터의 내부 구성요소에 대하여 살펴보았습니다. 그렇기 때문에 컴퓨터는 클럭 주기에 맞추어 각각의 역할을 처리한다고 알고 있습니다. 그렇다면 컴퓨터에 외부 입출력장치가 더해진다면 그들 역시 클럭 주기에 맞추어 작동할까요? 게다가 한 컴퓨터에 입출력되는 장치는 당장에 모니터, 마우스, 키보드, 스피커 등 너무 많습니다. 각자가 주고받는 정보들은 CPU는 어떻게 이해할까요? 마지막으로 CPU와 입출력장치의 데이터 전송 속도간의 차이는 어떻게 극복할까요?

 

장치 컨트롤러

 이러한 문제를 해결하고자 장치 컨트롤러(Device Controler)가 만들어졌습니다. 입출력장치는 직접 컴퓨터에 연결되는 것이 아닌 장치 컨트롤러라는 하드웨어를 통해 연결됩니다. 장치 컨트롤러는 CPU와 입출력장치 간 통신 중계의 역할과 오류 검출, 데이터 버퍼링의 문제를 해결하기 위해 수행됩니다.

 

 

 

부록

기본 숙제

혼자 공부하는 컴퓨터 구조 + 운영체제 p.185 확인문제 3번, p.205의 확인문제 1번 풀고 인증하기

 

먼저 p.185 확인문제 3번 입니다.

더보기

다음 설명을 읽고 SRAM에 대한 설명인지 DRAM에 대한 설명인지 쓰세요.

 

보기 - SRAM, DRAM

 

- 주로 캐시 메모리로 활용됩니다. (1)

- 주로 주기억장치로 활용됩니다. (2)

- 대용량화하기 유리합니다. (3)

- 집적도가 상대적으로 낮습니다.(4)

정답

- 주로 캐시 메모리로 활용됩니다. (SRAM)

- 주로 주기억장치로 활용됩니다. (DRAM)

- 대용량화하기 유리합니다. (DRAM)

- 집적도가 상대적으로 낮습니다.(SRAM)

 

풀이 과정은 위 RAM의 특징과 종류에서 설명하였으니 참고 바랍니다.

 

다음으로 p.205의 확인문제 1번 입니다.

더보기

다음 보기에 있는 저장 장치들로 저장 장치 계층 구조 도식도를 채우세요.

 

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

 

(1) > (2) > (3) > (4)

정답

(레지스터) > (캐시 메모리) > (메모리) > (보조기억장치)

 

풀이과정

 CPU에 가까운 저장 장치일수록 빠른 성능과 높은 가격, 낮은 용량의 특징을 갖는다고 하였습니다. 그렇기 때문에 답은 위와 같습니다.

 

 

추가 숙제 - RAID의 정의와 종류를 간단히 정리해보기

 

7.2 RAID의 정의와 종류 항목 참고 바랍니다.