이것은 실제 구현보다 많은 지식 문제와 같습니다. 시스템이 시작된 후 커널 기능이 다른 가상 주소를 가질 수 있는지 궁금합니다. 실행 가능한 컴파일에 대한 이해는 가상 주소가 바이너리로 할당되었지만 물리적으로 가상으로 실행은 실행시에 os에 의해 수행된다. (페이징, 나는 그걸 알고있다.) 따라서, 커널 기능의 경우에는 시스템을 재시작 할 때마다 다른 가상 주소를 갖는 것을보십시오. 1. 커널 함수가 주소 범위에서 어떻게 매핑됩니까? 2. 런타임시 다른 가상 주소에 맵핑 될 수 있습니까? (나는 그것이 어떻게 가능 할까?) 3. dll에 대한 주소 매핑은 어떻게되어 있습니까? 컴파일시 가상 주소가 부여되었거나 런타임에 상대 주소가 할당 되었습니까? (나는 그렇게 생각합니다.) 4. 커널 가상 주소가 물리적 메모리에 고정되어 있는지 확인하는 방법이 있습니까?커널 함수가 서로 다른 가상 주소를 가질 수 있습니까?
감사
감사합니다. 커널을 언로드 한 후 런타임에 다른 위치에 모듈을 다시로드합니다. 커널 라이브러리의 상대 매핑을 시도하지만 가상 모듈이로드되면 다른 모듈이 해당 주소에 종속적으로 변경됩니다. 하지만 이러한 주소가 쿼리해야하는 테이블에 유지되면 런타임로드/언로드가 작동 할 수 있습니다. 따라서 커널은 런타임에 가상 주소를 계속 이동할 수 있습니다. 그러나 시스템에서 발생할 수있는 몇 가지 중요한 커널 루틴에 대해이를 수행하지 못할 수도 있습니다 언로드 할 때) 어떤 가상 주소가 phy 메모리에 고정되어 있는지 알 수 있습니까? –
@ agent.smith, 의견에서 복잡한 후속 조치를 요청하는 대신 다른 질문을하십시오. 또한 여러 가지 질문을하는 것 같습니다. 어떤 사람들은 질문 중 일부에 대해서만 답을 알 수 있지만 전부는 아는 것이 아니기 때문에 이것을 별개의 질문으로 질문하십시오. – bdonlan