2010-07-09 7 views
13

프로세스의 메모리에 대해 이야기 할 때 코드 메모리데이터 메모리과 같은 것에 대해 들었습니다.코드 메모리는 어떻게 관리됩니까?

데이터 메모리의 경우 두 가지 주요 관리 메커니즘 인 스택과 힙이 있습니다.

이제 코드 메모리가 어떻게 관리되고 있는지 궁금합니다. 그리고 누가 그것을 관리합니까?

내 진술이 분명하지 않은 경우 용서해주십시오.

감사합니다.

답변

17

프로세스의 메모리 관리에 대한 자세한 내용을 알고 싶다면 http://duartes.org/gustavo/blog/post/anatomy-of-a-program-in-memory (및 기타 메모리 관련 기사)을 권장합니다.

코드 메모리 = 텍스트 세그먼트

주소 공간이 4GB인지 확인하십시오. 커널이 프로세스를 생성 할 때 가상 메모리를 제공합니다. 아래는 32 비트 OS의 예입니다. 커널은 프로세서의 MMU을 통해 실제 RAM에 매핑되는 주소를 관리합니다. 따라서 커널과 MMU는 프로세스의 전체 주소 공간을 관리하는 것처럼 코드 메모리를 관리합니다.

Borrowed from duartes.org http://static.duartes.org/img/blogPosts/linuxFlexibleAddressSpaceLayout.png

+1

아주 좋은 링크 ... – wrapperm

+0

두 번째 wrapperm. :) – smwikipedia

+2

레이아웃은 일반적으로 커널이 아닌 링커에 의해 설정되고 관리됩니다.커널은 실행 가능 이미지의 정보를 읽고 그에 따라 메모리 맵을 설정한다. 동적 링커는 실행 파일이 지정하는 경우 (동적으로 링크 된 실행 파일의 경우) 매핑되고 많은 것을 처리합니다. 링커가 OS의 일부라고 생각할 수도 있지만, 원하는 링크 만 있으면 사용자 정의 링커를 만들 수 있습니다. –

2

운영 체제에서 관리합니다. 프로그램이 실행될 때 실행 파일에서 일부 메모리 주소로 코드가로드됩니다. 프로그램의 특성에 따라 일부 변경 사항이 코드 섹션에 적용됩니다 (예 : 동적으로 링크 된 라이브러리로의 점프가 해결됩니다.

Space_C0wb0y에서 제안한대로 진행중인 작업에 대한 자세한 내용은 en.wikipedia.org/wiki/Dynamic_linker을 확인하십시오.

+1

진행 상황에 대한 통찰력을 얻기 위해 동적 로딩에 대한 위키피디아 - 기사를 확인하십시오. http://en.wikipedia.org/wiki/Dynamic_linker –

+0

감사합니다. Space_C0wb0y, 그 링크가 유용합니다. – smwikipedia

0

운영 체제가 소위 제공 시스템은 또한로드하고 프로그램을 실행하는 메커니즘을 제공, 동적 메모리 (의 malloc, 무료, 등)을 할당 호출합니다.

os로 프로그램을로드하면 텍스트 세그먼트 (코드 메모리)가 설정되고 프로그램에서 정적으로 할당 된 메모리를 즉시 사용할 수 있습니다. 코드에서 함수를 호출하면 함수의 (정적으로 할당 된) 변수가 스택에 할당되고 동적으로 할당 된 메모리 (예 : malloc() 사용)가 힙에 할당됩니다. 프로그램을 실행하는 동안 메모리를 관리하는 것은 프로그래머의 책임입니다 (메모리 부족으로 인해 메모리 누수로 이어지고 장기간 실행되는 프로그램의 메모리가 부족해 지거나 충돌이 발생할 수 있습니다. 경우에 따라 OS에 따라 전체 OS가 다운됩니다).

은이 문서를 참조하십시오 : http://www.maxi-pedia.com/what+is+heap+and+stack

+0

힙은 대부분의 운영 체제에서 커널에 의해 관리되지 않습니다. 일반적으로 일종의 런타임 라이브러리 (예 : ntdll, libc)에있는 순전히 사용자 모드 구성 요소이며 하위 수준 페이지 처리 기능 (예 : NtAllocateVirtualMemory)에 대한 시스템 호출을 수행합니다. – wj32

4

변경되지 않기 때문에 코드의 메모리 관리를 필요로하지 않습니다. 실행 파일이 주소 공간에로드되면 코드는 실행 파일에서 메모리로 읽히게됩니다. 사실 최신 운영 체제에서 코드 세그먼트는 실행 파일에 매핑 된 메모리 일뿐입니다.

+1

글쎄, 잘 .... 운영 체제에 따라 다릅니다. 운영 체제에 대한 A. Silberschatz 서적에서 기억 하듯이 일부 아키텍처에서는 코드를 이동할 수 있지만 프로그래머에게는 투명해야합니다. 또한 동적 라이브러리로드/언로드에는 코드의 메모리 관리가 필요합니다. – doc

+0

@doc : 사실이지만 OS와 아키텍처에 따라 다릅니다. 위에서 말한 내용은 주로 OS X 실행 파일 형식을 기반으로합니다. – JeremyP

관련 문제