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
   211   212   213   214   215   216   217   218   219   220   221