OS #8 Paging & Segmentation

김태준·2023년 4월 5일
0

CS & OS Study

목록 보기
11/12
post-thumbnail

불연속 메모리 관리 기법인 Paging , Segmentation을 학습하기 전 메모리 관리 기법에 대해 살펴보고 넘어가자✈️

🎈 메모리 관리 기법

다중 프로그래밍 시스템에 여러 프로세스를 수용하기 위해 RAM을 동적 분할하는 메모리 관리 작업이 필요. 즉 HDD에 존재하는 프로그램을 어떻게 메인 메모리에 적재할 지 판단한다.

💡 연속 메모리 관리

: 프로그램 전체가 하나의 커다란 공간에 연속적으로 할당되어야 한다.

  • 고정 분할 기법 : 주기억장치가 고정된 파티션으로 분할 -> 내부 단편화 발생
  • 동적 분할 기법 : 파티션들이 동적 생성, 자신의 크기와 같은 파티션에 적재 -> 외부 단편화 발생

✍️ 단편화

프로세스의 주소공간을 배치된 그대로 물리 메모리로 옮길 경우 발생하는 문제로 기억장치의 빈 공간(힙, 스택에)이 생기거나 자료가 여러조각으로 나뉘는 현상

  1. 내부 단편화
  • 프로세스가 사용하는 메모리 공간에 남는 부분
  • 프로세스가 요청한 양보다 더 많은 메모리를 할당할 때 발생, 메모리 분할 자유 공간과 프로세스가 사용하는 공간의 크기 차이를 의미
  1. 외부 단편화
  • 메모리 공간 중 사용하지 못하게 되는 부분
  • 메모리 할당, 해제 작업의 반복으로 작은 메모리가 중간중간 존재하지만 실제로 할당은 못하는 상황
  • 외부 단편화 해결 위해 압축 이용 But, 작업 효율은 악화

💡 불연속 메모리 관리

: 프로그램 일부가 서로 다른 주소 공간에 할당될 수 있는 기법
외부 단편화 해소를 위한 페이징(고정 크기), 내부 단편화 해소를 위한 segmentation(가변 크기)으로 분할

✅ Paging

🎈 Paging이란 ?

프로세스를 일정한 크기의 페이지로 분할해 메모리에 적재하는 방식

  • 페이지 : 고정 사이즈의 가상 메모리 내 프로세스 조각 (논리 메모리)
  • 프레임 : 페이지 크기와 같은 주기억장치의 메모리 조각 (물리 메모리)
    -> 하나의 프로세스가 사용하는 메모리 공간이 연속적이어야 한다는 제약을 없애는 메모리 관리 기법.
    +) 외부 단편화 문제 해결로 별도의 Compaction 필요 X,
    +) 다양한 메모리 청크들을 Backing store에 맞추는 문제 해결하므로 대부분 OS에서 사용
    +) OS와 컴퓨터 하드웨어 간의 협력을 통해 구현

💡 Paging Basic Method

  • 페이징을 구현하는 기본적인 방법
    : 물리적 메모리를 고정된 크기의 프레임으로 나누고 논리적 메모리를 동일 크기의 페이지로 나눔

프로세스 실행 시 프로세스의 페이지들은 메모리의 사용가능한 프레임으로 적재, Backing store 역시 고정된 크기의 block들로 나누어짐 - CPU(하드웨어)에 의해 분리된 하나의 주소는 페이지 번호(p), 페이지 간격(d)으로 특정. But, 사용자에게 이 과정이 보이지 않음
-> 페이지 번호(p)는 페이지 테이블의 인덱스로써 사용되며, 페이지 테이블은 물리적 메모리의 프레임 주소(시작 주소)와 페이지 번호를 매핑하여 가리키며 시작주소는 페이지 간격과 합해 메모리 단위의 물리적 메모리 주소를 정의할 수 있다.

논리적 주소가 2^M, 페이지 크기가 2^N이라면, p, d는 다음과 같다!

💡 페이징의 중요 측면

사용자 관점의 메모리와 실제 메모리를 분명하게 구분하는 것이다. 논리적 주소가 물리적 주소로 변환되는 것은 OS에 의해 사용자에게는 보여지지 않기에 사용자 프로그램은 메모리를 하나의 단일 공간으로 바라보지만 실제 메모리는 여러 곳에 흩어져 있다.

물리적 메모리를 관리하는 것은 OS이므로 OS는 반드시 물리적 메모리가 어떻게 할당되어야 하는지 알아야 한다. (어떤 프레임이 할당되고 어떤 프레임이 사용 가능한지) 이러한 정보는 프레임 테이블이라는 구조에 저장된다

그리고 OS는 사용자가 논리적 주소를 인자로 시스템 콜을 발생시켰을 때 올바른 물리적 주소로 대응되어야 하기 때문에 사용자 프로세스가 user space에서 동작할 때 모든 논리적 주소가 대응되는 물리적 주소를 알아야 한다. 이다. 따라서 OS는 각 프로세스의 Page table 복사본을 가지고 있다.

💯 페이징 장단점

논리 메모리는 물리 메모리에 저장될 때 연속해서 저장될 필요가 없고, 모든 페이징 크기가 고정되며 물리 메모리의 남는 프레임에 적절히 배치되기에 외부 단편화가 절대 발생하지 않는다.
그러나, 내부 단편화가 발생할 수 있고 이를 해결하고자 페이지 단위를 작게 만들 수는 있지만 매핑 과정이 복잡해져 오히려 비효율적이게 된다.

✅ Segmentation

  • 앞서 발생한 내부 단편화 문제를 해결할 수 있는 방법으로 불연속 메모리 관리 기법
  • 가상 메모리를 (프로세스를) 물리적 단위(페이지)가 아닌 서로 크기가 다른 논리적 단위(세그먼트)로 분할한 것

대부부의 사용자들은 메모리를 바이트의 연속적인 배열로 생각하지 않고, 메모리를 순서가 없는 가변 크기의 segment의 모음으로 보게 된다.
segmentation은 이러한 사용자 관점의 메모리를 지원하는 불연속 메모리 관리 기법으로 논리적 주소 공간은 segment의 모음. 각 세그먼트는 이름, 길이를 가지며 사용자는 이를 지정해 주소를 특정한다.
일반적으로 사용자 프로그램이 컴파일된 후 컴파일러는 자동으로 프로그램에 대한 세그먼트를 만든다.

💯 세그먼트 장단점

가변 크기이기에 내부 단편화 문제를 해결할 수 있으며 보호와 공유 기능을 수행할 수 있고 프로그램 내 중요/비중요로 부분을 분리해 저장하며 같은 코드 영역은 한 번에 저장할 수 있기에 메모리 사용 효율이 개선된다.
하지만 외부 단편화 문제가 발생할 수 있다.

🎇 결론

메모리 관리 기법을 통해 발생할 수 있는 단편화에 대해 알아보았고, 이를 해결하는 방안으로 Paging, Segment 기법을 알아보았다. 그러나 두 기법을 통해 단편화를 완전히 해결할 수는 없고 조화롭게 사용하고자 다른 기법을 사용하고자 한다.
이외에도 가상 메모리 페이징, 가상 메모리 세그멘테이션 등 여러 기법이 존재한다.

profile
To be a DataScientist

0개의 댓글