////
Search
Duplicate
🥋

Chapter 05. 메모리와 디스크의 친밀한 관계

01. 프로그램은 디스크 → 메모리 → CPU 순으로 진행된다!

기억 장치에 저장되어 있는 프로그램을 차례로 읽어 들인 후 컴퓨터를 실행시킨다. 이 실행 방식을 내장 프로그래밍 방식이라고 한다.
PC에서 가장 중요한 기억 장치는 메모리와 디스크인데, 디스크에 기억된 프로그램은 메모리에 읽어 들인 후 실행된다. 디스크의 프로그램을 그대로 실행할 수는 없다.
이는 프로그램의 내용을 해석하여 실행하는 CPU는 자신이 가진 프로그램 카운터를 이용해서 메모리의 어드레스를 지정하고 그곳으로부터 프로그램을 읽어내도록 제작되었기 때문이다.

02. 디스크의 액세스 속도를 증가시키는 ‘디스크 캐시’

디스크 캐시란 일단 디스크로부터 읽은 데이터를 보존해 두는 메인 메모리의 영역을 지칭한다. 이후 같은 데이터를 읽어야 한다면 디스크 캐시 안의 내용을 읽으면 된다.

03. 디스크를 메모리처럼 사용하자! ‘가상 메모리’

가상 메모리란 디스크의 일부를 가상의 메모리처럼 사용하는 것이다. 디스크 캐시가 가상의 디스크를 지칭하는 것처럼 가상 메모리는 실제로는 디스크인 가상의 메모리를 지칭한다.
가상 메모리를 사용하면 메모리가 부족한 경우에도 크기가 큰 프로그램을 실행할 수 있다. 그러나 CPU는 메모리에 불러온 프로그램만 실행할 수 있기 때문에 실제 실행되는 부분은 메모리 안에 있어야 한다.
실제 메모리의 내용과 디스크의 가상 메모리의 내용을 부분적으로 스왑해가면서 프로그램을 실행시켜야 한다.
가상 메모리를 구현하기 위한 방식으로 페이징과 세그먼트 방식이 있다.
페이징은 실행되는 프로그램을 그 구조와 관계없이 일정한 크기의 페이지로 분할한 후에 페이지 단위로 메모리와 디스크의 내용을 바꾸는 것이다.

04. 메모리를 절약하는 프로그래밍 기법

메모리 부족을 해결하기 위해 가상 메모리를 사용하는 경우, 페이지 인, 페이지 아웃이 발생하면서 병목 현상으로 인해 프로그램이 느려지곤 한다.
근본적으로 해결하려면 실제 메모리의 용량을 늘리거나 실행되는 애플리케이션의 크기를 줄이는 등의 작업이 필요하다.
DLL 파일로 함수를 공유하는 방법
_stdcall 호출을 통해 프로그램의 크기를 줄이는 방법

05. 디스크의 하드웨어적인 구조를 알아보자!

디스크는 그 표면을 몇 개의 영역으로 나누어 사용하는데, 일반적으로 영역을 나누는 방법에는 섹터 방식과 일정하지 않은 길이로 영역을 나누는 가변 방식이 있다.
섹터 방식에서 디스크의 표면을 동심원으로 나눈 영역은 트랙, 트랙을 일정한 길이로 나눈 영역은 섹터라고 부른다.
섹터는 디스크를 물리적으로 판독하고 기록하는 최소 단위가 되는데, 윈도우에서 사용하는 디스크에서 1섹터를 512바이트로 하는 것이 일반적이다.