
1. 가상 메모리의 개요
컴퓨터마다 물리 메모리가 다르기 때문에 가상 메모리를 사용한다.
가상 메모리는 크기가 다른 물리 메모리에서 일관되게 프로세스를 실행할 수 있는 기술이다.
1. 가상 메모리 시스템
- 메모리 크기에 맞는 응용 프로그램만 개발해야 한다. -> 가상 환경으로 극복
- 가상 메모리는 물리 메모리의 크기와 상관없이 프로세스에 커 다란 메모리 공간을 제공하는 기술이다.
가상 메모리의 크기와 주소
- 모든 프로세스는 메모리의 어느 위치에 있는지 상관없이 0번부터 시 작하는 연속된 메모리 공간을 가진다.
- 가상 주소는 물리 메모리 공간이 아닌 가상의 주소 공간을 가진다.
- 가상 메모리의 최대 크기는 컴퓨터 시스템이 가진 물리 메모리의 최대 크기로 한정되며, CPU의 비트에 따라 결정된다. 무한대로 사용할 수 있는 이유는 스왑영역때문!!!
- 동적 주소 변환: 메모리 관리자는 물리 메모리와 스왑 영역을 합쳐서 프로세스가 사 용하는 가상 주소를 실제 메모리의 물리 주소로 변환
- 브로세스가 아무 제약 없이 사 용자 데이터를 물리 메모리에 배치할 수 있다.
- 물리 메모리를 어떤 방법으로 나눌지, 사용자 프로세스를 어디에 배치할지, 부족한 물리 메모리를 어떻게 처 리할지 등의 복잡한 문제를 처리한다.
2. 매핑 테이블의 필요성과 역할
- 메모리는 가상 주소와 물리 주소를 일애일로 매필하여 매핑 테이블을 관리한다.
- 가변 - 세그먼테이션, 고정 - 페이징

3. 지역성
- 특정 영역에 집중되는 성질을 말한다.
- 공간의 지역성, 시간의 지역성, 순차적 지역성

- 공간의 지역성: 현재 위치에서 가까운 데이터에 접근할 확률
- 시간의 지역성: 현재를 기준으로 가장 가까운 시간에 접근한 데이터
- 순차적 지역성: 작업이 순서대로 진행되는 것을 의미한다.
캐시: 시간적으로나 지역적으로 가까이 있는 데이터를 가져옴으로써 캐시 적중률을 높일 수 있다.
페이지 교체 알고리즘: 물리 메모리에 있는 페이지 중 하나를 골라 내보낼 때 사용한다.
2. 페이징 기법
- 페이징 기법: 고정 분할 방식으로 메모리를 분히라여 관리
- 이 페이징 기법에서 가상 주소를 물리 주소로 변환하는 방법과 매핑 테이블을 관리하는 방법을 살펴보자.
1. 페이징 기법의 구현
- 물리 주소 공간을 같은 크기고 나누어 사용한다.
- 크기가 같기 떄문에 페이지는 어떤 프레임에도 배치될 수 있다. (무작위 배치) 떄문에 어떤 페이지가 어떤 프레임에 있는지에 대한 연결 정보는 페이지 테이블에 담겨 있다.

페이지 테이블
- 하나의 열
- 모든 페이지의 정보를 순서대로 가지고 있기 때문에 위에서부터 차례대로 페이지0, 페이지1, 페이지2 ...과 연결되는 프레임 번로가 있어 추가 열을 만들 필요가 없다.
- invalid는 해당 페이지가 스왑 영역에 있다는 의미
2. 페이징 기법의 주소 변환
주소 변환 과정

- 프로세스 30번의 내용 읽기
- 가상주소 30번이 어느 페이지에 있는지 찾는다. 30번은 페이지 3의 0번 위치에 있다
- 페이지 테이블의 페이지 3으로 가서 해당 페이지가 프레임 1에 있다는 것을 알아낸다.
- 최종적으로 물리 메모리 프레임 1의 0번 위치에 접근한다. 이 주소가 가상 주소 30번의 물리 주소다.
정형화된 주소 변환
- VA = <P, D> // 가상주소 = < 페이지, 오프셋 >
- 오프셋: 페이지의 처음 위치에서 해당 주소까지의 거리
- 8 번은 VA=<0, 8>, 72번은 VA=<7. 2>, 567번은 VA=<56, 7〉
- 페이징 기법의 주소 변환 과정 : 가상주소 VA=<P, D>를 물리주소 PA =<F, D>로 변환
- 페이징 테이블
- 각각의 한 줄을 페이지 테이블 엔트리 (PTE): 프레임 번호만 가진다, 페이지는 0부터 차례대

