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

이민우·2024년 3월 25일

CS_운영체제

목록 보기
11/14
어떠한 프로그램을 실행할 때, 컴퓨터에서는 프로그램들을 메모리 공간에 연속적으로 할당하게 됩니다. 만약 여러 프로그램들이 메모리에 할당되고 해제되는 것이 반복되다 보면 메모리 공간이 조각조각 나뉘게 되어 총메모리가 충분함에도 불구하고 프로그램에 메모리를 할당하는 것이 불가능한 상태가 발생하게 됩니다. 이러한 현상을 바로 메모리 단편화라고 하며, 이번 포스팅은 메모리 단편화 해결방법인 페이징과 세그멘테이션에 대해 알아보도록 하겠습니다.

🎓 사전 지식

🚀 메모리 단편화(Memory Fragmentation)의 정의

컴퓨터에서 프로그램을 실행하거나 작업을 할 때 컴퓨터는 메모리에 해당 프로그램을 올리고 실행을 하게 됩니다.
이때 주기억장치 상에서 빈번하게 기억 장소가 할당되고 반납됨에 따라 메모리 공간이 작은 조각 공간으로 나뉘게 될 경우, 사용 가능한 메모리가 충분함에도 불구하고 메모리 할당이 불가능한 상태가 발생하게 되는데, 이를 메모리 단편화라고 합니다.
메모리 단편화의 종류로는 내부 단편화와 외부 단편화가 있습니다.

📲 내부 단편화

  • 주기억장치 내의 실행 프로그램보다 사용자 영역이 커서 메모리 할당 후 사용되지 않고 남아있는 공간을 의미
  • 프로세스가 필요한 양보다 더 큰 메모리가 할당되어 메모리 공간 낭비 발생

<예시>

메모장을 실행시키고 OS가 4KB만큼의 메모리를 할당해주었지만 사실상 1KB만큼만 사용하고 있을 때 필요 이상으로 프로세스가 메모리를 할당받았기 때문에 내부 단편화가 3KB만큼 생김

📲 외부 단편화

  • 주기억장치 내의 사용자 영역보다 실행 프로그램이 커서 프로그램이 메모리가 할당되지 않고 남아있는 공간을 의미
  • 메모리가 할당되고 해제되는 작업이 반복적으로 일어날 때 발생

<예시>

메모리 처음 주소에 프로세스를 4KB만큼 할당하고 바로 이어서 8KB만큼의 메모리를 또 다른 프로세스에게 할당했다고 가정할 때, 4KB만큼의 메모리를 할당하고 있던 프로세스를 종료시키면 메모리의 처음 주소부터 4KB만큼의 공간이 생기게 되고 이런 식으로 계속해서 빈 메모리 공간 생기게 되면 전체적으로 메모리 여유는 있지만 메모리를 많이 잡아먹는 프로세스를 실행시킬 수 없는 현상

메모리 관리 기법

1. 연속 메모리 기법

  • 프로그램 전체가 메모리에 연속적으로 할당
  • 고정 분할 기법 : 메모리가 고정된 파티션으로 분할. 내부 단편화 발생
  • 동적 분할 기법 : 파티션들이 동적으로 생성되고 자신의 크기와 같은 파티션에 메모리 할당. 외부 단편화 발생
    2. 불연속 메모리 기법
  • 프로그램의 일부가 서로 다른 주소 공간에 할당될 수 있는 기법
  • Page : 프로세스를 고정된 크기로 나눈 블록
  • Frame : 메모리를 고정된 크기로 나는 블록
  • Segment : 서로 다른 크기의 논리적 블록

가상 메모리

  • 실제 메모리 크기와 관계없이 메모리를 사용할 수 있도록 가상 메모리 주소를 사용
  • 프로세스의 일부분만 메모리에 로드하고 나머지는 보조 기억 장치(가상 메모리 공간)에 할당
  • MMU(Memory Management Unit)를 통해 논리 주소, 물리 주소를 나누어서 사용
  • 가상 주소를 주기억장치의 실제적인 주소로 매핑(Mapping)하는 방법을 통해 구현

💎 페이징(Paging)

  • 프로세스의 주소 공간을 고정된 사이즈의 페이지 단위로 나누어 물리적 메모리에 불연속적으로 할당하는 방식
  • 메모리는 Frame이라는 고정크기로 분할되고, 프로세스는 Page라는 고정크기로 분할됨
  • 페이지와 프레임은 크기가 같음
  • 페이지와 프레임을 대응시키는 page mapping 과정이 필요하여 paging table을 생성해야 함
  • 연속적이지 않은 공간도 활용할 수 있기 때문에 외부 단편화 문제 해결
  • 페이지 테이블에는 각 페이지 번호와 해당 페이지가 할당된 프레임의 시작 물리 주소를 저장

But, 프로세스의 크기가 페이지 크기의 배수가 아닐 경우 마지막 페이지에 내부 단편화가 발생하고 페이지의 크기가 클수록 내부 단편화가 커짐
=> 페이지 단위를 작게 하면 내부 단편화 문제도 해결할 수 있겠지만 page mapping 과정이 많아지므로 효율이 떨어짐

💎 세그멘테이션(Segmentation)

  • 프로세스를 서로 크기가 다른 논리적인 블록 단위인 세그먼트(Segment)로 분할하여 메모리에 할당
  • 각 세그먼트는 불연속적인 공간에 저장
  • 세그먼트들의 크기가 서로 다르기 때문에 프로세스가 메모리에 적재될 때 빈 공간을 찾아 할당하는 기법
  • 페이징과 마찬가지로 mapping을 위한 segment table 필요
But, 프로세스가 필요한 메모리 공간만큼 메모리를 할당해주기 때문에 내부 단편화 문제는 발생하지 않지만, 중간에 메모리를 해제하면 생기는 외부 단편화 문제가 발생

⚖️ Paging vs Segmentation

  • Paging은 고정 크기를 가짐
  • Segmentation은 가변 크기를 가짐
  • Paging은 내부 단편화 발생 가능, Segmentation은 외부 단편화 발생 가능

참고

https://github.com/gyoogle/tech-interview-for-developer/blob/master/Computer%20Science/Operating%20System/Paging%20and%20Segmentation.md#%ED%8E%98%EC%9D%B4%EC%A7%95%EA%B3%BC-%EC%84%B8%EA%B7%B8%EB%A8%BC%ED%85%8C%EC%9D%B4%EC%85%98
https://cocoon1787.tistory.com/860

profile
백엔드 공부중입니다!

0개의 댓글