메모리 계층 구조
메모리는 속도와 용량에 따라 다음과 같은 계층으로 구성됩니다.
- 레지스터: CPU 내부의 초고속 휘발성 메모리. 속도는 가장 빠르며 용량은 가장 작습니다.
- 캐시(Cache): L1, L2, L3 캐시로 구성. 휘발성이며 속도는 빠르고 용량은 적습니다.
- 주기억장치(Main Memory, RAM): 휘발성이며 속도와 용량은 중간 수준입니다.
- 보조기억장치(HDD, SSD): 비휘발성이며 속도는 느리지만 용량은 큽니다.
캐시(Cache)
캐시는 빠른 장치(CPU)와 느린 장치(메모리) 간 속도 차이를 보완하기 위한 임시 저장소입니다.
지역성의 원리
- 시간 지역성: 최근에 사용된 데이터가 다시 사용될 가능성이 높음
- 공간 지역성: 접근된 데이터의 근처 주소도 접근될 가능성이 높음
캐시 히트와 캐시 미스
- 캐시 히트: 필요한 데이터가 캐시에 있어 빠르게 처리 가능
- 캐시 미스: 데이터가 캐시에 없어 메모리에서 가져와야 하므로 느림
캐시 매핑 방식
- 직접 매핑: 빠르지만 충돌이 잦음
- 연관 매핑: 충돌 적음, 탐색 느림
- 집합 연관 매핑: 블록 단위로 관리해 효율적
웹 브라우저 캐시
- 쿠키: 만료기한 있는 키-값 저장소 (4KB)
- 로컬 스토리지: 만료기한 없는 저장소, 탭 간 공유됨 (5MB)
- 세션 스토리지: 탭 단위 저장소, 탭 종료 시 삭제 (5MB)
DB 캐싱 계층
DB 성능 향상을 위해 Redis 같은 인메모리 DB를 캐싱 계층으로 사용합니다.
메모리 관리
가상 메모리
- 실제 메모리를 추상화하여 더 큰 메모리를 제공하는 기술
- 가상 주소 ↔ 실제 주소 매핑은 페이지 테이블로 관리
- 변환 속도 향상을 위해 TLB 사용
TLB (Translation Lookaside Buffer)
- 주소 변환을 빠르게 하기 위한 캐시
스와핑과 페이지 폴트
- 가상 주소 접근 → 해당 페이지 없음 → trap 발생
- OS가 사용하지 않는 프레임을 찾아 디스크에서 데이터 가져옴
- 페이지 교체 후 페이지 테이블 갱신 → 명령 재실행
- 페이지: 가상 메모리 최소 단위
- 프레임: 실제 메모리 최소 단위
스레싱 (Thrashing)
- 페이지 폴트가 과도하게 발생해 성능 저하
해결 방법
- 작업세트: 자주 사용하는 페이지 묶음 미리 로드
- PFF(Page Fault Frequency): 페이지 폴트 비율에 따라 프레임 동적 조절
메모리 할당
연속 할당
- 고정 분할: 미리 메모리 나눔, 내부 단편화 발생
- 가변 분할: 동적 분할, 외부 단편화 발생
- 최초 적합: 빈 공간 중 첫 번째에 할당
- 최적 적합: 가장 딱 맞는 공간에 할당
- 최악 적합: 가장 큰 공간에 할당
불연속 할당
- 페이징(Paging): 동일 크기 페이지로 분할, 주소 변환 복잡
- 세그멘테이션: 의미 단위로 분할, 보안/공유 유리, 크기 불균형 발생
- 페이지드 세그멘테이션: 세그먼트를 페이지 단위로 쪼개어 결합
페이지 교체 알고리즘
오프라인 알고리즘
먼 미래에 참조되는 페이지와 현재 할당하는 페이지를 바꾸는 알고리즘, 하지만 미래에 사용되는 프로세스를 알 수 없기 때문에 성능 비교에 대한 상한 기준으로 사용
FIFO
가장 먼저 온 페이지를 교체 영역에 가장 먼저 놓는 방법
LRU
참조가 가장 오래된 페이지를 바꿈, 각 페이지마다 계수기와 스택을 두어야하는 문제점 존재
LFU
참조 횟수가 가장 적은 페이지를 교체
'OS' 카테고리의 다른 글
[OS] 프로세스와 스레드 (0) | 2025.05.07 |
---|---|
[OS] 운영체제와 컴퓨터 (0) | 2025.05.07 |