Section 2. 메모리
3.2.1 메모리 계층
레지스터 | CPU 안 작은 메모리 | 휘발성 | 속도 가장 빠름 | 기억 용량 가장 적음 |
캐시 | L1, L2 캐시 지칭 (L3도 존재) |
휘발성 | 속도 빠름 | 기억 용량 적음 |
주기억장치 | =RAM | 휘발성 | 속도 보통 | 기억 용량 보통 |
보조기억장치 | =HDD, SSD | 비휘발성 | 속도 낮음 | 기억 용량 많음 |
캐시
- 개념
- 데이터를 미리 복사하는 임시 저장소
- 빠른 장치와 느린 장치에서 속도 차이에 따른 병목 현상을 줄이기 위한 메모리
- 캐싱 계층이란?
- 메모리-CPU 사이 속도 차이를 해결하기 위해 중간에 레지스터 계층을 둠. 이처럼 속도 차이 해결을 위해 계층 사이에 있는 계층을 캐싱 계층이라고 함.
캐싱 계층을 두는 것 말고, 캐시를 직접 설정할 때는 어떻게 할까?- 자주 사용하는 데이터를 기반으로 설정함.
- 자주 사용하는 데이터 어떻게 알아? - 지역성으로!
- 시간 지역성: 최근 사용한 데이터에 다시 접근하려는 특성
- 공간 지역성: 최근 접근한 데이터를 이루고 있는 공간이나 그 가까운 공간에 접근하려는 특성
- 자주 사용하는 데이터 어떻게 알아? - 지역성으로!
- 자주 사용하는 데이터를 기반으로 설정함.
- 캐시히트와 캐시미스
- 캐시히트: 캐시에서 원하는 데이터를 찾음. CPU 내부 버스 기반으로 작동하여 속도 빠름.
- 캐시매핑
- 캐시가 히트되기 위해 매핑하는 방법. CPU의 레지스터 - RAM(주메모리) 간 데이터 송신 기반으로 설명.
- 분류
- 직접 매핑: 순서를 일치시켜 매핑함. 처리가 빠르지만 충돌 발생이 잦음
- 연관 매핑: 관련 있는 캐시와 메모리를 매핑함(순서x). 충돌이 적지만 모든 블록 탐색으로 속도가 느림.
- 집합 연관 매핑: 직접 매핑 + 연관 매핑. 순서 일치시키고 집합을 둬 저장하며 블록화되어 있기 때문에 검색이 더 효율적이다.
- 캐시매핑
- 캐시미스: 해당 데이터가 없어 주메모리로 가 데이터를 찾아옴. 시스템 버스 기반으로 작동하여 속도 느림.
- 캐시히트: 캐시에서 원하는 데이터를 찾음. CPU 내부 버스 기반으로 작동하여 속도 빠름.
- 대표적 예시: 웹 브라우저의 캐시
- 쿠키: 만료기한이 있는 키-값 저장소. 4KB까지 데이터 저장이 가능하며 만료기한을 정할 수 있음.
- 로컬 스토리지: 만료기한이 없는 키-값 저장소. 10KB까지 저장할 수 있으며 웹 브라우저 종류 후에도 유지됨. 도메인 단위로 저장, 새성됨.
- 세션 스토리지: 만료기한이 없는 키-값 저장소. 탭 단위로 세션 스토리지를 생성하며, 탭 닫을 때 해당 데이터가 삭제됨. 5MB까지 저장 가능.
- 데이터베이스의 캐싱 계층
- 레디스(redis): 메인 데이터베이스 위에 레디스 데이터베이스 계층을 캐싱 계층으로 둬서 성능을 향상시킴.
3.2.2 메모리 관리
운영체제의 대표적 역할이 컴퓨터 내의 한정된 메모리를 잘 관리하는 것이다.
메모리 관리 기법
- 가상 메모리: 컴퓨터가 실제 이용 가능한 메모리 자원을 추상화하여 이를 사용하는 사용자들에게 큰 메모리로 보이게 만드는 것. 가상 메모리는 메인 메모리를 크고 균등한 저장장치의 배열로 추상화하여, 사용자에게 보이는 논리 메모리를 물리 메모리로부터 분리시킨다. 이를 통해, 메모리 저장장치의 한계로부터 자유롭게 해준다.
- 사용자는 실제 주소를 의식하지 않고 프로그램을 구축해도 된다.
- 가상 주소 -메모리관리장치(MMU)-> 실제 주소
- 페이지 테이블(가상-실제 주소 매핑 정보, 프로세스 주소 정보 포함)로 관리된다. 이때, 속도 향상을 위해 TLB(메모리와 CPU 사이에 있는 주소 변환을 위한 캐시. 페이지 테이블에 있는 리스트를 보관)를 사용한다.
- 스와핑: 가상 메모리에는 존재, 실제 메모리인 RAM에는 부재한 데이터나 코드에 접근할 경우 페이지 폴트가 발생한다. 이때 메모리에서 안 쓰는 영역을 하드디스크로 옮기고, 하드디스크의 일부분을 메모리처럼 불러와 쓰는 것을 스와핑이라고 한다. 이를 통해, 페이지 폴트가 발생하지 않은 것처럼 만들 수 있다. (페이지: 가상 메모리를 사용하는 최소 크기 단위)
- 페이지 폴트와 그로 인한 스와핑 진행 과정
- CPU는 물리 메모리 확인 후 해당 페이지가 없으면 트랩을 발생해서 운영체제에 알림
- 운영체제는 CPU의 동작을 잠시 멈춤
- 페이지 테이블을 확인하여 가상 메모리에 페이지가 존재하는지 확인. 없으면 프로세스를 중단하고 현재 물리 메모리에 비어 있는 프레임이 있는지 찾음. 물리 메모리에도 없다면 스와핑 발동.
- 비어 있는 프레임에 해당 페이지를 로드하고, 페이지 테이블을 최신화
- 중단된 CPU 재시작
- 페이지 폴트와 그로 인한 스와핑 진행 과정
- 사용자는 실제 주소를 의식하지 않고 프로그램을 구축해도 된다.
- 스레싱: 메모리의 페이지 폴트율이 높은 것을 의미한다. 이는 컴퓨터의 심각한 성능 저하를 초래한다.
- 메모리에 너무 많은 프로세스가 동시에 올라가 스와핑이 많이 일어나는 경우 발생. 페이지 폴트가 일어나면 CPU 이용률이 낮아지고, CPU가 한가한 것으로 생각하여 더 많은 프로세스를 메모리에 올리게 된다. 이러한 악순환이 반복되며 스레싱이 일어난다.
- 해결방법
- 메모리를 늘림
- HIDD 사용 대신 SSD 사용
- 운영체제에서 해결할 수 있는 방법: 작업 세트, PFF
- 작업 세트: 프로세스의 과거 사용 이역인 지역성을 통해 결정된 페이지 집합을 만들어 미리 메모리에 로드하는 것.(비용, 스와핑 줄일 수 있음)
- PFF(Page Fault Frequency): 페이지 폴트 빈도 조절 방법으로 상한선과 하한선 만듦. 상한선 도달-프레임 늘리고, 하한선 도달-프레임 줄임. (프레임: 실제 메모리 사용하는 최소 크기 단위)
- 메모리 할당: 시작 메모리 위치, 메모리 할당 크기를 기반으로 할당한다.
- 연속 할당: 메모리에 연속적으로 공간 할당
- 고정 분할 방식: 메모리를 미리 나누어 관리하는 방식. 융통성 없음, 내부 단편화 발생
- 가변 분할 방식: 매 시점 프로그램의 크기에 맞게 동적으로 메모리 나누어 사용. 외부 단편화 발생 가능(내부 단편화는 x).
- 종류
- 최초적합: 위쪽 or 아래쪽부터 시작해 홀(할당 가능한 빈 메모리 공간)을 찾으면 바로 할당
- 최적적합: 프로세스의 크기 이상인 공간 중 가장 작은 홀부터 할당
- 최악적합: 프로세스의 크기와 가장 차이가 나는 홀에 할당
- 종류
- 불연속 할당: 메모리에 불연속적으로 공간 할당
- 페이징 기법: 메모리를 동일한 크기의 페이지로 나누어 메모리의 서로 다른 위치에 프로세스를 할당함.
- 장점: 홀의 크기가 균일하지 않은 문제 해소
- 단점: 주소 변환 복잡
- 세그멘테이션: 의미 단위인 segment로 나누는 방식(페이지 단위X)
- 프로세스를 이루는 메모리의 영역: 코드, 데이터, 스택, 힙
- 코드 | 데이터
- 코드 내 작은 함수를 세그먼트로 두기
- 장점: 공유와 보안 측면에서 좋음
- 단점: 홀 크기가 균일하지 않음
- 프로세스를 이루는 메모리의 영역: 코드, 데이터, 스택, 힙
- 페이지드 세그멘테이션: 페이징 + 세그멘테이션
- 장점: 공유, 보안 측면에서 좋음 - 의미 단위인 세그먼트로 나눔
- 단점: 홀 크기 균일 - 동일한 크기의 페이지 단위로 나눔
- 페이징 기법: 메모리를 동일한 크기의 페이지로 나누어 메모리의 서로 다른 위치에 프로세스를 할당함.
- 연속 할당: 메모리에 연속적으로 공간 할당
- 페이지 교체 알고리즘
- 페이지 교체 알고리즘(Page Replacement Algorithm)은 페이징 기법을 사용하여 메모리를 관리하는 운영체제에서, 필요한 페이지가 주기억장치(RAM)에 적재되지 않아 페이지 부재(Page Fault)가 발생했을 때, 어떤 페이지를 선택하여 교체할지 결정하는 방법을 말한다.
이는 RAM의 크기가 제한적이기 때문에 모든 페이지를 동시에 적재할 수 없으며, 페이지 부재를 처리하고 시스템 성능을 유지하기 위해 설계되었다. 페이지 교체 알고리즘은 교체 대상 페이지를 효율적으로 선정함으로써, 페이지 부재로 인한 성능 저하를 최소화하는 것을 목표로 한다. - 종류
- Best! 오프라인 알고리즘(offline algorithm): 먼 미래에 참조되는 페이지와 현재 할당하는 페이지를 바꾸는 알고리즘이다. - 현실적으로 미래에 사용되는 프로세스를 알긴 불가능. 그러나 가장 좋은 알고리즘이기 때문에 다른 알고리즘과 성능 비교에 대한 상한기준을 제공한다.
- FIFO: 가장 먼 온 페이지를 교체 영역에 가장 먼저 놓는 방법
- LRU(Least Recentle Used): 참조가 가장 오래된 페이지를 바꾼다.
- 문제점: 오래된 것을 파악하기 위해 각 페이지마다 계수기, 스택을 두어야 함
- 구현을 위한 자료 구조
- 해시 테이블: 이중 연결 리스트에서 빠르게 검색
- 이중 연결 리스트: 한정된 메모리 환경에 맞춰 캐시 순서 관리
- NUR(Not Used Recently): clock 알고리즘이라고도 한다. 1(최근에 참조됨)/ 0(참조되지 않음). 시계방향으로 돌면서 0을 찾아 해당 프로세스를 교체하고 1로 바꾼다.
- LFU(Least Frequently Used): 가장 참조 횟수가 적은(=많이 사용되지 않은) 페이지를 교체한다.
- 페이지 교체 알고리즘(Page Replacement Algorithm)은 페이징 기법을 사용하여 메모리를 관리하는 운영체제에서, 필요한 페이지가 주기억장치(RAM)에 적재되지 않아 페이지 부재(Page Fault)가 발생했을 때, 어떤 페이지를 선택하여 교체할지 결정하는 방법을 말한다.
'Development > CS' 카테고리의 다른 글
[면접을 위한 CS 전공 지식 노트] 3.4 CPU 스케줄링 알고리즘 (1) | 2025.01.15 |
---|---|
[면접을 위한 CS 전공 지식 노트] 3.3 프로세스와 스레드 (0) | 2025.01.15 |
[면접을 위한 CS 전공 지식 노트] 3.1 운영체제와 컴퓨터 (0) | 2025.01.15 |
네트워크 심화 공부 - IP, 너 누구야 (0) | 2025.01.10 |
[면접을 위한 CS 전공 지식 노트] 2.5 HTTP (0) | 2025.01.08 |