특정 용량이 정해진 memory는 많은 프로세스들이 사용하기를 원하는데 우리는 이 한정된 자원으로 최대한 효율적으로 사용하기 위해 다양한 방법을 채택한다.
정의\
프로그램 전체가 하나의 커다란 공간에 연속적으로 할당된는 것
이때 메모리는 해당 위치를 알려주는 주소가 존재한다.
MMU란\
논리주소를 물리주소에 매핑시켜주는 것으로 실제 프로세스의 요구하는 정보위치를 메모리에 할당하도록 한다.
이렇게 연속적으로 메모리에 할당하는 방법은 2가지 방법을 통해 이루어 진다.
시스템 생성시 주기억장치가 이미 특정 크기로 고정된 파티션들로 분할되는 방식
- 프로세스 크기 > 파티션의 크기
이는 프로세스르 모듈단위로 나누어 디스크와 주기억장치 사이에서 할당을 제어하는 오버레이 기법을 사용해야 한다.\- 프로세스의 크기 < 파티션의 크기
이는 공간이 남게되는 internal fragmentation이 생긴다.
Overlay기법\
큰 프로그램을 모듈이라는 단위로 나눈뒤 각 부분의 실행이 필요할때마다 필요한 부분만 주기억장치로 입력시켜 실행할 수 있게하는 것이다.
모든 파티션의 크기가 일정하지 않고, 프로세스에 맞는 파티션을 할당한다.
이는 필요한 공간만큼을 가능한 곳에 할당하는 방법을 취한다.
그렇다 보면 저렇게 사용하는 부분 사이에 빈공간이 생기는데 이를 External Fragmentation이라고한다.
External VS Internal Fragmentation\
External Fragmentation : 외부 조각화는 디스크 공간이 디스크 전체에 흩어져 있는 작은 조각으로 나뉘는 디스크 공간의 조각화를 말한다. 이로 인해 디스크 사용률이 감소하고 디스크 집약적인 응용 프로그램의 성능이 저하될 수 있다.
따라서, 디스크 사용량이 감소하고 디스크 데이터에 대한 액세스 시간이 느려질 수 있으므로 디스크 집약적인 응용 프로그램에서 더 문제가 될 수 있습니다. 이로 인해 애플리케이션 성능이 느려지고 디스크 I/O 시간이 증가할 수 있습니다.
Internal Fragmentation : 메모리 블록이나 페이지와 같은 단일 할당 단위 내에서 메모리 조각화를 나타낸다. 이는 애플리케이션에 할당된 메모리가 애플리케이션에 실제로 필요한 메모리 양보다 클 때 발생하며 할당 단위 내에 사용되지 않은 공간이 남게 된다. 이로 인해 메모리 사용률이 감소하고 사용하지 않는 메모리를 제대로 관리하지 않으면 시스템 성능이 저하될 수 있다.
따라서, 메모리 사용률 감소 및 메모리 관리 오버헤드 증가로 이어질 수 있으므로 메모리 집약적 애플리케이션에서 더 문제가 될 수 있습니다. 이로 인해 메모리 페이징이 증가하고 전체 시스템 성능이 저하될 수 있습니다.
이렇게 단편화된 부분을 나눠 공간을 확보하는 방법이 있다. 하지만 이렇게 집약하는 것은 시간이 오래걸려 단점을 가지고 있다.
배치 알고리즘(메모리 할당 방식)
위와 같이 메모리 집약이 최대한 덜 일어나도록 어떤 곳에 프로세스를 할당할 것인가하는 배치도 상당히 중요하다.
1. Best-Fit : 요처왼 크기와 가장 근접한 크기의 메모리를 선택한다.
2. First-Fit : 가장 최근에 배치되었던 메모리의 위치부터 크기가 충분한 메모리를 선택한다.
3. Worst-Fit : 사용가능한 메모리중 가장 큰 것을 선택한다.
일반적으로 First-Fit 및 Best-Fit 알고리즘은 속도와 메모리 사용 사이에 적절한 균형을 제공하므로 더 일반적으로 사용됩니다. Worst-Fit 알고리즘은 외부 조각화를 증가시키는 경향으로 인해 덜 자주 사용됩니다. 알고리즘의 선택은 시스템의 특정 요구 사항 및 제약 조건에 따라 달라집니다.
정의\
프로그램의 일부가 서로 다른 주소 공간에 할당될 수 있는 기법이다. 앞서 봤던 단편화 문제를 해결하기 위해 제시된 기법이다.
정의\
프로세스를 일정한 크기의 페이지로 분할해서 메모리에 적재하는 방식
이때 사용하는 2가지 용어가 있다.
정의\
서로 다른 크기의 논리적 단위인 세그먼트로 메모리를 분리하요 메모리에 적재하는 방식.
Paging과 다르게 유의미한 단위로 가변크기를 지닌 분할 방식이다.
그 이외의 매핑 테이블이나 동작방식은 동일하다.
장단점