가상 메모리가 더 이상 가상이 아닌 것은 언제입니까?


0

Windows의 경우 Mac & amp; Linux에는 RAM 스택에있는 모든 응용 프로그램 소프트웨어 프로세스에 대해 가상 메모리가 진행 중입니다.

그러나 데이터 유형에 액세스하는 내 메모리의 실제 사용과 관련하여 내 메모리가 정확히 매핑되는 위치와 언제 물리적으로 될까요?

컴파일 후.

2. 편집 중.

3.Upon 로더 및 실행.

나는 커널의 겹쳐 쓰기, 잘못된 액세스 또는 조작을 피하기 위해 메모리가 보호되어야하므로, 내 메모리가 실제로 미리 어디에 있는지 정확하게 모르는 경우 프로그램에서 메모리를 어떻게 처리해야합니까? 따라서 직접적으로 어떤 능력을 제거해야합니다. 내 프로그램이 정확히 사용할 메모리 비트를 추적하십시오.

답변:


4

프로그램이 보는 주소 공간은 항상 가상입니다. (적어도 모든 최신 OS에서.)
OS API를 호출하여 메모리를 할당합니다 (또는 코드에서 변수를 정의 할 때 컴파일러가 대신 사용합니다).
할당 된 메모리에 대해 리턴 된 주소 (또는 프로그래밍 언어가 호출하는 포인터)는 프로그램의 컨텍스트에서 유효합니다.
자신에게 할당 한 메모리의 경우 OS로 반환해야 할 책임이 있습니다. 컴파일러가 당신 대신에 일을했다면 컴파일러는 필요한 정리 작업을 포함하게됩니다. 프로그램이 종료되면 OS도 정리를 수행합니다.

실제 프로그램 데이터가 컴퓨터의 실제 RAM에있는 곳은 완전히 학문적입니다. OS는 프로그램이 보는 가상 주소 공간을 실제 RAM 및 / 또는 스왑 공간에 매핑합니다. 당신은 자신이 어떤 주어진 시간에 그것이 어떻게 행해졌는지 간단히 알 수 없습니다.

장치 드라이버 나 커널 구성 요소를 프로그래밍하는 것이 중요 할 수 있지만 분명히 운영 체제 및 프로그래밍에 대한 지식은 필요하지 않습니다. 귀하의 질문에서 그 정도는 분명합니다.
이러한 소프트웨어는 다른 수준에서 작동하며 실제 실제 RAM과 상호 작용해야 할 수 있습니다. 이를 처리 할 수있는 특별한 방법과 API가 있지만 일반적인 사용자 작성 프로그램에서 이러한 메소드와 마주 치지 않을 것입니다.
또 다른 가능성은 가상 RAM과 물리적 RAM간에이 추상화 계층을 제공하는 OS가없는 임베디드 장치에서 저수준 프로그래밍을 수행 할 때입니다. 다시 : 이것은 전문가를위한 것입니다.

이것은 프로그래밍 언어의 규칙에 따라 올바른 프로그램을 작성하는 경우 걱정할 필요가없는 것입니다.
물론 : 프로그램이 올바르지 않은 경우 (예 : 할당되지 않은 메모리에 액세스하는 경우) OS가 프로그램이 오작동하고 있음을 발견하면 프로그램 자체가 충돌하거나 OS 자체에서 종료됩니다. 무엇이 잘못되었는지 알아 내고 프로그램의 문제를 수정하는 것은 프로그래밍의 중요한 측면입니다. 이를 디버깅이라고합니다.


@Keltari 고마워 ... 제출하기 전에 모든 철자 오류를 고쳤다 고 생각했지만 가장 분명한 답변을 찾지 못했습니다 .-(
Tonny

매우 무시 무시한 대답
Dinosaur pawz

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.