본문 바로가기

CS BASIC/운영체제(Operation System)

[운영체제] 가상 기억장치의 구성과 관리 - 페이징과 세그먼테이션

개요(Overview)

 

오늘은 가상 기억장치의 구성과 관리에 대해 알아보도록 하겠습니다.

지난 포스팅에서는 컴퓨터의 기억장치 즉, 우리가 통상적으로 메모리(Memory)라고 부르는 하드웨어 장치의 관리 방법에 대해서 알아보았습니다.

 

하지만, 초기 기억장치를 관리하기 위해 제안된 다양한 방법론은 현재의 기준으로는 다소 비효율적이고 근본적인 문제를 품고 있었는데요.

특히, 기억장치의 단편화(fragmentation)에 대한 문제가 다양한 관리 방법론들의 큰 난제였습니다.

 

또한, 기억장치(Memory)의 실제 물리적인 주소를 기준으로 관리하는 방법은

그 방법을 설계하고 설명하기 쉬우며 가장 직관적이라는 장점이 있지만,

비싼 기억장치를 효율적으로 활용해야 한다는 목적을 달성하는데 다소 제약이 많았습니다.

 

그렇기에 본 포스팅에서는 실제로는 하나 밖에 없는 자원으로도 사용자에게 여러 개의 자원이 있는 것처럼 관리하여 궁극적으로는 ‘더 효율적인 메모리의 관리’라는 목적을 달성하기 위해 고안된 ‘가상(Virtual)’이라는 기술에 대해 이해하고, 이를 기반으로 설계된 가상 기억 장치(Virtual Memory)의 구성과 관리 방법에 대해 알아보도록 하겠습니다.

 


 

1. 가상 기억장치와 매핑(mapping)

컴퓨터의 기억장치, 즉 메모리는 결과적으로 실제 하드웨어 장치의 물리적인 주소에 접근해야 합니다.

그리고 이러한 물리적 주소를 바탕으로 데이터를 읽거나 쓰는 작업을 할 수 있기 때문에,

 

초기 기억장치를 관리하기 위한 다양한 방법론에서는 기억 장치의 실제 물리적 주소를 바탕으로, 다양한 컴퓨터 프로그램을 실행하기 위해 메모리를 관리하는 방법에 대해 제안하였습니다.

 

하지만, 이러한 방법은 메모리 관리 방법의 설계 측면에서 직관적이고 설계 및 설명하기 쉬운 편이라는 장점이 있었지만, 컴퓨터에서 실행중인 다양한 프로그램 즉 프로세스에게 메모리를 할당하는 과정에서 다소 아쉬운 부분이 존재했습니다.

 

그런데, 과거에 이를 연구하던 공학자들은 컴퓨터 프로그램에서 필요로 하는 메모리의 주소가 반드시 주기억장치(실기억장치)에서 사용 가능한 주소일 필요는 없다는 사실을 알게 되었고, 전체 메모리를 하나의 거대한 집합으로 간주하고 메모리의 할당하는 방법을 발명하게 되었습니다.

 

 

<fig. 1.1 가상기억 공간 상의 주소를 실 기억 공간 상의 주소로 맵핑하는 방법>

 

 

 

위의 그림처럼, 운영체제가 실행중인 프로세스에게 메모리를 할당해 줄 때,

 

실제 물리적인 주기억장치(실기억장치)의 주소를 기반으로 관리하는 것이 아니라

중간의 ‘주소 변환’이라는 새로운 과정을 추가하여 더욱 동적이고 효율적인 메모리의 관리가 가능하게 되었습니다.

 


 

1.1. 주소 사상(Address Mapping)과 동적 주소 변환(DAT, Dynamic Address Translation)

 

이처럼, 운영체제는 실행중인 프로세스에게 메모리를 할당해야 할 때,

더 이상 실제 물리적 주소를 기반으로 관리하지 않도록 개선할 수 있었습니다.

 

대신, 실행중인 프로세스가 자신의 작업을 수행하기 위해 필요한 메모리를 요청하기 위해서

‘가상 주소’를 기반으로 운영체제에게 메모리를 요청하도록 바뀌었습니다.

 

이에 따라 프로세스가 운영체제에게 메모리를 요청하기 위해 사용되는 매개체

즉, 가상 주소를 실제 주소로 ‘변환’하는 방법이 필요하게 되었고,  여러가지 방법이 고안되었는데,

 

