2012-01-24 37 views
5

Bạn bè, tôi đang cố gắng theo dõi việc thực hiện hoàn chỉnh hệ điều hành bao gồm các quy trình đang chạy trên đầu trang của nó. Đối với điều này tôi muốn các hướng dẫn được thực hiện bởi mỗi quá trình và theo dõi thực hiện của nó và tôi muốn làm điều này mà không cần phải đi và mất objdump của mỗi quá trình.pid của quá trình thực hiện hiện tại

Vì vậy, mục tiêu của tôi là:
1) Xây dựng không gian địa chỉ của mỗi pid.
2) Thực hiện theo dõi từng pid.

Để hoàn thành các mục tiêu trên, tôi đang chạy hệ điều hành dựa trên Linux trên đầu trình mô phỏng Qemu.

Khi qemu gặp một hướng dẫn lần đầu tiên, tôi sẽ kiểm tra pid của quá trình đang chạy lệnh này bằng cổng io hoặc địa chỉ bộ nhớ vật lý đã biết trong khách. Sau đó tôi có thể sử dụng thông tin này để làm những thứ tôi muốn.

Vấn đề của tôi là .... trong kernel/sched.c tôi có thể biết pid của quá trình sẽ được thực thi tiếp theo. Có nghĩa là tôi không thể hình một cuộc gọi chức năng như -> launch_process (pid) .Có thể ai đó xin vui lòng chỉ cho tôi đến vị trí này trong hạt nhân. Hoặc là có một vị trí đã biết trong hệ thống nơi chúng tôi có thể theo dõi không gian địa chỉ. Một là CR3 nhưng tôi thực sự không thể tin tưởng nó.

Đối với một số người, điều này có vẻ như là một con trỏ tầm thường đến vị trí này nhưng tôi không thể tự tìm thấy vị trí này.

Trả lời

3

Mỗi quá trình có thích hợp struct task_struct. Bạn có thể sử dụng các chức năng find_task_by_*() để tìm struct task_struct bằng PID hoặc task_pid_*() để nhận PID của tác vụ đã cho. Xem thêm "Cấu trúc pid là gì?" phần trong include/linux/pid.h.

Tác vụ đang chạy trong bản đồ chạy trên mỗi CPU: xem struct rq định nghĩa trong kernel/sched.c.

Chức năng try_to_wake_up(), wake_up_process(), wake_up_new_task(), context_switch() và các loại khác cũng liên quan đến công việc của bạn.

+0

@droid thanks ... context_switch là chức năng mà pid của quá trình thực hiện thay đổi. Đây là nơi tôi định đặt mã bằng task_struct tiếp theo. Có điểm nào khác cho sự thay đổi của pid ?? Phương pháp này sẽ làm việc cho một hệ thống smp quá ?? –

+0

Tôi không quen thuộc với hạt nhân để trả lời chắc chắn về các điểm nhập khác như vậy. Đối với SMP - tôi nghĩ mọi thứ đều ổn. –

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