본문 바로가기

CS/운영체제

메모리 관리 기법, 페이징과 세그먼트 알아보기

반응형

프로세스가 실행되기 위해서는 우선 메모리에 프로세스가 로드 되어야 합니다

이때 메모리에 로드 되는 방식에 따라 크게 연속 할당 방식과 불연속 할당 방식이 있는데,

연속 할당 방식은 현재 많이 사용하고 있지 않기 때문에 간단하게 개념만 설명하고 불연속 할당 방식에 대해 자세히 살펴 보겠습니다.

 

연속 할당 VS 불연속 할당

 

연속 할당

연속 할당은 한 프로세스를 메모리 상에 연속적으로 할당하는 방식입니다.

따라서 MMU 만 있다면 간단하게 주소 변환이 가능합니다.  

 

여기서 주소 변환이란 논리적인 주소를 물리적인 주소로 변환하는 과정을 말합니다.

CPU 는 논리적인 주소를 바라보기 때문에 논리적인 주소를 물리적인 주소로 변경하는 과정이 필요합니다.

이때 사용되는 것이 MMU 라는 하드웨어 장치 입니다. (MMU에 대해서는 밑에서 살펴보겠습니다.)

 

연속 할당 방법에는 고정 분할 방식과 가변 분할 방식이 두가지가 있습니다.

  • 고정 분할 방식 : 메모리 공간을 미리 분할하고 이 공간에 프로세스를 할당하는 방식입니다. (내부 단편화, 외부 단편화가 발생)
  • 가변 분할 방식 : 메모리 공간을 프로세스 크기에 따라 분할하고 이 공간에 프로세스를 할당하는 방식입니다. (외부 단편화 발생)

불연속 할당

불연속 할당은 한 프로세스가 분역속적인 주소 공간에 분산되어 할당되는 방식으로

한 프로세스가 메모리 상에 흩어져 저장되어 있기 때문에 주소 변환이 어렵습니다.

 

  • Paging : 가상 메모리를 일정한 사이즈로 나누고(Page) 물리 메모리 역시 같은 사이즈로 나눈다 (Frame)
    • Internal Fragmentation 발생
  • Segmentation : 프로그램을 의미 단위인 여러개의 세그먼트로 나눈다. (Code / Data / Heap / Stack)
    • External Fragmentation 발생
  • Paged Segmentation : 각각의 세그먼트를 페이지 단위로 구성한 방법이다.

 


Internal fragmentation 과 Internal fragmentation

Internal fragmentation (내부 단편화)

  • 프로그램의 크기보다 분할된 공간의 크기가 더 큰 경우 발생합니다.
  • 하나의 분할 내부에서 발생하는 사용되지 않는 메모리 조각입니다.
  • 특정 프로그램에 할당 됐지만 사용되지 않는 공간입니다.

External fragmentation (외부 단편화)

  • 프로그램 크기보다 분할된 공간의 크기가 더 작은 경우 발생합니다.
  • 아무 프로그램에게도 배정되지 않은 빈 공간이지만 프로그램이 올라기지 못 하는 작은 공간을 말합니다.

MMU (Memory Management Unit)

 

MMU란 논리적인 주소를 물리적인 주소로 전환하는 것을 도와주는 하드웨어 장치입니다.

MMU는 relocation register(base register) 와 limit register를 이용하여 논리 주소를 물리 주소로 변경합니다.

 

relocation register : 프로세스의 시작 주소

limit register : 프로세스의 길이

 

작동 방식

 

프로세스가 메모리 상에 연속할당 되어 있다면 메모리 상의 프로세스의 시작 위치(relocation register) 만 알고있으면 됩니다.

하지만 악의적인 프로세스일 경우에는 자신의 프로세스가 할당된 공간을 넘어 다른 프로세스의 공간까지 접근할 위험이 있기 때문에

limit register 를 이용해 해당 프로세스의 접근 공간을 제한한다.

 

  1. logical address + relocation register < limit register 확인해서 
  2. 만약 해당 조건을 만족하지 않을 경우 trap을 발생시킨다.
  3. 만족한다면 logical address + relocation register 를 물리 주소로 사용한다.

Paging 

 

페이징 기법은 가상 메모리와 물리 메모리를 모두 같은 사이즈의 공간으로 나눕니다.

이때 가상 메모리에서 나눈 단위를 페이지, 물리 메모리에서 나눈 단위를 프레임이라고 부릅니다. (페이지 크기 = 프레임 크기)

또한 이렇게 나눠진 페이지들은 물리 메모리에 흩어져 저장됩니다. 

그렇기 때문에 page table의 도움없이 MMU 장치만 갖고는 물리 메모리에 접근할 수 없습니다. 

