📌 3.2.1 메모리 계층
- `레지스터`, `캐시`, `메모리`, `저장장치`로 구성
- `RAM`은 `하드디스크`로부터 `데이터를 복사해서 임시 저장하고 필요 시마다 CPU에 빠르게 전달`
- 계층 위로 올라갈수록 가격이 비싸지며 용량은 작아지고 속도는 빨라짐
- 이러한 경제성 때문에 계층을 두어 관리
캐시
- `데이터를 미리 복사`해 놓는 임시 저장소
- 빠른 장치와 느린 장치에서 속도 차이에 따른 병목 현상을 줄임
- 메모리와 CPU 사이의 속도 차이가 너무 커 레지스터 계층을 통해 해결
지역성의 원리
- 자주 사용하는 데이터를 기반으로 캐시 설정 필요
- 자주 사용하는 근거 - 지역성 !
- 시간 지역성 / 공간 지역성
`시간 지역성` 최근 사용한 데이터에 다시 접근하려는 특성
`공간 지역성` 최근 접근한 데이터를 이루고 있는 공간이나 그 가까운 공간에 접근하는 특성
캐시히트와 캐시미스
`캐시히트` 캐시에서 원하는 데이터를 찾은 것
`캐시미스` 해당 데이터가 캐시에 없을 때 주 메모리에 가서 데이터를 찾는 것
- 캐시히트를 하게 되면 CPU의 제어장치를 거쳐 가져옴 → 빠름
- 캐시미스가 발생되면 시스템 버스를 기반으로 작동하여 느림
캐시매핑
- 캐시가 히트되기 위해 매핑하는 방법
- CPU의 레지스터와 주 메모리 간 데이터를 주고받을 때 기반으로 설명
- 직접 매핑, 연관 매핑, 집합 연관 매핑이 있음
웹 브라우저의 캐시
- `쿠키`, `로컬 스토리지`, `세션 스토리지`가 있음
- 사용자의 커스텀 정보나 인증 모듈 관련 사항들을 웹 브라우저에 저장
`쿠키`
- 만료기한이 있는 키-값 저장소
- 4KB까지 저장, 만료기한을 정할 수 있음 (보통 서버에서 저장)
`로컬 스토리지`
- 만료기한이 없은 키-값 저장소
- 10MB까지 저장
- 웹 브라우저를 닫아도 유지
- 도메인 단위로 저장, 생성
- 클라이언트에서만 수정 가능
`세션 스토리지`
- 만료기한이 없는 키-값 저장소
- 탭 단위로 생성, 탭을 닫을 때 삭제
- 클라이언트에서만 수정 가능
데이터베이스의 캐싱 계층
- 데이터베이스 위에 레디스 데이터베이스 계층을 캐싱 계층을 둬 성능 향상
📌 3.2.2 메모리 관리
- 운영체제의 대표적인 할 일 → `메모리 관리`
가상 메모리
- 메모리 관리 기법
- 실제로 이용 가능한 메모리 자원을 추상화하여 사용자들에게 큰 메모리로 보이게 만듦
- 가상 주소는 메모리관리장치에 의해 실제 주소로 변환 (사용자가 의식할 필요 X)
- 가상 주소와 실제 주소가 매핑
- 프로세스의 주소 정보가 있는 `페이지 테이블`로 관리
→ 속도 향상을 위해 TLB를 사용 (주소 변환을 위한 캐시, CPU가 페이지 테이블까지 않도록!!)
스와핑
- 가상 메모리에는 존재하나 실제 메모리에는 현재 없는 데이터나 코드에 접근할 경우 `페이지 폴트` 발생
- 방지하기 위해 당장 사용하지 않는 영역을 하드디스크로 옮겨 필요할 때 다시 RAM으로 이동, 그리고 필요한 것을 RAM에 이동
- 이를 반복하여 RAM을 효과적으로 관리 → `스와핑`
페이지 폴트
`페이지`: 가상 메모리를 사용하는 최소 크기 단위
- 프로세스 주소 공간에 존재하지만 지금 RAM에는 없는 데이터에 접근했을 경우 발생
- 다음 과정을 통해 페이지 폴트가 발생하지 않은 것처럼 작동
1) 메모리를 확인하여 해당 페이지가 없다면 트랩 발생 (운영체제에게 알림)
2) 운영체제는 CPU의 동작을 멈춤
3) 운영체제는 페이지 존재를 확인하고, 없으면 현재 메모리에 비어 있는 프레임을 찾음, 물리 메모리에도 없다면 `스와핑` 발동
4) 비어 있는 프레임에 해당 페이지 로드, 페이지 테이블 최신화
5) CPU 재시작
스레싱
- 메모리의 `페이지 폴트율`이 높은 것
- 컴퓨터의 심각한 `성능 저하` 초래
- 메모리에 너무 많은 프로세스가 동시에 올라가면 스와핑이 많이 일어나 발생
- 페이지 폴트 발생 시 CPU 이용률이 낮아짐 -> 운영체제는 가용성을 높이기 위해 메모리에 더 올림
→ 악순환이 반복되어 스레싱 발생
`해결 방법`
1) 메모리 늘리기
2) HDD를 SDD로 교체
3) 운영체제의 해결방법인 `세트` `PFF`
`작업 세트`
- 프로세스 과거 사용 이력인 지역성을 통해 페이지 집합을 만들어 미리 메모리에 로드하는 방법
- 미리 로드 시 탐색 비용과 스와핑을 줄일 수 있음
`PFF`
- 페이지 폴트 빈도를 조절하는 방법 - 상한선과 하한선 만들기
- 상한선에 도달한다면 페이지를 늘리고 하한선에 도달한다면 페이지를 줄임
메모리 할당
- `시작 메모리 위치`, `메모리의 할당 크기`를 기반으로 할당
- `연속 할당`, `불연속 할당`으로 나뉨
연속 할당
- 메모리에 연속적으로 공간 할당
- `고정 분할 방식` `가변 분할 방식`
`고정 분할 방식` 메모리를 미리 나누어 관리, 융통성 없음, 내부 단편화 발생
`가변 분할 방식` 매 시점 프로그램 크기에 맞게 동적으로 메모리를 나눠 사용, 외부 단편화는 발생
`내부 단편화` 메모리를 나눈 크기보다 프로그램이 작아서 들어가지 못하는 공간이 많이 발생하는 현상
`외부 단편화` 메모리를 나눈 크기보다 프로그램이 커서 들어가지 못하는 공간이 많이 발생하는 현상
불연속 할당
- 메모리에 연속적이지 않게 공간 할당
- 현대 운영체제가 사용
- 페이징 기법, 세그멘테이션, 페이지드 세그멘테이션
`페이징`
- 동일한 크기의 페이지 단위로 나누어 메모리의 서로 다른 위치에 프로세스 할당
- 주소 변환이 복잡
- 프로그램마다 페이지 테이블을 둠
`세그멘테이션`
- 페이지 단위가 아닌 의미 단위인 `세그먼트`로 나누는 방식
- 공유와 보안 측면에서 좋음
- 홀 크기가 균일하지 못함
`페이지드 세그멘테이션`
- 공유나 보안을 의미 단위의 세그먼트로 나누고 물리적 메모리는 페이지로 나눔
페이지 교체 알고리즘
- 메모리는 한정되므로 스와핑이 많이 일어남
- `페이지 교체 알고리즘`을 기반으로 스와핑 발생
오프라인 알고리즘
- 먼 미래에 참조되는 페이지와 현재 할당하는 페이지를 바꿈
- 가장 좋은 방법이지만 우리가 알 수 있는 방법이 없음
- 즉 사용되지는 않는 알고리즘
FIFO
- 가장 먼저 온 페이지를 교체 영역에 가장 먼저 놓는 방법
LRU
- Least Recentle Used
- 참조가 가장 오래된 페이지를 교체하는 방법
- 각 페이지마다 계수기, 스택을 둬야 함
NUR
- LRU에서 발전한 clock 알고리즘
- 0과 1을 가진 비트를 둠 (1은 최근에 참조됨을 의미)
- 시계 방향으로 돌면서 0을 찾고 0을 찾은 순간 프로세스 교체
LFU
- Least Frequently Used
- 가장 참조 횟수가 적은 페이지를 교체
📌 요약
3.2.1 메모리 계층
메모리 계층 구조
- 구성: 레지스터, 캐시, 메모리, 저장장치
- RAM: 데이터를 하드디스크에서 복사해 임시 저장하고, 필요 시 CPU에 빠르게 전달
- 위로 올라갈수록 가격이 비싸지고, 용량은 작아지며, 속도는 빨라짐
캐시
- 데이터를 미리 복사해 놓는 임시 저장소
- CPU와 메모리 사이의 속도 차이를 줄여 병목 현상 완화
- 자주 사용하는 데이터를 기반으로 설정 (지역성의 원리)
- 시간 지역성: 최근 사용한 데이터를 다시 접근
- 공간 지역성: 최근 접근한 데이터의 근처 데이터를 다시 접근
캐시 히트와 캐시 미스
- 캐시 히트: 캐시에서 원하는 데이터를 찾음 (빠름)
- 캐시 미스: 캐시에 데이터가 없어 메모리에서 찾음 (느림)
캐시 매핑
- 직접 매핑, 연관 매핑, 집합 연관 매핑이 있음
웹 브라우저의 캐시
- 쿠키: 만료기한이 있는 키-값 저장소, 4KB 저장 가능
- 로컬 스토리지: 만료기한 없음, 10MB 저장 가능, 브라우저 닫아도 유지
- 세션 스토리지: 탭 단위로 생성, 탭을 닫으면 삭제
데이터베이스의 캐싱 계층
- 데이터베이스 위에 레디스 계층을 두어 성능 향상
3.2.2 메모리 관리
가상 메모리
- 메모리 관리 기법, 사용자에게 큰 메모리처럼 보이게 함
- 가상 주소를 실제 주소로 변환
- 페이지 테이블로 관리, TLB 사용
스와핑
- 필요하지 않은 데이터를 하드디스크로 옮겨 RAM 관리
- 페이지 폴트 발생 시 스와핑 동작
페이지 폴트
- 페이지가 없을 때 발생
- 운영체제가 트랩 발생, CPU 멈추고 페이지 로드 후 재시작
스레싱
- 페이지 폴트율이 높아 성능 저하
- 해결 방법: 메모리 늘리기, HDD를 SSD로 교체, 작업 세트, PFF
작업 세트와 PFF
- 작업 세트: 과거 사용 이력 기반으로 페이지 집합을 미리 로드
- PFF: 페이지 폴트 빈도 조절, 상한선과 하한선 설정
메모리 할당
- 연속 할당: 고정 분할 방식, 가변 분할 방식
- 불연속 할당: 페이징, 세그멘테이션, 페이지드 세그멘테이션
페이지 교체 알고리즘
- 오프라인 알고리즘: 먼 미래 참조 페이지 교체 (이론적)
- FIFO: 먼저 온 페이지 교체
- LRU: 가장 오래된 참조 페이지 교체
- NUR (Clock 알고리즘): 최근 참조 비트 기반 교체
- LFU: 참조 횟수가 적은 페이지 교체
'취준 > CS 정리' 카테고리의 다른 글
면접을 위한 CS 전공지식 노트 정리 - 3.3 프로세스와 스레드 (1) | 2024.07.16 |
---|---|
면접을 위한 CS 전공지식 노트 정리 - 3.1 운영체제와 컴퓨터 (0) | 2024.07.09 |
면접을 위한 CS 전공지식 노트 정리 - 2.5 HTTP (0) | 2024.07.04 |
면접을 위한 CS 전공지식 노트 정리 - 2.4 IP 주소 (0) | 2024.06.27 |
면접을 위한 CS 전공지식 노트 정리 - 2.3 네트워크 기기 (0) | 2024.06.21 |