본문 바로가기

운영체제/[ecourse] Windows Programming25

5-3. Heap Memory VirtualAlloc의 특징 메모리의 시작 주소는 64K의 배수여야 한다. 메모리 크기는 PAGE 크기의 배수여야 한다. 힙 메모리의 역할 VirtualAlloc에서 할당한 메모리를 필요한 만큼 떼어다가 주는 것 필요할 땐 빈 공간을 떼어다 주고, 반납하면 사용가능하도록 다시 처리해주는 알고리즘 힙 메모리의 특징 기본 힙은 1MB로 예약 되고, 크기는 모자라면 자동으로 증가한다. 힙은 필요하면 또 만들 수 있음 힙을 사용할 때는 기본 힙에서 할당할 지, 새로 만든 힙에서 할당할 지 결정해야 한다. 힙 사용하기 기본 힙 핸들 얻기 : GetProcessHeap(); 힙에서 메모리 할당 : HeapAlloc() 힙에서 메모리 해지 : HeapFree() HeapAlloc hHeap : 할당할 힙의 핸들 d.. 2022. 9. 18.
5-2. Virtual Memory Allocation 가상 메모리를 사용하는 방법 유저 영역엔 다양한 dll, exe 그리고 힙, stack이 할당된다. 그럼 나머지 비어 있는 곳은? VirtualAlloc이라는 함수를 통해 사용이 가능하다. lpAddress : 예약을 원하는 주소(64k의 배수), 관례적으로 0을 넘김 (0을 넘기면 사이즈에 맞는 주소를 찾아준다) dwSize : 예약할 주소의 크기 (PAGE 크기(4K)의 배수) flAllocationType : 예약할건지, 예약하고 할당할건지 (MEM_RESERVE : 예약 / MEM_COMMIT : 할당) flProtect : 페이지 보호속성 (PAGE_READWRITE 등) 예약과 할당 이 함수의 3번째 인자가 예약인지 할당인지 정하는 옵션이 있는데, MEM_RESERVE는 원하는 가상 메모리 크.. 2022. 9. 18.
5-1. Virtual Address Space 가상 메모리 물리 메모리 (RAM)는 한정적이고 비싸기 때문에 HDD를 사용한다. 필요할 때는 HDD에서 물리 메모리로 다시 불러온다. (보관 -> 복구를 반복) HDD 안에 물리 메모리를 보관하는 공간을 페이징 파일이라고 한다. 가상 메모리는 실제 설치된 물리 메모리보다 더 큰 공간을 사용할 수 있다. Physics Storage란? => 물리 메모리 + 페이징 파일 => 실행 파일과 DLL을 일컫는다. 페이지 운영체제가 메모리를 관리할 때 사용하는 최소 단위 CPU별로 크기가 다르다 ( 인텔 CPU는 32/64bit 모두 4K ) 메모리를 관리할 때 페이지 단위로 관리한다. 예를 들어 10바이트 메모리를 요청하면 OS는 4K (1페이지) 를 할당한다. malloc 같은 메모리 할당 함수들이 할당받는 .. 2022. 9. 16.
4-2. Process ID & Handle PROCESS ID란? 프로세스가 만들어지면 2개의 핸들이 생성된다. PROCESS KERNEL OBJECT (PKO), THREAD KERNEL OBJECT (TKO) TKO가 생기는 이유는 프로세스 생성 시 주 스레드가 자동으로 생성되기 때문 PID를 구하는 방법 1. 자신의 프로세스 ID 구하기 GetCurrentProcessId() : 내 PROCESS ID 구하기 GetCurrentThreadId() : 내 THREAD ID 구하기 #include #include using std::cout; using std::endl; int main() { DWORD pid = GetCurrentProcessId(); cout 2022. 9. 13.