그래서 부트로더가 어떻게 작동하는지 알아보고 있는데 답을 찾을 수 없는 것 같은 질문을 발견했습니다.부트로더는 전체 커널을 로드하기 위해 읽어야 하는 섹터 수를 정확히 어떻게 알 수 있습니까?
부트로더를 작성 중인데 정확한 섹터 수를 계산하여 읽을 섹터 수를 수동으로 변경해야 하는 것이 너무 고통스럽습니다. 물론 이 프로세스를 자동화하는 방법이 있지만 방법을 모르겠습니다. 파일 시스템, BPB, BDB에 대해 들어본 적이 있지만 이 모든 것들이 혼란스럽습니다. 전체 프로세스가 어떻게 진행되는지 알고 싶습니다. Fat12는 간단한 파일 시스템이지만 커널이너무 큰플로피 디스크의 경우?
어떤 설명이라도 환영합니다.
답변1
기존 부트로더는 다중 레벨입니다. MBR 파티션 테이블이 있는 시스템의 1단계 부트 로더에는 파티션 테이블 바로 뒤, 파티션 테이블과 동일한 블록에 부트 로더가 있습니다.
이 코드는 파티션 테이블을 살펴보고 부팅 가능 플래그가 설정된("활성화됨") 기본 파티션을 찾은 다음 해당 파티션의 첫 번째 블록에서 코드를 실행합니다. 그러면 이 코드(보통 첫 번째 코드보다 그다지 복잡하지 않음)는 두 번째 단계 부트로더를 로드합니다. 두 번째 단계 부트로더를 찾는 데는 단순히 트랙에 남아 있는 모든 블록을 읽고 해당 트랙에 기록된 블록 목록을 사용하여 특정 블록을 로드하는 등 여러 기술이 사용됩니다(LILO는 후자 접근 방식을 사용함).
2단계 부트 로더는 일반적으로 부팅 파티션의 파일 시스템에서 운영 체제의 나머지 부분을 찾는 방법을 알 만큼 똑똑합니다.
보다 현대적인 시스템은 UEFI를 사용합니다. 펌웨어 자체에는 최소한 FAT 형식의 파티션을 읽을 수 있을 만큼 지능적인 작은 운영 체제가 있고 FAT 형식의 EFI 파티션에서 표준 형식 EFI 실행 파일을 로드하고 확인할 수 있습니다. 운영 체제의 나머지 부분을 로드하기 위한 운영 체제의 특정 파티션 형식을 이해합니다.
자신만의 운영 체제를 작성하는 경우 이 문제를 해결하는 가장 쉬운 방법은 EFI 형식의 실행 파일을 작성하는 것부터 시작하는 것입니다.