운영체제(Operating System) 7강

운영체제(Operating System) 7강

반효경 교수님 - Memory Management


Lecture



Memory


각 프로세스는 독립적인 메모리를 점유한다 하였다.

이번에는 운영체제가 메모리를 어떻게 관리하는지 알아 볼 것이다.


Logical Address vs Physical Address


image


Address Binding


프로세스의 논리적 주소를 물리적 메모리 주소로 연결하는 작업을 말한다.

Symbolic Address -> Logical Address (바로 이 시점) -> Physical Address

Symbolic Address는 프로그래머 입장에서 사용하는 것이며, 프로그래머는 데이터를 메모리 몇 번지에 저장하라고 코딩하지 않고, 문자로 된 변수명을 사용한다.

마찬가지로, 함수도 메모리 몇 번지로 jump하라고 코딩하지 않고, 문자로 된 함수명을 사용한다.

이를 Symbolic하다고 표현하며, 주소 바인딩 방식은 프로그램이 적재되는 물리적 메모리의 주소가 결정되는 시기에 따라 세 가지로 분류할 수 있다.


image


  • Compile Time Binding
    • 프로그램을 컴파일할 때 물리적 메모리 주소가 결정되는 주소 바인딩 방식
    • 컴파일 하는 시점에 해당 프로그램이 물리적 메모리의 몇 번지에 위치할 것인지를 이미 결정하므로 프로그램이 절대 주소로 적재된다는 뜻에서 절대 코드를 생성하는 바인딩 방식이라고도 부른다
    • 프로그램이 올라가 있는 물리적 메모리의 위치를 변경하고 싶다면 컴파일을 다시 해야 한다
    • 멀티프로그래밍이 없던 시절에는 사용됐으나, 현대의 시분할 컴퓨팅 환경에서 거의 사용하지 않는다


  • Load Time Binding
    • 프로그램이 실행 될 때 물리적 메모리 주소가 결정되는 주소 바인딩 방식
    • Loader의 관리 하에 물리적 메모리 주소가 결정되며 프로그램이 종료될 때까지 물리적 메모리 상의 위치가 고정된다
      • Loader는 사용자 프로그램을 메모리에 적재하는 프로그램이다
    • 컴파일러가 재배치 가능 코드를 생성한 경우에만 가능하다


  • Execution Time Binding or Runtime Binding
    • 프로그램이 실행된 후에도 프로그램이 위치한 물리적 메모리 주소가 변경 될 수 있는 바인딩 방식
    • CPU가 주소를 참조할 때마다 해당 데이터가 어느 물리주소에 위치에 존재하는지 확인해야하는데, 이때 MMU(Memory Management Unit)의 주소 매핑 테이블을 사용한다
      • MMU는 논리적 주소와 물리적 주소를 매핑해주는 하드웨어 장치이다 (데이터베이스 매핑 테이블을 연상하라)
    • MMU, 기준 레지스터, 한계 레지스터 등과 같은 하드웨어적인 자원이 필요하다
    • 현대의 시분할 컴퓨팅 환경에서 사용되는 방식


MMU(Memory Management Unit)


image


image


  • Relocation Register (Base Register)
    • 사용자 프로세스의 논리적 주소 0번지에 매핑된 물리적 주소를 의미
    • 사용자 프로세스는 항상 자신의 시작 주소가 0번지라고 생각하지만, 이는 논리 주소일 뿐이며, 실제 물리 주소는 0번지가 아닐 수 있다
    • 위 그림에서 P1은 CPU를 통해 논리 주소 346번지의 데이터를 요청했으나, 실제로 이 사용자 프로세스가 할당받은 물리 시작 주소는 14,000번지로 MMU에 저장돼있으므로 MMU는 14,000에 346을 더한 14,346번지의 주소를 반환한다
  • Limit Register
    • 사용자 프로세스에게 할당된 메모리의 최대 크기를 저장하는 레지스터
    • 운영체제가 사용자 프로세스에게 할당한 메모리를 넘어 바깥의 메모리를 침범하면, 이 프로세스는 악의적인 프로세스(바이러스 등)일 가능성이 있으므로 이를 차단해야 한다
    • 위 그림에서 운영체제가 P1에게 할당한 메모리의 크기는 3,000이며, 물리 주소는 14,000~17,000 이다


