이 포스트는 널널한 개발자님의 강의를 듣고 작성한 글입니다.
메모리의 오버레이와 스왑 자체가 Virtual Memory System을 이야기하고자 하는 초석이다. 핵심은 바로 다음과 같다. 어떤 C언어로 작성된 S/W가 있고 C언어는 CPU가 알아들을 수 있게 번역하여 기계어로 만들어 주는데 기계어 코드가 프로세스 내의 모듈이 되고 메모리의 OS영역, 공통모듈영역(DLL)을 제외한 사용자 영역에 집어넣어서 하는 것이 연산의 실행이다.
문제는 OS는 옛날에 MS-DOS를 썼는데 이때 시절 OS는 역할이 단순 I/O해주는 거 외에는 별거 없었다. 그러다보니 S/W 개발자가 모든 처리를 직접하는 일이 많았다. 중요한 것은 기계어를 사용자 영역에 로드하여 작동되다가 그 프로그램을 끝내고 다른걸 실행하려고 하면 메모리 용량이 옛날에는 640KB로 너무 작아서 그 프로그램이 쓰던 메모리를 clear하고 그 다음 프로그램을 로딩해서 집어 넣는 형식이였다. 그러니까 메모리 위에 메모리가 overwrite되어 겹겹이 쌓인다. 이걸 메모리의 오버레이라고 한다.
그래서 이런 부분들이 문제가 되다보니까 나중에는 RAM이 작아가지고 프로그램을 실행 못하는 이런 일이 있었고 옛날에는 이걸 HDD와 연동하여 RAM에 있는걸 잠시 HDD에 보내고 HDD의 정보를 RAM에 가져와 실행하는 이 과정들을 반복하였는데 여기서 나오는 말이 스왑이다.
HDD같은 2차메모리에 스왑영역을 두어서 스왑영역 + RAM = 실제 PC가 쓸 수 있는 메모리 공간이라 했으며 RAM에서 HDD로 내보내는 걸 스왑 아웃 그 반대를 스왑인이라고 한다.
스왑인은 뭔가 실제러 CPU한테 연산할 수 있도록 빨리 정보를 주니까 그래서 스왑인을 하는거고 잘 안쓰이는 프로그램은 HDD로 빼는게 스왑아웃이다. 여기서 스왑인은 가상메모리 이야기할때 페이지인과 같은 개념이고 스왑아웃은 페이지 아웃과 같은 개념이다.
최대 절전모드는 RAM 메모리에 정보가 들어가져 있는데 이걸 그냥 HDD에 저장해가지고 전원이 꺼져도 다시 킬 때 작업했던 상태를 복구할 수 있는데 바로 그 이유다. 여기서 RAM 전체 메모리가 HDD에 들어가는게 아니라 사용되고 있는 용량만큼만 들어간다.
옛날에는 스왑인, 스왑아웃 이 과정들이 자주 벌어졌는데 이래서 SSD가 등장하고 체감속도가 급상승되었다. 그 이유가 스왑아웃할 때 SSD에 write가 일어나는데 HDD는 트랙 섹터로 자기판을 돌아서 정보를 가져오는 방면 SSD는 전자로 빠르게 치고나가기 때문에 I/O과정에서 속도 급상승이 컴퓨터 속도가 급상승으로 이어온 것이다.