본문 바로가기

개발/Linux

자료 관리 - 메모리 관리

반응형

메모리 관리


- Unix는 메모리 관리에 아주 깔끔한 접근수단을 가지고 있었고, linux 도 역시 그 장점을 물려 받았다. 몇몇 임베디드 응용프로그램을 제외한 리눅스 응용프로그램들은 결코 물리적 메모리에 직접 접근하지 못한다. 응용프로그램의 관점에서 마치 자신이 물리적 메모리에 접근하는 것 처럼 보일 뿐 리눅스에 의해 제어되고 있다.

- 리눅스를 응용프로그램이 방대한 메모리 공간에 투명한 방식으로 적접 접근할 수 있게 한다.

또한 한 프로그램이 다른 프로그램의 메모리 공간에 접근하지 못하게 하는 보호장치가 있다. 

응용프로그램이 물리적 메모리 용량보다 더 큰 메모리 공간에 접근할 수 있도록 한다. 


간단한 메모리 관리


#include <stdlib.h>

void *malloc(size_t size); 



예제


- malloc를 이용하여 1MB의 메모리르 할당. malloc는 그에 따른 메모리 영역의 주소를 반환.

- sprintf를 이용해 해당 메모리 주소가 들어 있는 some_memory에 Hello World를 넣는다.

- printf를 이용해 some_memory가 가리키는 메모리에 들어있는 some_memory를 보여준다.



- 현재 대부분의 리눅스는 32비트 정수를 이용하여 메모리를 가리키고 그 포인터 역시 32비트이기 때문에 가능하다. 32 비트 포인터로는 약 4GB까지 메모리를 지칭 할 수 있다. 32비트 포인터로 그 정보의 메모리에 직접 접근할 수 있는 메모리 접근 방식을 가리켜서 플랫(flat) 32비트 메모리 모형 이라한다. 이 모형은 windows xp, vista에서도 쓰인다. 


* 플랫(flat) 메모리 모형 


- 컴퓨터의 메모리를 관리하는 방법의 하나로, 각각의 프로그램에 프로그램 부분과 데이터 부분이 같은 공간을 사용한다.이것은 초기 컴퓨터에 사용된 하버드 아키텍처에서 프로그램 메모리 부분과 데이터 부분이 서로 다른 공간을 사용했던 것과 대비된다.

- 각 평면마다 16비트의 경우 64 킬로바이트, 32비트 프로세서의 경우 4기가바이트, 64비트 프로세서의 경우에는 16엑스비바이트를 사용할 수 있다.

- 이 방식은 포로그램과 데이터가 같은 공간을 사용하기 때문에, 두 부분의 메모리 주소가 겹치는 일은 발생하지 않는다. 대신 하버드 아키텍쳐 방식에 비해 사용할 수 있는 공간이 줄어드는 단점이 있다. 

(위키피디아 : http://ko.wikipedia.org/wiki/%ED%8F%89%EB%A9%B4_%EB%A9%94%EB%AA%A8%EB%A6%AC_%EB%AA%A8%EB%8D%B8)

반응형