[6] 물리적 메모리의 할당과 페이징

김두미·2022년 7월 3일
0

OS

목록 보기
6/9
post-thumbnail

물리적 메모리는 운영체제 상주영역 + 사용자 프로세스 영역으로 나뉜다.

사용자 프로세스 영역은 사용자 프로세스가 적재되어 실행된다.
이 곳에 적재되는 방식(프로세스가 메모리에 적재되는 방식)에 따라

1) 연속할당
2) 불연속할당 으로 나뉜다.

1. 물리적 메모리의 할당 방식

1-1. 연속할당

프로세스를 메모리에 올릴 때 물리적 메모리의 한 곳에 연속적으로 적재하는 방식

  • 하나의 분할에 하나의 프로세스가 적재되도록 한다.

물리적 메모리를 고정된 크기의 분할로 미리 나누어 놓느냐 아니냐에 따라
고정분할방식 , 가변분할 방식으로 나뉜다.

1) 고정분할 방식

물리적 메모리를 영구적으로 미리 나누어 놓는다.

  • 외부조각과 내부조각이 발생할 수 있다.

외부조각 : 프로그램의 크기보다 분할의 크기가 작은 경우, 분할이 비어도 프로그램 적재 불가하기에 발생하는 메모리 공간

내부조각 : 프로그램의 크기가 분할의 크기보다 작은 경우, 분할 내부에서 사용하지않는 메모리 조각

2) 가변분할 방식

적재되는 프로그램의 크기에 따라 분할의 크기, 개수가 동적으로 변하는 방식

외부조각이 발생 가능 -> 이를 해결하기위해서 compaction이라는 방법이 있음(비용이 많이 든다.)

쉽게말해서 프로그램이 실행될때마다 메모리에 차곡차곡 쌓이는것이다.
여기서 프로세스가 종료되어 나가면 가용 메모리 공간 (hole)이 생기는데
이 hole을 어떻게 할당하느냐에 따라서
최초적합, 최적적합, 최악접합으로 나뉜다.

1-2. 불연속할당

하나의 프로세스를 물리적 메모리의 여러 위치에 분산해 적재하는 방식

  • 페이징, 세그멘테이션, 페이지드 세그먼테이션 기법등이 있다.


    주소 변환 절차가 복잡해진다.

1) 페이징 기법

프로세스의 주소공간(virtual memory)을 동일한 크기의 페이지로 나누어 물리적 메모리의 서로 다른 위치에 페이지들을 저장하는 방식

  • 물리적 메모리는 페이지와 동일한 크기인 프레임으로 미리 나누어놓는다.

2) 세그먼테이션 기법

크기는 일정하지 않지만 의미 단위로 나누어 메모리에 올리는 기법




2. 페이징

페이징 기법은 연속할당 방식과 비교하여 다소 복잡한 주소 변환 절차를 가진다.
하나의 프로세스가 페이지마다 물리적 메모리에 적재되어있는 위치가 다르기때문이다.

주소변환을 위해 특정 프로세스의 몇번째 페이지가 물리적 메모리의 몇번째 프레임이 있는지 정보가 필요하다. 이것을 페이징 기법에서는
모든 프로세스가 각각의 주소 변환을 위해 페이지 테이블을 가진다.
[프로세스마다 페이지 테이블이 별도로 필요]

=> 용량이 너무 커요 => 그래서 메모리에 저장합니다.

내부 조각이 발생할 수 있다.



2-1. 주소 변환 기법

  • cpu가 사용하는 논리적 주소를 페이지번호(p) 와 페이지 오프셋(d)로 나누어 주소변환에 이용

페이지 번호는 페이지 테이블을 접근시 인덱스로 이용
해당 인덱스의 엔트리에는 해당 페이지의 물리적 메모리의 기준주소(base address)
, 즉 시작주소가 있다.

2-2. 페이지 테이블의 구현

  • 페이지 테이블은 물리적 메모리에 위치한다.
    즉 메모리에 접근하기위해서
    1) 주소변환을 위한 접근, 2) 실제 데이터에 접근
    이렇게 2번 접근해야하기에 오버헤드가 뒤따르고 오래걸린다.

2-3. TLB (주소 변환용 HW 캐시)

이를 줄이기위해 TLB(Translation Look-aside Buffer)라고 불리는 주소변환용 하드웨어 캐시가 사용된다.
Page Table에서 자주 참조되는 페이지에 대한 주소 변환 정보가 담겨져있다.(캐싱 하고 있다.)
[메인 메모리보다 접근 속도가 빠르다]



TLB에는 <페이지번호와 프레임번호>가 쌍으로 저장되어있는데
이는 순차적으로 저장되어있지않으므로 하나를 찾기위해서는 모든 엔트리를 찾아야하기에 오버헤드가 발생한다.
이를 줄이기 위해 TLB를 구현할때는 전체를 search를 해야하기에 병렬탐색이 가능한 연관레지스터(associative resister) 를 이용한다.

