본문 바로가기

OS

페이징 / 세그멘테이션

사용 이유

  • 메모리 단편화의 해결 방안 - 페이징과 세그멘테이션

메모리 단편화

  • 프로그램 실행시 메모리에 프로그램을 적재하고 실행
  • 주기억장치에 메모리가 할당되고 반납하고를 반복하면 메모리가 작은 조각처럼 공간이 나뉘게 됨
  • 이에 따라 메모리가 충분한대도 메모리 할당이 불가능한 현상

메모리 단편화 종류

  • 내부 단편화
    • 고정된 파티션으로 분할할 때(고정 분할 기법) 사용자 영역(파티션)이 프로그램 할당 영역보다 커서 메모리가 남는 현상
    • 예시 - 2MB를 할당해 줬지만 1MB밖에 사용하지 않는 경우
  • 외부 단편화
    • 동적 분할 기법에서 나타나는 현상 - 파티션이 동적으로 생성되며 자신의 크기와 같은 파티션에 적재
    • 작은 메모리 영역을 반납했을때 더 큰 프로세스는 그 구간에 메모리 할당을 받지 못함
    • 예시 - 4MB 할당되고 그 뒤에 8MB가 할당되었고 앞의 4MB가 반납되었을때 4MB 공간은 사용 가능하지만 5MB의 프로세스는 할당되지 못함. 이런 공간이 메모리 사이사이에 있어서 사용하지 못하는 현상

 

페이징

  • 프로세스를 일정한 크기의 페이지로 분할해서 메모리에 적재하는 방법
  • 장점
    • 하나의 프로세스가 사용하는 메모리 공간이 연속되어 저장할 필요가 없음
    • 남는 프레임에 페이지가 적절히 배치되어 외부 단편화가 발생하지 않음
  • 단점
    • 내부 단편화가 발생할 수 있음
    • 페이지 단위를 작게하면 해결할 수 있지만 페이지 매핑 과정이 복잡해져 비효율

페이지 테이블

  • 물리 메모리(고정 크기의 프레임) / 가상 메모리(고정 크기의 페이지)로 구성
  • 프로세스의 각 페이지(작은 크기의 프로세스 조각)에 해당하는 프레임(페이지와 같은 크기의 메모리 조각) 위치 관리
  • 모든 프로세스에는 하나의 페이지 테이블이 존재
  • 메인 메모리에 적재되어 있는 페이지 번호와 해당 페이지(프로세스 조각)가 위치한 메모리 시작 주소가 있음
  • 페이지 번호와 메모리 시작 주소가 맵핑
  • 테이블을 통해 메인 메모리 어디에 적재되어 있는지 알 수 있음
  • 논리 주소 <Page, offset>
  • 메모리 번지 공간을 관리하는 테이블

유형

  • Direct Mapping
    • 페이지 테이블을 주기억장치(메모리)에 위치시킴
    • 데이터 접근을 위헤 메모리에 접근 → 접근 시간 길어짐
  • Associative Mapping
    • 페이지 테이블을 버퍼에 위치시킴
    • 접근이 빠름 / 비쌈
  • Direct / Associative Mapping
    • 페이지 테이블을 메모리와 버퍼에 분산시킴
    • 버퍼에서 찾고 없으면 메모리에서 찾

 

세그먼테이션

  • 가상 메모리를 서로 크기가 다른 논리적 단위로 분할한 것
  • 프로세스를 물리적 단위인 페이지가 아닌 논리적 단위인 세그먼트로 분할해서 메모리에 적재하는 방식
  • 논리적 내용을 기준으로 프로그램을 분할하기 때문에 크기가 같지 않음
  •  장점
    • 내부 단편화 해소
    • 보호/ 공유 기능 수행 가능
    • 프로그램의 중요한 부분과 그렇지 않은 곳을 분리하여 저장
    • 같은 코드 영역은 한번에 저장
  • 단점
    • 외부 단편화 발생할 수 있음

세그먼테이션 테이블

  • 페이지 테이블과 동작 방식 동일한 매핑 방식
  • 논리 주소 앞에는 페이지 번호가 아닌 세그먼트 번호가 저장됨 - <Segment, offset>
  • segment no / limit / base
  • 주소값과 크기 맵핑

 

혼용기법

세그먼테이션 테이블에 권한 비트, 페이지번호, 페이지를 몇개 쓸지 저장

권한이 있는것만 맵핑시켜 좀 더 빠르게 효율적으로 관

 

가상메모리

  • 실제 메모리와 상관없이 사용할 수 있도록 가상 메모리 주소 사용
  • 프로세스의 일부분만 메모리에 로드하고 나머지는 보조 기억 장치에  할당
  • 가상 주소를 주기억장치의 실제 주소와 맵핑하는 방법을 통해 구현

 

 

참고

https://velog.io/@gang_shik/%ED%8E%98%EC%9D%B4%EC%A7%95Paging%EA%B3%BC-%EC%84%B8%EA%B7%B8%EB%A8%BC%ED%85%8C%EC%9D%B4%EC%85%98Segmentation

https://cocoon1787.tistory.com/859

'OS' 카테고리의 다른 글

CPU 스케줄링  (0) 2023.03.16
가상메모리  (0) 2023.02.13
운영체제 / 커널 / 콘솔 / 터미널 / 쉘  (0) 2022.12.23