Chúng tôi đang sử dụng phiên bản hạt nhân 2.4-20 và chúng tôi cần tính số lượng người dùng đang hoạt động, ở chế độ hạt nhân. Mục tiêu là thay đổi lịch trình, vì vậy chúng tôi đang ở trong sched.c, sửa đổi lịch biểu() chức năng.cách đếm số người dùng đang hoạt động trong hạt nhân
Điều chúng tôi làm là tính số người dùng trong macro list_for_each.
list_for_each(tmp, &runqueue_head) {
p = list_entry(tmp, struct task_struct, run_list);
if (can_schedule(p, this_cpu)) {
if (unique(p->uid)) add_new_user(p->uid);
int weight = goodness(p, this_cpu, prev->active_mm);
if (weight > c)
c = weight, next = p;
}
}
về cơ bản là thêm người dùng duy nhất vào danh sách. Tuy nhiên, chúng tôi nhận được kết quả ngẫu nhiên. Có cách nào cụ thể để giải quyết vấn đề này?
Cảm ơn bạn.
Bạn có ý nghĩa gì với 'kết quả ngẫu nhiên'? – ArjunShankar
Lúc đầu, chúng tôi tính người dùng trong hàm goodness(), ở đó chúng tôi có số lượng tùy ý (mặc dù chúng tôi có 4 người dùng cùng một lúc, nhưng chúng tôi có thể nhận được 1 người dùng). trong lịch biểu(), chúng tôi dường như có giá trị nhất quán nhưng chúng tôi không chắc chắn, vì lịch biểu() được chạy thường xuyên, chúng tôi cần lấy mẫu (một lần trong 5000 lượt). Tôi đoán không có trường nào trong kernel chứa người dùng đang hoạt động hiện tại? nếu không, cách tốt nhất để đếm chúng là gì? Cám ơn phản hồi của bạn. –
Cảm ơn bạn đã làm rõ. Tôi không biết câu trả lời cho điều này. Ý định của tôi là chỉ ra rằng câu hỏi không hoàn toàn rõ ràng. Tôi muốn đề nghị chỉnh sửa điều này vào câu hỏi. Chúc may mắn! – ArjunShankar