메모리 관리

컴퓨터의 메모리를 어떻게 관리 할 것인가??

  • 반입정책 - 언제 메모리를 적할 것인가?

  • 배치정책 - 프로세스를 메모리의 어디에 반입 할 것인가?

  • 교체정책 - 메모리의 어느 영역을 교체 할 것인가?

<br/>

<br/>

<hr />

논리적주소/물리적주소

논리주소 : 또는 가상주소, CPU가 생성하는 주소. 기준주소 + 논리주소 = 물리적 주소

물리주소 : 실제 메모리의 주소

<br/>

컴파일 시간 바인딩 & 적재시간 바인딩 기법의 경우 논리주소와 물리주소가 같다.

반면, 실행시간 바인딩 기법에서는 논리주소와 물리주소가 다르다.

<br/>

<img src="https://file.podo-dev.com/blogs/images/2019/07/10/origin/77MXU0181224235506.PNG" style="width:300px" />

논리주소와 물리주소를 매핑시켜주는 메모리관리장치(MMU)를 통해 매핑.

<br/>

<br/>

<hr />

연속할당

Single Partition Allocation.

메모리를 운영체제, 하나의 프로세스를 위한 부분으로 나눔.

<br/>

Multi Partition Allocation.

<img src="https://file.podo-dev.com/blogs/images/2019/07/10/origin/IQTQNG181224235506.PNG" style="width:300px" />

메모리를 운영체제, N개의 프로세스를 위한 부분으로 나눔.

<br/>

연속 할당의 메모리 할당 방식

  • First-fit : 가능한 크기중 첫버째 공간에 할당. 빠름.

  • Best-fit : 가능한 크기중 가장 작은 공간에 할당. 할당 후 남는 공간을 최소화 할 수 있음.

  • Worst-fit : 가능한 크기중 가장 큰 공간에 할당. 할당 후 남는 공간에 다른 프로세스를 할당 할 확률이 높음.

  • 속도 : First-fit > Best-fit > Worst-fit

  • 메모리활용도 : Best-fit >= First-fit > Worst-fit

<br/>

<br/>

외부단편화 현상

프로세스들이 메모리 적재/제거가 반복되면서, 너무 작은 가용메모리 공간이 생기는 현상.

<img src="https://file.podo-dev.com/blogs/images/2019/07/10/origin/PH1NEF181224235506.PNG" style="width:150px" />

압축을 통해 해결

<br/>

내부단편화 현상

필요이상의 메모리를 할당받아, 사용하지 않는 메모리 공간이 발생하는 현상

예를들어 OS가 메모장에 1MB의 메모리를 할당하였지만, 실제로 800KB의 메모리를 사용하여 200KB 메모리가 낭비되는 현상.

<br/>

<br/>

<hr />

비연속할당

페이징

프로세스의 가용 메모리를 2^N크기 페이지로 분할 하여, 각 페이지를 메모리에 할당.

대부분의 컴퓨터 시스템이 채택하여 사용한다.

논리적 주소에서는 2^N크기로 분할된 메모리를 Page라하며

물리적 주소에서는 2^N크기로 분할된 메모리를 Frame이라 한다.

<br/>

페이지 크기가 작으면, 내부단편화가 발생활 확률이 낮지만,

페이지의 개수가 커져, 페이지테이블의 공간이 낭비된다.

<br/>

반대로 페이지의 크기가 크면, 내부단편화가 발생할 확률이 높다.

예를들어, 10KB의 크기의 프로세스를 2^3(8)KB의 페이지로 분할한다며, 8KB중 2KB바이트만 사용하고 6KB는 사용하지 않고 남게된다.

그러나 페이지 개수가 적어, 페이지테이블 공간이 적어짐.

<br/>

페이지테이블

페이지 테이블은 논리적메모리의 Page와 물리적주소의 Frame 매핑 정보를 저장한 테이블이다.

페이지테이블이 소규모이면 레지스터를 이용하지만, 그렇지 않으면 메모리에 저장한다.

그러나 메모리에 저장하게 된다면,

예를들어 Page에 매핑되는 Frame을 찾기위해 또 메모리에 저장된 페이지테이블에 접근하려고 한다. 속도가 저하된다.

이를 보완하기 위해 TLB를 사용한다.

TLB는 페이지테이블의 캐쉬메모리 생각하면 이해하기 쉽다.

Page에 매핑되는 Frame을 찾기 위해, 우선 가까운 TLB에 접근한다.

TLB에 해당되는 Page가 있을경우 Frame을 넘겨준다.

만약에 그렇지 않을 경우, 매핑정보를 페이지테이블에서 가져온 후, 해당 정보를 TLB에 추가한다.

<br/>

세그멘테이션

프로세스를 세그멘트 단위로 나누어 메모리에 할당

예를들어 Stack영역, code영역, heap영역 등 세그멘트로 나누어 메모리에 할당.

각 영역에 필요한 메모리만 할당하기 때문에 내부단편화가 발생하지 않는다.

그러나 FirstFit/BestBit으로 물리적 메모리에 할당하며, 외부단편화가 발생한다.

<br/>

<br/>

0
이전 댓글 보기
등록
TOP