그 중에서도 동적주소변환(DAT, Dynamic Address Translation) 기법이 널리 사용되고 있습니다.

 

 

<fig. 1.2 인위적 연속성(Artificial Continuity)>

 

 

위 그림에서 가상기억장치 시스템은 가상 주소의 연속적인 주소 체계를,

주기억장치(실기억장치)에서는 불연속적으로 쌍을 이루고 있다는 점을 확인할 수 있는데요.

 

이처럼 가상 기억장치 체계에서 관리하는 주소의 순서가 실 기억장치에서도

연속적일 필요는 없다는 것을 ‘인위적 연속성(Artificial Continuity)’이라고 말합니다.

 

따라서, 사용자는 프로그램의 데이터가 주기억장치(실기억장치) 어디에 위치하는지 관리할 필요가 없으며

단지 프로그램 내용 그 자체에만 관심을 가지고 설계하면 된다는 큰 장점을 얻게 되었습니다.

 


 

1.2. 블록매핑(Block MapPoint)

 

동적 주소변환(DAT) 기법에서는 각 프로세스가 주기억장치로부터

필요한 메모리의 주소를 변환하기 위해 이를 관리할 정보를 담을 공간이 필요로 합니다.

 

그리고 이러한 공간을 통칭하여 대응 관계표(map)라고 부르며,

가상 기억 장치의 어느 부분이 주기억장치(실기억장치)의 어느 부분에 위치하는지를 계산하기 위한 정보를 가집니다.

 

만약 이러한 사상 관계(=변환 과정)가 워드(Word) 또는 바이트(Byte) 단위로 이루어진다면,

메모리 주소를 계산하기 위한 ‘정보’ 즉, 사상 정보가 너무 커지게 되므로,

프로세스 실행을 위해 필요한 양 이상의 기억장치를 요구하게 되어 무의미한 작업이 될 수 있습니다.

 

따라서, 이러한 메모리 공간 상의 trade-off 를 위하여, 블록(Block) 단위로 매핑을 하게 되는데

이를 블록 매핑(Block Mapping)이라고 합니다.

 

블록 매핑은 대응 관계표, 다른 말로는 사상 정보표를 관리하기 위한

블록의 크기를 어떻게 관리할 것인가에 따라 아래와 같이 크게 두 가지로 나뉠 수 있습니다

 

 

  1. 블록의 크기를 모두 같게 관리한다.
    → 블록(Block) = 페이지(Page) / 페이징(Paging) 기법

  2. 블록의 크기를 서로 다르게 관리한다.
    → 블록(Block) = 세그먼트(Segment) / 세그먼테이션(Segmentation) 기법

 

위와 같이 블록 크기를 모두 같게 관리했을 때,

이들 블록을 페이지(Page)라고 부르며 이러한 페이지를 기반으로 메모리를 관리하는 기법을 페이징(Paging) 기법이라고 힙니다.

 

반면에, 서로 다른 크기를 갖는 블록을 바탕으로 관리할 수도 있는데, 이 때 이들 블록들을 세그먼트(Segment)라고 부르며,

세그먼트를 기반으로 메모리를 관리하는 기법을 세그먼테이션(Segmentation) 기법이라고 합니다.

 

이외에도, 여러 크기의 세그먼트를 일정하게 묶어 동일한 크기의 큰 블록을 이루게 하는 방법도 사용되기도 합니다.

 

블록 매핑(사상) 기법에서는 주소는 2차원적으로 구성 및 관리됩니다.

 

즉, 어떤 항목을 참조하려면 그 항목이 속한 블록과 그 블록 내에서

어디에 있는 지를 나타내는 변위(displacement)를 통해 관리한다는 것을 의미하며 아래와 같이 표현할 수 있습니다.

 

<fig 1.3. 블록 매핑 기법에서의 가상주소 양식>

 

 

위 그림처럼, 가상 주소는 일반식 V=(b, d) 로 표현될 수 있습니다.

여기서, b는 참조할 항목이 속한 블록의 번호를 나타내고, d는 그 블록의 시작점으로부터 변위 값을 나타냅니다.

 

블록 매핑(block mapping) 체계에서는 각 프로세스가 일종의 번호표를 소유하고 있다고 볼 수 있습니다.

 

