01 가상 메모리
1-1 가상 메모리 시스템
물리 메모리의 크기 상관 없이 프로세스에 커다란 메모리 공간 제공하는 기술
-
구성: 프로세스가 보는 메모리 영역 + 메모리 관리자가 보는 메모리 영역
-
메모리에 올라와 있기만 하면 동시에 여러 프로세스를 돌릴 수 있다
-
메모리 관리자는 필요에 따라 프로세스를 스왑영역으로 올렸다 내렸다. (당장 필요하면 올리고, 아니면 내리고)
프로세스 입장에서는 모든 데이터가 메모리에 올라와 있다고 여김
-
가상 메모리 크기 = 물리메모리 + 스왑영역
-
동적 주소 변환: 가상 주소를 실제 메모리의 물리주소로 변환
가상 메모리와 물리 메모리
1-2 매핑 테이블의 필요성과 역할
메모리 매핑 테이블
메모리 관리자는 가상주소와 물리주소를 일대일 매핑 테이블로 관리
02 페이징 기법
고정 분할 방식
물리 주소 공간을 같은 크기로 나눠 사용
가상주소 -> 0번지부터 시작
페이지: 가상 주소의 분할된 영역
프레임: 물리 주소의 분할된 영역
페이지와 프레임의 크기 같음 (어떤 프레임에도 배치 가능)
2-2 페이징 기법의 주소 변환
가상 주소 VA=<P,D>
VA: 가상주소
P: 페이지 = 가상 주소/페이지 크기
D: 페이지의 처음 위치에서 해당 주소 까지 거리 = 가상주소%페이지 크기
물리 주소 PA=<F,D>
PA: 물리주소 (실제주소)
F: 프레임
D: 프레임의 처음 위치에서 해당 주소까지 거리
D는 그대로 씀(페이지와 프레임의 크기를 똑같이 나눴기 때문)
2-3 페이지 테이블 관리
다수의 프로세스가 있는 페이징 시스템
- 프로세스 수 증가 -> 페이지 테이블 커짐 -> 프로세스가 쓸 수 있는 메모리 감소(메모리 낭비)
- 페이지 테이블 크기를 적정하게 유지해야함
물리 메모리 내 페이지 테이블의 구조
- 페이지 테이블 기준 레지스터: 페이지 테이블 시작 주소 보관
- 물리 메모리 크기가 작을 때 -> 페이지 테이블의 일부도 스왑영역으로 이동
2-4 페이지 테이블 매핑 방식
직접 매핑
- 페이지 테이블 전체 -> 물리 메모리의 운영체제 영역에 존재
- 바로 주소 변환 가능
연관 매핑
- 페이지 테이블 전체를 스왑 영역에서 관리
- 물리메모리의 여유 공간 이 작을 때 사용
- 스왑 영역-> 모든 페이지 테이블 저장
물리 메모리-> 일부만 (페이지, 프레임 번호 둘다 표시)
- 메모리 절약
- 주소 변환 시, 물리 메모리의 페이지 테이블 다 검색
없으면 스왑 영역 페이지 테이블 검색 (시간낭비 심함)
- 변환 색인 버퍼(TLB): 테이블의 일부를 무작위로 갖고 있음 -> 모든 TLB를 검색한 수에야 원하는 페이지가 메모리에 없음을 알 수 있음
집합-연관 매핑
연관 매핑 문제점: 메모리에 없으면 모든 테이블을 검색해야함
- 자른 덩어리 단위로 물리 메모리에 가져옴 (사용자가 데이터를 이용하면 그 다음 데이터를 쓸 확률이 높을 것이라는 가정)
- 자른 덩어리를 관리하는 페이지 테이블 하나 더 생성(각 묶음의 시작주소)
- 원하는 페이지 테이블 엔트리가 스왑에 있는지 메모리에 있는지 간단히 파악 가능
- 가상 주소: VA=<P1, P2, D>
P1: 디렉터리 테이블에서의 위치(집합 주소)
P2: 묶음 내에서의 위치(페이지 주소)
역매핑
- 프레임 번호(물리 메모리)를 기준으로 테이블 구성
- 프로세스 수 상관 없이 테이블 1개 -> 테이블 크기 작음 -> 메모리 조금 사용
- 단점: 가상 메모리 접근 시, PID + 페이지 번호 둘 다 찾아야함
- 테이블: <F, PID, P>
- 현재 테이블에 원하는 데이터가 없으면 스왑 영역에서 가져옴
- 페이지 테이블 다 검사 -> 저장장치 접근 (검색 시간 낭비)
03 세그먼테이션
3-1 세그먼테이션 기법의 구현
세그먼테이션 테이블
가변 분할 방식
limit: 세그먼트 크기 (D가 더 클 경우 메모리 오류 출력, 프로세스 종료)
address: 물리 메모리상의 시작 주소
물리 메모리 부족 -> 스왑 사용
04 세그먼테이션-페이징 혼용기법
메모리 접근 권한
권한: 읽기, 쓰기, 실행, 추가
코드 영역, 데이터 영역
VA = <S, P, D>
S: 세그먼트
P: 페이지
D: 거리
05 캐시 매핑
5-1 캐시 직접 매핑
- 메모리 블록이 캐시로 올라올 때 항상 같은 위치
- <P,D> -> <tag, bd, D>
페이지 테이블을 tag(블록 번호)와 bd(block distance)로.
캐시가 작은데 데이터를 어떻게든 욱여넣기 위함
5-2 캐시 연관 매핑
- 캐시가 메모리 워드의 주소 전부를 가짐(메모리 워드가 어느 위치에도 자유롭게 올라갈 수 있음)
- 장점: 캐시 메모리 자유롭게 사용
- 단점: 캐시 히트/미스 확인을 위해 캐시의 모든 주소를 검색해야함
5-3 캐시 집합-연관 매핑
- 캐시를 집합으로 나누고 각 집합에 직접 매핑
- 자리다툼 문제 완화: 같은 끝자리를 가진 캐시 메모리도 K개가 됨(직접매핑 문제)
- 캐시 히트 여부 바로 확인: 집합 내에서 직접 매핑(연관매핑 문제)