본문 바로가기

OS/운영체제론

[운영체제론] 가상메모리 1 / 2021.12.07

* 참고 자료 : 운영체제론 한빛아카데미

 

가상메모리2 (페이징) :

 

https://cow-kite24.tistory.com/126

 

[운영체제론] 가상메모리 2 (페이징) / 2021.12.07

* 참고 자료 : 운영체제론 한빛아카데미 가상메모리 1 : https://cow-kite24.tistory.com/125 [운영체제론] 가상메모리 1 / 2021.12.07 * 참고 자료 : 운영체제론 한빛아카데미 메모리 관리 기술은 궁극적으로 제

cow-kite24.tistory.com

 

가상메모리 3 (세그먼테이션) :

 

https://cow-kite24.tistory.com/127

 

[운영체제론] 가상메모리 3 (세그먼테이션) / 2021.12.07

* 참고 자료 : 운영체제론 한빛아카데미 가상메모리 1 : https://cow-kite24.tistory.com/125 [운영체제론] 가상메모리 1 / 2021.12.07 * 참고 자료 : 운영체제론 한빛아카데미 메모리 관리 기술은 궁극적으로 제

cow-kite24.tistory.com

 

 

메모리 관리 기술은 궁극적으로 제한된 메모리 공간과 경쟁해야 한다. 한 가지 해결책은 메인 메모리 용량을 늘리는 것이다. 그러나 일반적으로 비용이 너무 많이 든다. 다른 대안은 메모리가 더 많이 존재하는 것처럼 보이게 하는 것이다.

-> 이는 가상 메모리의 배경에 있는 기본 아이디어다. 

운영체제에서 하드웨어를 사용해 가상주소를 물리주소로 변환한다. 그리고 두 가지 불연속 할당 기술인 페이징과 세그먼테이션을 사용한다. --> 주소 변환과 불연속 할당 덕분에 가상 메모리 시스템은 메모리 용량이 더 큰 것처럼 보이게 하고 멀티프로그래밍 정도를 높였다.

 

메모리 구성의 진화

 

1. 프로그램 전체를 실행 전에 메모리에 로드하는 방법이 비효율적이니 예를 들어보라.
답 : 많은 프로그램이 사용 빈도가 아주 낮은 오류 처리 기능을 포함하고 있다. 이러한 기능까지 메모리에 모두 로드하면 다른 프로세스에서 사용할 수 있는 공간이 줄어든다.
2. 메모리 공간의 제한 문제를 해결하는 방법 중 메인 메모리의 용량을 늘리는 방법은 왜 불충분한가?
답 : 메인 메모리를 추가로 구입하는 것이 경제적으로 어려울 때가 있다. 더 나은 해결책은 시스템이 프로세스에서 요구하는 것보다 훨씬 많은 메모리를 보유하고 있는 것처럼 보여주는 것이다.

 

1. 가상 메모리 : 기본 개념

가상 메모리 시스템은 프로세스들이 시스템에 실제보다 더 많은 메모리가 있는 것처럼 착각하게 만든다. 그러므로 가상 메모리 시스템에는 두 가지 주소 유형이 있다.

- 가상 주소 : 프로세스에서 참조하는 주소

- 물리(실제) 주소 : 메인 메모리에 있는 사용 가능한 주소

 

1-1) 메모리 관리 장치 (MMU)

시스템은 프로세스가 가상 주소에 접근할 때마다 이를 실제 주소로 변환해야 한다. 이러한 작업은 아주 빈번하게 발생하기 때문에 범용 프로세서를 사용해 실행하면 시스템 성능이 크게 떨어진다. 따라서 가상 메모리 시스템은 메모리 관리 장치라는 특수 목적 하드웨어를 포함한다. MMU는 가상 주소를 실제 주소로 빠르게 맵핑할 수 있다.

 

- 가상 주소 공간 V 

프로세스가 참조할 수 있는 가상 주소의 범위.

|V| : V에 있는 주소의 수를 나타냄

 

- 실제 주소 공간 R 

특정 컴퓨터의 실제 주소 중 사용 가능한 범위

|R| : R에 있는 주소의 수를 나타냄

 

- |V| >> |R| 

가상 주소 공간이 실제 주소 공간보다 훨씬 큰 것이 일반적

--> 가상 주소 공간이 실제 주소 공간보다 크려면 프로그램과 데이터를 큰 보조 저장소에 유지할 수 있는 수단을 제공해야한다. --> 두 단계 저장소 구조 : 메인 메모리와 캐시, 2차 저장소

 

두 단계 저장소

 

1-2) 프로세스의 실행 

