2013-10-27 3 views
5

OS 및 하드웨어 측면에서 실제 모드와 보호 모드의 차이점을 알고 있습니다.실제 모드 프로그램과 보호 모드 프로그램의 실제 차이점은 무엇입니까?

그러나 실제 모드 나 보호 모드에 대해 '알고있는'프로그램을 무엇입니까? 소스 코드/오브젝트 코드를보고있는 동안 리얼 모드 프로그램인지 아닌지 어떻게 말할 수 있습니까?

답변을 찾으려면 '리얼 모드'프로그램이 OS 서브 루틴과 함께 BIOS 서브 루틴을 사용하는 반면 '보호 모드'프로그램은 OS 서브 루틴만을 사용하는 것입니다. 명령 코드는 레지스터에 대한 opcode가 다르며 오프셋 주소가 다른 길이이기 때문에 다릅니다. 실제 및 보호 모드 프로그램을 차별화하는 다른 기능이 있습니까?

+0

은 이쪽을 봐 [보호 모드 리얼 모드 VS]을 가지고 [1] [1] : http://www.geek.com/chips/difference-between-real-mode-and-protected-mode- 574665/ –

답변

5

'실제 모드'프로그램은 OS 서브 루틴과 함께 BIOS 서브 루틴을 사용하지만 '보호 모드'프로그램은 OS 서브 루틴만을 사용합니다.

레지스터에 대한 opcode가 다르며 오프셋 주소의 길이가 다르므로 명령어 코드가 다릅니다.

4

주요 차이점은 CPU가있는 모드입니다. 보호 모드에서 OS는 페이징 및 가상 메모리와 같은 기능을 사용할 수 있습니다. 또한 실제 모드 코드는 32 비트가 아니며 보호 모드 코드는 16 비트 또는 32 비트가 될 수 있습니다. 모든 x86 CPU는 리얼 모드로 시작되며 OS는 보호 모드로 전환해야합니다.

4

어떻게하면 리얼 모드 프로그램인지 또는 소스 코드/오브젝트 코드를 보면서 말할 수 있습니까?

실제 메모리와 가상 메모리간에 직접 매핑 (일대일)이있는 경우 프로그램이 리얼 모드로 실행됩니다. 더 정확히 말하면 가상 메모리는 실제 모드에서 활성화되지 않으므로 프로그램은 16 비트 모드로 실행됩니다.이 모드에서는 소스 코드/오브젝트 코드로 "보는"모든 주소가 RAM의 실제 실제 주소입니다.

반면 보호 모드에서는 가상 메모리 기능을 사용할 수 있습니다. 따라서 소스 코드/객체 코드에 의해 액세스 된 주소 간의 매핑은 RAM에서 액세스되는 실제 메모리 위치와 다릅니다.

이것을 감지하려면 소스/오브젝트 코드가 실행될 때 CPU에서 페이징 플래그가 활성화 또는 비활성화되었는지 여부 만 확인할 수 있습니다.

x86 기반 CPU의 경우 CR0 레지스터에서 값을 확인할 수 있습니다. CR0 레지스터가 비어 있으면 프로그램이 리얼 모드로 실행됩니다.

+1

리얼 모드의 오브젝트 코드가 실제 물리적 주소를 포함하는지는 의심 스럽습니다. 왼쪽으로 4 비트 이동하면 CS 값에 추가되는 오프셋 만 포함합니다. – KawaiKx

관련 문제