메모리(Memory)는 컴퓨터 시스템에서 데이터를 저장하고, 처리할 때 이 데이터를 임시로 유지하는 장치나 공간을 의미한다. 메모리는 컴퓨터가 작동하는 동안 프로그램과 데이터를 신속하게 읽고 쓸 수 있게 하여, 프로세서(CPU)가 필요한 정보를 빠르게 사용할 수 있도록 지원한다.
메모리의 주요 역할
- 데이터 저장: 프로그램이 실행되기 위해 필요한 데이터나 계산 결과를 저장한다.
- 명령어 저장: 실행 중인 프로그램의 명령어들을 저장하여 CPU가 이를 실행할 수 있도록 한다.
- 작업 공간 제공: 현재 실행 중인 작업에 필요한 데이터를 임시로 저장할 수 있는 공간을 제공한다.
역사
1940년대 초
최초의 전자식 프로그래밍이 가능했던 디지털 컴퓨터인 ENIAC은 수천 개의 진공관을 사용하여 진공관에 저장된 10진수 20개의 숫자와 관련된 간단한 계산을 수행하기에 그 당시 메모리 기술은 아주 적은 바이트의 용량만 허용하였다. 그래서 이 당시에는 단지 데이터를 저장하고 접근하기만 하였다. 그리고 순차 접근 방식으로 인해, 특정 데이터에 접근하기 위해 모든 이전 데이터를 지나야 하기 때문에 접근 속도가 매우 느리고 신뢰성이 떨어진다.

그리고 다음으로 비슷한 시기인 1940년대 J. Presper Echkert가 이전 기계식 메모리의 느린 속도를 개선하기 위해, 전기적 신호를 사용한 수은 지연선 메모리가 발명 되었다. 수은으로 채워진 유리 튜브를 만들고 양쪽 끝에 석영 수정을 꽂은 구조를 통해 지연 회선은 수은을 통해 전파되는 음파의 형태로 정보 비트를 저장할 수 있었고, 석영 수정은 비트를 읽고 쓰는 변환기 역할을 하였으며, 지연 회선 메모리는 최대 수천 비트의 용량으로 제한되었다. 이렇게 전기 신호를 사용함으로써 기계적 움직임에 의존하지 않게 되어, 속도와 신뢰성이 향상되었으나, 여전히 순차 접근 방식이였기에 임의 접근이 불가능하여 전체적인 성능개선은 한정적이였다.

이 단점을 극복하기 위해 1946년 윌리엄스 튜브, 셀렉트론 튜브는 초기 전자식 메모리 장치로, 컴퓨터에서 데이터를 저장하는 방법으로 개발되었다. 두 메모리 장치는 진공관 기술을 사용하여 데이터를 저장했다.
윌리엄스 튜브 (Williams Tube)
윌리엄스 튜브는 1946년, 영국의 전자공학자 Frederick C. Williams와 Tom Kilburn에 의해 개발되었다.
작동원리
윌리엄스 튜브는 음극선관(Cathode Ray Tube, CRT)을 기반으로 하는 메모리 장치이다. CRT화면 특정 위치에 전자를 충돌시켜 전하 패턴을 생성하여 데이터를 저장하였다. 이 전하 패턴은 일정 시간 동안 유지될 수 있었으며, 이를 통해 비휘발성 메모리처럼 동작이 가능핟.
데이터 저장 방식
전하가 저장된 CRT 화면의 각 점(pixels)이 1비트를 저장했으며, 전하의 존재 여부로 0과 1을 구분하였다. 저장된 데이터는 전자 빔을 사용해 읽을 수 있었으며, 데이터를 새로 고침(리프레시)해야만 했다.(임의 접근의 초기 형태)
-임의 접근: 데이터를 순차적으로 읽지 않고도 메모리의 임의의 주소에 바로 접근하여 데이터를 읽거나 쓸 수 있는 기능
용량 성능
윌리엄스 튜브는 약 512비트에서 1024비트의 데이터를 저장할 수 있었으며, 초기 컴퓨터 메모리로 사용되었다. 데이터 접근 시간은 비교적 느렸지만, 당시의 다른 메모리 기술에 비해 진보된 성능을 제공했다.
윌리엄스 튜브는 신뢰성이 낮고, 충격이나 외부 전기적 간섭에 민감하여 쉽게 손상될 수 있었다. 또한, 유지보수가 까다로웠고, 용량이 제한적이었다. 윌리엄스 튜브는 세계 최초의 프로그램 내장식 컴퓨터인 맨체스터 베이비(Manchester Baby)와 같은 초기 컴퓨터에서 사용되었다.

셀렉트론 튜브(Selectron Tube)
셀렉트론 튜브는 1946년, 미국의 RCA(Radio Corporation of America)에서 장 피에르 마우리스 (Jan A. Rajchman)와 그의 팀이 개발했다.
작동 원리
셀렉트론 튜브는 전자적으로 제어된 메모리 장치로, 진공관 안에 수많은 전극과 필라멘트를 배치하여 데이터를 저장했다. 이 전자 회로는 특정 전압을 가해 선택된 전극에 전하를 저장하거나 읽어내는 방식으로 동작했다.
데이터 저장 방식
셀렉트론 튜브는 진공관 내에 있는 각 전극이 1비트를 저장했다. 전하의 유무에 따라 데이터를 저장하고, 이 데이터를 유지하기 위해 주기적인 리프레시가 필요했다.
용량과 성능
초기 셀렉트론 튜브는 약 256비트를 저장할 수 있었으며, 이후 버전에서는 4096비트까지 저장이 가능하다. 윌리엄스 튜브보다 더 높은 용량을 제공했지만, 제작이 복잡하고 비용이 많이 들었다.
다만 셀렉트론 튜브는 제작 과정이 복잡하고, 비용이 많이 들어 대량 생산에 어려움이 있었다. 또한, 신뢰성 문제와 높은 제조 비용으로 인해 상업적으로 성공하지 못했다. 그리고 셀렉트론 튜브는 제한된 수의 컴퓨터에 사용되었으며, 대표적으로는 IAS 컴퓨터(Institute for Advanced Study Computer)에서 일부 채택되었다. 그러나 비용과 복잡성으로 인해 다른 메모리 기술로 대체되었다.

