กระทู้: เธรดเคอร์เนลกับเธรดที่สนับสนุนเคอร์เนลเทียบกับเธรดระดับผู้ใช้?


9

ไม่มีใครรู้ว่าความแตกต่างระหว่างสิ่งเหล่านี้คืออะไร?

สำหรับฉันแล้วดูเหมือนว่าเคอร์เนลเธรดจะสอดคล้องกับรหัสที่ใช้เคอร์เนล (อย่างสังหรณ์ใจ) แต่ฉันไม่แน่ใจเกี่ยวกับอีกสอง ...

นอกจากนี้มาตรฐาน pthreads จะถูกพิจารณาเป็นระดับผู้ใช้และสนับสนุนเคอร์เนลเนื่องจากคุณกำลังเข้าถึงไลบรารีในขณะที่เคอร์เนลทำการตั้งเวลา / สลับเธรดทั้งหมดหรือไม่

คำตอบ:


14

คำว่า "เคอร์เนลเธรด" สามารถใช้เพื่ออ้างถึงเธรดจริงที่รันทั้งหมดในพื้นที่เคอร์เนลหรือสามารถอ้างถึงเธรดพื้นที่ผู้ใช้ที่กำหนดโดยเคอร์เนล เธรดคำว่า "สนับสนุนเคอร์เนล" หมายถึงเธรดหลังที่รันในพื้นที่ผู้ใช้ แต่อำนวยความสะดวกโดยเคอร์เนลซึ่งโดยปกติจะหมายถึงเคอร์เนลที่จัดตารางเวลาไว้

"เธรดระดับผู้ใช้" โดยทั่วไปหมายถึงเธรดที่มองเห็นได้บนพื้นที่ผู้ใช้ นั่นคือสิ่งที่คุณสร้างเมื่อคุณเรียกใช้ฟังก์ชัน "create thread" ของเธรดมาตรฐาน โดยทั่วไปแล้วคำว่า "เธรดระดับผู้ใช้" จะใช้เพื่อหมายถึงเธรดที่สร้างขึ้นโดยรหัสแอปพลิเคชันไม่ว่าระบบจะมีการใช้งานอย่างไร อาจเป็นเธรดพื้นที่ผู้ใช้จริงที่มีเคอร์เนลสนับสนุนน้อยหรือไม่มีเลยหรืออาจเป็นเธรดที่กำหนดโดยเคอร์เนล

มาตรฐาน pthreads สามารถนำไปใช้เป็นเธรดพื้นที่ผู้ใช้จริง (โดยที่เคอร์เนลกำหนดเวลากระบวนการและกระบวนการกำหนดเวลาเธรด), เธรดที่สนับสนุนเคอร์เนล (ที่เคอร์เนลกำหนดเวลาเธรดโดยตรง) หรือวิธีไฮบริด เธรดระดับเคอร์เนลซึ่งในพื้นที่ผู้ใช้กำหนดเวลาเธรดระดับผู้ใช้) มาตรฐานไม่ต้องการวิธีการใช้งานอย่างใดอย่างหนึ่งโดยเฉพาะ การนำไปใช้ที่พบบ่อยที่สุดคือการแมปแบบ 1 ต่อ 1 โดยที่เธรดระดับผู้ใช้แต่ละรายมีเธรดที่สอดคล้องกันซึ่งกำหนดโดยเคอร์เนล


การใช้งานบน Linux เป็นอย่างไร?
yati sagade

3
ในทุกระบบ (2.6 เคอร์เนลหรือใหม่กว่า) ระบบลีนุกซ์ที่ฉันรู้จักการใช้เธรดเริ่มต้นของระบบคือ 1 ต่อ 1, เธรดระดับผู้ใช้แต่ละคนมี KSE ที่สอดคล้องกัน (เอนทิตีการจัดกำหนดการเคอร์เนล - โดยทั่วไปแล้วเธรดที่กำหนดโดย เคอร์เนล Linux) เธรดที่คุณสร้างด้วย 'pthread_create' จะถูกกำหนดเวลาโดยตรงจากเคอร์เนล โดยทั่วไประบบที่ทันสมัยใช้NPTLระบบเก่าใช้LinuxThreads - ทั้งคู่เป็นแบบ 1 ต่อ 1
David Schwartz

"หรือวิธีไฮบริด (ที่เคอร์เนลกำหนดเวลาเธรดระดับเคอร์เนลซึ่งในพื้นที่ผู้ใช้จะกำหนดเวลาเธรดระดับผู้ใช้)" เฮ้เดวิดคุณช่วยอธิบายเรื่องนี้อีกครั้งได้ไหม ฉันไม่แน่ใจว่าเกิดอะไรขึ้น ... เมื่อคุณพูดว่าการแมปแบบ 1 ต่อ 1 คุณหมายถึง Thread Control Blocks เมื่อกล่าวถึง theads-level kernel
Dark Templar

โดย1 ต่อ 1ฉันหมายความว่าทุกครั้งที่คุณเรียก 'pthread_create' บริบทใหม่จะถูกสร้างขึ้นที่กำหนดโดยเคอร์เนล ในแนวทางแบบไฮบริดจำนวนบริบทที่กำหนดเวลาโดยเคอร์เนลน้อยกว่าจำนวนเธรดที่สร้างขึ้น - เคอร์เนลกำหนดเวลาหนึ่งในบริบทเหล่านั้นจากนั้นเธรดไลบรารีจะกำหนดเวลาหนึ่งเธรดที่สร้างโดยแอปพลิเคชัน
David Schwartz
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.