모든 프로그램이 메모리에 올라와서 사용하게 된다. 이런 메모리르 확장 시켜줄 수 있는
기법이 가상 메모리 (virtual memory )기법 이고 현대 운영체재 시스템에
가장 핵심이 되는 기술이다. 이 가상 메모리를 가능하게 하는 기술로
페이징. 세그먼트, 병합 기법이 있다.
1. 페이징 기법
페이징은 하나의 프로그램을 각각의 페이지 프레임(4KB)로 나누고 이를 메모리에 올려서 사용하는
방식이다. 이떄 가상의 주소로 작성되어있는 각 페이지 프레임은 페이지 테이블에 의해 실제 주소로
매핑되게 된다. 이렇게 함으로써 페이지 테이블을 처리해야 하는 일이생기고 메모리 낭비
효과도 가져온다.
만약 프로세스 하나가 지시 할 수 있는 메모리가 4GB까지 되고(32bit) 페이지 테이블에 존재하는
매핑 페이지 프레인 정보를 나타내는 데 4byte의 크기를 가진 가상 메모리를 구성하면
페이지 테이블 크기는 얼마나 될까..
단순히 1048576 x 4 byte 하면 그 크기는 4MByte가 된다. 그럼 이 시스템에서 3개의 프로세서가
실행되고 있다면 얼마나 될까.. 이는 4MByte x 3 하면 12MByte가 되며 단순히 메모리의 매핑 정보를
나타내는 데 이 큰 용량이 낭비된다는 의미이며 프로세서가 100개, 200개 늘어나면 그 크기는 엄청나다.
인텔 80x86계열에서 제공하는 메모리 매니저 유닛은 이와 같은 낭비를 줄이기 위해 가상 메모리
주소에서 위 페이지 테이블 인덱스 부분을 다음과 같이 페이지 디펙토리 인덱스와 페이지 테이블
인덱스 두 부분으로 나누어 페이지 디렉토리 부분에 해당하는 목록만 메모리에 올려놓고
페이지 테이블에 대해서는 필요시에만 만들어 메모리에 올려놓음으로써 낭비를 줄이고 있다.
페이징 기법에 의하여 메모리가 엑세스 되어진다면 매번 메모리를 차조할 때마다 페이지 테이블의
내용을 참조하여 실제 메모리를 계산해야 하는 낭비가 생긴다.
이를 보완이 필요한데 인텔 MS는 TLB(Translation Lookaside Buffer)라는 버퍼를 두고 이곳에
변환에 사용되었던 가상 주소와 위치 정보와 실제 매핑되어진 메모리의 위치 정보를 일정 개수만큼
유지함으로써 다음번 메모리 변환 시에서 해당 가상 메모리 위치를 참조할 경우 이 영역을 참조함으로
변환에 드는 시간을 줄이고 있다.
2. 세그먼트 기법
페이징 기법과 원리는 같다. 하지만 각각의 세그먼트는 그 크기가 고정되어 있지 않다.
예를 들어 컴파일러가 응용프로그램을 만들때 코드부분, 리소스부분, 디버깅 정보 부분같이 서로
연관된 부분을 메모리에 올려 처리 효율을올리는 방식이다. 이 기법은 메모리 단편화 현상이라는
약점이 있다.
메모리 단편화 : 서로 다른 크기의 세그먼트들에 대하여 필요시 메모리에 올리고 필요가 없어지면
내리는 작업을 오랫동안 반복하다 보면 외부단편화가 생긴다( Fragmentation ). 외부단편화란
용량이 큰 빈 메모리 공간은 줄어들고 작은 메모리 공간들이 점점 늘어남으로써 실제로 큰 세그먼트가
들어갈 수 있는 공간이 없어지는 경우를 말한다.
단편화를 없애려면 세그먼트들을 재배치 하여 큰 공간을 마련해야 하는데 그런작업은 오버헤드를
일으키게 된다.
이것을 보안하기 위해 페이징+세그먼트 병합기법을 만들게 된다.
3. 세그먼트와 페이징 기법의 병합
각각의 장점만 가지고 있다.
페이징의 경우 외부 단편화가 존재하지 않고 주기억장치를 효율적으로 사용할 수 있으며
세그먼트의 경우 가변적인 자료 구조, 모듈성으 ㅣ처리, 공유와 보호를 지원하는 장점을
가지고 있다.
마이크로프로세서에서 명시적 혹은 암시적으로 지시되어지는 세그먼트 레지스터와 사용자가 지정한
메모리를 조합하는 과정을 우리는 세그먼테이션 이라 부르는데.
이 작업은 세그먼트 디스크립터에 정의되어 있는 여러가지 보호 속성과 제한 속성을 통하여 시스템에
보호 작업을 수행하게 된다.
세그먼테이션 과정을 통해 세그먼트 레지스터와 사용자가 지정한 32비트의 논리적주소(Local address
가 합해져서 새로운 32비트의 선형주소(linear address)가 만들어 진다.