2008-11-19 15 views
21

Gần đây tôi đã bắt đầu lặn vào chương trình hệ điều hành cấp thấp. Tôi (rất chậm) hiện đang làm việc thông qua hai cuốn sách cũ hơn, XINU và Xây dựng hệ điều hành 32 bit riêng của bạn, cũng như một số tài nguyên được đề xuất bởi những người SO tốt trong câu hỏi trước của tôi, How to get started in operating system development. Nó có thể chỉ là tôi đã không gặp nó trong bất kỳ tài nguyên nào được nêu ra, nhưng nó có lẽ vì hầu hết các tài nguyên này được viết trước khi các hệ thống đa lõi phổ biến, nhưng những gì tôi tự hỏi là làm thế nào ngắt làm việc trong một đa lõi/hệ thống đa xử lý.Làm thế nào để ngắt trong máy đa lõi/đa CPU hoạt động?

Ví dụ: giả sử DMA muốn báo hiệu rằng thao tác đọc tệp hoàn tất. Bộ xử lý/lõi nào thừa nhận rằng ngắt được báo hiệu? Có phải bộ xử lý/lõi đã bắt đầu đọc tệp không? Có bất kỳ bộ vi xử lý/lõi nào nhận được nó đầu tiên?

+0

Tôi không biết câu trả lời cho câu hỏi của bạn, nhưng tôi muốn khuyên bạn nên tham gia một cái nhìn tại các Intel® 64 and IA-32 Architectures Software Developer's Manual, khối lượng 3, chương 5. Nó lớn và chi tiết, chứa nhiều hơn bao giờ bạn muốn biết về kiến ​​trúc x86. –

+0

@GiovanniGalbo +1 để đề cập đến dự án XINU. – smwikipedia

Trả lời

6

Nhìn vào hàm IoConnectInterrupt, bạn có thể tìm thấy ProcessorEnableMask sẽ chọn cpu cho phép chạy thường lệ InterruptService (ISR).
Dựa trên thông tin này tôi có thể giả định rằng ở một nơi nào đó ở mức thấp (xem Adam's bài đăng), bạn có thể chỉ định nơi để định tuyến ngắt.

Trên thao tác tệp ghi chú bên không thực sự liên quan đến ngắt và/hoặc dma trực tiếp. Thao tác tệp là khái niệm hệ thống tệp được dịch sang mức độ thấp phụ thuộc vào hệ thống tệp bạn đặt nó có thể là ổ đĩa IDE hoặc SATA hoặc thậm chí là bộ nhớ USB trong trường hợp đọc này sẽ được dịch sang 3 hoạt động logic trên bus usb sẽ bị gián đoạn phục vụ bởi trình điều khiển bộ điều khiển máy chủ lưu trữ USB, nhưng nó không thực sự liên quan đến hoạt động đọc tệp gốc, có thể đã được chia nhỏ thành giao dịch nhỏ hơn theo bất kỳ cách nào.

+0

Cảm ơn bạn. Tôi ước có một cách để chấp nhận nhiều câu trả lời, nhưng các ví dụ thực tế về cuộc sống đã xóa nó cho tôi. Cũng cảm ơn cho các lưu ý về tập đọc. –

+0

@IIya Liên kết IoConnectInterrupt bị hỏng. – smwikipedia

2

Trong những ngày cũ, ngắt được chuyển đến tất cả các bộ vi xử lý. Trong thời hiện đại, một số loại phần cứng có thể được lập trình bởi một hệ điều hành để gửi gián đoạn tới một bộ xử lý cụ thể. Tất nhiên nếu bạn có thể chọn một bộ xử lý động thay vì tĩnh, bạn sẽ không muốn gửi ngắt tới bất kỳ bộ xử lý nào khởi tạo I/O, bạn muốn gửi nó đến bộ xử lý nào ít bị gánh nặng nhất hiện tại và có thể hiệu quả nhất bắt đầu hoạt động I/O tiếp theo, và/hoặc bất kỳ bộ vi xử lý nào ít được gánh nặng nhất tại thời điểm hiện tại và có thể thực hiện hiệu quả nhất luồng đang đợi kết quả.

+0

Cảm ơn bạn đã trả lời! Bạn có biết rằng x86/x86-64 có cho phép cả hai cách tiếp cận không? –