자가 코어 메모리(Magnetic Core Memory)
1950년대에 사용된 대표적인 비휘발성 컴퓨터 메모리 기술이다. 자기 코어 메모리는 메인 메모리로 널리 사용되었으며, 컴퓨터 역사에서 매우 중요한 위치를 차지하고 있다.
자기 코어 메모리는 작은 고리 모양의 자성 물질(코어)을 사용하여 데이터를 저장이 가능하며, 이 코어는 페라이트(Ferrite)로 만들어졌으며, 각각의 코어는 하나의 비트(0 또는 1)를 저장할 수 있다.
자가 코어 메모리의 특징
자기 코어 메모리는 전원이 꺼져도 자화 상태가 유지되므로, 비휘발성 메모리로서 데이터를 보존할 수 있었고, 코어 메모리는 물리적 손상에 강하고, 전기적 노이즈에 영향을 덜 받았기 때문에 당시로서는 매우 신뢰성 있는 메모리 장치다. 코어 배열 내의 특정 위치를 직접 선택하여 데이터를 읽고 쓸 수 있었기 때문에, 임의 접근 방식으로 데이터를 빠르게 처리할 수 있다.

그러나..
자기 코어 메모리는 컴퓨터 역사에서 중요한 전환점을 이룬 메모리 기술로, 오늘날의 메모리 기술 발전에 기초를 제공하였다. 비록 현재는 더 발전된 기술에 의해 대체되었지만, 자기 코어 메모리는 현대 메모리의 전신으로서 그 중요성을 인정받고 있다.
MOS 메모리(Metal-Oxide-Semiconductor Memory)
금속-산화물-반도체(MOS) 기술을 기반으로 하는 메모리의 기술로, 트랜지스터가 데이터를 저장하는 기본 단위로 사용됩니다. MOS 메모리는 현대 컴퓨터 메모리 기술의 핵심을 이루며, 주로 DRAM과 SRAM 형태로 구현됩니다. 이 기술은 트랜지스터가 디지털 신호의 저장 및 처리를 담당하는 반도체 장치에서 사용됩니다. 현대 컴퓨터 시스템의 기본적인 메모리 구조를 구성하는 핵심 기술이다. 이 기술은 DRAM과 SRAM 같은 메모리 형태로 구현되며, 메모리 계층 구조에서 중요한 역할을 한다.
메모리 종류
RAM(Random Access Memory)
특징: 데이터를 읽고 쓰는 속도가 빠르며, CPU가 직접 접근할 수 있는 주 메모리이다.
휘발성 : 휘발성 메모리로, 전원이 꺼지면, 저장된 데이터가 사라진다.
용도: 실행 중인 프로그램과 해당 프로그램이 사용하는데 데이터를 저장한다.
ROM(Read-Only Memory)
- 특징: 데이터를 읽기만 할 수 있으며, 일반적으로 변경이 불가능하다.
- 비휘발성: 전원이 꺼져도 데이터가 유지된다.
- 용도: 시스템 부팅에 필요한 기본적인 프로그램(예: BIOS)을 저장한다.
캐시 메모리(Cache Memory)
- 특징: CPU와 RAM 사이에 위치하며, CPU가 자주 사용하는 데이터를 임시로 저장하여 접근 속도를 높인다.
- 휘발성 메모리이다.
- 용도: CPU의 작업 속도를 높이기 위해 사용된다.
하드 드라이브(HDD)및 솔리드 스테이트 드라이브(SSD)
- 특징: 대용량 데이터를 저장할 수 있지만, RAM에 비해 속도가 느리다.
- 비휘발성: 전원이 꺼져도 데이터가 유지된다.
- 용도: 운영체제, 프로그램, 사용자 데이터를 장기적으로 저장한다.
가상 메모리(Virtual Memory)
- 특징: 실제RAM이 부족할 때, 하드 드라이브의 일부를 RAM처럼 사용하는 기술이다.
- 휘발성 메모리이다.
- 용도: 프로그램이 필요로 하는 메모리 용량이 RAM보다 클 때. 이 기술을 통해 더 많은 메모리를 사용이 가능하다.
레지스터(Register)
- 특징: CPU 안에 있는 작은 메모리, 휘발성, 속도 가장 빠름, 기억 용량 가장 적음
- 휘발성 메모리이다.
- 용도: 데이터 임시 저장, 명령어 저장, 주소 저장, 상태 저장을 한다.
메모리의 중요성
메모리는 컴푸터의 전반적인 성능에 큰 영향을 미친다. RAM의 용량이 충분하지 않으면 프로그램이 느리게 실행되거나, 여러 프로그램을 동시에 실행할 때 문제가 발생할 수 있다. 또한, 캐시 메모리와 같은 고속 메모리는 CPU가 데이터를 빠르게 접근할 수 있도록 하여 성능을 크게 향상시킨다.
메모리 계층
메모리 계층은 레지스터, 캐시, 저장장치로 구성되어 있다.