16bit CPU의 주소 변환의 예
- 한 페이지를 2진법으로 나타내는 경우
- P = 나눗셈(가상 주소/한 페이지의 크기)의 몫
- D=나눗셈(가상 주소/한 페이지의 크기)의 나머지
- 한 페이지의 크기가 10B인 가상 메모리 시스템에서 가상 주소 32번의 P는 : 32/10 의 몫인 3, D는 32/10의 나머지인 2다.
- 16bit 중 6bit는 페이지 번호로, 10bit는 페이지의 처음 위치에서 해당 주소까지의 거리로 사용한다
- 페이지 0번부터 63번까지 존재한다.
- 가상 주소의 페이지0은 0 ~ 1023번, 페이지1은 1024 ~ 2047번, …, 페이지63은 64512 ~ 65535번
- 페이지 테이블의 크기는 프로세스의 크기에 비례한다. (가상 주소가 많으면 페이지 테이블이 늘어난다. )
- 프로세스가 많으면 페이지 테이블의 크기가 커지고, 프로세스가 실제로 사용할 수 있는 메모리 영역이 줄어든다.


- 가상주소 -> 물리주소
- P는 0(980/1024의 몫) 거리는 980(980/1024의 나머지)이므로 VA=<0, 980>이다
- 페이지 테이블로 가서 페이지 0이 프레임 2에 저장되어 있음을 확인
- 물리 메모리의 프레임 2 시작 지점으로부터 980번 떨어진 곳에 접근하여 데이터를 가져온다.
3. 페이지 테이블 관리
메모리 공유
- 프로세스마다 페이지 테이블이 있고, 여러 프로세스가 있다. -> 페이지 테이블이 많아서 관리가 힘들다.
- 메모리 관리자는 특정 프로세스가 실행될 때마다 해당 페이지 테이블을 참조하여 가상 주소를 물리 주소로 변환하는 작업을 반복한다.
- 프로세스가 많을 수록 페이지 테이블이 많은데, 페이지 테이블의 크기는 작지 않다.
- 따라서, 페이지 테이블의 크기를 적정하게 유지하는 것이 페이지 테이블 관리의 핵심이다. 페이지가 늘어나는 만큼 사용자 영역이 줄어든다.

- 레지스터를 이용해 페이지 테이블의 위치를 빠르게 파악할 수 있고, 각 페이지 테이블의 시작주소를 페이지테이블 기준 레지스터에 보관한다.
- 페이지 테이블 기준 레지스토는 각 프로세스의 프로세스 제어블록이 저장되는 데이터로, 물리 메모리 내에 페이지 테이블의 시작주소를 갖고 있다.
쓰기 시점 복사
- 프레임을 공유하여 메모리를 절약하며 페이지를 공유한다.
- 그러나 데이터 영역의 프레임이 다르다 (공유할 수 없다.)
- 이떄 fork()를 이용하면 프로세스를 손쉽게 복사할 수 있다.
- 프로세스 별 변수는 공유할 수 없지만, 메인코드를 공유할 수 있다.
- 공유 할 수 없는 데이터는 어케 저장? -> 필요한 순간 새로운 프레임을 확보하고, 복사된 내용을 바꾼다.



변환 색인 버퍼
- CPU 메모리 안에 있는 관리 유닛: 가상주소를 물리 주소로 변환하는 작업
- 가상 주소를 물리 주소로 변환할 떄 메모리에 2번 접근한다. -> CPU성능 떨어짐 -> 변환 색인 버퍼로 극복
- 메모리 관리 유닛이 가상 주소를 받아 물리 주소로 변환하려면 페이지 테이블이 필요하다.
- 변환된 물리 주소를 이용하여 필요한 데이터를 가져온다

- 극복
- 변화 색인 버퍼: 페이지 테이블의 일부를 CPU 안쪽으로 가져온다.
- 캐시된 페이지 테이블
- 지역성에 따라 현재 사용중이거나 사용이 예산되는 테이블을 가져온다.
- 변환 색인 버퍼에서 찾아서 있으면 TLB히트 -> 프레임 번호로 변환하여 메모리에 접근한다, 없으면 TLB미스 -> 메모리에 있는 페이지 테이블에 접근하여 물리 주소로 변환하고, 변환된 물리 주소를 사용하여 메모리에 다시 접근한다.
- 변화 색인 버퍼: 페이지 테이블의 일부를 CPU 안쪽으로 가져온다.


