01. 프로그램은 디스크 → 메모리 → CPU 순으로 진행된다!
•
기억 장치에 저장되어 있는 프로그램을 차례로 읽어 들인 후 컴퓨터를 실행시킨다. 이 실행 방식을 내장 프로그래밍 방식이라고 한다.
•
PC에서 가장 중요한 기억 장치는 메모리와 디스크인데, 디스크에 기억된 프로그램은 메모리에 읽어 들인 후 실행된다. 디스크의 프로그램을 그대로 실행할 수는 없다.
•
이는 프로그램의 내용을 해석하여 실행하는 CPU는 자신이 가진 프로그램 카운터를 이용해서 메모리의 어드레스를 지정하고 그곳으로부터 프로그램을 읽어내도록 제작되었기 때문이다.
02. 디스크의 액세스 속도를 증가시키는 ‘디스크 캐시’
•
디스크 캐시란 일단 디스크로부터 읽은 데이터를 보존해 두는 메인 메모리의 영역을 지칭한다. 이후 같은 데이터를 읽어야 한다면 디스크 캐시 안의 내용을 읽으면 된다.
03. 디스크를 메모리처럼 사용하자! ‘가상 메모리’
•
가상 메모리란 디스크의 일부를 가상의 메모리처럼 사용하는 것이다. 디스크 캐시가 가상의 디스크를 지칭하는 것처럼 가상 메모리는 실제로는 디스크인 가상의 메모리를 지칭한다.
•
가상 메모리를 사용하면 메모리가 부족한 경우에도 크기가 큰 프로그램을 실행할 수 있다. 그러나 CPU는 메모리에 불러온 프로그램만 실행할 수 있기 때문에 실제 실행되는 부분은 메모리 안에 있어야 한다.
•
실제 메모리의 내용과 디스크의 가상 메모리의 내용을 부분적으로 스왑해가면서 프로그램을 실행시켜야 한다.
•
가상 메모리를 구현하기 위한 방식으로 페이징과 세그먼트 방식이 있다.
◦
페이징은 실행되는 프로그램을 그 구조와 관계없이 일정한 크기의 페이지로 분할한 후에 페이지 단위로 메모리와 디스크의 내용을 바꾸는 것이다.
04. 메모리를 절약하는 프로그래밍 기법
•
메모리 부족을 해결하기 위해 가상 메모리를 사용하는 경우, 페이지 인, 페이지 아웃이 발생하면서 병목 현상으로 인해 프로그램이 느려지곤 한다.
•
근본적으로 해결하려면 실제 메모리의 용량을 늘리거나 실행되는 애플리케이션의 크기를 줄이는 등의 작업이 필요하다.
◦
DLL 파일로 함수를 공유하는 방법
◦
_stdcall 호출을 통해 프로그램의 크기를 줄이는 방법
05. 디스크의 하드웨어적인 구조를 알아보자!
•
디스크는 그 표면을 몇 개의 영역으로 나누어 사용하는데, 일반적으로 영역을 나누는 방법에는 섹터 방식과 일정하지 않은 길이로 영역을 나누는 가변 방식이 있다.
•
섹터 방식에서 디스크의 표면을 동심원으로 나눈 영역은 트랙, 트랙을 일정한 길이로 나눈 영역은 섹터라고 부른다.
•
섹터는 디스크를 물리적으로 판독하고 기록하는 최소 단위가 되는데, 윈도우에서 사용하는 디스크에서 1섹터를 512바이트로 하는 것이 일반적이다.