메모리 계층 구조의 필요성
- 속도와 비용의 차이: 컴퓨터 메모리는 성능과 비용 측면에서 다양한 요구를 충족시켜야 한다. 빠르고 접근이 쉬운 메모리는 가격이 높고 용량이 제한적이며, 대용량 메모리는 상대적으로 저렴하지만 속도가 느리다. 이러한 다양한 메모리 기술의 조합을 통해, 컴퓨터 시스템은 속도와 비용, 용량 간의 균형을 맞출 수 있다.
- 메모리 계층: 이러한 이유로 메모리 계층 구조가 필요하다. 메모리 계층 구조는 속도와 비용에 따라 메모리를 계층적으로 배치하여, 자주 사용하는 데이터를 빠르게 접근할 수 있는 고속 메모리에 저장하고, 덜 자주 사용하는 데이터는 느리지만 대용량인 메모리에 저장하는 방식이다.
메모리 계층 구조 (Memory Hierarchy)
- 레지스터: CPU 내부에 위치하며, 가장 빠르고, 작은 용량의 메모리이다. CPU가 바로 데이터를 처리할 수 있는 공간으로, 나노초(ns) 단위의 액세스 시간이 필요하다.
- 캐시 메모리 (SRAM): CPU와 주 메모리(DRAM) 사이에 위치하며, 자주 사용하는 데이터를 저장한다. L1, L2, L3 캐시로 나뉘며, 각각 CPU에 더 가깝거나 멀리 위치해 액세스 속도에 차이가 있다.
- 주 메모리 (DRAM): 컴퓨터의 메인 메모리로, 현재 실행 중인 프로그램과 데이터를 저장한다. DRAM은 캐시 메모리보다 느리지만, 용량이 크고 비용이 저렴합니다. 액세스 시간은 마이크로초(µs) 단위이다.
- 보조 기억 장치 (SSD, HDD): DRAM보다 훨씬 큰 용량을 제공하지만, 속도는 더 느리다. 보조 기억 장치는 데이터를 영구적으로 저장하며, 프로그램이 종료되거나 전원이 꺼져도 데이터를 유지한다. 액세스 시간은 밀리초(ms) 단위이다.
메모리 계층의 원리
시간 지역성 (Temporal Locality)
시간 지역성은 데이터나 프로그램 코드가 반복적으로 사용될 가능성이 높다는 개념이다. 즉, 한 번 참조된 데이터는 가까운 미래에 다시 참조될 가능성이 높다는 것을 의미한다.
- 캐시 메모리 (SRAM): 시간 지역성을 활용하는 가장 대표적인 예가 CPU 캐시 메모리다. SRAM 캐시는 CPU가 자주 접근하는 데이터를 저장한다. 데이터가 한 번 참조되면, 가까운 미래에 다시 참조될 가능성이 높으므로, 자주 사용하는 데이터를 캐시에 저장하여 빠른 접근 속도를 유지한다.
- 효율적인 데이터 접근: 시간 지역성을 활용함으로써, 캐시는 CPU의 데이터 접근 시간을 줄여 전체 시스템 성능을 향상시킨다. 데이터가 캐시에 저장되어 있으면, CPU가 DRAM에서 데이터를 읽어오는 것보다 훨씬 빠르게 접근할 수 있다.
공간 지역성 (Spatial Locality)
공간 지역성은 데이터가 메모리에서 연속된 주소 공간에 위치해 있을 가능성이 높다는 개념이다. 즉, 한 메모리 주소에 접근하면, 근처의 메모리 주소에 있는 데이터도 자주 접근될 가능성이 높다는 것을 의미한다.
MOS 메모리와 공간 지역성
- 페이지 테이블과 DRAM: DRAM의 경우, 데이터는 페이지 단위로 저장되고, 페이지 테이블을 통해 관리된다. 프로그램이 연속된 메모리 블록을 읽거나 쓸 때, DRAM의 페이지를 한 번에 로드하여 공간 지역성을 활용한다.
- 캐시 라인: 캐시 메모리(SRAM)에서는 공간 지역성을 활용하여 캐시 라인 단위로 데이터를 로드한다. 한 캐시 라인에는 연속된 메모리 주소의 데이터가 포함되어 있으며, 이는 데이터 접근 시 공간 지역성을 활용하여 성능을 개선한다.
3. 시간 지역성과 공간 지역성의 예시
1) 시간 지역성 예시
- 루프 실행: 프로그램에서 루프가 반복 실행될 때, 루프 내의 변수나 배열 요소는 반복적으로 접근된다. 이 경우, 시간 지역성을 활용하여 캐시에 데이터를 저장하고, 반복적인 접근 속도를 향상시킨다.
2) 공간 지역성 예시
- 배열 접근: 배열을 순차적으로 탐색할 때, 데이터는 연속된 메모리 주소에 저장된다. 이 경우, 공간 지역성을 활용하여 인접한 메모리 블록을 한 번에 로드하여 성능을 개선한다.
MOS 메모리의 시간 및 공간 지역성 활용 방법
- 캐시 메모리: 시간 지역성과 공간 지역성을 모두 활용하여, 자주 사용되는 데이터와 연속된 데이터를 캐시 메모리에 저장한다. 이를 통해, CPU는 빠르게 데이터를 접근하고 처리할 수 있다.
- 페이지 교체 알고리즘: DRAM에서의 공간 지역성을 활용하여, 페이지 단위로 데이터를 관리한다. 페이지가 메모리에 로드되면, 연속된 메모리 블록이 함께 로드되므로, 공간 지역성을 효율적으로 활용할 수 있다.
그리고 메모리 시스템에서 시간 지역성 예로 데이터 접근 효율성을 평가하는 중요한 개념인 캐시 히트(Cache Hit)와 캐시 미스(Cache Miss)에 대해 설명하겠다.
캐시 히트(Cache Hit)와 캐시 미스(CaChe Miss)란?
- 캐시 히트: CPU가 요청한 데이터가 캐시에 존재하는 경우를 말한다. 이 경우, 데이터는 캐시에서 직접 읽혀지며, 메인 메모리(DRAM)에서 읽어오는 것보다 훨씬 빠르다.
- 캐시 미스: CPU가 요청한 데이터가 캐시에 존재하지 않는 경우를 말한다. 이 경우, 데이터는 메인 메모리에서 읽어와야 하며, 이 과정이 시간이 더 걸린다. 캐시 미스가 발생하면, 캐시는 데이터를 메인 메모리에서 읽어와 저장하고, 이후의 접근을 위해 데이터를 캐시에 로드한다.
시간 지역성과 캐시 히트/미스
- 캐시 히트와 시간 지역성: 시간 지역성의 원리에 따르면, 데이터가 한 번 참조된 후에는 다시 참조될 가능성이 높다. 따라서, 같은 데이터가 다시 요청될 때 캐시에서 이미 존재한다면, 이를 캐시 히트라고 한다. 캐시 메모리는 이러한 시간 지역성을 활용하여 자주 접근되는 데이터를 저장하고, 반복적인 데이터 접근을 빠르게 처리한다.
- 예를 들어, 루프 안에서 같은 배열 요소를 반복적으로 접근하는 경우, 배열의 해당 요소는 캐시에 저장되어 있어야 한다. 이로 인해 캐시 히트가 발생하고, CPU는 메인 메모리에서 데이터를 읽어오는 것보다 빠르게 작업을 수행할 수 있다.