image


Memory Terminology

Dynamic Loading


  • 프로세스 전체를 메모리에 미리 다 올리는 것이 아니라 해당 루틴이 불려질 때 메모리에 올리는 것
  • 메모리를 더 효율적으로 사용할 수 있게 된다
  • 가끔씩 사용되는 많은 양의 코드의 경우, 예를 들자면 오류 처리 루틴같은 것들에 유용하다
  • 운영체제의 특별한 지원 없이 프로그램 자체에서 구현이 가능하며, 운영체제가 라이브러리를 통해 지원할 수도 있다


Overlay


  • 메모리에 프로세스의 부분 중 실제 필요한 정보만을 올리는 기법으로 Dynamic Loading와 비슷하여 헷갈릴 수 있다
  • 초창기 컴퓨터 시스템은 메모리가 매우 작아 하나의 프로세스조차도 메모리에 한꺼번에 올릴 수 없었다
  • 프로세스의 주소 공간을 분할해 당장 필요한 부분만을 메모리에 올려 실행하고 해당 부분에 대한 실행이 끝난 후에 나머지 부분을 올려 실행하는 기법
  • 프로세스의 크기가 메모리보다 클 때 유용하다
  • 작은 공간의 메모리를 사용하던 초창기 시스템에서 운영체제의 지원 없이 수작업으로 프로그래머가 구현하였다. 즉, 현재는 일반적으로 사용되지 않는다
    • 프로그래밍이 상당히 복잡하다.
  • Dynamic Loading과의 차이점
    • Dynamic Loading: 멀티프로그래밍 환경에서 메모리에 더 많은 프로세스를 동시에 올려놓고 실행하기 위한 용도. 운영체제의 도움을 받는다
    • Overlay: 단일 프로세스만을 메모리에 올려놓는 환경에서 메모리 용량보다 큰 프로세스를 올리기 위한 용도. 운영체제의 도움을 받지 않는다


Swapping


  • 메모리에 올라온 프로세스를 디스크의 Backing Store로 쫓아내는 것
    • Backing Store는 Swap Area라고도 부르며, 디스크 내에 파일 시스템과는 별도로 존재하는, 많은 사용자 프로세스를 담을 만큼 충분히 빠르고 큰 저장 공간이다
  • 디스크에서 메모리로 올리는 작업을 Swap In, 메모리에서 디스크로 내리는 작업을 Swap Out라고 부른다
  • Swap이 일어나는 과정
    • 일반적으로 중기 스케줄러(Swapper)가 Swap Out할 프로세스를 선정한다
      • 주로 우선 순위 기반 CPU 스케줄링을 사용한다
      • 우선 순위가 높은 프로세스를 Swap In
      • 우선 순위가 낮은 프로세스를 Swap Out
    • 만약 컴파일 타임 바인딩 혹은 로드 타임 바인딩 방식이 사용되고 있다면, Swap Out되었다가 Swap In이 되면 원래 존재하던 메모리 위치로 다시 올라가야만 한다
    • 반면 런타임 바인딩 방식이 사용되고 있다면, 추후 빈 메모리 영역 아무 곳에나 프로세스를 올릴 수 있으므로 Swapping에 적합하다
  • Swap Time은 디스크의 탐색 시간이나 회전 지연 시간 보다는 디스크 섹터에서 실제 데이터를 읽고 쓰는 전송 시간(transfer time)이 대부분을 차지한다
    • 디스크는 물리적으로 움직이는 시간이 존재하기 때문에, 전기적 신호로 동작하는 메모리에 비해 심각하게 느리다