시스템은 프로세스를 실행할 준비가 되면, 프로세스의 코드와 데이터를 2차 저장소에서 메인 메모리로 로드한다. 그런데 실제로 프로세스를 실행하는 데는 이 중 작은 부분만 메인 메모리에 있으면 된다.

 

메모리와 2차 저장소에 존재하는 주소 공간 부분

 

1-3) 가상 주소의 물리 주소 맵핑

가상 메모리 시스템을 구현하는 핵심은 가상 주소를 물리 주소로 맵핑하는 일이다. 프로세스는 가상 주소에만 접근하지만 메인 메모리에서 실행해야 한다. 

 

가상 주소를 실제 주소에 맵핑

 

1-4) 동적 주소 변환 

동적 주소 변환 메커니즘은 실행 도중 가상 주소를 물리 주소로 변환한다. 프로세스의 가상 주소 공간에 있는 연속적인 주소가 물리 주소에서는 연속적이지 않아도 된다. 연속된 것처럼 보이게 하기 때문에 이를 인위적 연속성이라고 한다. 

 

인위적 연속성

 

프로세스의 가상 주소 공간과 시스템의 물리 주소 공간은 어떻게 다른가?
답 : 프로세스의 가상 주소 공간은 프로세스가 가상 메모리 시스템에서 실행할 때 메모리에 접근하려고 참조하는 주소의 집합을 말한다. 프로세스는 메인 메모리의 물리적인 위치에 놓인 물리 주소를 보지 않는다.

 

2. 블록 맵핑

동적 주소 변환 메커니즘은 프로세스의 가상 주소 공간 V에서 어느 영역이 현재 메인 메모리에 있고, 어디에 위치하는지 가리키는 주소 변환 맵을 유지해야 한다. 이 맵핑이 V에 있는 모든 주소를 포함하면, 맵핑 정보가 메모리의 여유 공간보다 더 큰 용량을 요구하게 될 것이다. 그러나 실제로는 맵핑 정보가 메인 메모리의 작은 부분만을 차지해야 한다.

이 해결책이 바로 정보를 블록으로 묶는 방법이다.

- 블록이 클수록 맵핑 정보의 양이 작아짐 -> 그러나 큰 블록은 내부 단편화를 초래하고 2차 저장소와 메인 메모리간 맵핑이 오래 걸릴 수 있음

--> 블록의 크기를 모두 같게? or 다르게? : 블록이 고정 크기이면 페이지라고 하고 블록이 다른 크기이면 세그먼트라고 한다.

 

2-1) 블록 맵핑

블록 맵핑을 하는 가상 메모리 시스템에서는 주소를 순서 쌍으로 나타낸다. 프로세스는 가상 주소 공간에 있는 특정 항목을 참조하기 위해 해당 항목이 있는 블록과 블록의 시작 위치에서부터 항목의 변위(오프셋)를 명시한다. 

예를 들어, 가상 주소 V는 순서 쌍 (b,d)로 표기하며, 여기서 b는 참조하는 항목이 있는 블록 번호, d는 블록 시작점에서부터의 변위를 나타낸다.

 

블록 맵핑 시스템에서 가상 주소 형식

시스템은 메모리에 각 프로세스의 가상 주소 변환을 위해 프로세스 별 블록 맵 테이블을 유지한다.

 

- 블록 맵 테이블 

블록 맵 테이블은 프로세스 각 블록에 대한 엔트리를 지니며 이 엔트리들은 순차적으로 배열된다.

 

- 문맥 전환 시, 시스템은 새 프로세스의 블록 맵 테이블이 위치하는 실제 메인 메모리 주소 a를 결정한다.

 

- 블록 맵 시작점 레지스터

블록 맵 시작점 레지스터는 실제 메인 메모리 주소 a를 저장하는 고속 특수목적 레지스터이다.

 

2-2) 블록 맵핑을 사용한 가상 주소 변환과정

- 시스템은 주소 a를 블록 맵 시작점 레지스터에 로드

- 프로세스는 실행되는 동안 가상주소 v=(b,d)를 참조

- 시스템은 블록 번호 b를 프로세스의 블록 맵 테이블의 기준 주소 a에 더해서 블록 맵 테이블에 있는 블록에 대한 실제 주소를 알아냄 

--> 블록 맵 테이블 실제 주소 = a

     블록 b에 대한 실제 주소를 가지고 있는 블록 맵 테이블 실제 주소 = a+b

     블록 b에 대한 실제 주소 = b' (블록 b의 시작점인 주소)

- 변위 d를 블록 시작 주소 b'에 더해 원하는 실제 주소 r을 얻음 -> r = b'+d

 

블록 맵핑을 사용한 가상 주소 변환