윈도우즈 시스템 프로그래밍이라는 책과 해당 책의 저자이신 윤성우님의 강의를 통해 공부한 내용을 정리하는 글입니다.윈도우즈 시스템 프로그래밍이라는 책과 해당 책의 저자이신 윤성우님의 강의를 통해 공부한 내용을 정리하는 글입니다.
메모리의 범위와 종류
⦁ 메인 메모리(Main Memory)
우리는 메인 메모리라고 하면 가장 먼저 램(RAM, D-RAM 계열)을 떠올리지만, 메인 메모리와 램 사이에는 등호 관계가 성립되지 않는다. 하지만 거의 모든 컴퓨터가 메인 메모리로 램을 사용하므로 동일한 의미로 사용한다.
⦁ 레지스터(Register)
CPU 안에 내장되어 연산을 위한 저장소로 사용된다.
⦁ 캐쉬(Cache)
캐쉬는 D램보다 빠른 S램으로 구성한다. 이 캐쉬는 CPU와 램 사이에서 중간 저장소 역할을 하는 메모리다.
캐쉬 메모리는 원래 CPU의 일부로 존재하는 메모리 개념이 아니라 CPU에 근접해 있는 메모리 개념이다.
CPU를 디자인하는 과정에서 함께 디자인되어 하나로 제품화되는 것이다. 즉, CPU 옆에 붙어 있다는 뜻이다.
⦁ 하드디스크(Hard Disk)와 이외의 저장 장치들
하드디스크는 파일을 저장하는 용도로도 사용되지만, 프로그램 실행에 있어서도 중요한 의미를 가진다.
그 밖에도 SD카드, CD-ROM과 같은 I/O 장치도 메모리에 해당된다.
메모리 계층 구조(Memory Hierarchy)
프로그램이 실행되는 중에 메모리의 역할은 데이터의 입출력이다.
가장 큰 차이점은 CPU를 기준으로 얼마나 멀리 떨어져 있는지이다. 즉, CPU와 가까울수록 빠른것이다. 물론 물리적 특성도 존재한다.
레지스터는 CPU안에 존재하고, 그 다음으로 가까운 것은 캐쉬이고, 그 다음이 메인 메모리이다. 가장 멀리 떨어진 것은 하드 디스크이다.
CPU의 레지스터 접근은 별다른 절차가 없지만, 메인 메모리에 접근하기 위해서는 버스를 거치는 등 몇몇 복잡한 과정이 있으므로 그만큼 더 느리다.
그렇다면 상대적으로 느린 메모리를 사용하지 말고, 캐쉬 메모리만 대용량으로 사용하는게 더 좋지 않을까 싶기도 하지만, CPU 근처로 대용량 메모리를 가져 갈수록 기술적인 문제도 발생하고 비용도 많이 든다. 예를들어 하드디스크 용량을 수십 기가바이트 늘리는 것보다 캐쉬 메모리 1MB 늘리는 데 드는 비용이 훨씬 크다.
가장 위에 있는 레지스터는 크기가 가장 작지만 가장 빠르다. 그 다음은 L1 캐쉬와 L2 캐쉬가 있다. L1 캐쉬가 CPU에 더 근접해 있다. 그 다음은 메인 메모리, 마지막은 하드디스크이다. 가장 크고 가장 느리다.
⦁ 하드디스크에 있는 내용은 프로그램의 실행을 위해 메인 메모리로 이동한다.
⦁ 메인 메모리에 있는 데이터 일부도 실행을 위해서 L2 캐쉬로 이동한다.
⦁ L2 캐쉬의 데이터 일부는 L1 캐쉬로 이동하고
⦁ L1 캐쉬에 있는 데이터 중 연산에 필요한 데이터가 레지스터로 이동한다.
⦁ 즉, 모든 메모리의 역할이 피라미드 구조에서 자신보다 아래에 있는 메모리를 캐쉬하기 위해서 존재한다.
역순으로,
⦁ 연산에 필요한 데이터가 레지스터에 존재하지 않는다면 L1 캐쉬를 확인한다.
⦁ L1 캐쉬도 가지고 있지 않다면, L2 캐쉬를 확인한다.
⦁ 이곳에도 없다면 메인 메모리를 확인한다.
⦁ 그럼에도 존재하지 않다면 결국 하드디스크에서 읽어들인다.
하드디스크에서 데이터를 읽어 들일 경우엔 바로 레지스터로 이동하는 것이 아닌, 메인 메모리를 거쳐서, 캐쉬들을 거쳐서 레지스터에 도달하는 것이다.
이 경우를 단편적으로 생각했을 때는 캐쉬 메모리가 없는 편이 더 접근 속도가 빠르다고 느낄 수 있다.
하지만, 메인 메모리를 제외한 L1, L2 캐쉬에 연산에 필요한 데이터가 존재할 확률이 90% 이상이다. 여기에 메인 메모리까지 포함시키면 확률은 더욱 높아진다.
'윈도우즈 시스템 프로그래밍' 카테고리의 다른 글
윈도우즈 시스템 프로그래밍 16장 - 가상 메모리(Virtual Memory) (0) | 2021.08.08 |
---|---|
윈도우즈 시스템 프로그래밍 16장 - 캐쉬와 캐쉬 알고리즘 (0) | 2021.08.08 |
윈도우즈 시스템 프로그래밍 15장 - 쓰레드 풀링(Pooling) (0) | 2021.08.08 |
윈도우즈 시스템 프로그래밍 14장 - 타이머 기반 동기화 (0) | 2021.08.06 |
윈도우즈 시스템 프로그래밍 14장 - 실행순서에 있어서의 동기화 / 이벤트 더하기 뮤텍스 (0) | 2021.08.06 |