5

Một số việc quan trọng và không ở bên trong một chế độ hạt nhân và ISR Routine là gì? Ví dụ:Hạn chế trong khi hạt nhân đang chạy một thói quen ISR

  • Chuyển ngữ cảnh có bị tắt trong khi chạy trình xử lý ngắt không?
  • Chuyển ngữ cảnh có thể xảy ra khi quá trình nằm trong phần quan trọng
    không?
  • Những trường hợp nào trong quá trình tắt chế độ hạt nhân có thể bị gián đoạn thêm?

Cách chuyển đổi quy trình có thể xảy ra trên lỗi trang, trong đó quy trình tìm nạp dữ liệu từ đĩa, nhưng không xảy ra trong các lần gián đoạn khác. Bạn phân loại như thế nào nếu một đường dẫn có thể thực thi có thể bị gián đoạn/được lên lịch lại/bị bỏ trống?

Những điều khác bạn phải nhớ khi quá trình ở chế độ hạt nhân hoặc xử lý thường trình ISR?

Trả lời

4

Tóm tắt: KHÔNG TẮT TIẾP TỤC, EVER.

Điều này có nghĩa:

  • Không đòn phủ đầu
  • Không ổ khóa trên mutexes (khóa sử dụng quay để thay thế và đảm bảo của bạn đối tác phi ISR ​​mua chúng với spin_lock_irqsave để vô hiệu hóa IRQ)
  • Không cuộc gọi đến bất kỳ hạt nhân chức năng có thể ngủ (kiểm tra tài liệu của hàm, một số chức năng cũng có biến thể _cansleep).

Quá trình chuyển đổi có thể xảy ra do lỗi trang, nhưng nó xảy ra sau ISR tương ứng đã được xử lý. Về cơ bản một con đường có thể được lên kế hoạch nếu nó không phải là một ISR và nếu bạn không có một khóa spinlock. Nếu bạn cầm một ổ khóa, bạn phải tránh ngủ cho đến khi nó được nhả ra.

Vì ISR bị hạn chế, việc xử lý các IRQ thường được phân chia giữa nửa đầu (chạy trong ngữ cảnh ISR và thực hiện công việc quan trọng) và nửa dưới (chạy sau dưới dạng chuỗi hạt nhân) có thể bị trì hoãn) có thể ngủ. Xem trang này để biết thêm thông tin:

http://www.makelinux.net/ldd3/chp-10-sect-4

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