2009-04-03 65 views
7

Tôi muốn biết chủ đề nào xử lý ngắt thiết bị. Điều gì sẽ xảy ra khi có gián đoạn khi luồng chế độ người dùng đang chạy? Ngoài ra, các luồng người dùng khác có cơ hội chạy khi hệ thống đang xử lý ngắt không?Xử lý ngắt trong Windows

Vui lòng đề xuất cho tôi một số tài liệu tham chiếu mô tả cách các cửa sổ bị xử lý gián đoạn.

Trả lời

3

Tự ngắt thiết bị (thường) được xử lý bởi bất kỳ chuỗi nào có CPU đã ngắt, nhưng trong vòng 0 và ở mức bảo vệ khác. Điều này giới hạn một số hành động mà một trình xử lý ngắt có thể thực hiện, bởi vì hầu hết thời gian luồng hiện tại sẽ không liên quan đến luồng đang đợi sự kiện xảy ra khi ngắt đang cho biết.

Bản thân hạt nhân là nguồn đóng và chỉ được ghi lại thông qua API nội bộ của nó. API đó được tiếp xúc với các tác giả trình điều khiển thiết bị và được mô tả trong các bộ phát triển trình điều khiển.

Một số nguồn lực để giúp bạn bắt đầu:

  • Bất kỳ ấn bản của Microsoft Windows Internals bởi Solomon và Russinovich. Hiện tại dường như là phiên bản thứ 4, nhưng ngay cả một phiên bản cũ cũng sẽ giúp ích cho bạn.

  • DDK của Windows, hiện được đổi tên thành WDK. Tài liệu của nó là available online. Hãy nhớ đọc số Kernel Mode Design Guide ...

  • Sysinternals có các công cụ và bài viết để thăm dò và giải thích hành vi của hạt nhân. Đây từng là một trang web độc lập cho đến khi Microsoft cảm thấy mệt mỏi vì Mark Russinovich dường như biết nhiều hơn về hạt nhân hoạt động như thế nào. ;-)

Lưu ý rằng mã nguồn cho nhiều trình điều khiển thiết bị chung được bao gồm trong DDK trong các mẫu. Mặc dù các phiên bản sản xuất gần như chắc chắn khác nhau, đọc các trình điều khiển mẫu có thể trả lời một số câu hỏi ngay cả khi bạn không muốn tự mình thực hiện một trình điều khiển.

1

Giống như bất kỳ hệ điều hành nào khác, Windows xử lý ngắt ở chế độ Kernel, với Mức độ ưu tiên ngắt cao (tôi nghĩ chúng gọi là IRPL, nhưng tôi không biết chữ "R" là gì). Bất kỳ luồng người dùng hoặc luồng hạt nhân cấp thấp nào chạy trên cùng một máy sẽ bị gián đoạn trong khi yêu cầu gián đoạn được xử lý và sẽ được tiếp tục khi xử lý ineterrupt hoàn tất.

+0

Thực ra đó là IRQL (Ngắt kết nối lại cấp độ). Có 32 trong số đó. Mã chế độ người dùng hoạt động ở mức PASSIVE (0). Thiết bị IRQL/DIRQL cao hơn mức DISPATCH (2). – dragonfly

+0

Bạn có thể đã nhớ rằng biểu diễn bên trong của cuộc gọi hệ thống được gửi đến trình điều khiển thiết bị được gọi là IRP (Gói Yêu cầu I/O) ... – RBerteig

+0

Tôi không nên trả lời câu hỏi quá muộn vào ban đêm.Tôi đã nhớ từ hệ điều hành VMS, nơi chúng được gọi là IPL - Interrupt Priority Levels. Trở lại thời thơ ấu kỹ thuật của tôi. –

0

Để tìm hiểu thêm về ngắt thiết bị trên Windows, bạn cần nghiên cứu phát triển trình điều khiển thiết bị. Đây là một chủ đề thích hợp, tôi không nghĩ rằng bạn có thể tìm thấy nhiều tài nguyên hữu ích trên Web và bạn có thể phải tìm một cuốn sách hoặc một khóa đào tạo.

Dù sao, Windows xử lý ngắt với Mức yêu cầu gián đoạn (IRQL) và Deferred procedure calls. Một ngắt được xử lý trong chế độ Kernel, chạy ở mức ưu tiên cao hơn chế độ người dùng. Một trình xử lý ngắt thích hợp cần phản ứng rất nhanh. Nó chỉ thực hiện các hoạt động hoàn toàn cần thiết và đăng ký một cuộc gọi thủ tục trì hoãn để chạy trong tương lai. Điều này sẽ xảy ra, khi hệ thống đang ở cấp yêu cầu gián đoạn.

+0

hi @kgiannakakis, Tôi gặp một vấn đề về trình điều khiển cửa sổ và tôi nghĩ rằng bạn là người có thể giúp tôi. Tôi giải thích ngắn gọn. Tôi đang làm việc trên trình điều khiển cổng nối tiếp.Interrupt được tạo cho đứa trẻ trong trình điều khiển bus. & I phải sử dụng nó trong trình điều khiển cổng.Now nhận H/W ngắt và đọc đăng ký nhưng trình điều khiển bus không nhận được sự thừa nhận rằng ngắt là serve.I tìm kiếm trên web nhưng không tìm thấy câu trả lời đúng. hãy giúp tôi giải quyết vấn đề này nếu bạn có thể. & Xin lỗi vì đã đăng truy vấn của tôi ở đây. [posted-stackoverflow] (http://stackoverflow.com/questions/26713360/serial-port-driver-got-stuck-in-serialisr-routine) – Akatsuki

Các vấn đề liên quan