ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [운영체제] 메모리 관리 - 페이징 (Paging)
    Computer Science/Operating System 2023. 2. 28. 13:15
    반응형

    들어가기 전에

    External Fragmentation (외부 단편화) 란?

    :  총 메모리 공간을 계산했을 때 요청을 처리할만한 충분한 메모리가 있음에도 불구하고, 가능한 공간들이 연속적이지 않아 (저장 공간이 많은 hole 들로 조각조각 나있을 때) 프로세스를 할당할 수 없는 문제

    - 프로세스는 실행이 되면 메모리에 올라가게 됨
    - 프로세스는 연속적으로 배치가 됨(Contiguous allocation) → 프로세스를 쪼개서 배치할 수 없음

    - 아래 그림과 같이 Process4가 들어갈 수 있는 자리가 있음에도 할당되지 못하고 대기하게 되는 문제 발생

    ※ 참고: 프로세스를 밑으로 재배치하여 Hole 을 없애는 방법은 불가한가?

    더보기

    Compaction : 비어 있는 공간을 연속적인 공간으로 만들고 움직이는 작업
    - 결국 프로세스를 옮기기 위해 다른 프로세스들을 temporary한 공간으로 복사 必 
    - secondary storage인 하드디스크에 임시로 복사해서 저장 후 옮겨와야 하는데 하드디스크는 속도가 매우 느림
    - 또한, I/O problem이 발생할 수 있고 하드디스크가 병목이 되기 때문에 좋은 방법이 아님

     

    Paging 이란?

    - 프로세스를 논리 주소의 고정된 페이지(Page)라고 불리는 블록들로 분할하여 메모리에 적재하는 것

    - 각각의 페이지는 물리 메모리의 프레임과 맵핑됨
    - 프로세스를 연속적으로 배치하지 않고 분할하기 때문에 외부단편화가 발생하지 않음
    - 페이지는 고정 분할 방식으로 각 페이지의 사이즈는 동일

    → 프로세스는 메모리에 여유가 발생할 때마다 physical memory 영역에 할당할 수 있게 됨으로써 외부활당화 문제無

    ※ 참고

    - Logical memory : CPU에 의해 생성되는 주소
    - Physical memory : RAM에 실질적으로 로드되는 주소

    내부 단편화 (Internal Fregmentation)

    : 프로세스를 페이지로 분할하는 과정에서 남는 공간이 발생하는 것
    - 하지만 외부단편화比 남는 공간이 얼마 되지 않기 때문에 외부 단편화보다 훨씬 효율적이며 거의 100%에 가깝게 메모리를 효율적으로 사용할 수 있음.

    Page Table

    : 프로세스의 페이지들은 메모리 프레임에 조각나서 위치해 있기 때문에,
    이를 하나의 프로세스로 linear 수행하기 위해서 물리적 주소의 값을 찾아주는 역할을 함

    - 각 프로세스마다 페이지 테이블을 가지고 있으며 배열의 형태를 갖고 있음
    - 인덱스: 페이지 번호
    - 배열에 담고 있는 숫자: 매핑할 프레임 번호

    - 실제 페이지 테이블은 페이지번호, 프레임번호, 여러가지 편리 기능을 위해 다양한 필드를 갖고 있음

    Page 크기와 논리적 주소 구성

    - 페이지 매핑에 맞춰 CPU로부터 생성되는 논리적 주소는 ① 페이지 주소와 ② 페이지 오프셋으로 구성

    ① 페이지 주소

    : page의 순서에 해당하는 숫자 (page number)
    - 페이지만으로는 정확한 주소를 표기할 수 없음

    ② 페이지 오프셋

    - 페이지 하나의 크기는 대게 4KB, 12bits 차지 
    - 4KB 기준으로 페이지 내부에서도 0 ~ 2의 12승까지의 번지값을 가지며 이를 offset이라 부름

     

    ▶ 운영체제가 32비트 프로세서이고, 페이지 크기가 4KB라면 한 번에 CPU는 2의 20승 개수의 페이지 번호 구분 가능

    논리주소 물리주소 변환 FLOW

    TLB 의 등장

    : 페이징 방식 - 속도에서 비효율 발생

    - 페이지테이블의 용량은 메모리 안에 넣게 됨(메모리 접근이 2번 발생, 메모리 테이블 1번 접근, 실제 data 1번 접근)

    ▶ 속도 향상을 위해 associative register or translation look-aside buffer(TLB)라 불리는 고속 lookup hardware cache 사용
    ▶ 주소 변환을 위한 캐시메모리 (보통 다루는 캐시메모리와는 다름)

    - page 번호 p를 주면 병렬적으로 검색하여 있으면 바로 주소 변환, 없으면 cache miss 발생

    2 단계 페이징 테이블 기법

    : 페이징 방식 - 저장 용량에서 비효율 발생

    - 하나의 큰 프로세스가 들어올 경우, 페이지 구분을 위한 페이지 테이블이 차지하는 용량 역시 커짐
    - 프로세스도 아닌 Page 순서를 위한 페이지 테이블만을 위해 많은 용량을 할당하는건 비효율적

    1. 32 bit 주소체계
    페이지 테이블 주소 공간 = 32 - 12 (bit) = 20 (bit)
    페이지 테이블 용량 = 2^20 * 4byte = 4MB
    ※ 1 entry = 1 word = 32 bit = 4 byte
    ※ 2^20 개의 entry = 2^20 * 4byte

    2. 64 bit 주소체계
    페이지 테이블 주소 공간 = 64 - 12 (bit) = 52 (bit)
    페이지 테이블 용량 = 2^52  * 8byte = 36PB
    ※ 1 entry = 1 word = 64 bit = 8 byte
    ※ 2^52 개의 entry = 2^52 * 8byte

    - 기존의 페이징에선 모든 페이지에 대한 각 물리주소를 매핑한 페이지 테이블을 생성했다면,

      2단계 페이징에서는 두 번째 페이지 테이블의 주소를 매핑해두고 접근하지 않는 페이지주소는 null 상태로 가지고 있음
    - 연결된 페이지만큼의 용량만 차지하기 때문에 공간효율성을 높일 수 있음

     

    반응형

    댓글

Designed by Tistory.