다음은 운영 체제 텍스트에서 발췌한 것입니다.Calvinet al. 외.
페이징 방식을 사용하면 외부 조각화가 발생하지 않습니다. 모든 여유 프레임을 필요한 프로세스에 할당할 수 있습니다. 그러나 내부 조각화가 있을 수 있습니다. 프레임은 단위로 할당됩니다. 프로세스의 메모리 요구 사항이 페이지 경계와 일치하지 않는 경우마지막 할당된 프레임이 완전히 채워지지 않을 수 있습니다.. 예를 들어 페이지 크기가
2,048
바이트인 경우 바이트 프로세스에는 페이지와 바이트가72,766
필요합니다 . 프레임이 할당되어 바이트의 내부 조각화가 발생합니다. 최악의 경우 프로세스에는 페이지와 바이트가 더 필요합니다. 프레임이 할당되어 거의 전체 프레임이 내부 조각화됩니다.35
1,086
36
2,048 − 1,086 = 962
n
1
n + 1
위의 스크린샷은 Georgia Tech의 "High Performance Computer Architecture"에서 가져온 것입니다. 여기서 강사는 프로세스의 크기가 오른쪽 회색 중괄호로 표시된 크기까지라고 말합니다. 우리 시스템은 이렇습니다. 프로세스에 2페이지를 할당하고 점선 부분이 내부 단편화입니다.
내가 겪고있는 문제는 다음과 같습니다. 위와 같은 상황을 그렸습니다. 프로세스의 가상 주소 공간은 녹색으로 표시됩니다. 왼쪽에는 가상 주소 비트가 표시되어 있습니다. 이제 컴퓨터에서 페이지 크기는 일반적으로 2의 거듭제곱입니다. 따라서 페이지 오프셋은 아무리 길어도 페이지 크기가 가상 주소 공간 크기보다 작으면 프로세스의 가상 주소 공간을 균등하게 나눕니다.이제 균등하게 나누어진다면 가상 주소 공간의 마지막 부분이 스택 세그먼트를 가져야 하는데 [위 그림과 같이 마지막 페이지의 마지막 부분에서] 왜 [내부] 조각화가 발생합니까?
다음과 같은 페이지 크기를 사용한다고 가정합니다 4 MB
.
사진은 아마 이런 느낌일 것 같아요. 파란색으로 표시된 부분은 내부 잔해인 것으로 추측됩니다. 힙과 스택 사이의 큰 간격에는 메인 메모리에 프레임이 할당되어 있지 않으므로 걱정할 필요가 없습니다. 하지만 스택의 크기와 코드, 데이터 및 힙 부분에 따라 달라질 수 있다고 생각합니다. 페이지에 제대로 정렬되어 있는지, 내부 단편화가 있는지 여부를 단순히 말할 수는 없을 것 같습니다.마지막 프레임의 마지막 부분만 점유되어서는 안 되며, 이는 유일한 내부 단편화입니다.. 게다가 어떻게칼뱅텍스트 크기를 계산하는 프로세스는 무엇입니까?
답변1
대답은 다음과 같이 텍스트에 정의된 대로 내부 단편화가 발생하지 않는 상황에 자신을 두는 것입니다.
프로세스의 메모리 요구 사항이우연히페이지 경계가 있습니다
그러나 위에서는 일치하도록 설정했습니다. 그럼... 잔해물은 없어요.와는 별개로이미 알고 있듯이 사용되지 않은 힙과 스택은 공간을 차지하며 이 공간은 (무해하기는 하지만) "조각화"로 간주되어야 합니다. 이것이 바로 거대한 페이지를 갖고 싶지 않은 이유입니다.
그러나 나는 메모리가 이런 식으로 할당되지 않는다고 생각합니다. 페이지는 단순한 메모리 블록이 아니라 설정할 수 있는 속성도 가지고 있습니다. 예를 들어 코드를 여러 페이지에 배치하고 운영 체제에 다음과 같이 알릴 수 있습니다.이 페이지는 읽기 전용입니다.(그리고/또는공유됨다른 프로세스와 함께). 힙으로는 이 작업을 수행할 수 없습니다. 반대로당신은 물어볼 수 있습니다힙 페이지의 경우시행 불가능, 여러 보안 허점이 작동하지 않도록 합니다.
이러한 이점을 누리려면 각 프로세스 메모리 유형에 대해 별도의 페이지를 할당해야 합니다.
따라서 코드, 정적 데이터 및 힙 섹션이 페이지 크기에 완벽하게 정렬될 가능성은 거의 없습니다.예;여기서 내부 단편화가 발생합니다.