ความแตกต่างระหว่างเธรดระดับผู้ใช้และเธรดระดับเคอร์เนลคืออะไร


33

หลังจากอ่านหลายแหล่งฉันยังคงสับสนเกี่ยวกับเธรดผู้ใช้และเคอร์เนลระดับ

โดยเฉพาะอย่างยิ่ง:

เธรดสามารถอยู่ได้ทั้งในระดับผู้ใช้และระดับเคอร์เนล

อะไรคือความแตกต่างระหว่างระดับผู้ใช้และระดับเคอร์เนล?


1
นี่เป็น Comp Compi (ทฤษฏี) จริง ๆ หรือแค่เขียนโปรแกรม
Mehrdad

6
@ Mehrdad ระบบปฏิบัติการเป็นส่วนหนึ่งของวิทยาศาสตร์คอมพิวเตอร์
Kaveh

คำตอบ:


28

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

ระบบปฏิบัติการบางระบบเช่นระบบยูนิกซ์ที่เก่ากว่าให้กระบวนการเท่านั้น: ทุกเธรดที่เคอร์เนลจัดการมีพื้นที่หน่วยความจำของตัวเอง ระบบปฏิบัติการอื่น ๆ เช่นระบบยูนิกซ์ที่ทันสมัยส่วนใหญ่อนุญาตให้กระบวนการมีหลายเธรดของการดำเนินการ: พวกเขาให้ความคิดระดับเคอร์เนลของเธรด

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

ระบบสามารถเสนอทั้งระดับเคอร์เนลและเธรดระดับผู้ใช้ นี้เป็นที่รู้จักกันเป็นเกลียวไฮบริด

เธรดผู้ใช้และเคอร์เนลแต่ละเธรดมีข้อดีและข้อเสีย การสลับระหว่างเธรดระดับผู้ใช้มักเร็วกว่าเนื่องจากไม่จำเป็นต้องรีเซ็ตการป้องกันหน่วยความจำเพื่อสลับไปยังตัวกำหนดเวลาในเคอร์เนลและอีกครั้งเพื่อสลับกลับไปที่กระบวนการ นี้ส่วนใหญ่เป็นเรื่องสำคัญสำหรับระบบพร้อมกันอย่างหนาแน่นที่ใช้เป็นจำนวนมากของหัวข้อสั้น ๆ มากเช่นบางภาษาระดับสูง ( Erlangโดยเฉพาะ) ของพวกเขาและหัวข้อสีเขียว เธรดระดับผู้ใช้ต้องการการสนับสนุนเคอร์เนลน้อยลงซึ่งสามารถทำให้เคอร์เนลง่ายขึ้น เธรดระดับเคอร์เนลอนุญาตให้เธรดรันในขณะที่เธรดอื่นในกระบวนการเดียวกันถูกบล็อกในการเรียกระบบ; กระบวนการที่มีเธรดระดับผู้ใช้จะต้องระมัดระวังไม่ให้ทำการบล็อกการเรียกของระบบเนื่องจากสิ่งเหล่านี้จะบล็อกเธรดทั้งหมดของกระบวนการ เธรดระดับเคอร์เนลสามารถรันพร้อมกันบนเครื่องหลายตัวประมวลผลซึ่งเธรดระดับผู้ใช้ล้วน แต่ไม่สามารถทำได้


บรรทัดสุดท้ายของคุณบอกว่า "เธรดระดับเคอร์เนลสามารถทำงานพร้อมกันบนเครื่องมัลติโปรเซสเซอร์ซึ่งเธรดระดับผู้ใช้ล้วน แต่ไม่สามารถทำได้" แต่การเชื่อมโยงให้กล่าวว่า ULT สามารถเรียกใช้ simultaneusly stackoverflow.com/questions/14791801/... ฉันทำอะไรผิดหรือเปล่า?
Garrick

คุณช่วยกรุณาตรวจสอบความคิดเห็นข้างต้นของฉันได้ไหม
Garrick

1
@Garrick เธรดระดับผู้ใช้หลายเธรดสามารถทำงานบนคอร์ที่แตกต่างกันในเวลาเดียวกันโดยมีเงื่อนไขว่าเธรดเหล่านั้นทำงานภายในเธรดระดับเคอร์เนลที่แตกต่างกัน หากคุณมี ULT เป็นเพียงเครื่องมือคุณจะ จำกัด ตัวประมวลผลเดียว หาก KLT พร้อมใช้งานคุณสามารถกระจายเธรดเคอร์เนลผ่านตัวประมวลผลจำนวนมากและส่ง ULT ของคุณไปยังเคอร์เนลเธรดที่มีอยู่
Gilles 'หยุดความชั่วร้าย'

4

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

นี่คือข้อเท็จจริง

  • การสร้างตัวประมวลผลเสมือนใหม่นั้นมีราคาค่อนข้างแพง (เคอร์เนลต้องสร้างรายการในThread Control Blockกำหนดสแต็คเป็นต้น)

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

รุ่น

  • หากเธรดถูกแม็พเข้ากับตัวประมวลผลเสมือนเดียวดังนั้นต้องระมัดระวังไม่ให้ทำการเรียกระบบการบล็อกในเธรดใด ๆ เนื่องจากเธรดอื่นไม่สามารถรันพร้อมกันได้อีก

  • ข้อ จำกัด นี้สามารถเอาชนะได้หากสามารถสร้างตัวประมวลผลเสมือนได้อีกสองสามตัว ตอนนี้เธรดสามารถรันพร้อมกัน (ในแบบขนานหากมีตัวประมวลผลจริงจำนวนมาก) เธรดจะไม่มีผลต่อเธรดอื่นซึ่งถูกแม็พกับตัวประมวลผลเสมือนอื่น

  • ในโมเดลหลังสามารถแมปหนึ่งหรือหลายเธรดบนตัวประมวลผลเสมือน

  • โมเดลดังกล่าวมีชื่อหลายต่อหนึ่ง, หนึ่งต่อหนึ่งและหลายต่อหลายตามลำดับ

Referenes: แนวคิดของระบบปฏิบัติการโดย Galvin และคณะ หัวข้อ: เธรด -> มัลติเธรดโมเดล

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.