- 캐시 미스와 시간 지역성: 시간 지역성이 높은 데이터는 종종 캐시에 존재하지만, 처음 접근할 때는 데이터가 캐시에 없을 수 있다. 이 경우 캐시 미스가 발생하고, 데이터를 메인 메모리에서 읽어와 캐시에 저장한다. 이후에는 시간 지역성 덕분에 데이터가 캐시에서 재사용되어 캐시 히트가 발생할 가능성이 높다.

캐시 매핑(Cache Mapping)
캐시 매핑은 메모리 주소를 캐시의 특정 위치에 매핑하는 방법을 의미합니다. 이 방식에 따라 데이터가 캐시에 저장되는 방식과 접근 방식이 결정된다. 주요 캐시 매핑 방식으로는 직접 매핑 (Direct Mapping), 연관 매핑 (Associative Mapping), 그리고 집합 연관 매핑 (Set-Associative Mapping)이 있다.
직접 매핑 (Direct Mapping)
- 작동 방식: 각 메모리 블록은 캐시의 특정 위치에만 저장될 수 있다. 즉, 메모리의 특정 주소는 캐시의 특정 라인에만 매핑된다.
- 장점: 구조가 간단하여 빠르게 동작한다.
- 단점: 여러 데이터가 같은 캐시 위치에 매핑되면 데이터가 자주 덮어쓰여 캐시 미스가 발생할 수 있다.
- 예시: 메모리 주소 0x0, 0x10, 0x20은 모두 같은 캐시 라인에 저장되므로, 주소 0x0을 불러올 때, 0x10이 덮어쓰여질 수 있다.
연관 매핑 (Associative Mapping)
- 작동 방식: 메모리 블록이 캐시의 어느 위치에나 저장될 수 있다. 즉, 메모리 블록이 캐시의 모든 위치를 검색하여 저장된다.
- 장점: 데이터가 캐시 내의 어떤 위치에든 저장될 수 있어서 데이터 충돌이 줄어들고, 캐시 히트율이 높다.
- 단점: 구현이 복잡하고, 데이터 검색 시간이 더 걸린다.
- 예시: 메모리 주소 0x0은 캐시의 모든 위치를 검색하여 빈 자리에 저장된다. 따라서 다른 주소와 충돌하지 않고 데이터가 유지된다.
집합 연관 매핑 (Set-Associative Mapping)
- 작동 방식: 캐시가 여러 세트로 나뉘고, 각 세트는 연관 매핑 방식을 사용한다. 즉, 메모리 블록이 특정 세트 내의 여러 위치 중 하나에 저장된다.
- 장점: 데이터 충돌을 줄이면서도 연관 매핑의 유연성을 제공한다. 캐시 히트율이 높아진다.
- 단점: 직접 매핑보다는 복잡하지만, 연관 매핑보다는 간단하다.
- 예시: 캐시가 4개의 세트로 나뉘고, 주소 0x0은 세트 2 내의 빈 위치에 저장된다. 이로 인해 데이터 충돌이 줄어든다.
캐싱 계층
은 데이터 접근 속도를 향상시키기 위해 자주 요청되는 데이터를 임시로 저장해 두는 계층이다. 이 계층은 시스템 성능을 최적화하고, 응답 시간을 줄이며, 자원 사용을 효율적으로 관리하기 위해 사용된다. 캐싱은 주로 데이터베이스, 웹 서버, 애플리케이션 서버 등 다양한 시스템에서 적용된다.(Memcached, Redis 등의 인메모리 저장 시스템의 캐시 서버로 사용되기도 한다.)
-인메모리: 데이터를 주 메모리(RAM)에서 직접 저장하고 처리하는 방법을 의미
웹 브라우저의 데이터 정리
웹 브라우저의 캐시와 함께 웹 애플리케이션에서 데이터를 저장하고 관리하기 위해 사용하는 기술에는 쿠키, 로컬 스토리지, 세션 스토리지가 있습니다. 이 세 가지 기술은 각각 고유의 용도와 특징을 가지고 있으며, 웹 브라우저에서 데이터를 저장하는 데 도움을 준다.
쿠키 (Cookies)
쿠키는 웹 서버가 웹 브라우저에 저장하도록 하는 작은 데이터 조각입니다. 주로 사용자 정보를 저장하거나, 세션 상태를 유지하는 데 사용된다.
-세션 상태: 웹 어플리케이션에서 사용자의 상호작용을 추적하고 관리하는 방법
특징
- 용량: 보통 쿠키는 한 개의 쿠키 당 4KB까지 저장할 수 있으며, 도메인 당 쿠키의 개수에 제한이 있다.
- 유효 기간: 쿠키는 설정된 유효 기간이 지나면 자동으로 삭제된다. 유효 기간이 없는 세션 쿠키는 브라우저 세션이 끝나면 삭제된다.
- 전송: 쿠키는 웹 서버와의 요청과 응답에 자동으로 포함된다. 즉, 브라우저가 서버에 요청할 때 쿠키를 포함시켜 전송한다.
- 보안: 쿠키는 Secure, HttpOnly, SameSite 속성으로 보안을 강화할 수 있다. 예를 들어, Secure 속성은 HTTPS 연결에서만 쿠키를 전송하도록 설정한다.
용도
- 세션 관리: 로그인 상태 유지, 장바구니 내용 저장 등.
- 개인화: 사용자 맞춤형 콘텐츠 제공.
- 트래킹: 사용자의 행동을 추적하고 분석.
로컬 스토리지 (Local Storage)
로컬 스토리지는 브라우저에서 웹 애플리케이션이 데이터를 저장하는 데 사용하는 기술이다. 데이터는 영구적으로 저장되며, 사용자가 브라우저를 종료해도 유지된다.
특징
- 용량: 보통 도메인당 5MB에서 10MB까지 저장할 수 있다. 이는 쿠키보다 훨씬 많은 데이터 저장이 가능하다.
- 유효 기간: 데이터는 명시적으로 삭제하지 않는 한, 브라우저의 데이터 저장소에 영구적으로 저장된다.
- 전송: 로컬 스토리지의 데이터는 서버로 전송되지 않는다. 데이터는 클라이언트 측에서만 사용된다.
- 데이터 접근: JavaScript를 통해 읽고 쓸 수 있다. 웹 애플리케이션에서 데이터를 쉽게 저장하고 검색할 수 있다.
용도
- 사용자 설정 저장: 사용자 선호 사항, 테마 설정 등.
- 오프라인 데이터: 오프라인 상태에서도 웹 애플리케이션이 데이터를 사용할 수 있도록 지원.
- 빠른 데이터 접근: 웹 애플리케이션에서 자주 사용하는 데이터의 캐싱.
세션 스토리지 (Session Storage)
세션 스토리지는 웹 브라우저에서 웹 애플리케이션이 데이터를 저장하는 또 다른 기술로, 세션 동안만 데이터를 저장한다.
특징
- 용량: 로컬 스토리지와 유사하게 도메인당 5MB에서 10MB까지 저장할 수 있다.
- 유효 기간: 데이터는 브라우저 탭이 닫히거나 세션이 끝나면 삭제된다. 탭 간에 데이터가 공유되지 않으며, 브라우저를 종료하지 않고 탭만 닫으면 데이터는 유지된다.
- 전송: 세션 스토리지의 데이터는 서버로 전송되지 않으며, 클라이언트 측에서만 사용된다.
- 데이터 접근: JavaScript를 통해 데이터에 접근하고, 읽고 쓸 수 있다.
용도
- 세션 데이터 저장: 로그인 상태나 현재 작업 세션의 상태를 저장하는 데 유용하다.
- 탭별 데이터 저장: 각 브라우저 탭 또는 창에서 독립적으로 데이터를 저장할 수 있다.
특징 | 쿠키 | 로컬 스토리지 | 세션 스토리지 |
용량 | 약 4KB | 약 5MB - 10MB | 약 5MB - 10MB |
유효 기간 | 설정 가능 (세션 쿠키는 브라우저 종료 시 삭제) | 영구 저장 | 브라우저 탭 종료 시 삭제 |
데이터 전송 | 서버로 자동 전송 | 서버로 전송되지 않음 | 서버로 전송되지 않음 |
데이터 접근 | JavaScript 및 서버 | JavaScript만 가능 | JavaScript만 가능 |
결론은 쿠키는 주로 서버와의 데이터 교환, 세션 관리 및 사용자 트래킹에 사용하고, 로컬 스토리지는 사용자 설정 저장 및 오프라인 데이터 저장에 유용하고, 세션 스토리지는 특정 세션 동안 필요한 데이터 저장에 적합하다.
메모리 관리는 컴퓨터 시스템에서 메모리 자원을 효율적으로 배분하고 사용하는 기술을 의미한다. 운영 체제(OS)와 하드웨어는 메모리 관리 기능을 통해 애플리케이션과 시스템 프로세스가 메모리를 효과적으로 활용할 수 있도록 지원한다. 메모리 관리는 프로그램의 실행, 메모리의 할당 및 해제, 가상 메모리 관리, 메모리 보호 등을 포함한다.
메모리 관리의 주요 요소
- 메모리 할당 (Memory Allocation):
- 정적 할당 (Static Allocation): 프로그램이 컴파일될 때 메모리가 할당된다. 실행 중에는 변경되지 않는다.
- 동적 할당 (Dynamic Allocation): 프로그램 실행 중에 필요에 따라 메모리를 할당하고 해제한다. 일반적으로 malloc(), free()와 같은 함수로 구현된다.
- 메모리 해제 (Memory Deallocation):
- 설명: 사용이 끝난 메모리를 반환하여 재사용할 수 있도록 한다.
- 중요성: 메모리 누수를 방지하고, 시스템의 메모리 자원을 효율적으로 관리한다.
- 가상 메모리 (Virtual Memory):
- 설명: 물리적 메모리(RAM)와 디스크 저장소를 결합하여 더 큰 메모리 공간을 제공한다. 각 프로세스는 자신만의 독립적인 가상 주소 공간을 갖는다.
- 기술:
- 페이지ング (Paging): 메모리를 페이지 단위로 나누어 관리하며, 필요할 때 디스크에서 페이지를 메모리로 로드한다.
- 세그멘테이션 (Segmentation): 논리적 단위로 메모리를 나누어 각 세그먼트를 독립적으로 관리한다.
- 메모리 보호 (Memory Protection):
- 설명: 프로세스가 자신에게 할당된 메모리만 접근하도록 제한하여 시스템의 안정성과 보안을 강화한다.
- 기술: 각 프로세스의 메모리 공간을 분리하고, 접근 권한을 설정하여 불법적인 메모리 접근을 방지한다.
- 메모리 스와핑 (Swapping):
- 설명: 메모리에서 디스크로 프로세스의 일부를 이동시켜 메모리 자원을 확보한다. 디스크에 저장된 데이터를 다시 메모리로 로드하여 프로세스를 계속 실행한다.
- 장점: 메모리 자원의 사용 효율성을 높이고, 동시에 실행할 수 있는 프로세스 수를 증가시킨다.
가상 메모리 (Virtual Memory)
가상 메모리는 보조 메모리(하드 드라이브나 SSD 등)를 주 메모리(RAM)처럼 사용할 수 있는 메모리 운영 방식이다. 이는 컴퓨터 운영 체제에서 흔히 사용되는 기술이다.
가상 메모리를 표면적으로 보면, 가상 메모리는 물리적인 메모리가 아닌 다른 방식으로 메모리를 다루는 것을 의미한다. 즉, 프로그램이 특성 식별자를 사용하여 메모리를 다루는 경우, 이는 가상 메모리의 사용을 의미한다.

