CPU는 '메모리'에 올라와 있는 프로그램의 명령어들을 실행한다.
메모리 계층과 메모리 관리를 알아보자.
메모리 계층 구조(Memory hierarchy)란 메모리를 필요에 따라 여러 가지 종류로 나누어 둠을 의미한다.
메모리 계층은 레지스터, 캐시, 메모리, 저장장치로 구성되어 있다.
메모리계층 | 설명 | 휘발성 | 속도 | 기억용량 | 가격 |
---|---|---|---|---|---|
레지스터 | 고속 메모리 | 휘발성 | 가장 빠름 | 가장 적음 | 가장 비쌈 |
캐시 | L1, L2캐시 | 휘발성 | 빠름 | 적음 | 비쌈 |
주기억장치 | RAM | 휘발성 | 보통 | 보통 | 보통 |
보조기억장치 | HDD, SSD | 비휘발성 | 낮음 | 많음 | 저렴 |
캐시(cache)는 데이터를 미리 복사해 놓는 임시 저장소이자 빠른 장치와 느린 장치에서 속도 차이에 따른 병목 현상을 줄이기 위한 메모리를 말한다.
지역성의 원리
캐시를 설정할 때는 자주 사용하는 데이터를 기반으로 설정해야 하는데, 자주 사용하는 데이터는 지역성을 근거로 파악할 수 있다.
캐시 히트와 캐시 미스
캐시에서 원하는 데이터를 찾았다면 캐시히트라고 하며, 해당 데이터가 캐시에 없다면 주메모리로 가서 데이터를 찾아오는 것을 캐시미스라고 한다.
캐시히트의 경우 데이터를 제어장치를 거쳐 가져오게 되는데, CPU 내부 버스를 기반으로 작동하기 때문에 빠르다.
반면 캐시미스의 경우 메모리에서 가져오게 되는데, 이는 시스템 버스를 기반으로 작동하기 때문에 느리다.
CPU 내부 버스: CPU 내부에 있는 장치를 연결하는 버스 Back Side Bus
시스템 버스: 메모리와 주변 장치를 연결하는 버스 Front side Bus
캐시매핑
캐시매핑이란 캐시가 히트되기 위해 매핑하는 방법을 말하며 CPU의 레지스터와 주 메모리(RAM)간에 데이터를 주고받을 때를 기반으로 설명한다.
레지스터는 굉장히 작고 주 메모리는 굉장히 크기 때문에 작은 레지스터가 캐시 계층으로서 역할을 잘 해주려면 매핑을 어떻게 하느냐가 중요하다.
웹 브라우저의 캐시
웹 브라우저의 캐시는 보통 사용자의 커스텀 정보나 인증 모듈 관련 사항들을 웹 브라우저에 저장해서 추후 서버에 요청할 때 자신을 나타내는 아이덴티티나 중복 요청 방지를 위해 쓰인다.
종류 | 만료 기한 | 저장 공간 | 사용처 |
---|---|---|---|
쿠키 🍪 | O | 4KB | 다시 보지 않음 팝업 |
로컬 스토리지 💻 | X | 10MB | 자동로그인 |
세션 스토리지 🔐 | X | 5MB | 비로그인 장바구니 |
로컬 스토리지 vs 세션 스토리지?
로컬 스토리지는 웹 브라우저를 닫아도 유지되고,
세션 스토리지는 탭을 닫을 때 해당 데이터가 삭제된다.
가상메모리는 메모리 관리 기법의 하나로 컴퓨터가 실제로 이용 가능한 메모리 자원을 추상화하여 이를 사용하는 사용자들에게 매우 큰 메모리로 보이게 만드는 것을 말한다.
가상으로 주어진 주소를 가상 주소(논리 주소)라고 하며, 실제 메모리상에 있는 주소를 실제 주소(물리 주소)라고 한다.
가상 주소는 메모리관리장치(MMU)에 의해 실제 주소로 변환되며, 이 덕분에 사용자는 실제 주소를 의식할 필요 없이 프로그램을 구축할수 있다.
가상 메모리는 페이지 테이블로 관리 되며, 속도 향상을 위해 TLB를 사용한다.
가상 메모리에는 존재하지만 실제 메모리인 RAM에는 없는 데이터나 코드에 접근 할 경우 페이지 폴트가 발생하는데, 이 때 메모리에서 당장 사용하지 않는 영역을 하드디스크로 옮기고 하드디스크의 일부분으르 마치 메모리처럼 불러와 쓰는 것을 스와핑(swapping)이라고 한다.
스레싱은 메모리의 페이지 폴트율이 높은 것을 의미한다.
이는 컴퓨터의 심각한 성능 저하를 초래하기 때문에 이를 해결하기 위한 방법으로는 메모리를 늘리거나, HDD를 SSD로 바꾸는 방법이 있다.
운영체제에서 이를 해결할 수 있는 방법은 작업 세트와 PFF가 있다.
HDD vs SSD ?
SSD는 전자적 신호로 데이터를 읽고 쓰고
HDD는 물리적으로 원판을 돌려 데이터를 읽고 쓰기 때문에 SSD가 더 빠르다.
작업 세트는 프로세스의 과거 사용 이력인 지역성을 통해 결정된 페이지 집합을 만들어서 미리 메모리에 로드하는 것이다. 미리 메모리에 로드하면 탐색에 드는 비용을 줄일 수 있고 스와핑 또한 줄일 수 있다.
PFF(Page Fault Frequency)는 페이지 폴트 빈도를 조절하는 방법으로 상한선에 도달하면 프레임을 늘리고 하한선에 도달하면 프레임을 줄이는 것이다.
메모리에 프로그램을 할당할 때는 시작 메모리 위치, 메모리의 할당 크기를 기반으로 할당하는데, 연속 할당과 불연속 할당으로 나뉜다.
연속 할당은 메모리에 연속적으로 공간을 할당하는 것을 말한다.
고정 분할 방식
고정 분할 방식은 메모리를 미리 나누어 관리하는 방식이며, 내부 단편화가 발생한다.
가변 분할 방식
가별 분할 방식은 매 시점 프로그램의 크기에 맞게 동적으로 메모리를 나눠 사용하는 방식으로, 외부 단편화가 발생할 수 있다.
내부 단편화 vs 외부 단편화 ?
내부 단편화는 메모리보다 프로그램이 작아서 공간이 남는 현상이고,
외부 단편화는 메모리보다 프로그램이 커서 들어가지 못하는 공간이 발생하는 현상을 말한다.
페이징
동일한 크기의 페이지 단위로 나누어 메모리의 서로 다른 위치에 프로세스를 할당하는 것을 말한다. 홀의 크기가 균일하지만 주소 변환이 복잡해진다.
세그멘테이션
세그멘테이션은 페이지 단위가 아닌 의미 단위인 세그먼트(segment)로 나누는 방식을 말한다. 공유와 보안 측면에서 좋지만 홀 크기가 균일하지 않은 문제가 발생된다.
페이지드 세그멘테이션
페이지드 세그멘테이션은 공유나 보안을 의미 단위의 세그먼트로 나누고, 물리적 메모리는 페이지로 나누는 것을 말한다.
페이지 교체 알고리즘을 기반으로 스와핑이 일어나기 때문에 스와핑이 많이 일어나지 않도록 설계되어야 한다.
오프라인 알고리즘
오프라인 알고리즘은 먼 미래에 참조되는 페이지와 현재 할당하는 페이지를 바꾸는 알고리즘이며, 다른 알고리즘과의 성능 비교에 대한 기준을 제공한다.
FIFO(First In First Out)
가장 먼저 온 페이지를 교체 영역에 가장 먼저 놓는 방법.
LRU(Least Recentle Used)
참조가 가장 오래된 페이지를 바꾸는 것.
NUR(Not Used Recently)
LRU에서 발전한 알고리즘으로 clock 알고리즘이라고도 하며 시계방향으로 돌면서 0비트를 찾고 0을 찾은 순간 해당 프로세스를 교체하고 해당 부분을 1로 바꾸는 알고리즘이다.
LFU(Least Frequently Used)
가장 참조 횟수가 적은 페이지를 교체하는 것.