각 번호표는 메모리를 할당하기 위한 일종의 대기열 시스템에서 자신의 순서 즉 메모리의 주소를 계산하기 위한 정보만을 갖게 되는데, 이때 시작점에 대한 정보만을 레지스터 상에 등록시킴으로써, 각 프로세스는 자기 자신이 실행될 때 V=(b, d)라는 일반식을 통해 자신의 주소를 계산해낼 수 있습니다. 이러한 과정은 아래와 같이 표현될 수 있습니다.

 

 

<fig 1.4. 블록 사상(mapping)을 통한 가상 주소 변환>

 

 

위 그림에서 프로세스들이 할당 받을 메모리의 주소를 계산하기 위해

정보를 기록해둔 레지스터를 시작점 레지스터(block table origin register)이라고 합니다.

 

그리고, 이 레지스터를 시작으로 블록 사상표(block mapping table)을 생성 및 실주소를 계산해낼 수 있습니다.

프로세스의 각 블록은 위와 같이 블록 사상표에서 하나의 항목만을 가지며,

각 항목은 순차적으로 블록0, 블록1, 블록2 … 와 같은 순서로 배열됩니다.

 

이 항목은 블록 b의 실기억 장치의 주소 b’을 가지고 있는데, b’에 변위 d를 더하여 실제 주소를 구할 수 있습니다.

 

실제주소(r) = b’(실기억장치의 블록의 주소) + d(변위)

 

즉, 위와 같은 수식을 통하여 가상 주소를 실주소로 변환할 수 있는데,

이 과정은 연산 과정을 필요로 하므로 효율적으로 이루어지지 않는다면,

사상에 필요한 대가가 너무 커서 가상 기억 장치를 사용함으로써 얻는 편익을 상쇄할 수 있습니다.

 


 

1.3. 페이징 기법(Paging)

 

페이징 기법은 블록의 크기를 모두 같게 하여 운영하는 가상 기억장치 관리 기법입니다.

주소 공간을 같은 크기의 블록(block) 즉, 페이지(Page)를 기반으로 주소공간을 나누고,

실제 기억공간에서는 이와 같은 크기를 같는 페이지 프레임으로 나누어 사용하는 방법입니다.

 

즉, 페이징 기법은 각 프로세스가 페이지(Page)라는 주기억장치의 메모리 주소를 받기 위해 참조하는 매개체를 보유하고 있으며,

이를 바탕으로 주 기억장치(실 기억장치)에 있는 페이지 프레임(Page Frame)을 찾아내어

메모리를 할당 받고 반납하는 일련의 과정을 의미합니다.

 

페이징 시스템에서 가상주소는 순서를 갖는 순서쌍 (p, d)로 표현될 수 있습니다.

이때, p는 가상 기억장치 내에서 참조될 항목이 속해 있는 페이지 번호이고,

d는 페이지 p 내에서 참조될 항목이 위치한 곳의 변위를 의미합니다.

 

이를 그림으로 표현하면 아래와 같습니다.

 

<fig 1.5. 페이징 시스템에서의 가상주소양식>

 

 

만약 페이징 시스템에서 어느 프로세스가 현재 참조하는 페이지가 주기억장치에 존재 한다면, 그 프로세스는 수행될 수 있습니다.

 

하지만, 참조되어야 하는 페이지가 실기억장치 내에 없다면,

해당 페이지는 보조기억장치로부터 실기억장치로 옮겨져서 페이지 프레임(=실기억장치의 한 블록)에 저장됩니다.

 

페이지 프레임(Page Frame)은 실기억장치 주소에서 일정한 페이지 크기의 정수배가 되는 주소에서 시작합니다.

즉, 주 기억장치(실기억장치)에서 일정한 크기(페이지 크기)를 기준으로 등분하여 관리된다는 것을 의미합니다.

 

이러한 과정을 그림으로 모식 하면 아래와 같습니다.

 

<fig 1.6. 페이지 프레임(page fragme)들로 분할된 실기억장치

 

 

 

페이지 기법에서 동적 주소 변환의 과정은 아래와 같이 세 단계로 나뉩니다.

  1. 수행중인 프로세스가 가상주소 V = (p, d) 를 참조한다.
  2. 페이지 사상기법을 통해 페이지 p가 페이지 프레임 p’ 있음을 알아낸다.
  3. 실기억 주소 r = p’+d를 구한다.

 

위와 같은 과정을 그림으로 표현하면 아래와 같습니다.

 

