binary code relocation (ex 부트로더) 후에도 잘 동작하는 이유가 궁금합니다.
글쓴이: hyunya77 / 작성시간: 금, 2013/04/19 - 7:58오전
부트로더를 예로 들자면 보통 rom 영역의 address에 맞도록 빌드를 합니다만,
이코드가 실행 중간에 ram으로 copy를 한 후에 계속 동작을 하게 됩니다.
신기한 건 애초에 특정 address map에 맞도록 빌드와 링크를 한 binary인데, code relocation 이후에도
아무런 문제없이 동작한다는 점 입니다.
이게 가능하려면 코드내의 모든 전역/로컬변수등이 모두 현재의 PC relative하게 컴파일이 된다는 의미인데요.
제 생각이 맞는건가요?
Forums:
뭐 Intel architecture를 가정한다면,
Intel architecture(라고 쓰고 "x86"이라 읽음..)라고 한다면,
당연하겠지만 compile은 relative / direct jump 모두 사용됩니다. binary생성도 마찬가지구요.
단, code relocation이 이뤄질때(느린 ROM에서 RAM copy후 Jump할때) Shadow관련 register를 설정해주게 됩니다.
shadow전에는 0xFFFF0 address에 접근시 ROM으로 directing(?)시켰다면,
shadow후에는 0xFFFF0 address에 접근시 RAM에서 dispatch, jump등이 이뤄지겠죠.
결국 bootcode에서는 똑같이 동작하나 외부 Memory controller에서 opcode를 가져가는 위치를 변경합니다.
자세한 사항은 ROM BIOS Shadow RAM등을 검색해 보세요. ^^;
답변이 되었나 모르겠네요.
dispatch -> fetch입니다.
익명사용자는 수정이 안되나봐요. h
댓글 달기