2012-02-28 39 views
11

Tôi chỉ mới bắt đầu viết mã trình điều khiển thiết bị và mới cho luồng, đã trải qua nhiều tài liệu để có ý tưởng về chủ đề. tôi vẫn còn một số nghi ngờ.Chuỗi hạt nhân là gì?

  1. chuỗi hạt nhân là gì?
  2. cách nó khác với chuỗi người dùng?
  3. mối quan hệ giữa hai luồng là gì?
  4. làm cách nào tôi có thể triển khai chuỗi hạt nhân?
  5. nơi tôi có thể xem kết quả triển khai ?.

Mọi người có thể giúp tôi không? cảm ơn.

+2

Bạn đã đọc điều này tôi giả định? http://en.wikipedia.org/wiki/Thread_(computing) Điều đó ít nhất nên trả lời một số câu hỏi của bạn. – Bart

+2

Ngoài ra còn có [câu trả lời trước này] (http://stackoverflow.com/a/8809791/777186) trong một ngữ cảnh tương tự. – jogojapan

Trả lời

7

Chuỗi hạt nhân là tác vụ hạt nhân chỉ chạy ở chế độ hạt nhân; nó thường không được tạo ra bởi fork() hoặc clone() cuộc gọi hệ thống. Ví dụ: kworker hoặc kswapd.

Bạn có lẽ không nên triển khai chuỗi hạt nhân nếu bạn không biết chúng là gì.

Google cung cấp nhiều trang về chuỗi hạt nhân, ví dụ: Frey's page.

+2

Chỉ dành cho thông tin 'task-> mm' cho chuỗi hạt nhân thực sự là' NULL'. –

0

Vì bạn đang so sánh chuỗi hạt nhân với chủ đề [đất] của người dùng, tôi cho rằng bạn có ý nghĩa như sau.

Cách thông thường để thực hiện chuỗi ngày nay là thực hiện trong hạt nhân, vì vậy, những chuỗi đó có thể được coi là chuỗi "bình thường". Tuy nhiên, nó cũng có thể thực hiện nó trong userland, sử dụng các tín hiệu như SIGALRM, mà trình xử lý của nó sẽ lưu trạng thái tiến trình hiện tại (các thanh ghi, chủ yếu) và thay đổi chúng thành một lần lưu trước đó. Một số hệ điều hành được sử dụng như một cách để thực hiện các chủ đề trước khi chúng được hỗ trợ luồng hạt nhân thích hợp. Chúng có thể nhanh hơn, vì bạn không phải đi vào chế độ hạt nhân, nhưng trong thực tế chúng đã biến mất. Ngoài ra còn có các chủ đề hợp tác cho người dùng, trong đó một luồng chạy cho đến khi nó gọi một hàm đặc biệt (thường được gọi là lợi nhuận), sau đó chuyển sang một luồng khác theo cách tương tự như với SIGALRM ở trên. Ưu điểm ở đây là chương trình nằm trong toàn quyền kiểm soát, điều này có thể hữu ích khi bạn có những lo ngại về thời gian (ví dụ trò chơi). Bạn cũng không phải quan tâm nhiều đến an toàn luồng. Những bất lợi lớn là chỉ có một thread có thể chạy cùng một lúc, và do đó phương pháp này cũng không phổ biến mà các bộ vi xử lý có nhiều lõi.

Chuỗi hạt nhân được triển khai trong hạt nhân. Có lẽ bạn có nghĩa là làm thế nào để sử dụng chúng? Cách phổ biến nhất là gọi pthread_create.

14
  1. Chủ đề hạt nhân là task_struct không có thành phần không gian người dùng.
  2. Bên cạnh thiếu không gian người dùng, nó có tổ tiên khác nhau (kthreadd chủ đề hạt nhân thay vì quy trình init) và được tạo bởi API hạt nhân thay vì chuỗi clone trong số fork/exec cuộc gọi hệ thống.
  3. Hai chuỗi hạt nhân có kthreadd làm cha mẹ. Ngoài ra, chuỗi hạt nhân được hưởng cùng một "độc lập" từ một quy trình khác như không gian người dùng.
  4. Sử dụng kthread_run chức năng/vĩ mô từ kthread.h header Bạn sẽ có lẽ hầu hết phải viết một module kernel để gọi chức năng này, vì vậy bạn nên tham gia một trông những Linux Device Drivers
  5. Nếu bạn đang đề cập đến sản lượng nội dung của triển khai của bạn (thông qua các cuộc gọi printk), bạn có thể thấy kết quả đầu ra này trong nhật ký hạt nhân bằng cách sử dụng lệnh dmesg.
Các vấn đề liên quan