Dynamic Linking


  • 연결(Linking)이란, 개발자가 작성한 소스 코드를 컴파일하여 생성된 목적 파일(object file)과 이미 컴파일된 라이브러리 파일들을 묶어 하나의 실행 파일을 생성하는 과정이다
  • Dynamic Linking은 컴파일을 통해 생성된 목적 파일과 라이브러리 파일 사이의 연결을 프로그램의 실행 시점까지 지연하는 기법이다.
  • Static Linking
    • 외부 라이브러리가 프로그램의 실행 파일에 포함된다
    • 실행 파일의 크기가 커진다
    • 동일한 라이브러리를 각각의 프로세스가 메모리에 올리므로 메모리 낭비가 심하다
  • Dynamic Linking
    • 실행 파일에 라이브러리 코드가 포함되지 않으며, 프로그램이 실행되면서 라이브러리 함수를 호출할 때가 되어서야 라이브러리에 대한 연결이 이루어진다
    • 라이브러리 호출 부분에 라이브러리 루틴의 위치를 찾기 위한 Stub이라는 작은 코드를 둔다
    • 라이브러리가 이미 메모리에 있으면 그 루틴의 주소로 가고, 없으면 디스크에서 읽어 온다
    • 운영 체제의 도움이 필요하다


Allocation Of Physical Memory


  • 물리적 메모리는 운영체제 상주 영역(커널)과 사용자 프로세스 영역으로 나뉨
    • 운영체제 상주 영역은 인터럽트 벡터와 함께 낮은 주소 영역을 사용한다 (주로 물리적 메모리의 0번지)
    • 사용자 프로세스 영역은 운영체제보다 높은 주소 영역을 사용


Contiguous Allocation


  • 각각의 프로세스가 연속적인 메모리 공간에 적재되도록 하는 것
  • 고정 메모리 분할 방식과 가변 메모리 분할 방식이 존재
  • 고정 분할 방식은 외부 조각과 내부 조각이 동시에, 가변 분할 방식은 외부조각이 발생할 수 있다
    • 외부 조각 (External Fragmentation)
      • 프로그램의 크기보다 파티션의 크기가 작은 경우 해당 파티션이 비어있는 데도 불구하고 프로그램을 적재하지 못하기 때문에 생기는 메모리 공간을 의미
    • 내부 조각 (Internal Fragmentation)
      • 프로그램의 크기보다 파티션의 크기가 큰 경우 해당 파티션에 프로그램을 적재하고 남는 메모리 공간을 의미


image


image


image


Dynamic Storage Allocation Problem


  • 가변 분할 방식에서 주소 공간의 크기가 n인 프로세스를 메모리에 올릴 때 물리적 메모리 내의 가용 공간 중 어느 위치에 올릴 것인지 결정하는 문제
  • First-fit
    • size가 n 이상인 것 중 최초로 찾아지는 hole에 할당
  • Best-fit
    • size가 n 이상인 가장 작은 hole을 찾아 할당
    • hole 리스트가 크기 순으로 정렬되지 않은 경우 모든 hole을 탐색해야 함
    • 많은 수의 아주 작은 hole이 생성 됨
  • Worst-fit
    • 가장 큰 hole에 할당 해야 함
    • 역시 hole을 탐색해야 함
    • 상대적으로 아주 큰 hole이 생성 됨
  • First-fit과 Best-fit이 Worst-fit보다 속도와 공간 이용률 측면에서 효과적


Compaction


  • 외부 조각 문제를 해결하는 방법 중 하나
  • 물리적 메모리 중에서 프로세스에 의해 사용 중인 메모리를 한 쪽으로 밀고, 가용 공간들을 다른 한쪽으로 몰아서 하나의 큰 가용 공간을 만드는 방법이다 (디스크 조각모음?, 가비지 컬렉션?)
  • 매우 비용이 많이 드는 방법이다
  • 최소한의 메모리 이동으로 압축하는 방법은 매우 복잡한 문제이다
  • 압축은 프로세스의 주소가 실행 시간에 동적으로 재배치가 가능한 런타임 바인딩 방식을 지원하는 환경에만 가능하다


