2013-08-28 78 views
6

Tôi đang viết mô-đun hạt nhân có thể nạp cho Linux. Và tôi cần lưu trữ một số dữ liệu cho mỗi tác vụ trong hạt nhân Linux (Những dữ liệu này sẽ được sử dụng trong một cuộc gọi lại lịch biểu).cấu trúc dữ liệu trên mỗi tác vụ trong mô-đun hạt nhân linux

Tôi biết rằng tôi có thể sửa đổi struct task_struct và chèn các trường của riêng tôi. Nhưng vì tôi sẵn sàng viết một mô-đun hạt nhân sạch tương đối, tôi không thể sửa đổi bất kỳ mã nào nằm trong cây nguồn gốc Linux.

Cũng có thể duy trì một số loại ánh xạ từ struct task_struct đến dữ liệu của tôi trong bảng băm. Nhưng nó có vẻ hơi nặng.

Tôi đã đọc câu trả lời trong Thread local data in linux kernel module. Nó đã đề cập sử dụng private_data trong struct file. Nhưng nó cần mỗi thread để mở nó để có được một struct file. Và không có cách nào truy vấn dữ liệu cho mỗi tác vụ với một struct task_struct. (Khi tôi cần sử dụng dữ liệu trong gọi lại lịch biểu)

Câu hỏi của tôi là: có cách nào đơn giản và sạch sẽ cho phép tôi đăng ký cấu trúc dữ liệu trên mỗi công việc trong hạt nhân Linux mà không sửa đổi struct task_struct?

Rất cám ơn!

+0

Dữ liệu trên mỗi tác vụ là gì và mô-đun của bạn thực sự đang làm gì? Giải thích nhiều hơn nữa! –

+0

@Basile Starynkevitch Tôi cần lưu trữ một số dữ liệu cho mỗi 'task_struct' trong kernel. Và trong quá trình lên lịch, các dữ liệu này có thể được truy cập. Hãy tưởng tượng rằng tôi đang viết một module đếm # context-switch cho mỗi thread (tôi biết chức năng này tồn tại trong kernel ban đầu vì vậy nó chỉ là một ví dụ. Thật khó để giải thích những gì module của tôi thực sự làm ở đây rõ ràng trong một vài từ.) – Naruil

+0

@ Naruil: bạn có toàn bộ câu hỏi để nói điều này. Rất ít mô-đun hạt nhân thực sự cần phải theo dõi dữ liệu cho mỗi quá trình; nếu bạn có thể nói tại sao điều này là cần thiết, nó sẽ làm cho nó rõ ràng hơn làm thế nào để tiến hành. – nneonneo

Trả lời

2

Cách đơn giản và sạch sẽ cho phép bạn đăng ký cấu trúc dữ liệu cho mỗi tác vụ là sửa đổi struct task_struct.

Mô-đun được thiết kế cho tùy chọn các phần của hạt nhân; chúng chỉ có thể sử dụng các hàm được xuất khẩu rõ ràng từ hạt nhân cơ bản. nếu bạn phải thay đổi hạt nhân cơ sở, bạn không còn có thể sử dụng các mô-đun.