메모리
컴퓨터 시스템에서 데이터를 저장하고 읽고 쓰는 장소
메모리는 데이터와 명령어를 저장하는 장소로, CPU가 필요한 데이터와 명령어에 접근하여 처리할 수 있도록 제공됩니다.
CPU는 메모리에 올라와 있는 프로그램의 명령어들을 실행할 뿐입니다. 메모리에 실행할 것이 없으면 파일로 내려가서 찾아옵니다.
즉, 당장 빠르게 사용할 일부 데이터들을 메모리에 저장해놓기 때문에 어떤 데이터들을 메모리에 올려둘 것인지 생각해봐야 합니다.
메모리를 필요에 따라 여러가지 종류로 나누어 둡니다.

레지스터
: CPU 안에 있는 작은 메모리, 휘발성, 가장 빠름, 용량이 가장 작습니다.
캐시 (L1, L2)
: 휘발성, 레지스터 다음으로 빠름, 용량이 작습니다. L3 캐시도 존재합니다.
CPU와 주 메모리 사이에 위치한 임시 저장 공간입니다.
주 메모리로부터 데이터를 미리 가져와 CPU가 빠르게 액세스할 수 있습니다.
주기억장치 (RAM)
: 휘발성, 속도 보통, 용량 보통
CPU와의 빠른 데이터 교환을 지원하기 위해 매우 빠른 액세스 속도를 가지고 있습니다.
컴퓨터 시스템에서 일반적으로 사용되는 메모리 유형입니다.
보조기억장치 (스토리지)
: 비휘발성, 속도 느림, 용량 큼
일반적으로, 하드 디스크 드라이브(HDD)와 SSD(Solid State Drive)가 저장장치로 사용됩니다.
주 메모리나 캐시보다 액세스 속도가 느리지만 데이터를 영구적으로 보존하는 역할을 합니다.
캐시
캐시는 데이터를 미리 복사해 두는 임시 저장소 역할을 합니다. 메모리의 속도가 느리고, 레지스터의 용량이 작아서 생기는 문제를 중간에서 줄여주는 역할을 합니다.
캐시 역시 메모리에 비하면 크기가 작으므로, 어떤 값을 캐시에 보관하고 어떤 값을 비울지 전략적으로 접근해야 합니다.
캐시를 직접 설정할 때는, 자주 사용하는 데이터를 기반으로 설정해야 합니다. 이의 근거가 되는 개념을 지역성 (locality)라고 합니다. 지역성에는 시간 지역성(temporal locality)과 공간 지역성 (spatial locality)로 나뉩니다.
시간 지역성
공간 지역성
캐시에 원하는 내용이 들어 있는 경우 캐시 히트 라고 하며,
내용이 별로 없는 경우를 캐시 미스라고 합니다.

운영체제의 역할 중 하나인 메모리 관리 방법의 하나로, 컴퓨터에게 주어진 한정된 메모리를 효율적으로 사용하는 방법입니다.
스와핑
페이지 폴트
스레싱
메모리 단편화
메모리 할당
시작 메모리 위치, 메모리의 할당 크기를 기반으로 연속 할당과 불연속 할당으로 나뉩니다.
연속 할당 - 고정 분할 방식: 메모리를 미리 나누어 관리하는 방식, 융통성이 없고 내부 단편화가 발생하는 단점이 있습니다.
연속 할당 - 가변 분할 방식: 매 시점 프로그램의 크기에 맞게 동적으로 메모리를 나눠 사용하는 방식, 내부 단편화는 발생하지 않으나, 외부 단편화는 발생할 수 있습니다.
불연속 할당 - 페이징: 동일한 크기의 페이지 단위로 나누어 관리하는 방법. 내부 단편화가 생기게 되며, 주소 변환이 복잡해집니다.
불연속 할당 - 세그멘테이션: 프로세스를 의미 단위인 세그먼트로 나누어 관리하는 방법. 공유와 보안 높아지지만, 홀 크기가 균일하지 않다는 단점이 있습니다.
불연속 할당 - 페이지드 세그멘테이션: 공유나 보안을 의미 단위인 세그먼트로 나누고, 물리적 메모리는 동일한 크기의 페이지 단위로 관리하는 방법.
메모리 스와핑을 가장 덜 일어나도록 하는 다양한 알고리즘이 존재합니다.
속도가 빠르고, 저장 용량이 작은 순서
프로그램이 수행될 때 나타나는 지역성을 이용하여 메모리나 디스크에서 사용되었던 내용을 특별히 빠르게 접근할 수 있는 곳에 보관하고 관리함으로써 이 내용을 다시 필요로 할 때 보다 빠르게 참조하도록 하는 것입니다.
캐시히트
캐시 메모리에 찾는 데이터가 존재할 때
캐시미스
캐시 메모리에 찾는 데이터가 존재하지 않을 때를 나타내며, 메모리 저장소로부터 필요한 데이터를 찾아 캐시 메모리 로드합니다.
프로세스에서 사용하는 가상 메모리 주소와 실제 물리적 메모리 주소는 다를 수 있습니다. 따라서 메모리 == 실제 메모리 + 가상 메모리라고 생각하면 안됩니다.
메모리가 부족해서 가상 메모리를 사용하는 것은 맞지만, 가상 메모리를 쓴다고 실제 메모리처럼 사용하는 것은 아닙니다.
실제 메모리 안에 공간이 부족하면, 현재 사용하고 있지 않은 데이터를 빼내어 가상 메모리에 저장해두고, 실제 메모리에선 처리만 하게 하는 것이 가상 메모리의 역할입니다.
즉, 가상 메모리가 하는 일은 실제 메모리에 놀고 있는 공간이 없게 계속 일을 시키는 것 입니다.
페이징은 동일한 크기의 페이지 단위로 나누어 메모리의 서로 다른 위치에 프로세스를 할당합니다. 홀의 크기가 균일하지 않은 문제가 없어지지만, 주소 변환이 복잡해집니다.
사용자/프로그래머 관점의 메모리 관리 기법. 페이징 기법은 같은 크기의 페이지를 갖는 것 과는 다르게 논리적 단위(세그먼트)로 나누므로 미리 분할하는 것이 아니고 메모리 사용할 시점에 할당됩니다.
페이징 기법으로 메모리를 관리하는 운영체제에서 필요한 페이지가 주기억장치에 적재되지 않았을 시(페이징 부재시) 어떤 페이지 프레임을 선택해 교체할 것인지 결정하는 방법을 페이지 교체 알고리즘이라고 합니다.
FIFO(first in first out)
메모리가 할당된 순서대로 페이지를 교체
LRU(least-recently-used)
최근에 가장 오랫동안 사용하지 않은 페이지를 교체
문제점: 오래된 것을 파악하기 위해 각 페이지마다 계수기, 스택을 두어야 합니다.
LFU(least-frequently-used)
참조 횟수가 가장 작은 페이지를 교체
MFU(most-frequently-used)
LFU 알고리즘과 반대로, 참조 횟수가 가장 많은 페이지를 교체
주기억장치의 종류에는 크게 RAM과 ROM 두 가지가 있고, 메모리 라는 용어는 그 중 RAM을 지칭하는 경우가 많습니다.
컴퓨터 내부에서 현재 CPU가 처리하고 있는 내용을 저장하고 있는 기억장치입니다.
비교적 용량이 크고 처리 속도가 빠릅니다.
CPU의 명령에 의해 기억된 장소에 직접 접근하여 읽고 쓸 수가 있습니다.
잘 읽었습니다 😀