page table 은 물리 메모리 상에 있기 때문에 주소 변환을 위해 물리 메모리에 접근해야 합니다.

그렇기 때문에 속도가 느리다는 단점이 있습니다. 

이를 해결하기 위해서 캐시 역할을 할 수 있는 TLB 를 함께 사용합니다.

 

또한 프로세스의 모든 페이지가 항상 물리 메모리 상에 있지 올라가 있지 않습니다.

일부는 물리 메모리에 일부는 디스크의 swap 영역에 있으며 page table의 valid-invalid bit 를 통해서 해당 페이지가 디스크에 있는 지 없는 지 여부를 확인합니다.

 

 

페이지 테이블

  • 페이지 테이블은 논리 주소의 페이지를 물리 주소의 프레임으로 매핑시켜주는 정보들 담고 있는 테이블입니다.
  • 페이지 테이블은 프로세스 마다 하나씩 만들어 지며 물리 메모리에 저장됩니다.
  • 페이지 테이블의 엔트리는 가상 메모리의 페이지 수 만큼 존재합니다.
    • 각각의 페이지가 물리 메모리상 어디에 있는 지 하나하나 알아야 하기 때문입니다.
  • 페이지 테이블의 모든 엔트리가 실제 메모리 주소에 올라가는 것은 아니기 때문에 이를 구분하기 위해 valid-invaild bit 를 사용합니다. 
  • 페이지 테이블 엔트리 개수 계산
    • 32bit 주소 체계에서는 2^32 byte의 주소를 구분할 수 있다. 따라서 프로그램의 최대 크기는 4GB가 된다.
    • 즉 32bit 주소 체계로 4GB를 구분할 수 있다.
    • 페이지 하나가 4KB라고 한다면 4GB / 4KB = 1MB (100만개가 좀 넘음)
    • 하나의 가상 메모리에는 100만개가 넘는 페이지가 존재하고 페이지 테이블에도 같은 수의 엔트리가 필요하다.
  • 기존에 MMU 에서 사용하던 base register 와 limit register 대신 Page-tabe base register (PTBR) 과 Page-table length register (PTLR) 을 사용합니다.
    • Page-tabe base register (PTBR) : 페이지 테이블의 시작 위치
    • Page-table length register (PTLR) : 페이지 테이블의 길이

 

TLB (Translation Look-Aside Buffer)

페이지 테이블은 용량이 크기 때문에 물리 메모리에 저장됩니다.

그럼 항상 물리 메모리에 접근하기 위해서는 메모리에 2번 접근해야 되는 문제가 생깁니다. (실제 메모리 접근 1번 + 주소변환 1번)

이런 문제를 해결하기 위해 캐시 역할을 하는 TLB을 중간에 둡니다.

TLB는 <Page Number, Frame Number>로 구성된 테이블로 페이지 테이블에 접근하기 전에 먼저 접근하여 해당 frame number를 메모리 접근없이 바로 찾아낼 수 있습니다.

  • TLB는 페이지 테이블의 일부만 갖고 있다.
  • TLB는 context switch 가 일어날 때 전부 비운다 (오버헤드가 큼)

 

Paging 기법의 주소 변환 과정

https://m.blog.naver.com/bycho211/221028200599

 

CPU에서 접근 하는 논리 주소의 앞부분(p) 은 페이지 번호를 나타내고 뒷 부분(d) 는 페이지 안에서의 위치 정보인 offset을 나타냅니다.

따라서 페이지 번호를 통해 페이지 테이블을 따라가면 프레임 번호를 알 수 있고 프레임 번호로 물리 메모리 상에서 프레임의 위치를 찾아냈다면 프레임 안에서는 offset 정보를 통해서 정확하게 물리 주소에 접근할 수 있습니다.

 

[TLB 히트 상황]

  1. 논리주소의 페이지 번호를 통해 TLB를 탐색, 이때 하드웨어의 도움으로 병렬적으로 탐색하여 속도를 높인다.
  2. TLB에 해당 페이지 번호가 있다면 프레임 번호로 변환하고 offset 정보를 그대로 사용하여 물리 메모리에 접근한다.

[TLB 미스 상황]

  1. 논리주소의 페이지 번호를 통해 TLB를 탐색, 이때 하드웨어의 도움으로 병렬적으로 탐색하여 속도를 높인다.
  2. TLB에 해당 페이지 번호가 없어 메모리의 페이지 테이블에 접근한다.
  3. 페이지 테이블로 부터 프레임 번호를 찾아내고 프레임 번호와 offset 정보로 물리 메모리에 접근한다.

Two-Level Page Table

