(TIL) 2025-01-17
메모리(Memory)
메모리는 컴퓨터 시스템에서 데이터를 저장하고 불러오는 역할을 하는 중요한 부품이다.
컴퓨터에서 메모리는 주로 데이터를 임시로 저장하는 역할을 하며, 이 데이터를 CPU가 빠르게 처리할 수 있도록 지원한다. 메모리는 크게 주기억장치(Primary Memory)와 보조기억장치(Secondary Memory)로 나눌 수 있다. 주기억장치와 보조기억장치는 각기 다른 특징과 용도를 가지고 있다.
주기억장치 (Primary Memory)
주기억장치는 CPU와 직접 연결되어 있으며, 컴퓨터에서 실행 중인 프로그램이나 데이터들을 빠르게 접근하고 처리할 수 있게 한다. 주기억장치는 다시 두 가지가 있다.
RAM (Random Access Memory, 랜덤 액세스 메모리) RAM은 컴퓨터의 임시 기억장치로, 전원이 꺼지면 저장된 데이터가 사라진다.
RAM은 빠른 읽기/쓰기가 가능하여 프로그램이 실행될 때 필요한 데이터를 일시적으로 저장한다.
일반적으로 프로그램이 실행되면 필요한 코드와 데이터가 하드디스크나 SSD에서 RAM으로 로딩되어 실행된다.- 동적 RAM (DRAM): 일정 시간마다 데이터를 재충전해야 하는 형태로, 속도는 느리지만 가격이 저렴하고, 용량이 큰 특징이 있다.
- 정적 RAM (SRAM): 데이터를 재충전할 필요가 없고, 빠른 속도를 자랑하지만 가격이 비싸고 용량이 작은 특징이 있다.
Cache Memory (캐시 메모리) 캐시 메모리는 CPU와 RAM 사이에서 데이터를 빠르게 전달하기 위한 고속 메모리이다. CPU가 데이터를 처리할 때 자주 사용하는 데이터를 캐시 메모리에 저장하여, CPU가 해당 데이터를 더 빠르게 접근할 수 있도록 한다.
- L1 캐시: CPU 코어에 내장되어 가장 빠른 캐시로, 매우 작은 용량을 가진다.
- L2 캐시: L1 캐시보다 조금 더 크고 느리지만, 여전히 빠른 접근 속도를 제공한다.
- L3 캐시: 여러 CPU 코어가 공유하는 캐시로, 용량은 크지만 속도는 L1, L2보다는 느리다.
보조기억장치 (Secondary Memory)
보조기억장치는 데이터를 장기적으로 저장하는 장치로, 전원이 꺼져도 데이터가 사라지지 않는다.
주로 데이터를 영구적으로 저장하는 데 사용된다. 보조기억장치의 예로는 하드디스크(HDD), 솔리드 스테이트 드라이브(SSD), 광디스크(CD/DVD), USB 드라이브 등이 있다.
- 하드디스크 (HDD): 물리적인 디스크가 회전하며 데이터를 읽고 쓰는 방식으로, 대용량 저장이 가능하지만 속도가 느리다.
- 솔리드 스테이트 드라이브 (SSD): 반도체 메모리로 구성되어 데이터 액세스 속도가 매우 빠릅니다. HDD보다 고속이고 내구성이 뛰어나지만 가격이 상대적으로 비싸다.
메모리 계층 구조
메모리는 여러 계층으로 구성되어 있으며, 각 계층은 성능과 용량, 가격 면에서 다르다. 일반적으로 CPU가 가장 빠르게 접근할 수 있는 캐시 메모리가 가장 가까운 위치에 있고, 그 다음으로 RAM, 마지막으로 HDD/SSD와 같은 보조기억장치가 있다. 각 계층의 메모리는 CPU의 처리 속도에 맞춰 최적화되어 있으며, 상위 계층일수록 더 빠르지만 용량은 작고, 하위 계층은 용량은 크지만 속도는 느리다.
- 캐시메모리
- RAM
- 보조기억장치
가상 메모리
컴퓨터가 실제로 사용할 수 있는 물리적인 메모리 용량을 초과하는 데이터를 처리할 때 사용하는 기술이다.
물리적 RAM이 부족하면, 하드디스크나 SSD의 일부 공간을 가상 메모리로 사용하여 데이터를 처리한다. 이때, 디스크에서 RAM처럼 동작하는 공간을 만들어 프로그램이 정상적으로 실행될 수 있도록 한다.
그러나 디스크는 RAM보다 훨씬 느리기 때문에, 가상 메모리가 자주 사용되면 시스템 성능이 저하될 수 있다.
결론 메모리는 컴퓨터의 성능을 결정짓는 중요한 요소이다.
각 종류의 메모리는 용도와 특성에 맞게 적절하게 사용되며, 이들이 협력하여 시스템의 속도와 효율성을 극대화한다.
메모리 주소의 형태
- 물리적 주소 (Physical Address): 실제 메모리 칩에서 데이터를 읽고 쓰는 위치를 나타내는 주소입니다. CPU가 메모리로 직접 접근할 때 사용된다.
- 논리적 주소 (Logical Address): 프로그램이 실행되는 동안 사용하는 주소이다. 운영 체제는 이 주소를 실제 물리적 주소로 변환하는 역할을 합니다. 이를 가상 주소라고도 한다.
- 가상 주소 공간: 운영 체제는 프로그램에 대해 가상 주소 공간을 제공한다. 이는 물리적 메모리와는 다른 주소 체계를 가지며, 각 프로세스가 독립적인 주소 공간을 가질 수 있도록 한다.
주소변환
프로그램이 사용하는 논리적 주소는 CPU가 직접적으로 처리하지 않고, 운영 체제의 메모리 관리 유닛 (MMU)가 이를 물리적 주소로 변환한다. 이 과정에서 페이지 테이블(Page Table)이 사용되며, 이는 가상 메모리와 물리적 메모리 간의 매핑을 담당한다.
주소 지정 방식
- 변수 주소: 프로그램에서 특정 변수를 참조할 때 해당 변수의 메모리 주소를 통해 값을 읽거나 쓸 수 있다.
- 배열의 주소: 배열의 첫 번째 요소의 주소를 사용하여 배열 내의 다른 요소를 참조할 수 있다.
- 포인터: 포인터는 다른 변수의 주소를 저장하는 변수로, 메모리 주소를 직접적으로 다룰 수 있는 중요한 도구이다.
주소 공간과 포인터 연산
- 포인터 연산: 포인터는 메모리 주소를 다루는 변수로, 특정 타입의 데이터가 저장된 메모리 위치를 나타낸다. 포인터 연산을 통해 주소를 이동하거나 변경할 수 있다.
- 주소 범위: 각 프로세스는 고유한 주소 공간을 가진다. 32비트 시스템에서는 보통 4GB의 주소 공간이 제공되며, 64비트 시스템에서는 더 많은 주소 공간을 지원한다.
메모리 주소는 컴퓨터 프로그램이 데이터를 저장하고 접근하는 데 있어 필수적인 개념이며 단순히 데이터를 찾는 위치를 나타내는 것 이상으로, 시스템의 성능과 보안을 관리하는 데 중요한 역할을 한다.