<fig 1.7. 페이징 시스템에서의 가상주소와 실주소와의 연관성>

 

 

페이징 기법에서 각프로세스 수행에 필요한 모든 페이지가 동시에 주기억장치에 존재할 수 없으므로,

페이지 사상표는 참조된 각 페이지에 대해 주기억장치 내의 존재여부를 나타내야 합니다.

 

이때 존재한다면 그 위치를 나타내고 만일 존재하지 않는다면 보조기억장치 어디에 있는지를 나타내야 합니다.

 이를 그림으로 표현하면 아래와 같습니다.

  

<fig 1.8. 페이지 사상표 내의 한 항목>

 

이때, 페이지 사상표에서 프로세스가 요청하는 가상 주소가 현재 주기억장치의 페이지 프레임 내에 존재하는지,

존재하지 않는지에 따라서 다음과 같이 페이지 프레임(p’)을 계산할 수 있습니다.

 

  1. 주 기억장치 내에 페이지 프레임(p’)이 있을 경우
    a = (p)(p’) (단 페이지 프레임 번호가 0, 1, 2… 와 같다고 가정)

  2. 2)    주 기억장치 내에 페이지 프레임(p’)이 없을 경우
    a’ = (p)(p’) + d (단 d는 특정 항목의 변위)

 

1.3.1. 직접 사상에 의한 페이지 주소 변환

 

페이지 사상 테이블에 가상기억장치를 구성하는 모든 프로세스 페이지에 대한 항목을 관리하는 기법을 직접사상이라고 합니다.

 

그리고 이러한 직접 사상 기법은 아래와 같은 순서로 실주소를 계산합니다.

 

<fig 1.9. 직접 사상에 의한 페이지 주소 변환>

 

 

  1. 수행하고 있는 프로세스가 가상 주소 V=(p, d)를 참조한다.
  2. 해당 프로세스의 페이지 사상표의 시작주소를 가지고 레지스터 값 b와 p를 더하여 페이지 사상표 내의 p에 관한 위치를 얻는다.
  3. p 페이지를 기억하고 있는 실기억장치의 페이지 프레임 p’를 사상표에서 구한다.
  4. p’와 변위 d를 접속(concatenate)하여 실주소를 얻는다.

 

직접 사상에서 페이지 사상표는 크기가 매우 클 수도 있으며 보통 주기억장치에 존재합니다.

변환되는 가상주소와 페이지 사상 테이블의 시작 주소는 제어장치 내의 고속 레지스터에 보관함으로써

사상 테이블의 참조는 하나의 주 기억장치 주기(memory cycle time) 내에서 수행되어야 합니다.

 

왜냐하면, 주 기억장치의 주기 시간이 명령어 주기(Instruction execution cycle)의 대부분을 차지하고 있고,

페이지 사상을 위해 또 다른 기억 장치의 실행주기를 요구하기 때문입니다.

그래서 직접사상에서는 페이지 주소변환으로 인해 프로그램 수행 시간을 지연시킬 수 있는 가능성이 존재합니다.

 

따라서, 보다 빠른 주소 변환을 위해 속도가 빠른 고속 캐시 기억장치를 이용해 직접 페이지 사상 테이블을 구현했을 때,

직접 사상 기법의 효용성을 보장할 수 있습니다.

 


 

1.3.2. 연관 사상에 의한 페이지 주소 변환

 

페이지 사상표를 주기억장치보다 훨씬 빠른 연관기억장치를 사용해 운영할 수도 있습니다.

아래의 그림은 연관사상(associative mapping)을 이용해 동적 주소 변환이 진행되는 과정을 보여줍니다.

 

<fig 1.10. 연관사상(associative mapping)을 통한 페이지 주소 변환>

 

연관 사상에 의한 주수 변환 체계에서 가상 주소 V=(p, d)는 아래와 같이 변환됩니다.

  1. 수행중인 프로세스가 V=(p,d) 를 참조한다.
  2. 페이지 p를 찾기 위해 연관 기억 장치의 모든 항목을 동시에 조사한다.
  3. 페이지 p에 해당하는 페이지 프레임(p’)을 구한다.
  4. p’과 변위 d를 접속하여 실주소(r)를 구한다.

 

그러나, 연관 기억장치는 매우 비싼 장치이므로, 연관기억장치만을 사용하여 페이지 주소를 변환하는 방법은 비경제적일 수 있습니다.


 

