윈도우의 메모리 구조

Programming/API 2015. 6. 3. 15:01

윈도우의 메모리 구조


유저 메모리와 커널 메모리


- 하나의 프로그램이 실행되면 이것을 하나의 프로세스라고 부른다.

  여러개의 프로세스가 동시에 돌아가게되면 이를 멀티태스킹 운영체제라고 부른다.


- 각각의 프로세스는 4G의 메모리 공간을 가질 수 있는데



 NULL값 할당영역

(4KB)

 도스 및 16비트

어플리케이션 영역(4KB)

 프로세스영역

(사용자영역 1.99GB)

 공유 메모리 영역

(메모리 맵 파일 영역,1GB)

커널 영역(1GB) 


각각의 프로세스는 4G의 메모리를 가지며, 이 중에 사용자가 사용 가능한 부분은 2G(약1.99G)이다.

그  외의 부분은 윈도우 커널이나 사용이 예약되어 있는 부분으로 사용이 불가능 하다.


보통 램을 2G~4G를 사용하는데 프로세스마다 4G의 메모리를 주는 것은 불가능하다.

그래서 메모리의 공유 및 가상공간을 사용하게 된다.


실제로 프로세스별로 할당되는 메모리는 코드영역과 프로세스 메모리 영역뿐이다.

나머지는 커널에서 관리하는 메모리로 모든 프로세스가 함께 사용한다.


커널이란?

커널이란 OS의 가장 중요한 핵심 기능을 구성하는 부분이다.

윈도우 같은 경우는 MS혼자서 개발하므로 커널이라는 개념이 모호한데,

리눅스의 OS를 보면 '리눅스'는 본래 OS의 이름이 아닌 커널의 이름이다.



가상 메모리


최근의 CPU, OS는 물리적 메모리를 직접 접근하지 않는다.(CPU의 보호모드)

이는 프로그램간의 보호와 안전성을 위한 방법이고, 프로세스마다 가상의 메모리 공간을 할당하여 더 편리하고 넉넉한 개발이 가능하다.

이는 OS상의 문제가 아닌 CPU에서 지원하는 개념이고, 최근의 OS는 모두 이를 지원한다.


우리가 만든 프로세스는 가상 메모리 공간의 주소를 가지게 되며, 이 주소는 메모리맵

(또는 메모리 테이블)의 정보를 거쳐서 실질적인 물리 메모리의 주소에 접근을 하게 된다.

이 역할은 MMU(Memory Management Unit)이라는 하드웨어가 해주는 일이다.


가상메모리 기능으로 인하여 우리는 아무 생각 없이 우리에게 할당된 2G의 메모리 공간을

마음대로 사용할 수 있으며, 다른 프로세스의 메모리를 실수도 건드릴 걱정을 할 필요가 없다.


메모리가 부족한 경우는 OS가 알아서 사용하지 않는 메모리 영역을 디스크로 저장하여

메모리를 확보하는 등 더 안정적이고 메모리의 제한이 없도록 해준다.




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

오브젝트와 오브젝트 핸들  (0) 2015.06.03
윈도우 API  (0) 2015.06.03
WBCS(유니코드) 문자열  (0) 2015.06.01
유니코드  (0) 2015.06.01
QueryPerformanceFrequency / QueryPerformanceCounter  (0) 2015.05.22
admin