2012-02-22 28 views
13

Tôi là người mới dùng Linux Kernel.
Tôi biết rằng có hai bối cảnh
1. Process Bối cảnh, chạy trong không gian người dùng hoặc trong Kernel Space (cho ví dụ: như là một phần của cuộc gọi System)
2. Gián đoạn ContextTrong ngữ cảnh nào, luồng Kernel chạy trong Linux?

trong tình huống Kernel Thread (không liên quan đến bất kỳ Chủ đề Người dùng nào, ví dụ: nhiệm vụ tuôn ra) chạy?

Có bối cảnh nào khác ngoài ngữ cảnh Quy trình và gián đoạn trong hạt nhân Linux không?

Trả lời

15

Chuỗi hạt nhân chạy trong process contexts trong không gian hạt nhân. Mặc dù có một số chủ đề hạt nhân xử lý ngắt quá. Chúng được gọi là threaded interrupt handlers. Nhưng họ vẫn chạy trong bối cảnh quá trình!

Here là giải thích tuyệt vời về sự khác biệt quan trọng giữa 2 bối cảnh!

Đây là cách giúp bạn hiểu rõ hơn!

What context does the scheduler code run in?

Theo như tôi biết, quá trình và gián đoạn là chỉ có 2 tình huống.

+6

Về cơ bản các * điểm * của đề hạt nhân là để cho phép các hạt nhân để thực thi mã trong bối cảnh quá trình, nhưng không trực tiếp thay mặt cho một không gian người dùng đặc biệt quá trình. – caf

+0

@Pavan: Trình xử lý ngắt được tạo luồng (softirqs) thể hiện các đặc tính của ngữ cảnh ngắt (bạn có thể không ngủ), vì vậy tuyên bố rằng chúng là ngữ cảnh quá trình là mâu thuẫn. –

+0

@ jørgensen Nếu bạn đọc tài liệu hướng dẫn GPIO tại đây-http: //www.kernel.org/doc/Documentation/gpio.txt, nó nói - 'Truy cập các GPIO như vậy yêu cầu một ngữ cảnh có thể ngủ, ví dụ một trình xử lý IRQ luồng ' Vì vậy, nó ngụ ý rằng xử lý ngắt chuỗi có thể ngủ phải không? Bạn đúng về softirqs. Nhưng họ không phải là loại duy nhất của trình xử lý ngắt luồng phải không? Hoặc, thậm chí, nó thực sự đề cập đến softirqs khi họ nói xử lý ngắt chuỗi? –

0

Cũng có một số tác vụ nhất định không được gọi thông qua cuộc gọi hệ thống hoặc khi xử lý ngắt. Như vậy được xử lý như bối cảnh hạt nhân thuần túy, ví dụ như trình trao đổi, INIT_TASk, vv mà không có mã tương ứng đang chạy trong không gian người dùng.

1

Có một số tiểu bang — một số có thể là chuyên môn của người khác. Xem thêm http://www.kernel.org/doc/htmldocs/kernel-hacking.html.

  • NMI bối cảnh (in_nmi())
  • cứng ngắt bối cảnh (in_irq())
  • mềm ngắt bối cảnh (in_softirq())
  • (tasklet, hẹn giờ, và bối cảnh workqueue)
  • bối cảnh nguyên tử (in_atomic()). Có thể lối vào là, trong số những người khác, spin_lock.
  • RCU bối cảnh, nhập với rcu_read_lock ví dụ
  • bối cảnh người dùng
Các vấn đề liên quan