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