가상 메모리 컨트롤
- CPU와 프로그래머 관점에서 보는 메모리는 가상메모리이고 실제 물리적 메모리에 매핑되는 구조
- 가상 메모리의 페이지
-> Windows는 가상메모리의 페이지를 관리할 때 페이지에 특성을 부여
-> Commit 상태 : 물리적인 메모리가 할당이 된 상태
-> Free 상태 : 할당을 하지 않은 상태. 물리 메모리에 매핑되지 않은 상태
-> malloc 함수를 통해 commit 상태가 되고 free 함수를 통해 Free 상태가 됨
-> Reserve 상태 : 미리 사용할 메모리를 Commit 상태로 놓게되면 비효율적이면서 다른 곳에서 사용할 수 없고 연속적인 페이지 할당을 받고 싶기 때문에 필요한 연속된 페이지를 예약하여 다른 누군가가 메모리 공간을 할당할 때 허용을 해주지 않고 물리적인 메모리 공간도 할당하지 않은 상태
메모리 할당의 시작점과 단위
- 메모리 할당의 시작점
-> Allocation Granularity Boundary 기준 : 메모리 공간을 할당할 때 어디서부터 할당하라는 기준
-> 페이지 크기의 몇 배수로 할당을 하게 되어 있고 각 페이지의 시작주소로 할당을 요구하면 할당하는 크기가 작아지기 때문에 지나친 단편화가 발생할 수 있음
* 단편화 : 기억 장치의 빈 공간 또는 자료가 여러 개의 조각으로 나뉘는 현상을 말한다. 이 현상은 기억장치의 사용 가능한 공간을 줄이거나, 읽기와 쓰기의 수행속도를 늦추는 문제점을 야기
- 페이지 크기와 Alloc Granularity 확인
#include <stdio.h>
#include <windows.h>
int main()
{
SYSTEM_INFO si;
GetSystemInfo(&si);
printf("페이지 크기 = %d\n Alloc Granularity = %d\n",si.dwPageSize, si.dwAllocationGranularity);
}
VirtualAlloc & VirtuallFree
- 가상 메모리를 할당, 해제
- malloc과 free로는 commit, free 상태로밖에 둘 수 없는 단점을 보완하기 위해 사용
LPVOID VirtualAlloc(
LPVOID lpAddress,
SIZE_T dwSize,
DWORD flAllocationType, // MEM_RESERVE, MEM_COMMIT
DWORD flProtect
);
BOOL VirtualFree(
LPVOID lpAddress,
SIZE_T dwSize,
DWORD dwFreeType // MEM_DECOMMIT or MEM_RELEASE
);
'Programming > System Programming' 카테고리의 다른 글
윈도우즈 시스템 프로그래밍 - 20. 메모리 관리(3) (0) | 2020.08.23 |
---|---|
윈도우즈 시스템 프로그래밍 - 20. 메모리 관리(2) (0) | 2020.08.23 |
윈도우즈 시스템 프로그래밍 - 19. 비동기 I/O와 APC(4) (0) | 2020.08.22 |
윈도우즈 시스템 프로그래밍 - 19. 비동기 I/O와 APC(3) (0) | 2020.08.22 |
윈도우즈 시스템 프로그래밍 - 19. 비동기 I/O와 APC(2) (0) | 2020.08.19 |