1.3.3. 연관/직접 매핑을 결합한 페이지 주소 변환

 

캐시 기억장치만을 사용하는 직접사상 기법이나, 연관 기억 장치만을 사용한 연관사상기법은

비용이 너무 많이 소요되므로 비경제적일 수 있습니다.

 

따라서, 이 둘을 적절히 섞은 주소 변환 기법은 컴퓨터의 자원을 낭비하지 않으면서도

가장 최적의 효율을 보장할 수 있다는 점에서 이점을 갖습니다.

 

연관/직접 매핑을 결합한 주소 변환체계는 프로그램이 수행 특성상

가장 최근에 사용한 페이지를 다시 사용할 가능성이 높다는 사실에 주목하며 고안된 방법입니다.

 

이에 따라, 연관기억장치에는 페이지 사상 테이블 내의 전체 항목 중에서

가장 최근에 참조된 일부 페이지 항목들만을 수용하고, 나머지 항목들은 직접 사상기법을 사용해 저장하는 전략을 채택합니다.

 

이러한 과정을 그림으로 표현하면 아래와 같습니다.

 

 

<fig 1.11. 연관/직접사상을 통한 페이지 주소 변환>

 

 

  1. 현재 진행중인 프로그램이 가상주소 V = (p, d)를 참조한다.
  2. 페이지 p를 연관 페이지 사상표에서 찾는다.
  3. 만일 p가 연관사상표 p있으면 페이지 프레임 번호 p’을 얻고, 없다면 직접 사상표에서 p’을 얻는다.
  4. 3) 단계에서 얻은 p를 변위 d와 접속하여 실주소를 구한다.
  5. 3) 단계에서 p가 연관 사상표에 있지 않고 직접사상표에 존재하였다면 p가 p’ 직접 사상표로부터 그 값을 가져와 연관 사상표에서 최근에 가장 적게 사용된 페이지(least-recently used)와 교체한다.

 


 

1.4. 세그먼테이션(Segmentation) 기법

 

고정된 크기가 아닌 논리적으로 서로 관련이 있는 가변적인 정보의 단위세그먼트(Segment)라고 합니다.

세그먼테이션(Segmentation)은 이러한 세그먼트(Segment)를 단위로 하여

프로그램을 분할하고 메모리를 관리하는 방법론을 말합니다.

 

세그먼테이션에서 세그먼트의 크기를 결정할 때에는, 사용자가 작성한 프로그램의 구조를 살펴볼 필요가 있습니다.

각 프로그램에는 서브루틴과 함수, 프로시저, 각종 모듈의 집합으로 구성되는데,

세그먼테이션에서는 이러한 논리적 단위를 세그먼트(Segment)라고 정의합니다.

 

하나의 프로그램은 다양한 크기의 세그먼트를 부여받을 수 있다는 것입니다.

세그먼트(Segment)를 구성하는 요소들은 기억장치에서 어떤 주소에 위치 하는가에 관계 없이 각종 모듈 또는 자료 구조와 같은 세그먼트의 이름으로 참조되는데, 그렇기에 각각의 세그먼트의 길이는 가변적입니다.

 

그 길이는 프로그램 내에서 작성된 세그먼트, 즉 서브 루틴이나 모듈 함수와 같은 프로그램의 구성요소의 구성에 따라 다릅니다.

 

세그먼테이션에서 세그먼트(Segment)는 자기 자신을 식별할 수 있는 번호인 세그먼트 번호를 가지며 이에 따라 참조될 항목이 있는 곳 까지의 거리 차이를 나타낸 변위(d)로 표현됩니다.

 

세그먼테이션에서 가상주소의 양식은 아래와 같이 표현될 수 있습니다.

 

 

<fig 1.12. 세그먼트 기법에서의 가상주소 양식>

 

 

세그먼테이션에서 하나의 프로세스는 현재 참조하는 세그먼트(Segment)가 주기억장치에 존재해야 작업을 수행할 수 있습니다.

따라서, 전체 세그먼트가 하나의 단위로서 보조기억장치에서 주기억장치로 이동됩니다.

 

한 세그먼트의 모든 기억 장소는 주기억장치 내의 연속적인 기억장소에 배치되는데,

새로 들어오는 세그먼트는 그 세그먼트를 수용할 수 있을 만큼 큰 주기억장치의 연속된 기억장소 어느 곳이나 배치될 수 있습니다.

