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

지니🧸·2023년 4월 7일
0

CS 저장소

목록 보기
18/48

프로그램을 실행하기 위해 코드를 디스크에서 메인 메모리로 적재하는 과정에서 단편화는 불가피함
단편화가 잦으면 사용하지 못하는 메모리 공간이 많아져 낭비
최초 적합, 최적 적합, 압축 등으로 단편화를 해결할 수도 있지만 메모리 계산의 비용이 적은 페이징/세그멘테이션이 유용함

🍕 세그멘테이션

Segmentation

  • 가상 메모리를 서로 크기가 다른 논리적 단위(segment)로 분할해서 메모리에 적재
  • Segment table: 논리 주소의 앞 비트는 세그먼트 번호
    • 논리주소: <segment, offset> 형태로 구성
    • 세그먼트 번호로 세그먼트의 기준 (세그먼트의 시작 물리 주소)와 한계 (세그먼트의 길이) 파악 가능

장점

  • 내부 단편화 문제 해소
    • 프로세스가 필요한 메모리 공간만큼 할당해줌
  • 보호와 공유 기능 수행
    • 프로그램의 중요한 부분과 중요하지 않은 부분을 분리 저장
    • 같은 코드 영역은 한번에 저장 가능

단점

  • 외부 단편화 가능성
    • 중간에 메모리를 해제하면 발생

🍕 페이징

Paging

  • 프로세스를 일정한 크기의 페이지로 분할하여 메모리에 적재
  • 하나의 프로세스가 사용하는 메모리 공간이 연속적이어야 한다는 제약을 없앰
  • 페이지: 고정 사이즈의 가상 메모리 내 프로세스 조각
  • 프레임: 페이지 크기와 같은 주 기억 장치의 메모리 조각

동작 원리

  • 물리 메모리는 고정 크기의 프레임으로 분리
  • 가상 메모리는 고정 크기의 페이지로 분리
  • 개별 페이지는 순서와 상관없이 물리 메모리에 있는 프레임이 매핑되어 저장
  • 모든 프로세스는 하나의 페이징 테이블을 가진다
  • 페이징 테이블에는 메인 메모리에 적재되어 있는 페이지 번호와 해당 페이지가 위치한 메인 메모리의 시작 주소 저장
    • 하나의 프로세스를 나눈 가상 메모리 페이지들이 각각 실제 메인 메모리의 어느 프레임에 적재되어 있는지 알아냄

장점

  • 논리 메모리는 물리 메모리에 저장될 때 연속되어 저장될 필요 없음
  • 물리 메모리의 남는 프레임에 적절히 배치됨
  • 외부 단편화 X
    • 연속적이지 않은 공간도 활용 가능

단점

  • 내부 단편화 발생 가능
    • 프로세스의 크기가 페이지 크기의 배수가 아닐 경우 마지막 페이지에 내부 단편화 발생
    • 페이지의 크기가 클수록 내부 단편화가 커짐
  • 페이지 단위가 작으면 해결 가능하지만 페이지 매핑 과정이 복잡해져 비효율적

🍕 Paging vs. Segmentation

프로그램을 분할하는 방식이 다름

🍕 페이지와 프레임의 차이

프레임

물리 메모리를 일정한 크기로 나눈 블록

페이지

가상 메모리를 일정한 크기로 나눈 블록

페이지와 프레임

메모리를 일정한 크기의 공간으로 나눠 관리하는 단위

프레임의 수 = 메모리 크기 / 페이지 크기

페이지가 하나의 프레임을 할당 받으면 물리 메모리에 위치할 수 있게 됨

🍕 내부 단편화와 외부 단편화

내부 단편화: 공간이 작아 작업을 담을 수 없음 > 공간의 낭비
외부 단편화: 남아있는 총 메모리 공간이 요청한 메모리 공간보다 크지만, 연속적이지 않아 공간 낭비

🍕 페이지에서 실제 주소 가져오는 법

주소 변환, Address Translation

논리주소

  • CPU가 접근하는 주소는 2진수로 표현됨
  • 페이지 번호(p)와 페이지 오프셋(offset)로 나뉨
    • 페이지 번호, p: 프로세스 페이지 테이블을 접근할 때 사용
    • 페이지 오프셋, d: 참조되는 frame 안에서의 위치
      - frame의 시작 주소와 페이지 오프셋이 결합하여 물리 메모리 주소 구성

변환 과정

  1. 페이지 번호 P를 추출하여 페이지 테이블의 인덱스로 사용
  2. 페이지 테이블에서 해당 프레임 번호 f 추출
  3. 논리 주소의 페이지 번호 p를 프레임 번호 f로 바꿈

🍕 수정 중 (2)


profile
우당탕탕

0개의 댓글