Non-Contiguous Allocation


  • 하나의 프로세스가 메모리의 여러 영역에 분산되어 적재 되는 것
  • Paging, Segmentation, Paged Segmentation 방식이 존재
  • 현대의 컴퓨팅 시스템은 Non-Contiguous Allocation 방식의 Paging 기법을 주로 사용한다


Paging


  • 프로세스의 주소 공간을 동일한 크기의 페이지 단위로 나누어 메모리의 서로 다른 위치에 페이지를 저장하는 방식
  • 각 프로세스의 주소 공간 전체를 메모리에 한꺼번에 올릴 필요가 없고, 일부는 Backing Storage, 일부는 메모리에 혼재하는 것이 가능해진다
  • 메모리를 페이지와 같은 동일한 크기의 프레임으로 미리 나누어 둔다. 이를 페이지 프레임(Page Frame) 이라 칭한다
  • 메모리에 올리는 단위가 동일한 크기의 페이지 단위이므로 외부 조각이 발생하지 않고, 동적 메모리 할당 문제도 고려할 필요가 없어진다
  • 주소 매핑을 기존 MMU의 레지스터 두개로는 처리할 수 없고, 페이지 테이블이라는 것을 사용하여 논리적 주소를 물리적 주소로 변환하는 작업이 필요해진다
  • 프로그램의 크기가 항상 페이지 크기의 배수가 된다는 보장이 없으므로 프로세스의 주소 공간 중 제일 마지막에 위치한 페이지에서는 내부 조각이 발생할 수 있다


image


Address Translation Architecture


image


  • 페이징에서는 CPU가 사용하는 논리적 주소를 페이지 번호(p)와 페이지 오프셋(d)으로 나누어 주소 변환에 사용
  • 페이지 번호는 각 페이지별 주소 변환 정보를 담고 있는 페이지 테이블 접근 시 인덱스로 사용되고, 해당 인덱스의 항목에는 그 페이지의 물리적 메모리 상의 기준 주소, 즉 시작 위치가 저장 됨
  • 프로세스의 p번째 페이지의 물리적 메모리의 시작 위치를 알고 싶다면 해당 프로세스의 페이지 테이블에서 p번째 항목을 찾으면 됨
  • 페이지 오프셋은 하나의 페이지 내에서의 변위(offset)를 알려 줌
  • 기준 주소 값에 변위를 더함으로써 요청된 논리적 주소에 매핑되는 물리적 주소를 얻을 수 있다
  • 위 그림에서 f (물리적 주소의 시작 위치) + d를 취하면 처음에 CPU가 요청한 논리적 주소에 매핑되는 물리적 주소가 나온다


Implementation Of Page Table


  • 페이지 테이블은 페이징 기법에서 주소 변환을 하기 위한 자료 구조로, 메모리에 항상 상주한다
  • 현재 CPU에서 실행 중인 프로세스의 페이지 테이블에 접근하기 위해 운영체제는 2개의 레지스터를 사용한다
    • Page-Table Base Register
      • 메모리 내에서 페이지 테이블의 시작 위치를 가리킨다
    • Page-Table Length Register
      • 페이지 테이블의 크기를 보관
  • 페이징에서 모든 메모리 접근 연산은 총 2번씩 필요
    • 주소 변환을 위해 페이지 테이블에 접근
    • 변환된 주소에서 실제 데이터에 접근
    • 이러한 오버헤드를 줄이고 메모리의 접근 속도를 향상하기 위해 TLB(Translation Lock-aside Buffer) 라고 불리는 주소 변환용 고속 하드웨어 캐시를 사용


