2012-06-18 18 views
8

Tôi muốn thay đổi hạt nhân Linux để mỗi khi PID hiện tại thay đổi - tức là một quy trình mới được chuyển đổi - một số mã chẩn đoán được thực thi (giải thích chi tiết bên dưới, nếu tò mò). Tôi đã làm một số đào xung quanh, và có vẻ như mỗi khi người lập lịch chọn một quá trình mới, chức năng context_switch() được gọi là, có ý nghĩa (đây chỉ là từ một phân tích cursory của sched.c/schedule()).Có phải kernel/sched.c/context_switch() được bảo đảm được gọi mỗi khi một quá trình được chuyển vào?

Vấn đề là, lịch trình Linux về cơ bản là ma thuật đen đối với tôi ngay bây giờ, vì vậy tôi muốn biết giả thiết đó có đúng hay không. Có đảm bảo rằng, mỗi khi một quá trình mới được chọn để có được một thời gian trên CPU, hàm context_switch() được gọi? Hoặc là có những nơi khác trong nguồn hạt nhân, nơi lập kế hoạch có thể được xử lý trong các tình huống khác? (Hoặc tôi hoàn toàn hiểu nhầm tất cả điều này?)

Để đưa ra một số ngữ cảnh, tôi đang làm việc với giả lập MARSS x86 cố gắng thực hiện một số thiết bị đo lường và đo lường các chương trình nhất định. Vấn đề là thiết bị của tôi cần phải biết quá trình thực hiện một số sự kiện mã nhất định tương ứng, để tránh hiểu sai dữ liệu. Ý tưởng là sử dụng một số hệ thống truyền tin nhắn tích hợp trong MARSS để truyền PID của quy trình mới trên mọi công tắc ngữ cảnh, do đó, nó luôn luôn biết PID hiện đang được thực thi. Nếu bất cứ ai có thể nghĩ ra một cách đơn giản hơn để thực hiện điều đó, điều đó cũng sẽ được đánh giá cao.

Trả lời

4

Có, bạn đã chính xác.

schedule() sẽ gọi context_switch() chịu trách nhiệm chuyển từ nhiệm vụ này sang tác vụ khác khi quy trình mới đã được chọn bởi schedule().

context_switch() về cơ bản thực hiện hai việc. Nó gọi switch_mm()switch_to().

switch_mm() - chuyển sang lập bản đồ bộ nhớ ảo cho quá trình mới

switch_to() - chuyển đổi các trạng thái xử lý từ quá trình trước đó để quá trình mới (lưu/khôi phục sổ đăng ký, ngăn xếp thông tin và kiến ​​trúc khác điều cụ thể)

Đối với cách tiếp cận của bạn, tôi đoán nó là tốt. Điều quan trọng là giữ mọi thứ tốt đẹp và sạch sẽ khi làm việc với hạt nhân, và cố gắng giữ cho nó tương đối dễ dàng cho đến khi bạn có thêm kiến ​​thức.

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