가상 메모리의 필요성
- 다중 프로그래밍과 시간 분할: 만약 컴퓨터가 여러 프로그램을 동시에 처리할 수 없다면, 프로그램이 실제 주소를 사용하고 고정된 물리적 메모리 공간을 차지해야 한다면 매우 불편할 것이다. 따라서 컴파일러가 생성한 오브젝트 프로그램은 실제 주소가 아닌 가상 주소를 사용하는 것이 일반적이다.
- 주소 매핑: 가상 메모리는 프로그램의 주소를 RAM 주소로 매핑한다. 이 매핑 과정은 두 단계로 나눈다. 첫 번째 단계는 프로그램이 실행되기 전에 컴파일러가 수행하며, 두 번째 단계는 프로그램 실행 중 운영 체제가 수행한다.
가상 메모리의 작동 방식
가상 메모리와 캐시 메모리
캐시 메모리는 CPU와 주 메모리(RAM) 사이에 위치하는 고속의 메모리입니다. 데이터 접근 속도를 높이기 위해 자주 사용되는 데이터나 명령어를 저장합니다.
가상 메모리와 캐시 메모리: 가상 메모리는 주 메모리와 디스크 간의 중간 역할을 하여, 컴퓨터가 물리적 메모리보다 더 많은 메모리를 사용할 수 있도록 합니다. 캐시 메모리는 이 과정에서 중요한 역할을 합니다.
- 주소 매핑: CPU가 메모리 접근을 시도할 때, 먼저 캐시 메모리에서 가상 주소를 검색합니다. 이는 CPU가 데이터를 빠르게 읽어오기 위해 사용되는 첫 번째 단계입니다.
- 캐시 히트와 캐시 미스:
- 캐시 히트: 필요한 데이터가 캐시에 존재할 때, CPU는 이를 캐시에서 직접 읽어옵니다. 이 경우 메모리 접근 속도가 빨라지고 성능이 향상됩니다.
- 캐시 미스: 필요한 데이터가 캐시에 존재하지 않을 때, CPU는 주 메모리(RAM)에서 데이터를 읽어와야 합니다. 이 경우, 데이터 접근 속도가 느려질 수 있습니다.
- 디스크와 메모리 간의 상호작용: 캐시는 가상 메모리의 직접적인 구성 요소는 아니지만, 가상 메모리와 함께 작동하여 전체 시스템 성능을 향상시킵니다. 데이터가 주 메모리에서 필요한 경우, 이 데이터가 캐시에 먼저 로드됩니다.
디스크와 RAM의 조합: 가상 메모리의 사용
가상 메모리는 RAM의 부족을 보완하기 위해 디스크를 활용하여 메모리 공간을 확장하는 기술이다. 이는 RAM의 용량이 부족할 때 디스크 공간을 사용하여 데이터를 임시로 저장한다.
- 페이지 파일 (또는 스와프 파일):
- 정의: 디스크에 저장되는 특별한 파일로, 물리적 메모리(RAM)가 부족할 때 데이터를 저장하는 데 사용된다. 이 파일은 주로 '페이지 파일' 또는 '스와프 파일'이라고 불린다.
- 작업 원리: RAM에 있는 데이터 중 사용하지 않는 부분이 페이지 파일로 이동되어 RAM을 확보한다. 이 데이터를 다시 필요로 할 때는 페이지 파일에서 RAM으로 다시 로드된다.
- 페이지 교체 (Page Replacement):
- 페이지 교체: RAM이 가득 차면 운영 체제는 페이지 교체 알고리즘을 사용하여 어떤 데이터를 디스크로 옮길지 결정한다. 페이지 교체 알고리즘에는 FIFO(First-In-First-Out), LRU(Least Recently Used), Optimal Algorithm 등이 있다.
- 과정: 페이지가 디스크로 이동하면 RAM의 빈 공간이 생기고, 이 공간에 새로운 데이터가 로드된다. RAM에 있는 데이터는 필요한 경우 디스크에서 다시 불러와질 수 있다.
- 작동 예시:
- 메모리 부족 시: 여러 프로그램이 동시에 실행되면 RAM의 용량이 부족해질 수 있다. 이때 운영 체제는 디스크의 페이지 파일을 활용하여 메모리 공간을 추가로 제공한다.
- 데이터 전송: 사용하지 않는 데이터는 페이지 파일로 옮겨지고, 새롭게 필요한 데이터는 페이지 파일에서 RAM으로 로드된다.