TLB


  • TLB는 가격이 매우 비싸기 때문에 빈번히 참조되는 페이지에 대한 주소 변환 정보만 담게 된다
  • 요청된 페이지 번호가 TLB에 존재한다면 곧바로 대응하는 물리적 메모리의 프레임 번호를 얻을 수 있지만, TLB에 존재하지 않는 경우에는 메인 메모리에 있는 페이지 테이블에 접근 해 프레임 번호를 알아내야 한다
  • 페이지 테이블에는 페이지 번호가 주어지면 해당 페이지에 대응하는 프레임 번호를 얻을 수 있지만, TLB에는 페이지 번호와 프레임 번호 쌍을 가지고 있으므로 특정 페이지 번호가 있는지 TLB 전체를 찾아봐야 한다
    • 이때 TLB 풀 스캔 시간이 오래 걸리므로 병렬적으로 탐색이 가능한 연관 레지스터를 사용한다
  • TLB는 Context Switching 시, 이전 프로세스의 주소 변환 정보를 담고 있는 내용이 전부 지워진다


image


Hierarchical Paging


  • 현대의 컴퓨터는 하드웨어의 발달로 메모리를 크게 잡아먹는 프로그램을 지원
    • 예를 들어 32bit 주소 체계를 사용하는 컴퓨터에서는 4GB의 주소 공간을 갖는 프로그램을 지원
      • 페이지 사이즈가 4K라면, 한 프로세스당 페이지 테이블을 위해 1M 크기의 페이지 테이블 메모리 공간이 필요
      • 그러나 대부분의 프로그램은 4G의 주소 공간 중 지극히 일부분만 사용하므로 페이지 테이블 공간이 심하게 낭비 됨
      • 이러한 공간 낭비를 막기 위해 페이지 테이블 자체를 페이지로 구성하는 다단계 페이징 기법을 사용


Two-Level Page Table


image


  • 주소 변환을 위해 외부 페이지 테이블과 내부 페이지 테이블로 나뉜 2단계 페이지 테이블을 사용
  • 사용하지 않는 주소 공간에 대해서는 외부 페이지 테이블의 항목을 null로 설정, 이에 대응하는 내부 페이지 테이블을 생성하지 않음
  • 페이지 테이블을 위해 사용되는 메모리 공간을 줄이지만, 페이지 테이블의 수가 증가하므로 약간의 시간적인 성능 손해가 발생한다 (trade-off)


image


  • 프로세스의 논리적 주소를 두 종류의 페이지 번호(P1, P2)와 페이지 오프셋(d)으로 구분
    • P1은 외부 페이지 테이블의 인덱스이고, P2는 내부 페이지 테이블의 인덱스이다
    • 따라서, 논리적 주소를 <P1, P2, d> 형태로 표시할 수 있게 된다
  • 외부 페이지 테이블로부터 P1만큼 떨어진 위치에서 내부 페이지 테이블의 주소를 얻게 되고, 내부 페이지 테이블로부터 P2만큼 떨어진 위치에서 요청된 페이지가 존재하는 프레임의 위치를 얻은 후, 해당 프레임으로부터 d만큼 떨어진 곳이 찾으려는 물리적 주소임


Paging


Multilevel Paging and Performance


  • 프로세스의 주소 공간이 커질수록 페이지 테이블의 크기도 커지므로 주소 변환을 위한 메모리 공간 낭비가 심해진다
  • 이 때, 다단계 페이지 테이블을 사용하면 페이지 테이블을 위해 사용되는 메모리 공간의 소모를 줄일 수 있지만, 메모리 접근 시간이 늘어난다
  • 이 문제를 다시 TLB를 통해 메모리 접근 시간을 줄일 수 있다. 즉 현대의 컴퓨팅 시스템에서 TLB는 필연이다
  • 4단계 페이지 테이블을 사용하는 경우
    • 메모리 접근 시간 = 100ns, TLB 접근 시간 = 20ns
    • 요청된 페이지에 대한 주소 변환 정보가 TLB에 존재할 확률 98%
    • 평균 메모리 접근 시간 (EAT) = 0.98 x 120 + 0.02 x 520 = 128ns
      • TLB hit이 성공할 때 - TLB 접근 시간과 메모리 접근 시간의 합인 120ns
      • TLB hit이 실패할 때 - TLB 접근 시간과 메모리 접근 시간 x 5의 합인 520ns
    • 결과적으로 주소 변환을 위해서만 28ns가 소요됨


