페이징과 세그먼테이션

📌 페이징(Paging)

1️⃣ 하나의 프로세스가 사용하는 메모리 공간이 연속적이어야 한다는 제약을 없애는 기법
2️⃣물리 메모리 : Frame이라는 고정 크기로 분리됨.
     논리 메모리 : 프로세스가 점유하는 메모리로서 페이지라 불리는 고정 크기의 블록으로 분리됨.
3️⃣MMU의 재배치 레지스터 방식을 활용해 CPU가 마치 프로세스가 연속된 메모리에 할당된 것처럼 인식하도록 함.

 MMU(Memory Management Unit)
: 논리 주소를 물리 주소로 변환해주며 메모리 보호나 캐시 관리 등 CPU가 메모리에 접근하는 것을 총관리해주는 하드웨어

 

 

  • 프로세스의 주소 공간을 동일한(고정된) 사이즈의 페이지 단위로 나누어 물리적 메모리에 불연속적으로 저장하는 방식
  • 프로세스, page라는 고정 크기로 분할 메모리, frame이라는 고정 크기로 분할
💡Page Table
1️⃣ 논리적 주소 → 물리적 주소
2️⃣ 프로세스마다 존재하며 메인 메모리에 상주함.
3️⃣ 접근할 때 논리 주소의 page number 사용함. → page table의 base address와 논리 주소의 page offset을 더하면 물리 주소 구할 수 있음.
4️⃣context switch가 일어나는 경우, page table이 가리키는 PTBR(Page-Table Base Register)의 내용만 변경하면 됨.
5️⃣ 각 엔트리(entry)에는 정보를 담고 있는 bit 포함됨.
      • Protection bit : page에 대한 접근 권한
      • Valid-invalid bit : valid는 해당 주소의 frame에 그 프로세스를 구성하는 유효한 내용이 있고, invalid 없음(== 접근 불허)
6️⃣ page의 크기가 작으면 내부 단편화 ↓, 필요한 정보만 있어 메모리 이용에 효율적이지만 page table의 크기 ↑,디스크 이동의 효율성 ↓
7️⃣ 구성 방법
      • Multi-level paging : 논리적 주소 공간을 여러 단계의 page table로 분할하여 오직 사용되는 page의 page table만 할당하는 기법
      • Hashed Page Table : hash table을 이용하여 page table을 관리하는 기법
         → 주소 공간이 32 bit보다 커지면 multi-level paging 비효율적
      • Inverted Page Table : 메모리의 frame마다 한 항목씩 할당, 물리적 frame에 대응하는 항목만 저장하면 되므로 메모리를 훨씬 적게 사용함.
         → 각 page table entry는 각각의 메모리의 frame이 담고 있는 내용(PID, 논리 주소)을 표시함.

 

🔋 장점 

  • 논리 메모리, 물리 메모리에 저장될 때 연속되어 저장될 필요가 없어 외부 단편화를 해결할 수 있음.
  • 할당 & 해제 빠름.
  • swap out 간단함.

 

🪫 단점 

  • 내부 단편화 문제의 비중 증가
    ex) page 크기 : 1024B 프로세스 A : 3172 B → 4개의 페이지 프레임 필요 → 마지막 프레임 924B 여유 공간 발생
  • page table을 저장하기 위한 메모리 추가 소모
  • 메모리 접근에 필요한 연산, 2번의 메모리 접근 필요(page table 접근 + 실제 연산) → 속도 느려짐.
    ➡️ Associative register or TLB(Translation Look-aside Buffer), 고속 하드웨어 캐시 사용
단편화(Fragmentation)
: 메모리의 공간이 작은 조각으로 나뉘어 사용 가능한 메모리가 충분히 존재하지만 사용(할당)이 불가능한 상태

