전체 프로세스의 가상 주소 공간이 페이지로 분할되어 있습니까?

StackOverflow https://stackoverflow.com/questions/1851794

  •  13-09-2019
  •  | 
  •  

문제

메모: 가상 메모리 할당에 대한 높은 수준의 개요를 연구하려고 합니다.

전체 프로세스의 가상 주소 공간이 특정 크기의 페이지로 분할되어 있습니까?

  .text
  .bss
  .data

여기에는 힙 공간과 스택도 포함됩니까? 아니면 항상 페이징할 수 없습니까?

도움이 되었습니까?

해결책

먼저 "페이지"는 단순히 주소 공간의 영역이라는 점에 유의하세요."페이징할 수 없는" 영역(디스크로 스왑할 수 없다는 뜻이라고 가정)은 여전히 ​​논리적으로 페이지로 나누어져 있지만 OS는 해당 페이지에 다른 정책을 구현할 수 있습니다.

가장 일반적인 페이지 크기는 4096바이트입니다.많은 아키텍처가 동시에 여러 페이지 크기의 사용을 지원합니다(예:4K 페이지 및 1MB 페이지).그러나 대부분의 경우 여러 페이지 크기를 관리하는 데 드는 비용이 이것이 제공하는 이점보다 훨씬 높기 때문에 운영 체제에서는 단일 페이지 크기만 사용하는 경우가 많습니다.예외는 존재하지만 걱정할 필요는 없다고 생각합니다.

모든 가상 페이지에는 읽기 가능, 쓰기 가능, 실행 가능 여부와 같은 특정 권한이 부여되어 있습니다(하드웨어 지원에 따라 다름).OS는 이를 사용하여 보안 강화, 캐시 일관성(공유 메모리용) 및 실제 메모리에서 페이지 스와핑을 수행할 수 있습니다.

그만큼 .text, .bss 그리고 .data 지역은 OS에 알려질 필요가 없습니다(대부분의 OS는 보안 및 성능상의 이유로 지역에 대해 알고 있습니다).

OS는 해당 페이지에 처음 액세스할 때까지 실제로 스택/힙 페이지에 대한 메모리를 할당하지 않을 수 있습니다.OS는 더 많은 힙/스택 공간 페이지를 요청하기 위해 시스템 호출을 제공할 수 있습니다.일부 OS는 주소 공간에 더 많은 영역이 나타나는 공유 메모리 또는 공유 라이브러리 기능을 제공합니다.OS에 따라 다릅니다.

다른 팁

일반적으로 페지 운영 체제에서 프로세스 전체 주소 공간이 페이지로 분할됩니다. 각 선형 주소에는 두 가지 구성 요소가 포함되어 있습니다. 가장 중요한 비트의 페이지 번호와 페이지 내의 오프셋이 가장 유효합니다.

예를 들어, 32 개의 비트 선형 주소와 4KB 페이지의 경우 상단 20 비트는 페이지 번호이고 더 낮은 12 비트는 페이지 오프셋입니다.

.data 프로그램의 초기화 된 글로벌 변수가있는 곳입니다. .bss 명시 적 이니셜 라이저가없는 글로벌을 포함합니다 (기본값이 0 인). 힙과 스택은 이들과 서로 별도의 메모리 영역입니다. 프로세스에서 보이는 모든 메모리는 페이지의 모든 가상 메모리 분할입니다. 프로세스는 가상 메모리 이외의 다른 것을 보지 못합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top