가상 메모리의 장점
- 메모리 공간 문제 해결: 가상 메모리를 사용하면 프로그램이 여러 주소를 공유할 수 있어 메모리 공간 문제를 해결한다. 대량의 RAM을 사용하는 대신 가상 메모리를 통해 메모리 공간을 확장할 수 있다.
- 데이터 보안: 가상 메모리는 각 프로그램이 다른 가상 주소를 사용하게 하여 서로의 데이터를 접근하지 못하도록 보안성을 제공한다.
- 메모리 단편화 및 오류 방지: 가상 메모리는 각 프로그램에 고유한 주소 공간을 제공하여 메모리 단편화를 방지하고 디버깅을 용이하게 한다.
스와핑 (Swapping)
스와핑은 가상 메모리에서 물리적 메모리가 부족할 때 페이지를 디스크로 이동시켜 메모리 공간을 확보하는 과정이다. 이 과정에서 자주 사용되지 않는 데이터가 디스크로 이동하고, 필요 시 다시 메모리로 로드된다.
스레싱 (Thrashing)
스레싱은 메모리 관리에서 발생할 수 있는 성능 저하 현상입니다. 주로 가상 메모리 시스템에서 나타난다.
- 정의: 스레싱은 메모리가 부족하여 페이지 교체가 너무 빈번하게 발생할 때 발생하는 성능 저하 상태이다. 이로 인해 시스템이 페이지 폴트를 처리하는 데 많은 시간을 소비하게 되고, 실제로는 프로그램의 유용한 작업이 거의 이루어지지 않는다.
- 발생 원인:
- 메모리 부족: 시스템에 물리적 메모리(RAM)가 부족하고, 프로그램이 필요한 메모리 양이 과도할 때 발생한다.
- 페이지 폴트 증가: 프로그램이 메모리에서 자주 접근해야 하는 페이지가 디스크에 위치하고 있어, 매번 페이지를 디스크에서 메모리로 읽어야 하는 상황이 된다.
- 과도한 페이지 교체: 시스템이 메모리를 충분히 할당받지 못하여 디스크와 메모리 간의 페이지 교체가 매우 빈번해지면, CPU 자원이 페이지 교체에 소모되고, 실제 작업 수행이 느려진다.
페이지 교체 알고리즘 (Page Replacement Algorithms)
페이지 교체 알고리즘은 물리적 메모리가 가득 차서 새로운 페이지를 로드해야 할 때 어떤 페이지를 디스크로 이동시킬지를 결정한다.
- FIFO (First-In, First-Out):
- 설명: 가장 오래된 페이지를 교체합니다. 가장 먼저 메모리에 적재된 페이지가 가장 먼저 교체된다.
- Optimal (OPT):
- 설명: 미래에 가장 오랫동안 사용되지 않을 페이지를 교체합니다. 가장 적은 페이지 폴트를 발생시킨다.
- LRU (Least Recently Used):
- 설명: 가장 최근에 사용되지 않은 페이지를 교체한다. 페이지가 가장 오랫동안 사용되지 않은 경우 교체된다.
가상 메모리의 필요성
- RAM 증가와의 관계: 대용량 RAM이 있어도 가상 메모리는 여전히 필요하다. RAM이 충분히 크더라도, 가상 메모리는 여전히 페이지 파일을 사용하여 RAM의 용량을 확장하고, 운영 체제와 소프트웨어가 원활하게 동작하도록 한다.
- 성능 고려: 가상 메모리는 RAM보다 느리지만, 시스템의 메모리 사용을 최적화하고 다양한 프로그램을 실행하는 데 도움을 준다. 시스템이 가상 메모리를 자주 사용하면 성능이 저하될 수 있으며, 이를 스래싱 (Thrashing)이라고 한다.
가상 메모리와 RAM 증가의 관계
가상 메모리는 하드 드라이브의 일부를 RAM처럼 사용하고, 이를 실제 RAM과 결합하여 메모리 공간을 확장합니다. RAM이 부족할 때, 가상 메모리는 데이터를 페이지 파일로 이동시켜 RAM을 확보한다. 따라서 현재 RAM이 충분히 크더라도, 가상 메모리는 여전히 필요하다. 가상 메모리를 비활성화하면 많은 시스템 기능과 일부 소프트웨어에서 문제를 겪을 수 있다.