역페이지 테이블
- 물리 메모리의 프레임 번호를 기준으로 테이블을 구성하는 것
- 물리 메모리의 프레임에 어떤 프로세스의 어떤 페이지가 올라와 있는지를 표시한다.
- 프로세스와 상관없이 하나만 존재
- <프레임 번호, 프로 세스 아이디, 페이지 번호>
- 페이지 테이블 행수 == 실제 프레임의 수


- 메모리 관리자는 주소 변환을 해야 하는 프로세스 아이디와 페이지 번호가 물리 메모리에 있는지를 역 페이지 테이블에서 검색한다.
- 원하는 프 레임 번호가 있는 경우, 역 페이지 테이블의 위치가 프레임 번호가 된다.
다단계 페이지 테이블
- 페이지 테이블이 많아지면 관리가 힘든데, 이를 극복하기 위해
- 일정 크기로 자른 페이지 테이블의 바깥쪽에 이를 관리하 는 새로운 테이블을 만드는 것이다.
- 집합-연관 매핑
- 디렉터리 매핑

- 페이지 3 번의 정보가 필요한 경우, 7 0 번에 위치한 2 차 페이지 테이블에 접근하여 프레임 번호를 가져온다.
- I (invalid) 라고 표시된 것은 해당하는 2 차 페이지 테이블이 아직 만들어지지 않았다는 의미
- 테이블을 한꺼번에 만드는 것이 아니라 필요할 때마다 만든다.
- 필요할 때 2차 페이지 테이블을 만들고, 1차 페이지 테이블의 값 을 업데이트한다.

- 큰 페이지 테이블을 같은 크기의 묶음으로 나누 어서 효율적으로 관리할 수 있다는 것
- 페이지 테이블 전체를 한꺼번에 만들지 않고 필요 할 때마다 생성하고 관리함 -> 공간효율
3. 세그먼테이션 기법
- 가상 분할 방식을 이용한 가상 메모리 관리 기법
- 물리 메모리를 프로세스 크기에 따라 가변적으로 나누어 사용한다.
1. 세그먼테이션 기법의 구현
- 세그먼테이션 테이블, 세그먼테이션 매'빙 테이블
- 메모리를 프로세스 단위로 관리하기 때문에 세그먼테이션 테이블이 작고 단순
- 물리 메모리의 외부 단편화로 인해 관리가 복잡하다

2. 세그먼테이션 기법의 주소 변환
- VA=<S, D> // S: 세그먼트 번호, D: 세그먼트 시작 지점에서 해당 주소끼지의 거리 ( = 사용자 지정 주소)
- limit는 메모리를 보호하는 역할
- 트랩: 프로세스 A의 크기보다 더 큰 주소에 사용자가 접근하려 하면 세그먼테이션 오류

- 프로세스 A는 세그먼트 0, 프로세스 A의 32번에 접근할 때 주소 변환
- A는 세그먼트 0으로 분할되었으므로 으는0. D는 32다 VA=〈0, 32〉
- 시작 주소 120을 알아낸 후 거리 32를 더하여 물리 주 소 152번을 구한다.
- 물리 주소 152번에 접근하여 원하는 데이터를 읽거나 쓴다.
4. 캐시 매핑 기법
1. 캐시 직접 매핑
출처 : 조성호 , 『IT CookBook, 쉽게 배우는 운영체제(2판)』한빛아카데미(2023).
'COMPUTER SCIENCE > OS' 카테고리의 다른 글
| [쉽게 배우는 운영체제 2판] 9. 가상 메모리 관리 (0) | 2025.05.27 |
|---|---|
| [쉽게 배우는 운영체제 2판] 8장 연습문제 (0) | 2025.05.23 |
| [쉽게 배우는 운영체제 2판] 7장 연습문제 (0) | 2025.05.21 |
| [쉽게 배우는 운영체제 2판] 7. 물리 메모리 관리 (0) | 2025.05.21 |
| [쉽게 배우는 운영체제 2판] 6장 연습문제 (0) | 2025.04.16 |