[TIL] 20250115 TIL : CA #2 Memory pt.2 (2/3)

Jaeyoung Ko·2025년 1월 15일
0

[컴퓨터 구조 - 하드웨어 - 메모리]

참고한 자료:
Computer Organization and Desgin 5th edition,
Operating System: Concepts 10th edition BY A.Silberschatz




사실 메모리를 하나의 발제만으로 다루기에는 너무나도 방대하고 많은 내용이 존재한다. 따라서 선택과 집중을 통해 자세히 다룰 부분과 스치듯 넘어갈 부분에 대한 밸런스를 적당히 가져가겠다.




Memory Allocation (cont.)



cf. 선행 개념

Fragmentation

일반적으로 fragmentation이란 메모리를 효율적으로 사용하지 못해 가용한 메모리 공간이 낭비되는 현상을 말한다. 이러한 단편화는 메모리 할당과정에서 피치 못하게 발생하게 되며 다음 두 가지로 나뉜다.

Internal Fragmentation

할당된 공간이 요구된 공간 혹은 실제로 프로세스가 사용하는 공간보다 더 커서 할당된 메모리에 남는 공간이 낭비되는 현상을 말한다.

ex. Fixed Partitioning에서,
10KB partition에 대해, process p1과 p2가 각각 10KB, 8KB의 메모리를 요구할 경우,
p1은 partition에 완전히 fit하여 Internal Fragmentation이 발생하지 않지만,
p2의 경우 2KB가 사용되지 않은 채 남는다.


External Fragmentation

전체 메모리에서 가용한 공간의 합은 요청을 만족할만큼 충분하지만, 그 가용 공간들이 contiguous하지 못해 작은 조각들로 분산되어 있는 현상을 말한다.

ex. Variable Partition Scheme에서,
250KB의 메모리에 대해, 50KB의 메모리를 요구하는 process p1, p2, p3, p4를 처리하고 있다고 가정하자.
이 때, 가용한 공간은 전체 - 4개의 처리 중인 프로세스가 점유한 메모리 = 50 KB이고,
p3의 처리가 완료되어 가용 공간이 50 + 50 = 100KB가 되었다고 하자.
새로운 process p5가 80KB 메모리를 요구한다고 할 때,
분명 전체 메모리 관점에서 가용한 공간은 100KB로 충분하지만,
그 가용 공간이 50KB, 50KB로 분산되어 있기 때문에 p5를 처리할 수 없다.


a. Fixed Partitioning

주소 공간의 할당에 있어서 가장 간단한 것은 메모리를 동일한 고정 크기로 분할하는 것이다.

물론 이러한 방법은 구현도 간단하고 미리 정의된 파티션에 빠르게 프로세스를 할당할 수 있겠지만,

고정 크기의 분할로 인해 다양한 크기의 프로세스에 대해 유연성이 부족하며, Internal Fragmentation으로 메모리 공간의 낭비가 생길 수 있다.



b. Variable Partition Scheme

가변 분할 기법에서는 OS가 메모리의 가용 부분을 파악하는 테이블을 유지한다. 이 때, 초기의 모든 메모리 공간은 한 개의 큰 사용 가능한 블록으로 Hole이라 간주한다.

OS가 가용한 메모리 공간과 입력 큐를 유지하여 동적으로 메모리 할당을 처리하는 데에, 다음과 같은 일반적인 전략을 사용한다.

First-fit

=> first hole big enough

Best-fit

=> the smallest hole big enough

Worst-fit

=> the largest hole

(일반적으로, first-fit과 best-fit이 worst-fit보다 시간과 공간 사용량 효율 측면에서 낫다.)




Segmentation


Segmentation은 메모리 관리 기법 중의 하나로 프로그램을 함수, 배열, 변수 등의 논리적인 단위의 Segment로 분리하여,

segment table을 통해 segment number(식별 번호)와 offset(세그먼트 내 상대위치)로 이루어진 주소를 사용한다.

세그먼트는 동일한 크기일 필요없이 논리 구조에 따라 독립적으로 할당하기 때문에,

Internal Fragmentation은 거의 발생하지 않지만 External Fragmentation은 발생 가능하다.

그리고 이러한 relocation이 가변적이고 실행시간 내에 완료될 경우에만 가능한 기법이며 테이블 관리와 압축 작업이 필요하다.



Paging


페이징은 프로세스가 적재되는 물리 주소 공간이 noncontiguous하더라도 메모리 할당이 가능하도록 하는 메모리 관리 기법이다. 즉, 이러한 페이징은 External Fragmentation을 방지하는 이점을 가진다.


basic method


physical memory를 frame 이라는 동일한 크기 블록으로 분할하고,

logical memory를 page라 불리는 동일 크기 블록으로 나누어진다.

프로세스가 실행되면 해당 프로세스의 페이지는 예비 저장장치 (혹은 파일 시스템)으로부터 가용한 main memory 내의 frame에 적재된다.


하드웨어적으로 설명하면, CPU 내 모든 주소가 page number와 page offset으로 나뉘어지는데,

page table 내에서

page number를 통해 main memory에서 page가 점유하는 주소를,

page offset을 이에 더해 원하는 physical memory를 찾는다.



page size

페이지 크기는 하드웨어에서 중요한 부분으로 성능 효율에 밀접한 관련이 있다.

page size가 작을수록,

해당 페이지 내에 낭비되는 잉여 가용 공간이 적어지고 (이후 설명하겠지만 이를 internal fragmentation을 줄인다고 말할 수 있다), 입출력 효율성이 좋아지는 장점을 가지지만,

총 page 개수와 page table의 크기가 늘어나는 만큼 유지비용 등에 관련해 오버헤드가 증가하게 된다.

이러한 trade-off 사이 적절한 페이지 크기를 고려해야 한다. (일반적으로 4KB-8KB가 자주 사용됨)



cf. 시간 관계 상 생략하지만 찾아보면 좋을 내용

page table의 구조

  • Hierarchical Paging

계층적 구조로 중첩을 통해 page table에 대한 paging을 한다고 생각하면 좋다.


  • Hashed Page Table

주소 공간이 32bit 이상일 때 logical address를 hash로 사용하는 방식이다.


  • Inverted Page Table

전통적인 방식에서는 각 프로세스가 고유한 page table을 가지게 되는데, 이는 가상 주소 공간의 크기가 커질수록 page table의 entry 수가 수백만 개로 증가하게 되고, 곧 memory 사용량과 관리 복잡성 면에서 치명적인 단점을 갖게 된다.

이러한 문제를 해결하기 위해 등장한 것으로 physical memory 하나 당 하나의 entry로 mapping되도록 설계하는 방식으로, pid와 page number의 쌍으로 테이블을 구성하게 된다.




그 외, TLB(Translation Lookaside Buffer) .. 등등

profile
안녕하세요, 고재영입니다. 언제나 즐겁게 살려고 노력합니다.

0개의 댓글

관련 채용 정보