프로세스별로 페이지 테이블이 다르므로 문맥교환시에 이전 프로세스의 주소 변환 정보를 담고 있던 TLB내용은 모두 지워야한다.




3. 계층적 페이징

페이지 테이블에 사용되는 메모리 공간의 낭비를 줄이기 위해서 이용

컴퓨터에서 소프트웨어를 설치할때 (32비트, 64비트용) 을 본적이 있을것이다.
현재 대부분의 컴퓨터는 64비트를 사용하는데 64비트 주소체계를 이용한다는 것은
컴퓨터에서 2^64 byte의 주소공간을 갖는 프로그램을 지원할 수 있다는 것이다.

본 강의에서는 32비트 주소체계의 컴튜러를 예로 들어 설명하였다.

  • 2^32 byte (4GB)의 주소공간
  • 페이지의 크기는 4KB
    => 한 프로그램에 페이지 테이블의 개수는 4GB / 4KB = 1M개

한 페이지 테이블의 엔트리 당 크기는 4byte
4바이트가 1M개 이므로 한 프로세스당 페이지 테이블에 필요한 메모리 공간은 4MB이다. 그러나 대부분의 프로그램은 4G의 주소 공간중 지극히 일부만을 사용한다.
-> 페이지 테이블 공간 낭비

프로그램에 사용되지않는 page가 있다고해도 페이지테이블은 순차적으로 저장되기에
다 만들어져야한다.
대부분의 프로그램은 4GB를 전부 사용하지않기에 페이지 테이블에 할애되는 메모리 공간의 낭비가 심각하여 계층적 페이징을 생각하게 되었다.

(참고 : 컴퓨터 시스템에서는 2^10 = K, 2^20 = M, 2^30 = G)



3-1. 2단계 페이징

외부 페이지 테이블내부 페이지 테이블의 두단계에 걸친 페이지 테이블 이용

  • 사용되지않은 주소공간에 대해 외부 페이지 테이블의 엔트리를 NULL으로 설정하여 해당 엔트리의 내부 페이지 테이블을 생성하지 않는다.




4. 세그먼테이션

프로세스의 주소공간을 의미단위인 세그먼트로 나누어 물리적 메모리에 올리는 기법

  • 일반적으로 코드, 데이터, 스택 등의 기능단위로 세그먼트를 정의한다.

페이징 기법과 달리 크기가 균일하기지않기에 이를 메모리에 적재하기 위해 부가적인 관리 오버헤드가 필요하다.

  • 논리적 주소가 <세그먼트 번호, 오프셋> 으로 나뉘어 사용된다.

주소변환을 위해 세그먼트 테이블을 이용한다.

각 엔트리는 기준점(base), 한계점(limit)을 가진다.
기준점은 물리적 메모리에서 그 세그먼트의 시작위치를 나타내고, 한계점은 해당 세그먼트의 길이를 나타낸다.

4-1. 장점과 단점

장점

  • 세그먼트는 의미단위로 나누어져있기에 공유와 보안의 측면에서 페이징 기법에 비해 효과적

단점

  • 세그먼트의 길이가 균일하지 않기에 외부조각이 발생하게되고, 어느 가용공간에 할당할것인지 결정하는 문제 발생

#### 4-2. 공유 세그먼트 세그멘테이션 기법에서도 여러 프로세스가 특정 세그먼트를 공유해 사용하는 공유 세그먼트 개념을 지원한다. 공유 세그먼트는 이 세그먼트를 공유하는 모든 프로세스의 주소 공간에서 _**동일한 논리적 주소**_에 위치해야한다.

5. 페이지드 세그먼테이션

프로그램을 동일한 크기 페이지들의 집합으로 구성된 의미단위인 세그먼트로 나누고, 물리적 메모리에는 페이지 단위로 적재한다.

< 세그먼트 하나가 여러 개의 page로 구성 >

하나의 세그먼트 크기를 페이지 크기의 배수가 되도록 만들어서 외부조각 문제점을 해결하고, 공유, 프로세스 내의 접근 권한 보호가 가능하도록 만들었다.

  • 주소변환을 위해 세그먼트 테이블, 내부의 페이지 테이블을 이용한다.


    이렇게 메모리 관리 챕터가 끝났다.
    주소변환은 논리적 주소에서 물리적 주소로 변환하여 메모리에 접근할 수 있게 하는 것이다. 메모리에 접근하는 것은 OS가 아니라 HW가 해줘야하는 역할이므로
    해당 챕터에서는 OS의 역할이 없었다.

메모리 접근할 때마다 OS가 일을 하면 CPU는 너무 방해를 많이 받으니까-!

profile
개발자를 꿈꾸는 대학생

0개의 댓글