이때 사용되는 전략이 배치전략(placement strategy)은 가변분할 다중프로그래밍에서 사용하는 최초적합(first-fit), 최적적합(best-fit), 최악적합(worst-fit) 등이 사용될 수 있습니다.

 

세그먼테이션에서도 페이징 기법과 같이

① 직접사상, ②연관사상, ③직접/연관 혼용의 세가지 방법을 활용할 수 있는데,

 

세그먼테이션도 마찬가지로 세 가지 방법이 활용 가능하나, 페이징 기법과 그 원리가 동일하므로, 세그먼테이션에서의 ① 직접사상 기법에 대해서 알아보도록 하겠습니다.


 

1.4.1. 세그먼테이션의 직접 사상 기법

세그먼테이션에서도 마찬가지로 페이지 사상 테이블에 가상기억장치를 구성하는

모든 프로세스 페이지에 대한 항목을 관리하는 기법을 직접사상이라고 합니다.

 

그리고 세그먼테이션의 직접 사상 기법에서도 마찬가지로 실주소를 계산하기 위하여,

가상 주소 V=(s, d)를 바탕으로 아래와 같은 작업을 수행합니다.

  

<fig 1.13. 세그먼테이션의; 직접 사상 기법에 의한 가상주소 변환>

 

  1. 현재 수행중인 프로세스가 가상주소 V=(s, d)를 참조한다.
  2. 세그먼트 번호 s는 세그먼트 사상표 시작점 레지스터에 있는 시작주소 b와 더하여 세그먼트 사상표 내에서 세그먼트 s에 해당하는 항목을 찾아 연산(b+s) 하여 그 위치를 구한다.
  3. 2)에서 찾은 위치를 바탕으로 세그먼트가 시작되는 실기억장치의 주소 s’을 얻고 변위  d를 더하여 실주소 r = s’+d를 구한다.

 

세그먼테이션의 사상 기법에서도 마찬가지로,

아래와 같이 세그먼트가 주 기억장치에 모두 위치하지 못하는 경우를 대비하여 이를 판별하기 위한 데이터를 포함하게 됩니다.

 

 

<fig 1.14. 세그먼트 사상표의 항목>

 

 

 

위처럼 세그먼테이션에서도 존재 여부를 나타낼 비트 r을 바탕으로 주 기억장치의 존재 여부를 판단하게 되며,

만일 존재한다면 s’은 세그먼트가 시작되는 주기억장치의 주소를 가리킵니다.

 

해당 세그먼트 범위내에 있는 지를 확인하기 위하여 l 값과 비교하게 되며, 길이에 대한 검증을 하게 됩니다.

 

또한, 각 세그먼트를 참조할 때마다 수행하고자 하는 작업의 허용 여부를 결정하기 위하여 보호 비트(R, W, E, A)를 검사하게 됩니다.

 

동적 주소 변환(DAT)를 행할 때 세그먼트 사상표 내에서 세그먼트 s에 대한 탐색은 다음과 같은 순서로 이루어집니다.

 

  1. 세그먼트가 주기억장치내에 있는가? → r 비트 값을 통해 확인한다.
  2. 만약 세그먼트가 주기억장치에 없다면 세그먼트 부재(segment fault)를 발생시켜 운영체제가 제어권을 넘겨 받아 보조기억장치로부터 참조된 세그먼트를 읽어 들이게 한다.
  3. 세그먼트를 읽은 후 변위가 세그먼트의 길이 l보다 작거나 같은가를 검사하면서 주소변환을 진행시킨다. (이때, 작거나 같은 것은 허용된다.)
  4. 이때, d가 l보다 크다면 세그먼트 오버플로우(segment overflow)를 발생시켜 운영체제가 제어권을 넘겨 받아 프로세스를 중단시키도록 한다.
  5. 만약 세그먼트가 범위내에 있다면 수행하려는 작업에 대한 권한을 판정하기 위해 보호비트(R, W, E, A)를 검사한다. 만약 작업이 허용되지 않는다면, 세그먼트 보호 결함(segment protection fault)을 발생시켜 운영체제가 제어권을 넘겨 받아 프로세스를 중단시킨다.
  6. 이 모든 과정이 통과한다면 세그먼트의 시작주소 s’과 변위 d를 더하여 가상기억장치 주소 V = (s, d)에 해당하는 실기억장치 주소 r = s’ + d를 얻는다.

 


 

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

 

