3-2-1. 메모리 계층
레지스터
CPU 안에 있는 작은 메모리이며 데이터와 명령어를 저장하는 역할
- 가장 빠른 속도
- 휘발성
- 가장 작은 기억 용량
- CPU 안에서 연산을 처리하기 위한 데이터를 저장하는 공간
캐시 (CPU 캐시)
CPU의 성능을 향상시키기 위해 CPU 칩 안에 포함된 빠르고 작은 메모리
- 프로그램이 직접 읽기/쓰기가 불가능하며 메모리 관리 시스템 (MMU) 가 제어
- 메인 메모리에 있는 데이터를 캐시 메모리에 가져와 CPU가 필요한 데이터를 캐시에서 먼저 찾도록 한다.
- CPU 와 별도로 있는 공간이며 메인 메모리와 CPU 간의 속도 차이를 극복하기 위해 데이터를 저장하는 공간
💡
캐시는 데이터를 미리 복사해 놓는 임시 저장소이며, 빠른 장치와 느린 장치에서 속도 차이에 따른 병목 현상을 줄이기 위한 메모리를 말한다. 즉, 크기와 속도가 다른 두 메모리 사이에 버퍼역할을 하는 메모리를 캐시 계층 메모리라 부르며, 주메모리는 CPU 캐시메모리와 보조메모리 사이의 캐시 메모리라고 할 수 있다.
💡
시간지역성: 최근 사용한 데이터에 다시 접근하려는 특성
공간지역성: 최근 접근한 데이터를 이루고 있는 공간 혹은 그 가까운 공간에 접근하는 특성
메인메모리
주로 RAM 을 메인메모리라고 하며, 램은 하드디스크 등 보조기억장치로부터 일정량의 데이터를 복사해서 임시 저장하고 이를 필요 시마다 CPU에 빠르게 전달하는 역할이다.
캐시히트와 캐시미스
캐시히트 : 캐시에서 원하는 데이터를 찾았을 때
캐시미스 : 캐시에서 찾는 데이터가 없어 주메모리로 가서 데이터를 찾아올 때
캐시미스가 발생했을 때는 시스템버스를 통해 데이터를 받아야 하기 때문에 CPU 내부버스를 통해 전달하는 것보다 느리다.
3-2-2. 메모리 관리
가상 메모리
가상메모리(virtual memory) 는 메모리 관리 기법의 하나로 컴퓨터가 실제로 이용 가능하는 메모리 자원을 추상화하여 사용자들에게는 매우 큰 메모리로 보이게 만드는 기법을 말한다.
- 가상으로 주어진 주소를 가상주소(logical address), 실제 메모리상에 있는 주소를 실제주소(physical address) 라고 한다.
- 가상 주소는 메모리관리장치 (MMU) 에 의해 실제 주소로 변환된다.
- 가상주소와 실제주소가 매핑되어 있는 프로세스의 주소 정보가 들어 있는 페이지 테이블로 관리
- MMU 안의 TLB 라는 캐시로 CPU가 페이지 테이블까지 가지 않도록 해 속도를 향상
- 가상주소를 갖고 물리주소에 접근할 때, TLB > Page Table > Disk 순으로 접근해 물리주소를 찾는다.
💡
page: 크기가 동일한 크기의 block
paging table: page의 가상주소(시작점)과 fragme의 물리주소(시작점)을 매핑한 표이며, 이를 통해 프로세스의 PCB 에 Page Table을 가리키는 주소와 offset (페이지 시작점와의 거리) 을 통해 데이터가 있는 물리주소를 찾아낸다.
페이지폴트
프로그램이 자신의 가상 주소 공간에는 존재하지만 RAM에 없는 데이터나 코드에 접근했을 경우에 발생
스와핑
페이지폴트가 발생했을 때 메모리에서 당장 사용하지 않는 영역을 하드디스크로 옮기고 하드디스크의 일부분을 메모리처럼 불러와 사용해 마치 페이지 폴트가 일어나지 않는 것처럼 보이게 하는 기법을 말한다.
페이지폴트와 스와핑의 과정
- CPU 가 물리 메모리를 확인해 해당 페이지가 없으면 트랩을 발생시켜 OS에게 알린다.
- OS는 CPU의 동작을 중지시킨다.
- OS는 페이지 테이블을 확인해 가상메모리가 있는지 확인하고 없으면 프로세스를 중단하고 물리 메모리에 비어 있는 프레임을 찾고, 없다면 스와핑 발생
- 비어 있는 프레임에 해당 페이지를 로드하고, 페이지 테이블을 최신화
- CPU 재가동
스레싱
메모리의 페이지 폴트율이 높은 것을 의미하며 컴퓨터의 심각한 서능 저하를 발생한다.
페이지 폴트가 일어나면 CPU의 이용률이 낮아져 OS는 CPU의 가용성을 더 높이기 위해 더 많은 프로세스를 메모리에 올리며 악순환을 반복한다. 운영체에서 이를 해결할 수 있는 방법은 작업세트와 PFF가 있다.
작업 세트
작업 세트(working set)은 프로세스의 과거 사용 이력인 지역성을 통해 페이지 집합을 만들어 미리 메모리에 로드하는 것을 말하며, 이를 통해 탐색에 드는 비용과 스와핑을 줄일 수 있다.
PFF
PFF(Page Fault Frequency)는 페이지 폴트 빈도를 조절하는 방법으로 상한선과 하한선을 만들어 상한선에 도달하면 프레임을 늘리고 하한선에 도달하면 프레임을 줄인다.
메모리 할당
연속할당
메모리에 연속적으로 공간을 할당하는 것을 말한다.
- 고정 분할 방식: 메모리를 특정 크기인 파티션으로 미리 나누어 관리하는 방식. 파티션이 프로세스크기보다 크다면 사용못하고 공간이 남는 내부 단편화가 발생할 수 있다.
- 가변 분할 방식: 매 시점 프로그램의 크기에 맞게 동적으로 메모리를 나눠 사용하는 방식. 프로세스가 재배치되는 과정에서 사용되지 않는 공간인 외부단편화가 발생할 수 있다.
- 외부단편화를 해결하기 위해 파티션을 동적으로 재배치시켜 남는 빈공간을 하나로 묶는 메모리 집약을 사용하지만 시간이 오래 걸린다.
불연속 할당
메모리를 연속적으로 할당하지 않는 불연속 할당은 현대 운영체제가 쓰는 방법
- 페이징 기법
- 프레임: 주기억장치를 고정된 크기로 나누어 만든 물리적 개념
- 페이지: 프로세스를 고정된 크기로 나누어 만든 논리적 개념
- MMU 을 통해 비연속적으로 저장된 프레임 주소를 페이지 테이블의 논리 주소를 통해 연속적으로 표현하여 주소를 매핑한다.
- 세그멘테이션 기법: 프로세스를 이루는 코드, 데이터, 스택, 힙 영역을 동일하지 않은 크기인 세그먼트 조각으로 나누는 방법. 공유와 보안 측면에서 장점을 가지지만 홀 크기가 균일하지 않다.
- 페이지드 세그멘테이션 기법: 프로그램을 의미 단위인 세그먼트로 나눠 공유나 보안 측면에 강점을 두고 동일한 크기의 페이지 단위로 나누는 것
페이지 교체 알고리즘
FIFO (First In First Out)
가장 먼저 온 페이지를 교체 영역에 가장 먼저 놓는 방법
LRU (Least Recentle Used)
참조가 가장 오래된 페이지를 변경. 오래된 것을 파악하기 위해 각 페이지마다 계수기, 스택을 두어야 한다.
NUR (Not Used Recently)
clock 알고리즘이라고 하며 0 (참조되지 않음)과 1 (최근 참조)의 비트로 시계방향으로 돌면서 0 를 찾은 순간 해당 프로세스를 교체하고 1로 바꾸는 알고리즘.
LFU (Least Frequently Used)
가장 참조 횟수가 적은 페이지를 교체. 즉, 많이 사용되지 않은 것을 교체하는 알고리즘
[OS] 페이지 교체 알고리즘 - FIFO/LRU/LFU/MFU/NUR
💡 페이지 교체 알고리즘 운영체제는 주기억장치보다 더 큰 용량의 프로그램을 실행하기 위해 프로그램의 일부만 주기억장치에 적재하여 사용한다. 이를 가상메모리 기법이라 한다. 페이징 기
doh-an.tistory.com
알고리즘 참고