Memory Protection


  • 페이지 테이블의 각 항목에는 주소 변환 정보 외에 메모리 보호를 위한 보호 비트와 유효-무효 비트(Valid (v) / Invalid (i))가 존재
  • 보호 비트는 각 페이지에 대해 읽기-쓰기/읽기 전용 등의 접근 권한을 설정하는 데 사용
  • 유효-무효 비트는 해당 페이지의 내용이 유효한지에 대한 내용을 포함
    • 유효-무효 비트가 유효 인 경우 - 해당 메모리 프레임에 해당 페이지가 존재. 따라서 접근 허용
    • 유효-무효 비트가 무효 인 경우 - 해당 페이지가 물리적 메모리에 올라와 있지 않고, Backing Store에 존재하여 해당 메모리 프레임에 접근 불가

image


Inverted Page Table


image

image


Shared Page


  • 공유 코드(Shared Code)는 메모리 공간의 효율적인 사용을 위해 여러 프로세스가 공통적으로 사용 할 수 있도록 작성된 코드를 의미
    • 재진입 가능 코드, 순수 코드라고도 불리며, 읽기 전용(Read Only)의 특성을 가짐
  • 공유 페이지(Shared Page)는 공유 코드를 담고 있는 페이지를 의미
    • 공유 페이지는 여러 프로세스에게 공유되는 페이지이므로 물리적 메모리에 하나만 적재되어 메모리를 효율적으로 사용할 수 있음
  • 예를 들어 문서 편집기 프로그램을 공유 페이지를 사용해서 작성한 경우, 이 프로세스를 여러 개 수행하더라도 공유 코드를 담은 페이지는 메모리에 하나만 올라감
    • 공유 코드는 읽기 전용의 성질을 가져야 하고 모든 프로세스의 논리적 주소 공간에서 동일한 위치에 존재해야 한다
  • 사유 페이지는 프로세스들이 공유하지 않고, 프로세스 별로 독자적으로 사용하는 페이지를 의미
    • 사유 페이지는 해당 프로세스의 논리적 주소 공간 중 어떠한 위치에 있어도 무방
  • ed1, ed2, ed3은 공유 페이지, data1, data2, data3은 사유 페이지


image


Segmentation


  • 프로그램은 의미 단위인 여러 개의 세그먼테이션으로 구성
    • 작게는 프로그램을 구성하는 하나 하나를 세그먼트로 정의
    • 크게는 프로그램 전체를 하나의 세그먼트로 정의 가능
    • 일반적으로는 code, data, stack 부분이 각각 하나의 세그먼트로 정의됨
  • 세그먼트는 다음과 같은 logical unit들임
    • main()
    • function
    • global variables
    • stack
    • symbol table
    • arrays


Segmentation Architecture


  • 논리 주소는 <세그먼트 번호(s), 오프셋(d)> 두 가지로 구성됨
    • s는 해당 논리 주소가 프로세스 주소 공간 내에서 몇 번째 세그먼트에 속하는지를 나타냄
    • d는 세그먼트 내에서 얼마만큼 떨어져 있는 지에 대한 정보를 나타냄
  • 세그먼트 테이블 사용
    • 기준점(base)과 한계점(limit)을 가진다
    • 기준점은 물리 메모리에서 그 세그먼트의 시작 위치를 나타낸다
    • 한계점은 물리 메모리에서 그 세그먼트의 길이를 나타낸다
  • 세그먼트 테이블 기준 레지스터(STBR)와 세그먼트 테이블 길이 레지스터(STLR)을 사용
    • STBR은 현재 CPU에서 실행 중인 프로세스의 세그먼트 테이블이 메모리의 어느 위치에 있는지 그 시작 주소를 담고 있다
    • STLR은 그 프로세스의 주소 공간이 총 몇 개의 세그먼트로 구성되는지, 즉 세그먼트의 개수를 나타낸다


