티스토리 뷰

메모리 관리자는 Ntoskrnl.exe 파일에 존재하며 HAL(하드웨어 추상화 계층) 에는 존재하지 않는다. 


-가상 메모리 할당, 해제, 관리를 위한 서비스의 집합으로 디바이스 드라이버나 윈도우 API를 통해서 외부에 노출되어있다. 


-시스템 프로레스 내에서 6개의 서로 달느 커널 모드 스레드로 동작하는 6개의 루틴 


  1. KeBalanceSetManager) : 전반적인 메모리 관리 정책을 처리한다. 에이지, 메모리가 특정 임계값 이하로 떨어질 때, 편경된 페이지에 대한 쓰기 작업 


  2. KeSwapProcessOrStack : 프로세스와 커널 스레드 스택에 대한 스와핑릉 수행한다. 


  3.  MiModifiedPageWriter : 더티 페이지들을 적절한 페이징 파일에 적는다. 




단편화

메모리를 할당한 이 후 사용하다가 그 부분이 free 됐다고 가정해보자. 이 때 메모리와 메모리 사이에 구멍이 뚫리게 되는데 이 경우 구멍 뚫린 메모리의 양보다 큰 데이터는 할당할 수 없게 되는 현상이다. 



내부  메모리 단편화

필요한 양보다 더 많이 할당하여 사용하지 않는 부분이 존재한다. 


외부 메모리 단편화 

할당할 수 있는 자원의 합에 비해 실제 할당할 수 있는 자원의 크기가 작은 경우이다.



페이징

단편화를 해결하는 방법으로 가상 메모리를 최소 단위로 쪼갠 일정한 크기를 페이지 라고한다. 그리고 실제 메모리(RAM) 또한 페이지 크기와 같은 블록으로 나누어 이를 프레임이라고 한다. 그리고 프로세스마다 페이지 테이블을 두어 가상 메모리 상의 페이지와 실제 메모리의 매핑을 정의하는 방식이다. 


페이징은 외부 단편화는 해결하지만 내부 단편화는 해결할 수 없다. 왜냐하면 외부 단편화의 경우 페이징, 프레임 단위로 나누어져있기 때문에 할당이 가능하지만 내부 단편화의 경우 결국 페이징 단위에서도 내부에 빈칸이 나타날 수 있기 때문이다. 


가상메모리를 물리메모리를 변환할 때 페이지 단위로한다. 



프로세스에서 가상 주소 공간의 페이지는 해제, 예약, 커밋, 공유 가능의 상태를 지닌다. 커밋된 페이지는 다른 프로세스와 공유될 수 없는 전용 페이지이다. 


전용 페이지는  VirtualAlloc, VirtualAllocEx, VirtualAllocExNuma 등의 윈도우 함수를 통해 할당된다. 

VirtualFree VirtualFreeEx API 통해 전용 페이지를 디커밋 하거나 주소 공간을 해제할 수 있다. 

'Programming > Window Programming' 카테고리의 다른 글

레지스트리  (0) 2017.04.12
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함