Tôi đang cố gắng để hiểu cách linux syscall sched_setaffinity() hoạt động. Đây là một câu hỏi tiếp theo từ câu hỏi của tôi here.Sched_setaffinity() hoạt động như thế nào?
Tôi có this guide, giải thích cách sử dụng syscall và có ví dụ khá gọn gàng (đang hoạt động!).
Vì vậy, tôi đã tải xuống Linux 2.6.27.19 kernel sources.
Tôi đã thực hiện 'grep' cho các dòng chứa syscall đó và tôi nhận được 91 kết quả. Không hứa hẹn.
Cuối cùng, tôi đang cố gắng để hiểu làm thế nào hạt nhân có khả năng thiết lập các con trỏ chỉ dẫn cho một lõi cụ thể (hoặc bộ xử lý.)
Tôi quen thuộc với các chương trình như thế nào đơn lõi-sợi đơn công việc. Người ta có thể đưa ra hướng dẫn 'jmp foo' và điều này về cơ bản đặt IP thành địa chỉ bộ nhớ của nhãn 'foo'. Nhưng khi có nhiều lõi, người ta phải nói "lấy lệnh tiếp theo tại địa chỉ bộ nhớ foo, và đặt con trỏ chỉ dẫn cho số lõi 2 để bắt đầu thực hiện ở đó."
Ở đâu, trong mã lắp ráp, chúng tôi có chỉ định lõi nào thực hiện thao tác đó không?
Quay lại mã hạt nhân: điều gì quan trọng ở đây? Tệp 'kernel/sched.c' có một hàm gọi là sched_setaffinity(), nhưng trả về kiểu "long" - không phù hợp với số manual page của nó. Vậy điều gì quan trọng ở đây? Mô-đun nào trong số các mô-đun này hiển thị hướng dẫn lắp ráp Mô-đun nào đang đọc 'task_struct', nhìn vào thành viên 'cpus_allowed', và sau đó dịch thành một lệnh? (Tôi cũng đã thử qua nguồn glibc - nhưng tôi nghĩ rằng nó chỉ thực hiện cuộc gọi đến mã hạt nhân để hoàn thành nhiệm vụ này.)
Bỏ qua nhận xét này – kumar
<< Tại mỗi timer ngắt (~ 1000 per second), chức năng lịch chạy trên mỗi CPU và chọn một quá trình để chạy. Tôi có câu hỏi ở đây: Trình lập lịch biểu là một đoạn mã thực thi trong hạt nhân, Một đoạn mã luôn thực thi tại CPU đơn tại bất kỳ thời điểm nào. Vì vậy, đó có nghĩa là scheduler (gọi bởi bộ đếm thời gian ngắt) chuyển đổi giữa CPU ... Sau đó, có nghĩa là nếu tôi có nhiều CPU nó là chi phí trên không chạy scheduler trên TẤT CẢ CPU .... bit nhầm lẫn ở đây. –
kumar
Các CPU khác nhau chạy các bản sao khác nhau của bộ lập lịch. Bộ đếm thời gian gián đoạn được nâng lên trên mỗi CPU riêng lẻ. Vì vậy, nếu bạn có 4 CPU, bạn có 4 bộ lập lịch. Trên thực tế mã của lịch trình là như nhau, nhưng dữ liệu là khác nhau. – osgx