32bit 주소 체계 시스템에서 페이지 사이즈 4KB일 경우 

페이지 엔트리 수 = 가상 메모리 사이즈 (4GB) / 페이지 사이즈 (4KB) = 1MB (100만개 넘음)

만약 페이지 엔트리마다 4B의 크기를 갖는다면 총 페이지 테이블의 크기는 4B * 1MB = 4MB가 된다.

페이지 테이블은 프로세스마다 하나씩 각각 갖고 있고 메모리에 저장되어 있기 때문에 페이지 테이블이 차지하는 공간이 너무 크다.

이를 해결하기 위해 멀티 레벨 페이지 테이블을 사용한다.

  • 페이지 테이블 자체를 페이지로 구성
  • 사용되지 않는 주소 공간에 대한 outer page table의 엔트리 값이 NULL 이다.

Segmentation 

 

출처:&nbsp;https://yoon1fe.tistory.com/73

 

프로그램을 의미 단위인 여러 개의 세그먼트로 나누는 방식을 말합니다.

일반적으로 code, data, stack, heap 부분이 하나씩 세그먼트로 정의 됩니다.

 

의미 단위로 해야하는 작업에 대해서 Page 기법 보다 유리합니다. (공유나 보안)

보안을 예로 들면 코드 영역은 read 권한만 주고 싶을 때 페이징 기법이라면 동일한 사이즈로 분할했기 때문에 페이지에 코드 영역만 있다는 것을 보장하기 어렵습니다.

 

필요한 레지스터

  • Segment-table base register (STBR) : 물리적 메모리에서의 세그먼트 테이블 위치
  • Segment-table length register (STLR) : 프로그램이 사용하는 세그먼트의 수 

 

출처: https://resilient-923.tistory.com/394

 

페이징 기법과 비슷하게 Segmentation 에서는 논리 주소가 <segment-number, offset> 으로 구성됩니다.

페이징 테이블 대신 세그먼트 테이블을 활용하여 주소변환이 일어납니다.

 

세그먼트 테이블에는 세그먼트의 시작 위치와 세그먼트 길이 정보를 담고 있습니다.

-> 페이징 기법에서는 페이지 크기가 동일해 길이 정보가 필요 없었지만 세그먼트는 길이가 전부 달라 길이 정보가 있어야 합니다.

-> 세그먼트 시작 위치를 나타내는 base 값은 바이트 주소입니다. (페이지 테이블은 몇 번째 위치인 지 담고 있음)

 


Paged Segmentation

세그먼트 기법은 의미 단위로 작업을 할 수 있다는 장점이 있지만 데이터 분할 공간이 가변적이라는 것 때문에 혼자서는 사용되지 않습니다.

세그먼트 기법을 사용하지만 세그먼트가 물리적인 메모리에 직접 올라가는 것이 아닌 세그먼트가 여러개의 페이지로 구성되는 방법입니다.

즉, 세그먼트의 크기가 페이지 크기의 배수가 됩니다. 

 

세그먼트 테이블의 엔트리가 세그먼트를 구성하는 페이지 테이블의 base address 를 갖고 있습니다.

 

정리

페이징 기법

  • 페이징 기법은 물리적 메모리를 동일한 크기의 페이지로 나누고, 이를 가상 메모리의 페이지와 매핑하는 방식입니다.
  • 페이징 테이블과 TLB를 통해 주소 변환이 일어난다. 
  • 고정된 페이지 크기로 인해 작은 메모리 요청에도 큰 페이지를 할당해야 하기 때문에 Internal fragmentation 이 발생한다.
  • 페이지 테이블이 메모리 공간을 많이 차지한다. (페이지 테이블이 프로그램마다 각각 생성되어야 한다)

세그먼트 기법

  • 세그먼트 기법은 물리적 메모리를 의미 단위인 세그먼트로 나눈다. (세그먼트 크기가 전부 다름)
  • 세그먼트 테이블을 이용해 주소 변환이 일어난다.
  • 세그먼트의 크기가 다양하기 때문에 External fragmentation 이 발생한다.
  • 의미 단위로 작업이 가능하기 때문에 공유, 보안 작업에 유리하다.

 

 

 

참고

https://comdolidol-i.tistory.com/243
https://goodmilktea.tistory.com/35
https://resilient-923.tistory.com/394
http://www.kocw.net/home/cview.do?cid=4b9cd4c7178db077
반응형

'CS > 운영체제' 카테고리의 다른 글

데드락 문제 (Deadlock Problem)  (0) 2024.01.26
동기화 문제와 세마포어  (0) 2024.01.26
메모리 구조 이해하기  (0) 2024.01.19