- Mọi người phân biệt giữa thứ phức tạp và thứ chỉ đơn thuần là rắc rối. Tính phức tạp được xem là thú vị, còn sự rắc rối thì bị xem là có hại. Quá trình thiết lập CPU x86_64 phần lớn thuộc về kiểu thứ hai.
- Bài viết giải thích cách thiết lập CPU từ chế độ thực 16-bit sang chế độ dài 64-bit từ một boot sector được BIOS nạp. Thiết lập này chỉ là phần cơ bản, và vẫn cần thêm nhiều bước khác.
- Cần có Intel 64 and IA-32 Architectures Software Developer’s Manual, assembler (dùng nasm) và QEMU. Bạn cũng cần biết x86 assembly và cú pháp nasm.
Điểm khởi đầu: BIOS
- Sau khi reset, CPU x86 ở trong "real mode". Chế độ này có kích thước toán hạng mặc định là 16-bit. Nó có thể định địa chỉ 1MB bộ nhớ bằng segmentation.
- Đoạn mã đầu tiên chạy sau BIOS nằm trong boot sector. BIOS sẽ tìm sector đầu tiên trong hệ thống kết thúc bằng
0xaa55, rồi nạp boot sector đó vào địa chỉ bộ nhớ 0x7c00.
- BIOS chỉ cung cấp 512 byte, nên bạn phải dùng chúng để bootstrap phần còn lại của bootloader.
Thiết lập boot sector
- Thiết lập một boot sector đơn giản để dùng routine của BIOS in thông điệp ra màn hình rồi dừng lại. Điều này giúp xác nhận rằng công cụ đang hoạt động đúng.
- Boot sector được thiết lập bằng mã assembly và Makefile.
Giai đoạn 1 – Nạp giai đoạn 2 từ đĩa
- Có thể chia bootloader thành hai giai đoạn. Giai đoạn 1 là mã trong boot sector, tức toàn bộ những gì BIOS nạp. Mục đích duy nhất của giai đoạn 1 là nạp giai đoạn 2 vào bộ nhớ.
- Ở giai đoạn 2, hệ thống chuyển từ real mode 16-bit sang protected mode 32-bit. Trong protected mode, bạn không thể dùng routine của BIOS. Việc nạp sector từ đĩa trở nên phức tạp hơn nhiều.
- Bài viết giải thích cách truy cập đĩa bằng BIOS.
Protected mode 32-bit
- CPU được chuyển từ real mode (16-bit) sang protected mode (32-bit). Trong protected mode, memory protection được triển khai bằng segmentation.
- Trước khi chuyển sang protected mode, cần định nghĩa Global Descriptor Table (GDT). GDT được định nghĩa như một cấu trúc liên tục trong bộ nhớ.
- Bài viết giải thích cách định nghĩa GDT và chuyển sang protected mode.
Long mode 64-bit
- Trước khi chuyển sang long mode, CPU phải đang ở protected mode và paging phải được bật. Protected mode đã được thiết lập, nhưng vẫn cần paging.
- Paging thay thế segmentation để quản lý không gian địa chỉ ảo, quyền truy cập và các yếu tố khác. Bài viết giải thích cách tạo page table để chuyển sang long mode.
- Bài viết giải thích cách định nghĩa GDT cho long mode, và cách chuyển từ protected mode sang long mode.
Tóm tắt của GN⁺
- Bài viết này giải thích chi tiết quá trình thiết lập CPU x86_64 từ real mode 16-bit sang long mode 64-bit. Qua đó, người đọc có thể hiểu rõ hơn về phát triển bootloader và kernel hệ điều hành.
- Bài viết đề cập nhiều khái niệm như BIOS, boot sector, protected mode, long mode, đồng thời cung cấp mã assembly và cách cấu hình cần thiết cho từng bước.
- Bài viết hữu ích cho những ai quan tâm đến phát triển hệ điều hành, đặc biệt là những người muốn hiểu sâu về kiến trúc x86. Một dự án có chức năng tương tự là "Writing a Simple Operating System – from Scratch".
1 bình luận
Bình luận trên Hacker News