Tôi đang viết một hạt nhân nhỏ chỉ để poke xung quanh các công cụ cấp thấp một chút. Ngay bây giờ, nó khởi động trong Virtual Box và tôi có thể hiển thị văn bản trên màn hình, cấp phát bộ nhớ và những thứ cơ bản khác. Nó được viết bằng C++ và một chút.(Viết hạt nhân) Làm cách nào để sửa đổi bảng mô tả ngắt?
Một trong những điều tôi muốn khám phá là cơ chế đằng sau đa tác vụ. Khi tôi hiểu nó, nó sẽ diễn ra như sau:
- Hạt nhân khởi chạy Bảng mô tả gián đoạn để ngắt được định kỳ (ví dụ: một phần nghìn giây) và gọi một thường trình được định nghĩa trong hạt nhân.
- Khi thường trình được gọi, nó có thể quyết định đặt các đoạn mã/dữ liệu và con trỏ ngăn xếp thành các đoạn mã của một chương trình khác, một "ngữ cảnh chuyển đổi".
Vì vậy, nó có vẻ đơn giản trong khái niệm, nhưng tôi biết chi tiết sẽ có nhiều chuyển động hơn. Tôi đã tìm thấy một vài điều trên mạng, nhưng thuật ngữ thay đổi rất nhiều, và các ví dụ có vẻ là từ ngữ cảnh tôi không có (giống như từ bên trong hạt nhân Linux).
Tuy nhiên, cách để thiết lập các bảng mô tả có vẻ là như thế này:
- Gửi một số dữ liệu vào PIC (
outb
và những gì-không) để khởi tạo nó. - Chuẩn bị bảng ngắt trong bộ nhớ, với các con trỏ hàm đến các thói quen bạn muốn, hãy cẩn thận rằng các chức năng có khả năng là trình xử lý tín hiệu.
- Tải bảng với
lidt
.
Tuy nhiên, tôi không thể tìm thấy nhiều việc cụ thể làm những việc này hoặc liệu điều này có chính xác hay không. Có ai có tài nguyên cho một nhà văn hạt nhân hoang mang?
Câu hỏi thú vị, đây là một cộng đồng tuyệt vời: http://www.osdever.net/ Không phải là nó trả lời câu hỏi của bạn trực tiếp, nhưng có một số thông tin hữu ích trên đó. –
Cộng đồng tốt hơn (với diễn đàn và wiki, cũng như loại kênh irc liên quan - #osdev @ irc.freenode.net) có thể được tìm thấy tại osdev.org. – Griwes