Page 216 - Hướng Dẫn Cách Phòng Thủ Và Khắc Phục Sự Cố Máy Tính
P. 216
Bootsector và phần Setup đĩa cứng và đĩa mềm lưu trữ
ghi dữ liệu thành từng rãnh (track) là những vòng tròn
đồng tâm. Đầu từ của ổ đĩa không đọc hay ghi 1 bit hay 1
byte dữ liệu mà là một đoạn trên một track, học hình học
ai cũng biết một đoạn trên một đưòng tròn gọi là cung
(sector). Mỗi sector thường lưu trữ đưỢc 512 bytes.
Track đầu tiên còn gọi là track 0 trên đĩa mềm được định
vị bằng một lỗ tròn to tướng. Sector đầu tiên sector một của
track 0 (đánh sô" hơi bị kì nhưng phải nhó) gọi là bootsector vì
nó sẽ được BIOS tải lên khi boot. Toàn bộ chương trình khởi
động mềm 512bytes nằm trong sector này.
Bây giò hãy dovvnload source code linux kernel 2.4
hoặc copy từ đĩa cài đặt Linux.
Mở íĩle: arch/i386/boot/bootsect.S. Đây là source code
viết bằng ngôn ngữ assembly cho Linux bootsector . ở đây
các programmer Linux chú thích khá kĩ.
1. Chép 512 bytes bootsector từ vị trí khởi đầu mà
BIOS POST tải lên 0x7C0:0 đến ví trí cuối cùng của vùng
nhớ quy ưóc 0x9000:0, rồi jmp tói đó. Chỗ này chưa hiểu ý
định của người lập trình vì chương trình khởi động của
DOS không làm vậy. Có lẽ vùng nhớ OxTCOO nhanh chóng
sẽ bị chép đè bởi các chương trình tải lên sau.
2. Stack được khỏi động tại khoảng giữa của segment
0x9000.
3. Khởi tạo bang tham số ổ dia mói (disk parameters
table). Phần cứng của ổ đĩa hoạt động phụ thuộc bảng tham
sô" này. Mặc định có bảng tham sô" nằm trong BIOS, tuy nhiên
nhiều BIOS chỉ set chê" độ đọc từng sector. Linux programmer
set lại chê độ đọc nhiều sector cũng lúc để tăng tốc độ tải
HĐH. Bảng tham sô" này được chép về ngay dưới đoạn stack
(stack chạy ngược lên nên bảo đảm không đụng hàng) gồm 12
bytes. Bytes 0x4 là dữ liệu chứa sô" sector maxium đọc cùng
217