메모리 단편화 : RAM에서 메모리의 공간이 작은 조각으로 나뉘어 사용가능한 메모리가 충분히 존재하지만 사용 불가능한 상태
-> 메모리 할당 시 프로세스가 필요한 양보다 더 큰 메모리 할당!(메모리 낭비)
OS가 할당한 메모리 > 실제 프로세스가 활용하는 메모리
ex) os가 10kb를 할당했는데 실제 프로세스는 5kb만 활용하면 내부 단편화가 5kb 발생!!
-> 메모리가 할당되고 해제되면서 중간중간 조그만 메모리가 생기는데 이런 메모리 때문에 총 메모리 공간은 충분하지만 실제 할당은 불가능한 상태
총 남는 메모리 > 프로세스 필요 메모리 이지만 실제 할당은 불가능!!
ex) 4kb가 할당되고 다음 10kb가 할당된 후에 4kb가 해제되면 4kb 공간이 남게 된다. 이런식으로 남는 공간이 많이 생기게 되면 빈 메모리 공간 중 가장 큰 메모리보다 큰 메모리를 필요로 하는 프로세스는 메모리를 할당 받을 수 없게 된다.
-> 사용하지 않는 프레임을 페이지에 옮기고 필요한 메모리를 페이지 단위로 프레임에 옮기는 방법 ( 프레임 = RAM을 페이지와 같은 크기로 나눈 것, 페이지 = 가상메모리를 같은 크기의 블록으로 나눈 것 )
가상메모리를 같은 크기의 단위로 분할.
페이지와 프레임을 대응시키기 위해 page mapping 과정을 위한 paging table 필요
장점 : 연속적이지 않은 공간 활용 가능하기에 외부 단편화 문제 해결 가능
단점 : 페이지 단위를 꽉 채워 쓰지 않기에 내부 단편화 문제 해결 X ( 페이지 단위를 작게하면 해결 가능하지만 page mapping이 많아지니까 효율이 매우 떨어진다 )
-> 가상메모리를 서로 크기가 다른 논리적 단위인 세그먼트로 분할해서 메모리를 할당해 실제 메모리 주소로 변환 ( 각 세그먼트는 연속적인 공간에 저장 )
세그먼트들의 크기가 다르기에 미리 분할이 안 되고 메모리에 적재될 때 빈 공간을 찾아 할당
mapping을 위한 세그먼트 테이블 필요 ( 각 세그먼트별 시작주소와 길이 정보를 포함 )
장점 : 프로세스가 필요한 메모리만큼 할당하기에 내부단편화 해결
단점 : 중간에 프로세스가 메모리를 해제하면 생기는 문제인 외부 단편화 문제 해결 X
-> 필요한 메모리 공간을 필요한 크기,개수 만큼 사용자가 지정하여 미리 할당받아 놓고 필요할 때마다 사용하고 반납하는 방법
장점 : 미리 공간을 할당하고 쓰고 반납하기 때문에 할당과 해제로 인한 외부 단편화 발생 X
필요한 크기만큼 할당하기에 내부 단편화 발생 X
단점 : 미리 할당해놓고 사용하지 않더라도 계속 할당하기에 메모리 누수 발생
즉, 메모리 단편화로 인한 메모리 낭비량보다 메모리 풀을 만들어도 쓰지 않을 때 메모리 양이 커질 경우에는 사용하지 않아야 한다.
메모리의 할당, 해제가 잦은 경우에 효과적
구현 방법
thdgorhkd97