📚가상 메모리 개념

가상 메모리(Virtual Memory)는 컴퓨터 시스템의 메모리 크기보다 더 큰 기억 공간이 필요한 프로세스를 실행할 수 있게 하는 방법이다. 가상 메모리 개념의 핵심은 실행 중인 프로세스에 의해 참조되는 주소를 메모리에서 사용하는 주소와 분리하는 것이다.

실행 프로세스가 참조하는 주소를 가상주소라고 하고, 실제 메모리에서 사용하는 주소를 실주소 또는 물리적 주소라고 한다. 프로세스는 가상주소만을 참조하지만 실제로 메모리에서 실행되어야 하므로 가상주소는 실주소로 변환되어야 한다. 이 변환 과정을 사상(mapping)이라고 한다.

프로세스가 실행되는 동안 가상주소를 실주소로 바꾸는 절차를 동적 주소변환(DAT)이라고 한다. 이 방법은 프로세스의 가상 주소 공간에서 연속적인 주소가 실주소 공간에서는 연속적일 필요가 없다는 인위적 연속성을 가지고 있다.



📚블록 단위 주소변환

동적 주소변환(DAT)방법은 가상 메모리에서의 위치가 현재 메모리 어디에 위치하는가를 나타내는 주소변환 사상표(mapping table)를 유지해야 한다. 가상 메모리를 효율적으로 구현하려면 사상정보의 양을 줄여야 한다.

사상정보의 양을 줄이기 위해 각각의 항목 대신 블록 단위로 주소변환이 이뤄지는 블록 사상 시스템으로 각 블록이 메모리의 어디 위치하는지만 관리한다. 블록 사상 시스템은 특정 항목을 참조하기 위한 항목이 들어있는 블록과 그 블록의 시작 부분으로부터 항목까지의 변위로 구성되어 있다.

블록의 크기는 적절히 정해야 하는데 블록의 크기가 클수록 사상정보 양이 줄어들지만 블록 전송시간(보조기억장치 -> 메모리, 메모리 -> 보조기억장치)이 늘어나고 메모리를 공유할 수 있는 프로세스 수가 줄어든다. 반면에 블록의 크기가 작아질 수록 전송시간이 줄어들고 메모리를 공유할 수 있는 프로세스 수가 늘어나지만 사상정보 양이 커진다.

블록의 크기가 동일할 때 블록을 페이지라고 하고, 크기가 다르면 세그먼트라고 한다. 페이지로 이루어진 가상 메모리 구성을 페이징 기법이라고 하고, 세그먼트로 이루어진 가상 메모리 구성을 세그먼테이션 기법이라고 한다.


📄페이징 기법

페이징 기법은 가상 메모리를 고정된 크기의 페이지 단위로 나누어 관리하는 기법이다. 프로세스가 실행하기 위해 특정 페이지를 참조하려면 해당 페이지는 메모리에 위치해야 한다. 따라서 메모리 영역도 가상 메모리와 동일하게 고정된 크기의 블록으로 나눈다. 여기서 실제 메모리의 각 블록을 페이지 프레임이라고 한다. 가상 메모리의 페이지를 담을 수 있게 실제 메모리에 틀을 만든 것이다.

페이지는 비어있는 페이지 프레임 아무 곳에나 적재되면 된다. 페이지가 적재된 후에 바로 찾을 수 있도록 프로세스가 사용하는 가상주소를 실주소로 동적 변환해야 한다. 이를 위해 페이지 사상표를 사용한다. 페이지 사상표에는 가상주소의 페이지 번호에 대한 실주소의 페이지 프레임 번호가 저장되어 있다.

페이지 사상표를 직접 이용하여 동적 주소변환을 하는 것을 직접사상이라고 하고 다른 방식으로 연관사상이 있다. 연관사상은 페이지 변환 정보를 연관 메모리에 저장한 연관사상표를 이용하여 동적 주소변환을 한다. 연관 메모리는 저장된 값을 이용하여 데이터에 접근하는 고속 메모리 장치이다.

일반적으로 직접사상과 연관사상을 같이 사용하는 연관/직접 사상을 이용한다. 연관/직접 사상은 연관사상표에 가장 최근 참조된 페이지 항목만 보관하고 나머지는 페이지 사상표에 보관한다. 참조할 페이지가 연관사상표에 없을 때만 직접사상을 이용하도록 구현한 방법이다.


📄세그먼테이션 기법

세그먼테이션 기법은 모듈화에 따른 논리적 의미에 부합하는 다양한 크기의 블록으로 가상 메모리를 나누어 관리하는 기법이다. 세그먼트를 메모리에 적재하려면 수용 가능한 만큼의 메모리 영역에 놓으면 된다. 세그먼테이션 기법의 위치지정은 동적 분할 다중 프로그래밍에서 사용되는 최초 적합, 최적 적합 등의 방법과 같다.

세그먼테이션 기법의 동적 주소변환은 세그먼테이션 사상표를 이용한다. 세그먼테이션 사상표는 가상주소의 세그먼트 번호에 대한 실주소에서의 시작 위치가 저장되어 있다. 그리고 세그먼트가 현재 메모리에 있는지 존재 여부를 나타내는 비트값, 보조기억장치에서의 위치정보와 세크먼트의 길이가 저장되어 있다.


📄페이징/세그먼테이션 혼용기법

페이징/세그먼테이션 혼용기법은 세그먼테이션 기법의 논리적 장점과 페이징 기법의 메모리 관리 장점을 활용한 기법이다. 세그먼트를 페이지 단위로 분할하고 메모리도 페이지 프레임으로 분할하여 하나의 페이지만 페이지 프레임에 적재하는 방식이다. 세그먼트 사상표에 저장된 주소는 각 세그먼트에 대한 페이지 사상표의 시작 주소이다.

SegmentedPaging
https://www.baeldung.com/cs/segmented-paging-vs-paged-segmentation



📚메모리 호출기법

메모리 호출 기법은 어느 시점에 페이지 혹은 세그먼트를 메모리에 적재할 것인가를 결정하는 기법이다.

📄요구 페이지 호출기법

요구 페이지 호출기법(demand page fetch strategy)는 프로세스의 페이지 요구가 있을 때 요구 페이지를 메모리에 적재하는 방법이다. 이 기법은 프로세스의 실행순서를 정확하게 예측할 수 없기 때문에 명령어나 데이터가 실제로 참조되면 해당 페이지를 메모리에 적재한다.

요구 페이지 호출기법은 페이지를 메모리에 옮길 때 오버헤드를 최소화시키고 메모리에 옮겨진 페이지는 모두 실제로 참조된 것임을 확신할 수 있다는 장점이 있다.


📄예상 페이지 호출기법

예상 페이지 호출기법(prepagin fetch strategy)은 곧 사용될 것으로 예상되는 페이지를 메모리에 미리 옮겨 놓는 방법이다.

이 기법은 예상이 맞다면 실제로 페이지가 필요한 시점이 되었을 때 프로세스의 실행이 단절되지 않아 실행시간이 감소된다는 장점이 있다. 하지만 예상이 잘못된 경우는 예상 적재에 따른 시간과 메모리 공간이 낭비된다는 단점이 있다.



Leave a comment