가상 메모리의 장점
- 속도 개선: 프로그램의 특정 부분만 필요한 경우 가상 메모리를 사용하면 속도가 향상될 수 있다.
- 다중 프로그래밍 지원: 가상 메모리는 여러 프로그램을 동시에 실행할 수 있게 도와준다.
- 메모리 효율성: 큰 프로그램을 작은 프로그램으로 나눠서 실행할 수 있다.
- 공유 가능: 일반 데이터나 코드를 메모리에서 공유할 수 있다.
가상 메모리의 단점
- 속도 저하: 가상 메모리를 사용할 때 시스템 속도가 느려질 수 있습니다.
- 시간 지연: 작업 간 전환에 시간이 더 걸린다.
- 하드 드라이브 공간 소모: 하드 드라이브 공간을 많이 사용한다.
- 시스템 안정성 감소: 시스템 안정성을 저하시킬 수 있다.
가상 메모리는 큰 주 메모리처럼 보이는 저장 매체를 제공하여, 물리적 메모리가 부족할 때도 큰 프로그램을 실행할 수 있게 해준다. 가상 메모리는 RAM이 부족할 때 하드 드라이브의 일부를 메모리처럼 사용하여 시스템의 성능을 향상시킬 수 있지만, RAM에 비해 느리기 때문에 성능에 영향을 줄 수 있다.
메모리 할당
연속 할당 (Contiguous Allocation)
연속 할당은 메모리의 연속된 블록을 할당하는 방식이다. 이 방식에서는 프로그램이나 데이터가 메모리의 연속된 주소 공간에 배치된다.
- 정의: 메모리의 연속적인 주소 공간을 하나의 블록으로 할당하여, 프로그램이 실행되는 동안 데이터가 이 연속된 블록에 저장된다.
- 특징:
- 주소 공간: 프로그램이 메모리의 연속된 주소 범위를 차지한다.
- 간단한 관리: 메모리 관리가 비교적 간단합니다. 주소 계산이 직관적이며, 메모리 블록을 찾는 과정이 용이한다.
- 메모리 낭비: 프로그램이 종료되면 할당된 메모리가 그대로 남아 있으므로, 메모리의 단편화가 발생할 수 있다. 즉, 메모리가 부족할 때 작은 빈 공간이 생길 수 있다.
- 작업: 메모리 사용이 정적이거나 프로그램의 크기가 고정되어 있을 때 유용한다.
- 장점:
- 효율성: 메모리 할당과 접근이 빠르며, 관리가 간단하다.
- 성능: 주소 계산이 간단하여 접근 속도가 빠르다.
- 단점:
- 유연성 부족: 프로그램이 실행 중에 메모리 크기를 변경하기 어렵다.
- 단편화: 메모리 단편화가 발생할 수 있어, 메모리의 효율적인 사용이 어려울 수 있다.
불연속 할당 (Non-contiguous Allocation)
불연속 할당은 메모리의 연속된 블록이 아니라, 비연속적인 블록을 할당하는 방식이다. 즉, 프로그램이나 데이터가 메모리의 여러 서로 다른 위치에 배치된다.
- 정의: 메모리의 비연속적인 주소 공간에 프로그램이나 데이터를 배치한다. 이 방식은 프로그램이 필요한 만큼의 메모리를 여러 개의 비연속적인 블록으로 나누어 할당받는 방식이다.
- 특징:
- 주소 공간: 메모리의 비연속적인 블록을 사용하여 프로그램이 메모리 내 여러 위치에 분산될 수 있다.
- 유연성: 메모리 블록을 동적으로 할당하고 해제할 수 있어 유연성이 높다.
- 메모리 단편화: 비연속적으로 메모리를 할당하다 보면 메모리 단편화가 발생할 수 있다. 즉, 메모리가 여러 조각으로 나뉘어 비효율적으로 사용될 수 있다.
- 작업: 동적 메모리 관리가 필요한 경우, 특히 프로그램의 크기가 동적으로 변화하거나 여러 프로그램이 동시에 실행될 때 유용하다.
- 장점:
- 유연성: 프로그램의 크기나 메모리 요구 사항이 변동할 때 유용하다.
- 메모리 활용: 메모리를 더 효율적으로 사용할 수 있으며, 작은 빈 공간도 활용할 수 있다.
- 단점:
- 복잡성: 메모리 관리가 복잡해질 수 있으며, 메모리 접근 시간이 길어질 수 있다.
- 단편화 문제: 메모리가 작은 조각으로 나뉘어 단편화가 발생할 수 있으며, 이로 인해 메모리의 효율적인 사용이 어려울 수 있다.
- 연속 할당은 메모리의 연속된 블록에 프로그램이나 데이터를 배치하여 관리하는 방식으로, 효율성이 높지만 메모리 단편화와 유연성 부족의 단점이 있다.
- 불연속 할당은 메모리의 비연속적인 블록에 프로그램이나 데이터를 배치하여 관리하는 방식으로, 유연성과 메모리 활용의 장점이 있지만, 복잡성과 단편화 문제를 동반할 수 있다.
이 두 가지 방식은 각각의 장단점이 있으며, 실제 시스템에서는 상황에 따라 적절한 방식이 선택된다.
출처
Computer memory - Wikipedia
From Wikipedia, the free encyclopedia Computer component that stores information for immediate use DDR4 SDRAM module. As of 2021[update], over 90 percent of computer memory used in PCs and servers was of this type.[1] Computer memory stores information, su
en.wikipedia.org
What is Virtual Memory?
Learn what virtual memory is, how it works and how to manage it. Also, explore its benefits and limitations.
www.techtarget.com
https://www.simslifecycle.com/blog/2022/the-journey-of-eniac-the-worlds-first-computer/
The Journey of ENIAC, the World’s First Computer
ENIAC’s spirit of innovation and practical approach to refurbishing, upgrading and reusing equipment lives on in the work we do at Sims Lifecyle Services.
www.simslifecycle.com
'Computer Science' 카테고리의 다른 글
자료 구조 - 복잡도 (0) | 2024.09.21 |
---|---|
트랜잭션과 무결성 (0) | 2024.09.14 |
CPU 스케줄링 알고리즘 (7) | 2024.09.07 |
Stack, Method, Heap 메모리 (0) | 2024.08.11 |
Overflow, underflow (0) | 2024.08.10 |