2012-04-29 31 views
14

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:

  1. 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.
  2. 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:

  1. Gửi một số dữ liệu vào PIC (outb và những gì-không) để khởi tạo nó.
  2. 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.
  3. 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?

+0

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 đó. –

+0

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

Trả lời

6

Khi PC khởi động, BIOS lập trình PIC theo cách IRQ0 đến IRQ15 được liên kết với int 8 đến int 0Fh và int 70h đến int 77h. Điều này phù hợp với chế độ địa chỉ thực, trong đó BIOS hoạt động và MSDOS hoạt động.

Nhưng bạn cần thay đổi ánh xạ này khi chuyển sang chế độ được bảo vệ vì một số ngoại lệ quan trọng nằm trên int 8 đến int 0Fh (đáng chú ý nhất là #GP, #SS, #PF). Bạn muốn điều đó bởi vì bạn muốn có thể dễ dàng phân biệt giữa các ngoại lệ này và các ngắt phần cứng đến từ bộ hẹn giờ và đồng hồ thời gian thực, bàn phím và chuột, các đĩa và các cổng I/O (nối tiếp và song song).

Đây có lẽ là bước đầu tiên bạn đã vạch ra. Vì vậy, tìm kiếm trực tuyến "PIC gián đoạn remapping" hoặc một cái gì đó của loại đó. Ngoài ra, tải về một số thông số kỹ thuật cho chip 8259 (PIC) để có một ý tưởng tốt hơn về những gì bạn đang làm và làm thế nào nó thực sự hoạt động. "HelpPC" là một tài liệu tham khảo cũ tốt có chứa một số thông tin về phần cứng PC khác nhau.

Ngoài ra còn có "PCGPE" (Bách khoa toàn thư lập trình trò chơi PC) và "RBIL" (Danh sách gián đoạn của Ralf Brown) có thể giúp ích rất nhiều.

Thiết lập IVT/IDT được mô tả trong tài liệu CPU Intel và AMD. Đó là tất cả ở đó. Không phải là đọc dễ chịu nhất, nhưng chi tiết nhất và có thẩm quyền.

Có rất nhiều trang web của những người yêu thích hệ điều hành tại nhà và những thứ tương tự, nơi bạn có thể tìm thêm chi tiết và đoạn mã.

+0

Tôi đã thấy một số mã remapping nổi xung quanh trước đây. Vì vậy, tôi có thể hiểu sai một chi tiết về chế độ bảo vệ và thực, nhưng khi tôi hiểu nó, hạt nhân chạy trong chế độ thực, nhưng có thể chuyển sang chế độ bảo vệ khi chương trình người dùng chạy. Tuy nhiên, nó không chuyển sang chế độ thực trên một chuyển đổi ngữ cảnh? Điều đó được thực hiện bằng ngắt, phải không? Do các ngắt cần phải được remapped chỉ một lần trước khi một chương trình bảo vệ bao giờ chạy? – rovaughn

+0

Thông thường, nếu có bất kỳ chuyển đổi nào, nó thực sự được bảo vệ và nó chỉ được thực hiện một lần, rất sớm, khi hạt nhân khởi động. –

6

Câu trả lời cho câu hỏi này quá lớn để phù hợp ở đây. Tôi sẽ đề xuất hai tài nguyên sẽ cung cấp cho bạn kiến ​​thức cần thiết:

  • JamesM's kernel development tutorial sẽ hướng dẫn bạn phát triển một hạt nhân rất cơ bản bao gồm điều này. Bạn sẽ muốn đặc biệt chú ý đến các chương 4 và 5. Nó đi kèm với mã đầy đủ.
  • OSDev.org Tài liệu tham chiếu. Chứa tất cả thông tin kỹ thuật bạn cần. Chi tiết hơn và chính xác hơn hướng dẫn.

Nếu bạn thật sự muốn hiểu nội dung này, tôi khuyên bạn nên đọc các bài viết trong OSDev để tự mình viết mọi thứ. Bắt đầu với khởi động, đầu ra màn hình, xử lý pic và irq. Sử dụng hướng dẫn nếu bạn bị kẹt.

+0

Hướng dẫn của James Molloy thực sự tốt, nhưng nó không nên được đề xuất cho người mới, vì nó cho quá nhiều mã chỉ được sao chép, không cần giải thích nhiều - có thể nó sẽ thay đổi khi JamesM phát hành phiên bản mới của bộ truyện. Đối với những người mới đến, hướng dẫn tại www.brokenthorn.com là tốt hơn nhiều. – Griwes