** 본 포스팅은 '면접을 위한 CS 전공지식 노트'를 바탕으로 공부한 내용을 정리한 것입니다.
CPU는 메모리에 올라와 있는 프로그램의 명령어들을 실행할 뿐!
메모리 계층
메모리 계층은 레지스터, 캐시, 메모리, 저장장치로 구성
- 크기가 작을수록(상위계층) 속도가 빠르며 용량이 작다
- 레지스터 : CPU안에 있는 작은 메모리, 휘발성, 속도 가장 빠름, 기억 용량이 가장 적음
- 캐시 : L1, L2캐시를 지칭
- 주기억장치 : 메모리 즉 RAM 지칭
- 보조기억장치 : HDD, SDD 지칭
메모리 계층이 있는 이유?
-
캐시
-
데이터를 미리 복사해놓는 임시저장소
-
빠른 장치와 느린 장치에서 속도 차이에 따른 병목 현상을 줄이기 위한 메모리
→ 메모리와 CPU 사이의 속도차이가 너무 커서 그 중간에 레지스터 계층을 두어 속도 차이를 해결한다.
→ 이러한 속도 차이를 위해 만든 계층을 캐싱 계층이라 한다.
-
지역성의 원리
- 시간 지역성
- 공간 지역성
- 최근 접근한 데이터를 이루고 있는 공간 혹은 그 가까운 공간에 접근하는 특성
-
캐시히트와 캐시미스
- 캐시히트 : 캐시에서 원하는 데이터를 찾은 것
- 캐시미스 : 해당 데이터가 캐시에 없다면 주 메모리로 가서 데이터를 찾아오는 것
- 캐시매핑
- 캐시가 히트되기 위해 매핑하는 방법
- CPU의 레지스터와 주 메모리(RAM) 간에 데이터를 주고 받을 때를 기반으로 설명
- 웹 브라우저의 캐시
- 쿠키
- 로컬 스토리지
- 만료기한이 없는 키-값 저장소
- 웹 브라우저를 닫아도 유지되고 도메인 단위로 저장, 생성
- 클라이언트에서만 수정 가능
- 세션 스토리지
- 만료기한이 없는 키-값 저장소
- 탭 단위로 세션 스토리지를 생성, 탭을 닫을 때 해당 데이터가 삭제
- 클라이언트에서만 수정 가능
- 데이터베이스의 캐싱 게층
- 데이터베이스 위에 레디스 데이터 베이스 게층을 ‘캐싱 계층’으로 두어 성능을 향상
메모리 관리
- 운영체제의 대표적인 할일 중 하나
- 컴퓨터 내의 한정된 메모리를 극한으로 활용하는 것
-
가상 메모리
- 컴퓨터가 실제로 이용 가능한 메모리 자원을 추상화하여 사용자들에게 매우 큰 메모리로 보이게 만드는 것
- 가상 메모리는 가상 주소와 실제 주소가 매핑되어 있음
- 프로세스의 주소 정보가 들어있는 ‘페이지 테이블’로 관리
- 스와핑
- 당장 사용하지 않는 영역을 하드디스크로 옮겨 필요할 때 다시 RAM으로 불러와 올리고, 사용하지 않으면 다시 하드디스크로 내림을 반복하여 RAM을 효과적으로 관리하는 것
- 가상 메모리에는 존재하지만 실제 RAM에는 없는 데이터에 접근할 때 발생하는 페이지 폴트를 방지하기 위함
- 페이지 폴트
- 프로세스의 주소 공간에는 존재하지만 지금 이 컴퓨터의 RAM에는 없는 데이터에 접근했을 경우 발생
-
스레싱
- 메모리의 페이지 폴트율이 높은 것 → 심각한 성능 저하를 초래
- 메모리에 너무 많은 프로세스가 동시에 올라가면 스와핑이 많이 일어나서 발생
- 페이지 폴트 발생 → CPU 이용률 낮아짐 → 더 많은 프로세스를 메모리에 올림 → 악순환 반복… ⇒ 스레싱 발생
운영체제에서 스레싱을 해결하는 법
- 작업세트
- 프로세스의 과거 사용 이력인 지역성을 통해 결정된 페이지 집합을 만들어서 미리 메모리에 로드
- PFF (Page Fault Frequency)
- 페이지 폴트 빈도를 조절하는 방법
- 상한선과 하한선을 만들어, 상한선에 도달하면 페이지를 늘리고 하한선에 도달하면 페이지를 줄임
-
메모리 할당
- 시작 메모리 위치, 메모리의 할당 크기를 기반으로 할당
- 연속 할당
- 프로세스를 순차적으로 공간에 할당하는 것
- 고정 분할 방식 : 메모리를 미리 나누어 관리
- 가변 분할 방식 : 매 시점 프로그램의 크기에 맞게 동적으로 메모리를 나눠 사용
- 불연속 할당
- 페이징 : 동일한 크기의 페이지 단위로 나누어 메모리의 서로 다른 위치에 프로세스를 할당
- 세그멘테이션 : 의미단위인 세그먼트로 나눈다.
- 페이지드 세그멘테이션 : 공유나 보안을 의미 단위의 세그먼트로 나누고, 물리적 메모리는 페이지로 나누는 것
-
페이지 교체 알고리즘
- 오프라인 알고리즘 : 먼 미래에 참조되는 페이지와 현재 할당하는 페이지를 바꾸는 것
- FIFO (First In First Out)
- 가장 먼저 온 페이지를 교체 영역에 먼저 놓는 방법
- LRU (Least Recentle Used)
- 참조가 가장 오래된 페이지를 바꾸는 것
- 해시 테이블과 이중 연결 리스트로 구현
- LFU (Least Frequently Used)
- 가장 참조 횟수가 적은 페이지를 교체 (많이 사용되지 않은 것)