Tôi có thể hiểu cách người ta có thể viết chương trình sử dụng nhiều quy trình hoặc chủ đề: fork() một quy trình mới và sử dụng IPC, hoặc tạo nhiều chủ đề và sử dụng các loại cơ chế giao tiếp đó.Làm cách nào để kiểm soát quy trình cốt lõi nào đang chạy?
Tôi cũng hiểu ngữ cảnh chuyển đổi. Tức là, chỉ với một lần CPU, hệ điều hành sẽ lên lịch thời gian cho mỗi tiến trình (và có rất nhiều thuật toán lên lịch) và do đó chúng tôi đạt được nhiều tiến trình đồng thời.
Và bây giờ chúng tôi có bộ xử lý đa lõi (hoặc máy tính đa xử lý), chúng tôi có thể có hai quy trình chạy đồng thời trên hai lõi riêng biệt.
Câu hỏi của tôi là về kịch bản cuối cùng: kiểm soát hạt nhân mà một quá trình cốt lõi chạy như thế nào? Các cuộc gọi hệ thống nào (trong Linux, hoặc thậm chí Windows) lên lịch trình cho một lõi cụ thể?
Lý do tôi hỏi: Tôi đang làm việc trong một dự án cho trường học nơi chúng tôi đang tìm hiểu một chủ đề gần đây về tính toán - và tôi đã chọn kiến trúc đa lõi. Dường như có rất nhiều tài liệu về cách lập trình trong loại môi trường đó (cách xem các bế tắc hoặc điều kiện chủng tộc) nhưng không nhiều về việc kiểm soát các lõi riêng lẻ. Tôi rất thích có thể viết một vài chương trình trình diễn và trình bày một số hướng dẫn lắp ráp hoặc mã C cho hiệu ứng "Xem, tôi đang chạy vòng lặp vô hạn trên lõi thứ 2, nhìn vào mức sử dụng CPU cho lõi cụ thể đó ".
Bất kỳ ví dụ mã nào? Hoặc hướng dẫn?
chỉnh sửa: Để làm rõ - nhiều người đã nói rằng đây là mục đích của HĐH và người đó nên để hệ điều hành xử lý việc này. Tôi hoàn toàn đồng ý! Nhưng sau đó những gì tôi yêu cầu (hoặc cố gắng để có được một cảm giác cho) là những gì hệ điều hành thực sự không làm điều này. Không phải thuật toán lập lịch, nhưng nhiều hơn "một khi một lõi được chọn, những hướng dẫn nào phải được thực hiện để có các hướng dẫn lấy lõi bắt đầu?"
câu trả lời có thể ở đây: http://stackoverflow.com/questions/980999/what-does-multicore-assembly-language-look-like, một trong những câu trả lời mô tả Interruptor Interruptor Interruptor, được gửi từ lõi CPU tới APIC của chipset, và có thể được sử dụng để khởi tạo một CPU khác và chạy mã trên đó CPU tại một địa chỉ cụ thể –
Ví dụ tối thiểu bắt đầu SMP trong hệ điều hành của chính chúng ta: http://stackoverflow.com/a/33651438/895245 Chơi với bộ nhớ + đồng bộ hóa đó sẽ là cách. –