페이징/세그먼테이션 혼용기법은 하나의 세그먼트를 정 수배의 페이지로 분할하여 운영하는 기법입니다.

이 기법은 세그먼트의 크기가 페이지의 정수배로 증가하게 되는 특징이 있는데요.

즉, 하나의 세그먼트는 페이지를 단위로 가변적인 길이를 갖도록 설계된다는 의미입니다.

 

이러한 구조 덕분에 한 세그먼트의 모든 페이지들은 동시에 실기억장치에서 존재할 필요가 없게 됩니다.

 

따라서, 가상기억장치에서 연속적인 페이지가 실기억장치에서는 연속적일 필요가 없음을 의미하여, 페이징 시스템에서 가상 주소는 아래와 같이 표현할 수 있습니다.

 

<fig 1.15. 페이징/세그먼테이션 혼용 시스템에서의 가상주소 양식>

 

 

위 그림에서 가상 주소(V = (s, p, d)) 는 세개의 요소가 있으며,

각각 세그먼트의 번호(s), 페이지 번호(p), 항목 까지의 변위(d)로 구성됩니다.

 

페이징/세그먼테이션 혼용 기법에서는 아래와 같이 실주소를 계산할 수 있습니다.

 

 

<fig 1.16. 페이징/세그먼테이션 혼용시스템에서의 연관/직접사상을 통한 가상주소 변환>

 

 

  1. 현재 수행중인 프로세스가 가상주소 V = (s, p, d)를 참조한다.
  2. 먼저 연관기억장치 사상표에서 (s, p)를 찾기 위하여 탐색한다.
  3. 2번 단계에서 (s, p)가 발견되지 않는다면 직접 사장 과정을 통해 페이지 프레임(p’)을 구한다.
  4. 3번 단계에서 구한 p’과 가상주소 상의 d를 접속하여 가상주소 V = (s, p, d)에 대응하는 실 기억장치의 주소 r을 구한다.

위의 주소 변환 단계에서 세그먼트 사상 테이블의 검색 결과,

세그먼트 s가 실기억장치 내에 없음이 판정되면 세그먼트 부재결함(segment missing fault)가 발생됩니다.

 

이때, 마찬가지로 운영체제가 제어권을 넘겨 받아 보조기억장치에서 해당 세그먼트의 위치를 찾고

그 세그먼트에 대한 페이지를 주 기억장치로 옮깁니다.

 

만일 찾는 세그먼트가 주기억장치에 있더라도, 페이지 사상표에서 원하는 페이지 p가 발견되지 않는 경우도 발생할 수 있는데

이 경우에는 페이지 부재 결함(page missing fault)를 발생시켜 운영체제게 제어권을 넘겨 받아 보조기억장치에서 그 페이지의 위치를 찾아 주기억장치 내로 읽어 들입니다.

 

세그먼테이션과 마찬가지로 가상주소가 세그먼트의 경계를 넘어서는 경우도 발생할 수 있는데,

이 경우에도 마찬가지로 세그먼트 오버 플로우 결함을 발생시킵니다.

 

또한, 참조된 가상주소에 대해 요구하는 작업이 보호비트(RWEA)와 비교하여 허용되지 않은 경우에도

마찬가지로 세그먼트 보호 결함이 발생됩니다.

 

이러한 페이징/세그먼테이션 혼용기법은 아래의 같이 표현할 수 있습니다.

 

 

<fig 1.17. 페이징/세그먼테이션 혼용 시스템 테이블 구조>

 

 

위 그림과 같에 최상위 수준에서는 시스템에 파악하고 있는

모든 프로세스에 대한 항목을 관리할 프로세스 표(process table)가 위치합니다.

 

각 프로세스 항목은 자신의 세그먼트 사상 테이블이 위치하고 있는 주소를 가리키며,

세그먼트 사상 테이블의 주소를 가지고 있습니다.

 

페이지 사상테이블의 각 항목은 그 페이지가 존재하는 페이지 프레임이나

그 페이지를 찾을 수 있는 보조기억장치 상의 주소를 가리키게 됩니다.

 

 


참고 자료

  • 김완규, 고정국, 진광윤, 최신형, 하성권, 허덕행 | 핵심 운영 체제론 | 두양사