3. 2 메모리
1. 메모리 계층
- 레지스터 : CPU 내부의 작은 휘발성 메모리, 속도가 가장 바르며 용량이 가장 적다.
- 캐시 : L1, L2 캐시를 지칭, 휘발성
- 주기억장치(RAM) : 휘발성
- 보조기억장치 : HDD, SSD 비휘발성
(아래 방향으로 속도는 느려지고 용량은 커진다.)
- 램은 하드디스크로부터 일정 데이터를 복사, 임시저장하고 필요 시마다 cpu에 전달한다. 비용과 캐시 문제로 계층을 나눠 관리한다.
캐시란, 데이터 임시 저장소이며 빠른 장치와 느린 장치 사이의 병목 현상을 줄여줄 수 있다. 또한, 데이터를 재사용 할 수 있게 기능하며 L1메모리는 CPU에 L2 메모리는 메인보드에 위치한다.
- 캐시히트 : 원하는 데이터를 캐시에서 찾은 경우
- 캐시미스 : 원하는 데이터를 찾을 수 없어 메모리에 접근하여 데이터를 찾아 가져오는 것
웹 브라우저의 캐시
- 쿠키 : 만료기한이 있는 키-값 저장소
- 로컬 스토리지 : 만료기한이 없는 키-값 저장소, HTML5 이상 지원
- 세션 스토리지 : 만료기한이 없는 키-값 저장소, 탭을 닫을 떄 데이터 삭제
-> 데이터베이스는 캐싱 계층을 통해 성능을 향상시키는 경우가 많다.
2. 메모리 관리(운영체제는 한정된 메모리를 효율적으로 사용해야 함)
- 가상 메모리 : 이용 가능한 메모리 자원을 추상화 하여 사용자에게 보여주고 실제 메모리의 주소와 매핑되어 있다.
- 스와핑 : 메모리에서 당장 필요없는 영역을 하드디스크로 옮기고 하드디스크의 일부를 메모리처럼 쓰는 것.
- 페이지 폴트 : 프로세스의 주소 공간에는 존재하지만 RAM에 없는 데이터에 접근 했을 경우 발생
- CPU가 물리 메모리 확인하여 페이지가 없을 때 트랩을 발생시켜 운영체제에 알림 -> 운영체제가 CPU의 동작을 잠시 멈춘다 -> 운영체제가 페이지 테이블을 확인하여 가상메모리의 존재를 확인하고, 없다면 프로세스를 중단하여 물리 메모리에 빈 프레임이 있는지 찾는다. 없다면 스와핑이 발동됨 -> 빈 프레임에 해당 페이지를 로드하고 페이지 테이블을 최신화한다. -> CPU를 다시 시작
- 스레싱 : 페이지 폴트율이 높은 상황을 의미, 성능 저하 초래(메모리에 동시에 너무 많은 프로세스가 올라가게되어 스와핑이 많이 일어나면 발생)
- 작업 세트(Working set) : 프로세스의 과거 사용 이력을 통해 미리 메모리에[ 로드하는 것, 탐색 비용, 스와핑을 줄일 수 있다.
- PFF(Page Falut Frequency) : 페이지 폴트 빈도의 상한과 하한을 만드는 것 -> 상한에 도달시 프레임을 늘려준다. 반대상황에선 프레임을 낮춰준다.
메모리 할당 : 메모리에 프로그램을 할당할 때 시작되는 메모리 위치
- 연속 할당 : 메모리에 연속적으로 공간을 할당한다.
- 고정 분할 방식 : 메모리를 미리 나누어 사용, 융통성이 없고 내부 단편화 발생(프로그램이 나눠진 메모리 공간보다 작을 때)
- 가변 분할 방식 : 프로그램의 크기에 맞게 동적으로 메모리를 분배, 외부 단편화 발생(프로그램이 나눠진 메모리 공간보다 클 때)
- 불연속 할당 : 현대 운영체제에서 사용하는 방식, 메모리를 페이지로 나누고 프로그램마다 페이지 테이블을 두어 메모리에 프로그램을 할당한다.
- 페이징 : 동일한 크기의 페이지 단위로 나누어 프로세스를 할당, 홀(할당가능한 메모리 공간)의 크기 균일, 주소변환이 복잡
- 세그멘테이션 : 페이지 단위가아닌 세그먼트로 나누는 방식, 다양한 기준으로 데이터를 나눌 수 있고 공유와 보안에서 장점이 있지만 홀 크기가 균일하지 않다.
- 페이지드 세그멘테이션 : 공유, 보안은 세그먼트로 나누고, 물리적 메모리는 페이지로 나눈다.