2009-12-03 2 views
0

부트 스트래핑 프로세스를 이해하려고합니다. 몇 가지 질문은 나에게 분명하지 않습니다. 그 중 하나는 다음과 같습니다. Volume 부트 레코드의 부트 스트랩 코드가 볼륨 부트 레코드가있는 0 패싯 섹터의 절대 LBA 주소를 어떻게 알 수 있습니까?OS 부트 스트랩 프로세스

+1

http://en.wikipedia.org/wiki/Master_boot_record가 만족스럽게 설명하지 못하는 것이 있습니까? 아마도 당신은 더 구체적 일 수 있습니까? – Stu

+0

'볼륨 부트 레코드가있는 파티션의 0 섹터의 절대 LBA 주소를 마스터 부트 레코드가 알고 있습니까?' – EFraim

+0

EFraim, MBR 코드가 부팅 가능한 파티션의 0 섹터의 파티션 테이블 LBA 주소를 검색하고 볼륨 부팅 코드를로드 및 실행한다는 것을 알았습니다. 그러나 볼륨 부트 코드는 볼륨 파일 시스템의 루트 디렉토리에있는 osloader 파일을 찾아야합니다. 그러나 메모리에 파일을로드하고 실행하려면 절대 LBA 주소를 알아야합니다. FAT BPB는 섹터 수만 저장하고 모든 구조에는 상대 주소가 있습니다. –

답변

0

VBR 내에는 BIOS Parameter Block이라는 구조가 있는데,이 구조는 전통적인 MS-DOS 커널 구조의 아래쪽 절반 인 BIOS의 이름을 따서 명명되었습니다. BIOS 매개 변수 블록 내에서 파티션과 파티션을 둘러싸는 (MBR 스타일) 파티션 테이블 항목 사이에 a field denoting the number of hidden sectors입니다. VBR 코드는 해당 필드를 자체에서 읽어내어 Volume-relative Block Address에 추가하여 디스크에서 읽을 LBA를 생성합니다.

Windows NT, MS/PC/DR-DOS 및 OS/2와 같은 운영 체제를 보조 파티션에서 직접 부팅 할 수 없습니다. 기본 파티션에서 BPB 필드는 볼륨 시작 부분의 시작 LBA에 불과합니다. 상대적인 파티션 테이블은 디스크의 블록 # 0에있는 기본 MBR이므로 모든 것이 작동합니다. 보조 파티션에서는 모든 사람이 그 이후로 호환 가능해야하는 MS-DOS 버전 3의 특징 때문에 BPB 필드는이를 포함하는 "확장 파티션"내의 "논리 드라이브"의 오프셋 일 뿐이며 부팅 코드는 디스크의 잘못된 위치에있는 boot volume의 나머지 부분을 찾기 때문에 작동하지 않습니다.

Boot managers 비행 중에 BPB를 수정하여 도움을 제공하십시오. 물론 VBR 코드는 온 - 디스크 복사본이 아닌 자체 메모리 복사본을 읽습니다. 따라서 부트 관리자는 VBR을 메모리에로드 할 때 2 차 파티션의 BPB 필드를 올바른 절대 값으로 조정하기 만하면됩니다. 모든 것이 작동합니다.