Paging, Segmentation

Groot·2022년 11월 14일
0

TIL

목록 보기
98/153
post-thumbnail
post-custom-banner

TIL

🌱 난 오늘 무엇을 공부했을까?

📌 Paging

📍 Paging이란?

  • 페이징 기법(paging)은 컴퓨터가 메인 메모리에서 사용하기 위해 2차 기억 장치로부터 데이터를 저장하고 검색하는 메모리 관리 기법이다.
  • 가상 메모리를 모두 같은 크기의 블록으로 편성하여 운용하는 기법.
  • 이때의 일정한 크기를 가진 블록을 페이지(page)라고 한다.
  • 가상 메모리의 내용이 page단위로 불연속하게 저장
  • 외부 단편화는 발생하지 않지만 내부 단편화의 가능성 있음

    내부 단편화
    기억 장치가 의도된 바 없이 할당될 때 일어난다. 공간이 낭비된다. "내부"라는 용어는 필요 없는 기억 자료가 할당된 영역 안에 있지만 쓰이지 않는 것을 말한다.
    운영체제의 메모리 관리기법 중 페이징을 이용할 때 발생할 수 있다. 일정 크기의 페이지에 프로세스 할당시, 프로세스의 크기가 페이지보다 작을 경우 내부 단편화가 발생한다.

    외부 단편화
    여유 공간이 여러 조각으로 나뉘는 현상을 말한다. 프로그램이 다양한 크기의 기억 장소의 남은 영역을 할당하고 할당을 해제할 때 일어나며, 할당 알고리즘이 약화된다. 비록 남은 기억 공간을 사용할 수 있지만, 조각이 너무 작게 나 있어서 응용 프로그램의 성능을 뒷받쳐 주지 못하기 때문에 효과적으로 사용하지 못하게 된다. "외부"라는 용어는 사용할 수 없는 기억 장소가 할당된 영역 밖에 있다는 것을 뜻한다.

  • p는 가상기억장치 내에서 참조될 항목이 속해 있는 페이지 번호이고, d는 페이지 내에서 참조될 항목이 위치하고 있는 곳의 변위이다.

프레임과 페이지는 메모리를 일정한 크기의 공간으로 나누어 관리하는 단위이며, 프레임과 페이지의 크기는 같다.

  • 프레임(Frame) : 물리 메모리를 일정한 크기로 나눈 블록이다.
  • 페이지(Page) : 가상 메모리를 일정한 크기로 나눈 블록이다.

어떤 프로세스가 현재 참조하고 있는 페이지가 주기억장치 내에 있다면 그 프로세스는 수행될 수 있다.
반대로 주기억장치 내에 없다면 그 해당 페이지를 보조기억장치로부터 읽어와서 페이지 프레임의 한 블록에 저장한다.

📍 Page Table

  • 페이지 테이블(Page Table)은 프로세스의 페이지 정보를 저장하고 있으며, 하나의 프로세스는 하나의 페이지 테이블을 가진다.

  • 논리 주소를 물리 주소로 변환된 결과를 page table을 사용해 관리

  • 페이지 테이블은 (물리) 메인 메모리에 저장

  • 페이지 테이블 엔트리 수는 논리 메모리의 페이지 개수 만큼

    페이지 테이블 엔트리(Page Table Entry, 줄여서 PTE)는 페이지 테이블의 레코드이다.
    PTE의 각 필드에는 일반적으로 다음 내용이 기록된다.

    • 페이지 기본주소(Page base address)
    • 플래그 비트
      • 접근 비트(Accessed bit) : 페이지에 대한 접근이 있었는지를 나타낸다.
      • 변경 비트(Dirty bit) : 페이지 내용의 변경이 있었는지를 나타낸다.
      • 현재 비트(Present bit) : 현재 페이지에 할당된 프레임이 있는지를 나타낸다.
      • 읽기/쓰기 비트(Read/Write bit) : 읽기/쓰기에 대한 권한을 표시한다.

🔗 Page Table을 위한 레지스터

  • Page table base register(PTBR): 메모리에 있는 페이지 테이블의 시작 위치
  • Page table length register(PTLR): 페이지 테이블의 길이

📍 논리주소에서 물리주소

  • 변환 순서
    • CPU가 특정 page의 논리 주소를 읽음 | p(page number) | d(page offset) | -> page 번호 -> 페이지 테이블에서 p번째를 확인 -> 할당된 물리 주소(frame 번호)를 확인 -> frame에서 d 번째
  • page table 접근 + 코드 접근 = 두 번의 메모리 접근이 필요 -> 속도 향상을 위해 별도의 하드웨어를 사용
    • associative register 또는 translation look-aside buffer(TLB)

