삽질의 현장/- 윈도우 시스템

#030_WIndow_System_메모리 맵 파일

shovelman 2015. 9. 30. 17:00


안녕하세요 삽잡이입니다.

이번 시간에는 메모리 맵 파일에 대해서 알아보려고 합니다.


메모리 맵이 하는 일은 파일을 내 메모리처럼 사용할 수 있게 해주는 것입니다.

이를 위해서는 파일 입출력이 필요합니다.


파일 입출력은 프로세스의 내용물을 

영구적인 저장 장치(HDD, 플래시 메모리, SD 메모리 카드 등)에다가 쓰는 것을 말합니다.

데이터를 그룹화하여 하나의 단위로 취급하는 것이 파일인데,

이를 위해 WriteFile, ReadFile을 사용하지요...


아무튼... 영구적인 저장장치로부터 데이터를 프로세스에 올릴 때 ReadFile을 사용하게됩니다.

그런데, 객체라는 데이터를 사용할때를 생각해봅시다.

객체라는 데이터를 그대로 사용하게 될 때 그 안에 만약 참조가 들어있다고 한다면,

그 참조 즉, 주소자체가 의미가 있을까요?

아닙니다. 실제 참조가 가지고 있는 데이터가 의미가 있지, 참조 자체가 의미가 있는 것이 아닙니다.

따라서 변환을 해줘야하는 것입니다.


어찌됬건, 파일 입출력은 단지 

메모리 상태에 데이터를 영구적인 데이터 장치에 보내는 것이고,

반대로 영구적인 데이터 장치에 있는 데이터를 메모리 상태의 데이터로 복원하는 작업일 뿐입니다.


여담으로 파일 입출력은 99% 읽는 작업 즉, 복원을 위해 사용한다고 합니다.

항상 파일을 Read하고 Write할 수 있도록 보낼 때 읽을 수 있게 보내고, 언제든지 찾을 수 있도록 말입니다.



메모리 맵 파일이라는 것은,

메모리를 파일과 매핑시켜보자는 의도를 가지고 있습니다.

파일의 메모리를 프로세스의 메모리에 매핑해주고 데이터를 파일에 저장시키는 것이지요...


파일은 공유데이터입니다. 즉, 내 프로세스만 쓰는 것이 아니라는 소리입니다.

이 메모리 맵 파일을 파일 없이 사용할 수 있다면, 

다시 말해, 메모리 맵 데이터는 존재하는데 진짜 파일은 존재하지 않는다면

우리는 가상의 파일이 있는 것과 같이 사용할 수 있게 됩니다.

그렇게 사용할 수 있게 된다면, 메모리 맵 파일의 공유 정보를 이용해서 

프로세스간 서로 통신을 할 수 있게 됩니다.



실제 물리 메모리는 하나입니다.

물리 메모리는 가상 메모리와 RAM을 합친 메모리를 의미합니다.

실제 물리 메모리라는 소리는 논리적인 메모리가 아니라 진짜 메모리를 말하는 것입니다.


프로세스에 메모리가 1Mbyte 있다면, 

물리 메모리에 무조건 해당 메모리 즉, 1Mbyte가 반드시 할당되어 있어야 합니다.

A 라는 프로세스가 있을 때, 

프로세스의 메모리가 어딘가의 물리적인 메모리에 해당 메모리 크기만큼 할당 되어있다는 것입니다.

이는 OS만이 알고 있지요...


모든 가상 메모리는 커밋 메모리와 예약 메모리 그리고 사용하지 않는 자유 메모리 상태를 가집니다.

예약 메모리는 쉽게, 나중에 연속적으로 쓸 경우를 대비하여 잡아놓은 메모리.

커밋 메모리는 할당된 메모리, 프리 메모리는 할당되지 않은 메모리를 말합니다.

어찌됬건 이와 같은 상태를 가상 메모리는 가지고 있습니다.


HDD 즉, 하드디스크는 물리 메모리 말고, 

물리 메모리처럼 사용이 가능한 영구저장장치 입니다.

HDD에 가상 메모리를 할당해주면, 

일부 영역을 메모리처럼 가상으로 사용할 수 있습니다.

HDD에 가상 메모리를 할당해주는 것은, RAM의 가상 메모리와 다른데,

CPU가 이야기하는 가상 메모리는 RAM의 메모리를 말하는 것입니다.

프로세스에 있는 메모리 공간은 우리는 가상 메모리 주소 공간이라고 부릅니다.


정리하자면,

HDD에서 가상 메모리는 OS가 LAM처럼 보관하면서 사용하도록 만든 메모리 공간을 뜻합니다.

따라서 RAM과 HDD의 가상 메모리를 합친 것이 물리 메모리라고 하는 것이지요...


쓰는 것은 RAM으로 올리고, 안쓰는것은 가상 메모리로 내리고... 

이를 용어로 페이징, 언페이징 작업이라고 부릅니다.

아무튼... 프로세스의 가상 메모리 주소공간과는 다른 의미임을 알아두시길 바랍니다.


파일도 일반적으로 HDD에 저장을 합니다.

이 파일을 사용하게 되면, 물리 메모리에 올리는 것, 즉 매핑시키는 것이지요.

또한, 그 메모리를 프로세스의 가상 메모리 주소 공간에 매핑 시킬 수 있게 됩니다.


여러 프로세스에서 파일에 대한 메모리를 매핑을 시키면 

프로세스들의 가상 메모리 주소공간에서 매핑된 메모리에 접근한다면, 

HDD에 있는 파일에 접근된다는 것입니다.


위의 원리로 HDD에서 파일을 올리는 것이 아니라, 

물리 메모리에서 가상의 메모리를 잡아두면 프로세스간에 통신이 가능하게 되는 것이지요...


프로세스간의 통신은

내가 가지고 있는 프로세스의 데이터를 다른 프로세스에 넘기는 작업을 말합니다.

그래서 서로 간의 데이터를 주고 받을 수 있게 되는 것이구 말입니다...


메모리 맵 파일도 IPC군요...


이상 삽잡이였습니다!



'삽질의 현장 > - 윈도우 시스템' 카테고리의 다른 글

#032_WIndow_System_DLL (1)  (0) 2015.09.30
#031_WIndow_System_힙(Heap)  (0) 2015.09.30
#029_WIndow_System_IPC_파이프(2)  (0) 2015.09.30
#028_WIndow_System_IPC_파이프(1)  (4) 2015.09.28
#027_WIndow_System_IPC_메시지  (0) 2015.09.28