Hạt nhân Linux có nhận thức được pthread trong không gian địa chỉ người dùng (mà tôi không nghĩ rằng đó là ... nhưng tôi không tìm thấy bất kỳ thông tin nào). Làm thế nào để con trỏ chỉ dẫn thay đổi khi chuyển đổi thread diễn ra .. ??Làm thế nào là lát thời gian chia giữa các pthreads trong một quá trình?
Trả lời
1) Hạt nhân không biết về chủ đề cấp người dùng. Tuy nhiên, NPTL không phải là cấp độ người dùng
2) Đây là một câu hỏi thực sự rộng. Bạn nên xem một cuốn sách OS. Nó sẽ đi sâu vào vấn đề đó và tất cả những thứ khác liên quan đến việc chuyển đổi ngữ cảnh.
hey Cảm ơn !! AFAIK, sách OS bao gồm abt quá trình chuyển ngữ cảnh. nhưng đã tự hỏi, làm thế nào là quản lý thời gian lát giữa các chủ đề diễn ra .. nếu hạt nhân không nhận thức được thread, là nó một số điều như một phần, kích hoạt lên lịch ?? nếu không như thế nào là quá trình, có thể quản lý và cuốn sách giữ các chủ đề. và nhiều hơn nữa tôi cảm thấy, điều này có liên quan nhiều hơn đến lập trình cấp người dùng .. do đó, hỏi câu hỏi ở đây .. – SpinLocked
Nếu bạn quan tâm đến việc tìm hiểu về cách Linux thực hiện những điều này, hãy xem Phát triển hạt nhân Linux của Robert Love. Nó bao gồm rất nhiều, nhưng là khá dễ tiếp cận. Thưởng thức. – Avi
Vâng hạt nhân Linux không biết về chủ đề người dùng (pthread hiện trong không gian người dùng, hơn nữa hạt nhân không thực sự quan tâm đến họ ngoại trừ nó chỉ cần biết những gì để lên lịch).
Con trỏ chỉ dẫn được thay đổi trong hạt nhân trong khi được gọi là công tắc ngữ cảnh. Trong quá trình chuyển đổi này, hạt nhân về cơ bản yêu cầu trình lên lịch tiếp theo là gì? scheduler sẽ gán cho nó một task_struct chứa tất cả các thông tin về thread và trình xử lý ngắt cho một switch context sẽ đi trước và thiết lập các giá trị trên CPU tương ứng (các bảng trang, con trỏ lệnh, vv ..) và khi mã đó được thực hiện CPU chỉ đơn giản là bắt đầu thực hiện từ đó.
Vì vậy, bạn cần thiết có nghĩa là để nói .. một sợi được giữ một lát toàn thời gian, quá trình được alloted với? và không có lát thời gian chia giữa các luồng với một tiến trình? – SpinLocked
@SpinLocked Hạt nhân không quan tâm nếu đó là một quá trình hoặc thread (nó thực sự không phân biệt) nó chỉ quan tâm đến ưu tiên (lượng thời gian để đưa ra thread) và nếu nó có thể lên lịch hay không (chờ I/O hoặc gì đó)). –
Cảm ơn. Tôi có lẽ đã nói sai câu hỏi. Xin lỗi. tôi có ý định biết công việc lập lịch trình cấp thread. Là nó lát thời gian đơn giản để lập bản đồ thread hoặc, là có bất kỳ thông minh ở cấp độ quá trình, trong đó cung cấp cho mỗi thread một phần của thời gian. – SpinLocked
Bản gốc NPTL (thư viện chủ đề posix gốc) được sử dụng trong bản đồ Linux pthreads cho "quy trình chia sẻ tài nguyên và do đó trông giống như chuỗi" trong hạt nhân. Bằng cách này, trình lập lịch biểu của hạt nhân trực tiếp kiểm soát việc lập lịch biểu của các pthread.
Công tắc "pthread" được thực hiện bằng chính mã giống nhau (trong hạt nhân) xử lý các công tắc quy trình. Đơn giản hóa, điều này sẽ giống như "lưu trữ trạng thái quá trình trước đó; nếu quá trình tiếp theo sử dụng một không gian địa chỉ ảo khác thì hãy chuyển đổi không gian địa chỉ ảo; tải trạng thái tiến trình tiếp theo;" (nơi "trạng thái xử lý" bao gồm con trỏ chỉ dẫn cho tiến trình/luồng).
cảm ơn bạn đã có một số thông tin. bạn có thể trích dẫn một số nguồn để biết thêm thông tin không .. – SpinLocked
Đó chỉ là cách Linux luôn thực hiện chuỗi. Tôi đã tìm thấy một số tài liệu tham khảo mặc dù. 1) cuộn xuống "5 Linux" tại http://www.icir.org/gregor/tools/pthread-scheduling.html. 2) cuộn xuống "Triển khai Linux của Chủ đề POSIX" tại http://linux.die.net/man/7/pthreads. – Brendan
Mặc dù không có sự khác biệt về lập lịch giữa các luồng và quy trình, bạn có thể nhóm luồng/quy trình thành nhóm kiểm soát, mỗi nhóm sẽ được xử lý bởi người lập lịch làm "thực thể kế toán", tức là nó sẽ tính toàn bộ nhóm điều khiển Thời gian CPU, vì vậy nếu bạn nhóm, ví dụ một cuộc gọi maven (tạo ra rất nhiều luồng), các nhóm điều khiển còn lại sẽ có được chia sẻ công bằng hơn của thời gian CPU. – ninjalj