🔗 TLB(Translation Lookaside Buffer)

  • 가상 메모리 주소를 물리적인 주소로 변환하는 속도를 높이기 위해 사용되는 캐시
  • 페이지 테이블의 일부를 담고 있는 캐시 메모리

📍 페이지 테이블 종류

🔗 2단계 페이지 테이블

  • CPU가 논리 주소를 주면 두 단계의 페이지 테이블을 거쳐서 메모리에 접근하는 방식
  • page table의 공간이 줄어든다는 장점

🔗 다단계 페이지 테이블

  • 2단계를 넘어 여러 단계로도 구성 가능
  • 테이블을 위한 주소 공간을 줄일 수 있지만 주소 변환 시 더 많은 메모리 접근이 필요하다.
  • 테이블이 여러개라서 접근 시간이 오래 걸릴 수 있지만, 보통 TLB에서 해결한다.

🔗 역 페이지 테이블

  • page가 아니라 frame을 기준으로 주소 변환을 하는 방법 p -> f ➡️ f -> p
  • 물리 주소를 보고 논리 주소를 알 수 있는 페이지 테이블
  • Inverted Page Table은 시스템에 단 하나만 존재
  • 역 페이지 테이블을 통해 모든 프로세스에 대한 개별 페이지 테이블을 저장하는 오버헤드가 제거되고 모든 프로세스의 페이징 정보를 함께 저장하기 위해 고정된 메모리 부분만 필요

📌 Segmentation

📍 Segmentation이란?

  • 메모리를 가변 크기 부분으로 나누는 메모리 관리 기법
  • 프로세스를 논리적 내용을 기반으로 나눠 메모리에 배치

  • CPU가 논리 주소를 제공 (s: segment number, d: offset) -> s < STLR 확인 -> 세그먼트 테이블에서 s를 찾아감 -> d < limit 확인 -> base + d로 주소 변환

📍 Segment Table

  • 세그먼트 별로 주소변환을 해야 하므로 Segment Table을 가짐
  • Segment Table base register(STBR): 물리적 메모리에서 세그먼트 테이블의 시작 주소
  • Segment Table limit register(STLR): 세그먼트 테이블의 길이(세그먼트 개수)

📍 Segmentation with Paging

  • segmentation과 page를 혼합한 방식
  • segment를 page 단위로 구성 --> 같은 의미의 page들을 묶어 segment로 구성
  • 세그먼트 테이블의 엔트리가 segment의 base 주소가 아닌 segment를 구성하는 페이지 테이블의 base 주소를 가짐
  • 세그먼트 당 페이지 테이블이 존재
  • 주소 변환 시 두 단계를 거침
    1. CPU에서 논리 주소 제공 |s(number) | d(offset)|
    2. 세그먼트 테이블을 찾아감(STBR) | segment length | page table base |
    3. d < segment length 확인
    4. d를 나눔 |p(number)|d'(page offset)|
    5. 해당 세그먼트의 페이지 테이블의 시작 위치를 찾음(page table base)
    6. page table base에서 p 위치에 f (frame number)를 찾음
    7. f + d'로 변환

📌 Paging VS Segmentation

No.KeyPagingPaging
1Memory Size페이징에서 프로세스 주소 공간은 페이지라고 하는 고정 크기 블록Segmentation에서 프로세스 주소 공간은 섹션이라고 하는 다양한 크기의 블록
2Accountability운영 체제는 메모리를 페이지로 나눔컴파일러는 세그먼트 크기, 가상 주소 및 실제 주소를 계산
3Size페이지 크기는 사용 가능한 메모리에 의해 결정섹션 크기는 사용자가 결정
4Speed페이징 기술은 메모리 액세스 측면에서 더 빠름페이징보다 느림
5Fragmentation일부 페이지가 제대로 활용되지 않을 수 있으므로 페이징으로 인해 내부 조각화가 발생분할은 일부 메모리 블록이 전혀 사용되지 않을 수 있으므로 외부 단편화를 유발
6Logical Address페이징하는 동안 논리 주소는 페이지 번호와 페이지 오프셋으로 나눈다.분할하는 동안 논리 주소는 섹션 번호와 섹션 오프셋으로 나눈다.
7Table페이징하는 동안 논리 주소는 페이지 번호와 페이지 오프셋으로 나눈다.분할하는 동안 논리 주소는 섹션 번호와 섹션 오프셋으로 나눈다.
8Data Storage페이지 테이블은 페이지 데이터를 저장.분할 테이블은 분할 데이터를 저장.
profile
I Am Groot
post-custom-banner

0개의 댓글