Trong Linux, các tùy chọn để xử lý ngắt thiết bị trong mã vùng người dùng thay vì trong không gian hạt nhân là gì?Xử lý gián đoạn Linux trong không gian người dùng
Trả lời
Có , nhưng xử lý vẫn nên được thực hiện trong kernelspace. OTOH, nếu bạn chỉ cần thông báo ngắt, bạn không cần phần hạt nhân.
Bạn có thể xem CHAPTER 10: Interrupt Handling từ Linux Device Drivers, Third Edition sách.
Kinh nghiệm cho biết có thể viết trình điều khiển không gian người dùng tốt và ổn định cho hầu như mọi bộ điều hợp PCI. Nó chỉ đòi hỏi một số tinh tế và một lớp proxy nhỏ trong hạt nhân. UIO là một bước theo hướng đó, nhưng nếu bạn muốn xử lý chính xác các ngắt trong không gian người dùng thì UIO có thể không đủ, ví dụ nếu thiết bị không hỗ trợ bit vô hiệu hóa ngắt PCI-spec mà UIO dựa vào.
Lưu ý rằng thời gian chờ của quá trình wakeup là một vài microsec nên nếu việc triển khai của bạn yêu cầu độ trễ rất thấp thì không gian người dùng có thể là sự kéo trên đó.
Nếu tôi triển khai trình điều khiển không gian người dùng, tôi sẽ giảm ISR hạt nhân thành một thao tác "vô hiệu hóa hoạt động của người dùng wakeup-userpace", xử lý ngắt trong quá trình waked-up và sau đó bật lại ngắt (tất nhiên, bằng cách ghi vào bộ nhớ PCI được ánh xạ từ quá trình không gian người dùng).
Phải kích hoạt gián tiếp mã người dùng.
ISR hạt nhân cho biết gián đoạn bằng cách ghi tệp/thiết lập đăng ký/báo hiệu. Ứng dụng không gian người dùng thăm dò ý kiến này và tiếp tục với mã thích hợp. Các trường hợp cạnh: nhiều hoặc ít ngắt hơn dự kiến (thời gian chờ/quá nhiều ngắt trong một khoảng thời gian)
Tệp trừu tượng Linux được sử dụng để kết nối không gian hạt nhân và người dùng. Điều này được thực hiện bằng các thiết bị ký tự và các cuộc gọi ioctl()
. Một số có thể thích mục sysfs cho mục đích này.
Điều này có thể trông kỳ lạ vì thông báo thiết bị kích hoạt sự kiện (ngắt) được nối với cuộc thăm dò 'kích hoạt thời gian', nhưng nó thực sự là chặn không đồng bộ (đọc/chọn). Dù sao một số câu hỏi đang phát sinh theo hiệu suất.
Vì vậy, ngắt không thể được xử lý trực tiếp bên ngoài hạt nhân. Ví dụ: bộ nhớ chia sẻ có thể ở trong không gian người dùng và với một số địa chỉ cài đặt quyền I/O có thể được ánh xạ, vì vậy U-I/O hoạt động, nhưng không phải để xử lý ngắt trực tiếp.
Tôi đã tìm thấy chỉ có một 'báo cáo thiểu số' trong chủ đề vfio (http://lxr.free-electrons.com/source/Documentation/vfio.txt): https://stackoverflow.com/a/21197797/5349798
câu hỏi tương tự:
Running user thread in context of an interrupt in linux
Is it possible in linux to register a interrupt handler from any user-space program?
Linux Kernel: invoke call back function in user space from kernel space
How do I inform a user space application that the driver has received an interrupt in linux?
- 1. Xử lý gián đoạn với Hàng đợi âm thanh
- 2. Làm thế nào để xử lý gián đoạn Git?
- 3. Cách xử lý góc gián đoạn 180 độ
- 4. ngăn chặn thread linux bị gián đoạn bởi scheduler
- 5. thiết lập gián đoạn cổng nối tiếp trong linux
- 6. Trình xử lý gián đoạn XPC có được gọi khi launchd giết quá trình không?
- 7. SQL Azure: Thời gian chờ gián đoạn khác
- 8. Trong linux, cách đảm bảo chuỗi mã được thực hiện mà không bị gián đoạn
- 9. gián đoạn cuộc gọi hệ thống với hàng đợi xử lý
- 10. Xử lý môi trường nhiều người dùng
- 11. Ngắt gián đoạn là gì?
- 12. Jasmine không thể gián điệp xử lý sự kiện?
- 13. backbone.js - xử lý nếu người dùng đăng nhập hoặc không
- 14. Hiệu năng memcpy kém trong không gian người dùng cho bộ nhớ vật lý mmap'ed trong Linux
- 15. làm thế nào để biết số gián đoạn/GPIO cho một pin cụ thể trong linux
- 16. Trong trình xử lý tín hiệu, làm cách nào để biết chương trình bị gián đoạn ở đâu?
- 17. làm thế nào để xử lý một asymptote/gián đoạn với Matplotlib
- 18. WatiN có bị gián đoạn không?
- 19. Ví dụ về gián đoạn với 1 nhà xuất bản và 4 người tiêu dùng song song
- 20. Xử lý ngắt trong Windows
- 21. Chủ đề không làm gián đoạn
- 22. Làm thế nào để tìm địa chỉ vật lý của một biến từ không gian người dùng trong Linux?
- 23. Xử lý lỗi phân đoạn
- 24. Từ hạt nhân đến không gian người dùng (DMA)
- 25. Triển khai ứng dụng Django mà không gián đoạn dịch vụ/không có thời gian ngừng hoạt động
- 26. Xử lý song song trong linux
- 27. SignalR - Xử lý người dùng bị ngắt kết nối
- 28. luồng JavaScript có thể thực thi bị gián đoạn không?
- 29. Làm gián đoạn một chuỗi trong DatagramSocket.receive
- 30. Rào cản bộ nhớ trong không gian người dùng? (Linux, x86-64)
Khi chúng tôi làm tài xế userspace, Liệu nó có ý nghĩa để xóa gián đoạn trong kernel hoặc trong userspace? Tôi nghĩ rằng nó sẽ được rõ ràng khi xử lý được thực hiện (vì vậy trong userspace), phải không? – ransh