Segmentation Hardware


image


  • 논리적 주소를 물리적 주소로 변환하기 전에 두 가지 사항을 확인
    • 요청된 세그먼트 번호(s)가 STLR에 저장된 값보다 작은 값 인지?
      • 아니라면, 존재하지 않는 세그먼트에 대한 접근 시도이므로 예외 발생
    • 논리적 주소의 오프셋(d)이 그 세그먼트의 길이(limit)보다 작은 값 인지?
      • 아니라면, 세그먼트 길이를 넘어서는 오프셋 위치이므로 예외 발생


Protection


  • 각 세그먼트별로 보호 비트(Protection Bit)가 있다
    • 보호 비트는 각 세그먼트에 대해 읽기/쓰기/실행 등의 권한이 있는지를 의미
  • 각 세그먼트 별로 유효 비트(Valid Bit)가 있다
    • 유효 비트는 각 세그먼트의 주소 변환 정보가 유효한지를 의미
    • 즉, 해당 세그먼트가 현재 물리 메모리에 적재되어 있는지를 의미


Sharing


  • 여러 프로세스가 특정 세그먼트를 공유하여 사용하는 개념
  • 공유 세그먼트는 이 세그먼트를 공유하는 모든 프로세스의 주소 공간에서 동일한 논리적 주소에 위치해야 함


image



Allocation of Physical Memory


image


Advantages and Disadvantages of Segmentation


  • Advantages
    • 주소 공간의 일부를 공유하거나 특정 주소 공간에 읽기 전용 등의 접근 권한 제어를 하고자 할 경우, 이는 단순히 크기 단위가 아닌 어떤 의미 단위로 이루어질 때가 많음
    • 이 때, 세그먼트는 의미 단위로 나누어져 있기 때문에 공유와 보안의 측면에서 페이징 기법에 비해 훨씬 효과적


  • Disadvantages
    • 세그먼테이션 기법에서는 프로그램을 의미 단위로 나누기 때문에 세그먼트의 길이가 균일하지 않음
    • 메모리 관리에서 외부 단편화가 발생하게 되며, 연속 할당 메모리 관리의 가변 분할 방식에서의 동일한 문제점이 발생


Paged Segmentation


image

  • 페이지드 세그먼테이션 기법은 프로그램을 의미 단위의 세그먼트로 나누되, 세그먼트가 동일한 크기 페이지의 집합으로 구성 됨
    • 페이지드 세그먼테이션 기법에서는 하나의 세그먼트 크기를 페이지 크기의 배수가 되도록 함으로써 세그먼테이션 기법에서 발생하는 외부 조각의 문제를 해결
    • 세그먼트 단위로 프로세스 간의 공유나 프로세스 내의 접근 권한 보호가 이루어지도록 함으로써 페이징 기법의 문제를 해결
  • 주소 변환을 위해 외부의 세그먼트 테이블과 내부의 페이지 테이블, 이렇게 두 단계의 테이블을 이용
    • 하나의 세그먼트가 여러 개의 페이지로 구성되므로 각 세그먼트마다 페이지 테이블을 가지게 됨
    • 즉, 2단계 페이지 테이블과 유사한 구조
  • <세그먼트 번호(s), 오프셋(d)>으로 구성된 논리 주소를 물리 주소로 변환하는 과정
    • 논리 주소의 상위 비트인 s를 통해 세그먼트 테이블의 해당 항목에 접근
      • 이 세그먼트 항목에는 세그먼트 길이와 그 세그먼트의 페이지 테이블 시작 주소가 포함된다
    • d를 세그먼트 내에서의 페이지 번호(p), 페이지 내에서의 변위(d’)로 사용하도록 분리
    • p와 d’를 이용하여 물리 메모리에 접근



© 2022. All rights reserved.