1️⃣ 내부 단편화
: 프로세스를 고정된 크기의 페이지로 분할할 때, 프로세스 메모리 크기가 페이지 단위와 나누어 떨어지지 않았을 때 할당된 마지막 프레임이 가득차지 않는 현상
2️⃣ 외부 단편화
: 프로세스들이 메모리를 차지하는 과정에서 외부에 여러 개로 작게 나누어진 공백이 생겨서 메모리를 할당할 수 없는 상태가 되는 현상
  → 압축(프로세스가 사용하는 공간을 한쪽으로 몰아 자유공간을 확보함.)으로 해결할 수 있지만 효율 ↓
TLB(Translation Look-aside Buffer)
1️⃣ 메모리 주소 변환을 위한 별도의 캐시 메모리
2️⃣ page table에서 빈번히 참조되는 일부 엔트리 caching
3️⃣ key-value 쌍으로 데이터 관리 key = page number, value = frame number

📌 세그멘테이션(Segmentation)

페이징에서처럼 논리 메모리와 물리 메모리를 같은 크기의 블록이 아닌, 서로 다른 크기의 논리적 단위인 세그먼트(Segment)로 분할함.
segment = code + data + stack
사용자가 두 개의 주소(세그먼트 번호 + offset)로 지정, 세그먼트 테이블에는 각 세그먼트의 기준(세그먼트의 시작 물리 주소)과 limit(세그먼트 길이) 저장함.

 

  • 물리 주소 a = base[s] + d
  • 논리 주소(2, 100) → 물리 주소 4400번지
  • 논리 주소(1, 500) → limit이 400이므로 범위를 벗어나 인터럽트로 인해 프로세스 강제 종료

 

🔋 장점 

  • 세그먼트들이 연속적으로 할당될 필요 없음.
  • Stack과 Heap이 독립적으로 커질 수 있음.
  • 세그먼트마다 protection을 따로 수행할 수 있음.

 

🪫 단점 

  • 서로 다른 크기의 세그먼트들이 메모리에 적재되고 제거되는 일이 반복되면 외부 단편화 발생 가능

Paged Segmentation

: 세그먼트를 페이징 기법으로 나누는 것

세그멘테이션 - 보호와 공유에서 효율적
페이징 - 외부 단편화 문제 해결 가능

➡️CPU에서 세그먼트 테이브렝서 주소 변환을 하고, 그 다음 페이지 테이블에서 주소 변환을 해야 함.

     (총 2번의 주소 변환 필요)


📌 면접 질문

🤔 페이징이란?
🤔 페이징의 장단점은?
🤔 세그멘테이션이란?
🤔 세그멘테이션의 장단점은?

 

 

📌 참고 블로그

https://steady-coding.tistory.com/524

 

[운영체제] 페이징과 세그멘테이션

cs-study에서 스터디를 진행하고 있습니다. 메모리 메인 메모리 (Main Memory, Physical Memory, 주기억장치) CPU가 직접 접근할 수 있는 기억 장치로, 프로세스가 실행되려면 프로그램 코드를 메인 메모리

steady-coding.tistory.com

https://velog.io/@wngkdroqkf441/CS-%EC%9A%B4%EC%98%81%EC%B2%B4%EC%A0%9C-%EB%A9%94%EB%AA%A8%EB%A6%AC-%ED%8E%98%EC%9D%B4%EC%A7%95-%EC%84%B8%EA%B7%B8%EB%A9%98%ED%85%8C%EC%9D%B4%EC%85%98

 

[CS - 운영체제] 메모리, 페이징, 세그멘테이션

페이징이란? 세그멘테이션이란?페이징과 세그멘테이션의 차이?내부 단편화와 외부 단편화의 차이?프로세스 주소는 논리적 주소(Logical Address)와 물리적 주소(Physical Address)로 나뉜다.가상 주소(Vir

velog.io

https://dar0m.tistory.com/269

 

[OS] 페이징 & 세그먼테이션

Paging vs Segmentation 가상 메모리를 관리하는 기법 가상 메모리는 메모리에 로드된 즉, 실행중인 프로세스가 가상의 공간을 참조하여 마치 커다란 물리 메모리를 갖고 있는 것처럼 사용할 수 있도

dar0m.tistory.com

 

반응형