2014-01-13 2 views
0

주소를 0xABCD0xFFFFFF800000ABCD이되도록 사용자 정의 운영 체제 커널을 높은 메모리에 리베이스하는 방법은 무엇입니까? (커널은 부트 로더에 의해 주소 0x100000에서 이미로드되었습니다.) 현재 솔루션은 매핑되지 않은 주소에 페이지 폴트를 생성합니다. 이는 IDT가 아직 초기화되지 않았기 때문에 트리플 폴트로 에스컬레이션됩니다.커널을 높은 메모리로 리베이스

+1

왜 중요한가요? 맵이있는 OS를 사용하려는 경우 편리한 공간에 넣으십시오. 이미 실제 주소 001xxxxx를로드하고 실제 001xxxxx를 가상 01xxxxxx에 매핑하는 맵을 설정하면 다른 속임수없이 실제 가상으로 전환 할 수 있어야합니다. 가상 페이지 0xFFFFFF에서 OS 페이지를 복제하고 싶다면 ... 메모리 맵을 수정하는 것만으로도 충분하다. –

답변

1

커널을 명시 적으로 이동하지 마십시오.

대신 페이징을 사용하십시오. 먼저 메모리가 부족한 상태에서 모든 것을 설정 한 다음 페이징을 활성화하고 커널을 매핑합니다 (이동하지 않음). 바이트의 복사가 필요 없습니다.