메모리에 대해
본인 초딩 시절 카트라이더을 하는데 너무 렉이 심해서, 어떻게 해야하지 알아보다 램을 사서 끼웠던 기억이 있다.
요즘이야 램이 기본적으로 기가 단위지만, 그 당시(2000년대 초중 반)는 하드 10 ~ 25기가에 램은 256MB ~ 512MB가 일반적이었다.
그 후에도, 학창시절 당시 신작 게임들(아이온,마영전 같은)이 출시되면 꼭 플레이 했었는데, 렉이 걸리거나 실행이 안되면, 한번 해보겠다고 그래픽카드도 바꿔보고, 드라이버도 업데이트하고, 포맷도 하는 등 다양한 시도를 했었던 기억이 난다.
그때 메모리가 부족해서 게임이 꺼지기도 가상메모리 사이즈를 올리라는 경고도 봤던 기억이 나는데, 글의 주제와 연관성이 있어 적어봤다 ㅎㅎ.
메모리란?
컴퓨터의 핵심 부품은 4가지로 CPU, 주 기억장치, 보조 기억장치, 입출력장치이다.
하드웨어에서의 메모리란 주기억장치(RAM)을 의미한다.
- CPU: 중앙처리장치(Central Processing Unit)로, 연산 및 제어 기능을 담당
- 주기억장치:
- RAM(Random Access Memory): 메모리는 주로 RAM을 지칭하며, 읽기와 쓰기가 모두 가능하며, 빠른 속도로 데이터에 접근가능한 휘발성 메모리
- ROM(Read Only Memory):
- 컴퓨터 부팅에 필요한 펌웨어, BIOS(Basic Input/Output System) 등을 저장하는 데 사용하는 읽기 전용 비휘발성 메모리
- 메인보드내에 위치
- 보조기억장치: 하드디스크, SSD(Solid State Drive), USB 메모리 등이 포함되며, 대용량의 데이터를 영구적으로 저장할 수 있는 비휘발성 메모리
- 입출력장치: 키보드, 마우스, 스피커, 프린터...
RAM(Random Access Memory)의 의미는 어떤 메모리 주소에 접근(random access)하더라도 동일한 시간의 읽고 쓰기가 보장되는 것을 의미한다(하드디스크와 같은 자기 디스크의 경우 데이터가 저장된 주소에 따라 접근하는 시간이 다름).
램에도 DRAM, SRAM, HBM등 종류가 다양한데(잘모름), 기본적인 동작원리는 내부의 트랜지스터로 전기 흐름을 제어 하여 데이터를 저장(전류가 흐를 때를 1, 전류가 흐르지 않을 때를 0)하는 부분일 것이다.
휘발성인 이유는 전기적 신호로 데이터를 저장하기에 전원 종료시(전기 차단) 전부 0이 되기 때문이고, 보조기억장치들은 데이터를 물리적으로 저장하기에 전기가 차단되어도 휘발되지 않는다.
가상 메모리(Virtual Memory)
가상 메모리 기술이 도입되기 이전에는 프로그램을 실행하기 위해서는 프로그램 전체가 물리적인 메모리에 한 번에 로드되어야 했다.
가상 메모리 기술은 하드디스크의 일부를 가상 메모리로 사용하여 프로그램 실행에 필요한 부분만 물리적인 메모리에 로드하고, 나머지는 가상 메모리에서 관리하는 기술로 물리적인 메모리보다 큰 용량의 메모리를 사용하는 것처럼 프로그램을 실행할 수 있게 한다.
프로세스에서 사용되는 메모리 주소는 가상 메모리 주소이며, 메모리 관리 장치(Memory Management Unit)가 이를 실제 물리 메모리 주소로 변환한다.
핵심 개념은 5가지다.
- 가상 주소 공간(Virtual Address Space):
- 각 프로세스는 자신만의 독립적인 가상 주소 공간을 가짐
- 가상 주소 공간은 실제 물리 메모리보다 클 수 있음
- 페이징(Paging):
- 가상 주소 공간과 물리 메모리를 일정한 크기의 블록(페이지)으로 나누어 관리하는 기술
- 가상메모리의 주소 데이터들을 일정한 크기의 블록으로 쪼게 놓은걸 페이지(Page)
- 물리메모리의 주소 데이터들을 일정한 크기의 블록으로 쪼게 놓은걸 프레임(Frame)
- 프로세스의 가상 주소 공간은 페이지 단위로 물리 메모리에 매핑
- 가상 주소 공간과 물리 메모리를 일정한 크기의 블록(페이지)으로 나누어 관리하는 기술
- 페이지 테이블(Page Table):
- 가상 주소와 물리 주소 간의 매핑 정보를 저장하는 자료구조
- 각 프로세스는 자신의 페이지 테이블을 가짐
- 페이지 테이블을 통해 가상 주소를 물리 주소로 변환
- 요구 페이징(Demand Paging):
- 프로세스 실행에 필요한 페이지를 실제로 사용할 때 메모리에 로드하는 기법
- 초기에는 프로세스의 모든 페이지를 메모리에 로드하지 않고, 필요한 페이지만 로드
- 페이지 폴트(Page Fault):
- 프로세스가 접근하려는 페이지가 물리 메모리에 없을 때 발생하는 인터럽트
- 페이지 폴트가 발생하면 운영체제는 해당 페이지를 하드디스크에서 물리 메모리로 로드하고, 프로세스의 실행을 재개
- 새로운 페이지를 로드 하는 과정에서 기존에 로드 된 페이지와 교체 될 수 있음
프로세스 메모리 구조
메모리 로드과정에 문제가 없다면 프로그램이 실행되어 프로세스가 생성된다.