오늘은 메모리 관리에 대한 내용에 대해 이야기 하고자 합니다.
프로그램이 실행되기 위해서는 메모리에 올라와 있어야 합니다.
그렇기 때문에 운영체제의 효과적인 메모리 관리가 필요합니다.
➡️ 각 프로세스에게 얼마큼의 메모리를 줄 것인가에 따라 메모리의 분할(partition)이 결정됩니다.
고정(Fixed) 또는 정적(Static) 분할: 메모리의 분할을 미리 해 두고 고정적으로 운영하는 방식입니다.
가변(Varaible) 또는 동적(Dynamic) 분할: 프로세스의 크기나 개수에 따라 변동시켜 나가는 방식입니다.
➡️ 효율적인 메모리 관리를 위해 4가지 기법이 사용됩니다.
각각에 대해서 간단하게 살펴보도록 하겠습니다.
✅ 프로세스에게 언제 메모리를 할당해 줄 것인가에 대한 기법입니다.
여기서 2가지 기법이 있습니다.
적재의 요구가 있을 떄 적재하는 요구(Demand) 적재
적재의 요구가 있을 것으로 예상하고 미리 적재해 두는 예상(Anticipatory) 적재
대부분의 시스템에서는 요구 적재를 채택하고 있습니다.
✅ 프로세스들을 메모리 공간의 어디에 적재할 것인가를 다루는 기법입니다.
배치 기법이 뒤에서 더 자세히 다루겠습니다.
✅ 메모리 공간이 부족할 경우 새로 적재돼야 할 프로세스를 위해 이미 메모리에 있는 프로세스 중 어떤 것을 골라 디스크로 내보내고 그 공간을 확보할 것인가에 요구되는 기법입니다.
✅ 프로세스에게 메모리 공간을 얼마 정도로 줄 것인가를 결정하는 기법입니다.
➡️ 단일 프로그래밍이란 한 번에 하나의 프로세스만이 메모리에 적재되고 실행이 종료되면, 다음 프로세스가 적재되는 시스템입니다.
이 시스템에는 문제점이 있습니다.
-> 이럴 때는 프로그램의 일부분만을 먼저 적재하여 실행시킨 다음 나머지 부분들을 다시 적재하여 실행을 이어가는 **오버레이(Overlay) **방식을 사용해야 합니다.
[메모리의 보호]
프로그램의 실행 중 커널 영역을 침범하지 못하도록 **경계 레지스터(Boundary Register)**를 사용합니다.
출처: https://starrykss.tistory.com/962
➡️ 메모리를 여러 개의 분할로 나누어 놓고, 각 분할에는 하나의 프로세스만을 수용하도록 함으로써 다중 프로그래밍을 구현하는 방식입니다.
프로그램들이 컴파일 될 때 주소지정이 이루어지는 경우, 메모리의 할당은 절대(Absolute)로더에 의해 언제나 지정된 분할로 들어갑니다.
[메모리의 보호]
사용자와 커널 사이뿐만 아니라 사용자와 사용자 사이에도 침범하지 못하도록 해야 합니다.
[메모리 공간의 단편화(Fragmentation)]
내부(Interna) 단편화: 프로세스를 수용하고 낭비되는 공간입니다. 분할 내의 낭비 공간이라는 의미를 가지고 있습니다.
외부(External) 단편화: 분할의 크기 자체가 워낙 작아서 프로세스들을 수용하지 못한다면 그 분할은 통째로 낭비될 것입니다. 이를 외부 단편화라고 합니다.
➡️ 가변 분할은 프로세스를 수용할 때 그 크기만큼 메모리 공간을 할당해 주는 것입니다.
아래의 그림을 참고하시면 됩니다.
free와 used 이름의 링크드 리스트를 이용해서 메모리가 어떻게 운영되는지 나타나 있습니다.
여기서 배치 기법에 대해 더 자세히 보겠습니다.
++ Next-fit => free 리스트를 순환 구조로 하고, 할당 가능한 노드가 선택될 때마다 헤더포인터를 이 노드 다음으로 옮기게 하는 방법입니다.
최적적합(Best-fit): free 리스트를 끝까지 탐색하여 요구되는 크기보타 더 크되, 그 차이가 제일 작은 노드를 찾아 할당해 주는 방법입니다.
최악적합(Worst-fit): free 리스트를 끝까지 탐색하여 요구되는 크기보타 더 크되, 그 차이가 제일 많이 나는 노드를 찾아 할당해 주는 방법입니다.
오늘은 메모리 관리에 대해서 알아보았습니다.
다음 시간에는 가상 메모리에 대해서 알아보겠습니다.🧐
안녕하세요, 책에 있는 그림을 그대로 사용하시게 되면 저작권법 위반이랍니다.
따라서 https://app.diagrams.net/ 와 같은 서비스를 통해 그림을 포스트 내용을 설명하기 위한 그림을 직접 넣으시는게 더 좋습니다.
추후 출판사 측에서 신고가 들어오면 포스트가 비공개처리 됩니다.
앞으로 포스트 작성할 때 참고해주세요!