อ่าน 3 นาที
กระบวนการน้ำหนักเบา
ใน ระบบปฏิบัติการ คอมพิวเตอร์ กระบวนการ น้ำหนักเบา ( LWP ) เป็นวิธีการหนึ่งในการบรรลุ การทำงานแบบมัลติทาสกิ้ง ในความหมายดั้งเดิมของคำนี้ ตามที่ใช้ใน Unix System V และ Solaris นั้น...
กระบวนการน้ำหนักเบา
ในระบบปฏิบัติการ คอมพิวเตอร์ กระบวนการน้ำหนักเบา ( LWP ) เป็นวิธีการหนึ่งในการบรรลุการทำงานแบบมัลติทาสกิ้งในความหมายดั้งเดิมของคำนี้ ตามที่ใช้ในUnix System VและSolarisนั้น LWP จะทำงานในพื้นที่ผู้ใช้บนเธรดเคอร์เนล เดียว และแบ่งปันพื้นที่แอดเดรสและทรัพยากรระบบกับ LWP อื่นๆ ภายในกระบวนการ เดียวกัน เธรด ระดับผู้ใช้ หลายเธรดซึ่งจัดการโดยไลบรารีเธรด สามารถวางไว้บน LWP หนึ่งตัวหรือหลายตัวได้ ทำให้สามารถทำงานแบบมัลติทาสกิ้งในระดับผู้ใช้ได้ ซึ่งอาจมีประโยชน์ด้านประสิทธิภาพบางประการ[ 1 ]
ในระบบปฏิบัติการบางระบบ ไม่มีเลเยอร์ LWP แยกต่างหากระหว่างเธรดเคอร์เนลและเธรดผู้ใช้ ซึ่งหมายความว่าเธรดผู้ใช้ถูกใช้งานโดยตรงบนเธรดเคอร์เนล ในบริบทเหล่านั้น คำว่า "กระบวนการน้ำหนักเบา" โดยทั่วไปหมายถึงเธรดเคอร์เนล และคำว่า "เธรด" อาจหมายถึงเธรดผู้ใช้[ 2 ]บนLinuxเธรดผู้ใช้ถูกใช้งานโดยการอนุญาตให้กระบวนการบางอย่างใช้ทรัพยากรร่วมกัน ซึ่งบางครั้งทำให้กระบวนการเหล่านี้ถูกเรียกว่า "กระบวนการน้ำหนักเบา" [ 3 ] [ 4 ]ในทำนองเดียวกัน ในSunOSเวอร์ชัน 4 เป็นต้นไป (ก่อนSolaris ) "กระบวนการน้ำหนักเบา" หมายถึงเธรดผู้ใช้[ 1 ]
เธรดเคอร์เนล
เธรดเคอร์เนลได้รับการจัดการโดยเคอร์เนล ทั้งหมด ไม่จำเป็นต้องเชื่อมโยงกับกระบวนการใดๆ เคอร์เนลสามารถสร้างเธรดเคอร์เนลได้ทุกเมื่อที่ต้องการทำงานเฉพาะอย่าง เธรดเคอร์เนลไม่สามารถทำงานในโหมดผู้ใช้ได้ LWP (ในระบบที่ LWP เป็นเลเยอร์แยกต่างหาก) จะผูกกับเธรดเคอร์เนลและให้บริบทระดับผู้ใช้ ซึ่งรวมถึงการเชื่อมโยงไปยังทรัพยากรที่ใช้ร่วมกันของกระบวนการที่ LWP เป็นส่วนหนึ่ง เมื่อ LWP ถูกระงับ มันจะต้องจัดเก็บรีจิสเตอร์ระดับผู้ใช้ไว้จนกว่าจะกลับมาทำงานต่อ และเธรดเคอร์เนลที่อยู่เบื้องหลังก็ต้องจัดเก็บรีจิสเตอร์ระดับเคอร์เนลของตนเองด้วย
ผลงาน
การสร้าง LWP นั้นช้าและมีค่าใช้จ่ายสูงกว่าเธรดผู้ใช้ เมื่อใดก็ตามที่มีการสร้าง LWP จะต้องมี การเรียกใช้ระบบเพื่อสร้างเธรดเคอร์เนลที่สอดคล้องกันก่อน ซึ่งจะทำให้เกิดการสลับไปยังโหมดเคอร์เนล การสลับโหมดเหล่านี้โดยทั่วไปจะเกี่ยวข้องกับการคัดลอกพารามิเตอร์ระหว่างเคอร์เนลและพื้นที่ผู้ใช้ นอกจากนี้เคอร์เนลอาจต้องมีขั้นตอนเพิ่มเติมเพื่อตรวจสอบพารามิเตอร์เพื่อตรวจสอบพฤติกรรมที่ไม่ถูกต้อง การสลับบริบทระหว่าง LWP หมายความว่า LWP ที่ถูกขัดจังหวะจะต้องบันทึกรีจิสเตอร์ จากนั้นเข้าสู่โหมดเคอร์เนลเพื่อให้เธรดเคอร์เนลบันทึกรีจิสเตอร์ และ LWP ที่ถูกกำหนดเวลาจะต้องกู้คืนรีจิสเตอร์เคอร์เนลและผู้ใช้แยกกันด้วย[ 1 ]
ด้วยเหตุนี้ ไลบรารีเธรดระดับผู้ใช้บางส่วนจึงอนุญาตให้ใช้งานเธรดผู้ใช้หลายเธรดบน LWP ได้ เธรดผู้ใช้สามารถสร้าง ทำลาย ซิงโครไนซ์ และสลับไปมาระหว่างกันได้อย่างสมบูรณ์ในพื้นที่ผู้ใช้โดยไม่ต้องเรียกใช้ระบบและสลับไปยังโหมดเคอร์เนล ซึ่งจะช่วยปรับปรุงประสิทธิภาพอย่างมากในเวลาการสร้างเธรดและการสลับบริบท[ 1 ]อย่างไรก็ตาม มีความยากลำบากในการใช้งานตัวกำหนดตารางเวลาเธรดระดับผู้ใช้ที่ทำงานได้ดีร่วมกับเคอร์เนล
การเปิดใช้งานตัวกำหนดเวลา
ในขณะที่ไลบรารีเธรดของผู้ใช้จะกำหนดตารางเวลาเธรดของผู้ใช้ เคอร์เนลจะกำหนดตารางเวลา LWP ที่อยู่เบื้องหลัง หากไม่มีการประสานงานระหว่างเคอร์เนลและไลบรารีเธรด เคอร์เนลอาจตัดสินใจกำหนดตารางเวลาที่ไม่เหมาะสม นอกจากนี้ ยังอาจเกิดภาวะเดดล็อกขึ้นได้เมื่อเธรดของผู้ใช้ที่กระจายอยู่บน LWP หลายตัวพยายามที่จะได้รับทรัพยากรเดียวกันกับที่เธรดของผู้ใช้อื่นที่ไม่ได้ทำงานอยู่กำลังใช้งานอยู่[ 1 ]
วิธีแก้ปัญหาอย่างหนึ่งคือการเปิดใช้งานตัวจัดตารางเวลา (scheduler activation) ซึ่งเป็นวิธีการที่เคอร์เนลและไลบรารีเธรดทำงานร่วมกัน เคอร์เนลจะแจ้งตัวจัดตารางเวลาของไลบรารีเธรดเกี่ยวกับเหตุการณ์บางอย่าง (เช่น เมื่อเธรดกำลังจะถูกบล็อก) และไลบรารีเธรดสามารถตัดสินใจได้ว่าจะดำเนินการอย่างไร การเรียกแจ้งเตือนจากเคอร์เนลเรียกว่า "อัพคอล" (upcall)
ไลบรารีระดับผู้ใช้ไม่มีการควบคุมกลไกพื้นฐาน มันรับเฉพาะการแจ้งเตือนจากเคอร์เนลและกำหนดตารางเวลาเธรดผู้ใช้ไปยัง LWP ที่พร้อมใช้งาน ไม่ใช่โปรเซสเซอร์ จากนั้นตัวกำหนดตารางเวลาของเคอร์เนลจะตัดสินใจว่าจะกำหนดตารางเวลา LWP ไปยังโปรเซสเซอร์อย่างไร ซึ่งหมายความว่าไลบรารีเธรดสามารถมองเห็น LWP เป็น "โปรเซสเซอร์เสมือน" ได้[ 5 ]
ระบบปฏิบัติการที่รองรับ
Solarisได้นำเลเยอร์ LWP แยกต่างหากมาใช้ตั้งแต่เวอร์ชัน 2.2 ก่อนเวอร์ชัน 9 Solaris อนุญาตให้มีการแมปแบบหลายต่อหลายระหว่าง LWP และเธรดผู้ใช้ อย่างไรก็ตาม ได้มีการยกเลิกไปเนื่องจากความซับซ้อนที่เกิดขึ้นและการปรับปรุงประสิทธิภาพของตัวกำหนดตารางเวลาเคอร์เนล[ 1 ] [ 6 ]
UNIX System Vและระบบปฏิบัติการรุ่นใหม่ที่พัฒนาต่อยอดจากระบบนี้เช่น IRIX , SCO OpenServer , HP-UXและIBM AIXอนุญาตให้มีการแมปแบบหลายต่อหลายระหว่างเธรดผู้ใช้และ LWP [ 5 ] [ 7 ]
NetBSD 5.0 นำเสนอโมเดลการทำงานแบบมัลติเธรด 1:1 ที่ปรับขนาดได้ใหม่ แต่ละเธรดของผู้ใช้ (pthread) มีเธรดเคอร์เนลที่เรียกว่ากระบวนการน้ำหนักเบา (LWP) ภายในเคอร์เนล ทั้งกระบวนการและเธรดถูกนำไปใช้เป็น LWP และได้รับการบริการแบบเดียวกันโดยตัวกำหนดตารางเวลา[ 8 ]
การนำไปใช้
- ส่วนขยายแบบขนาน (Microsoft)
- GNU Portable Threads
- เส้นใยสีเขียว (Java)
- เธรดเคอร์เนลน้ำหนักเบา
ดูเพิ่มเติม
- ไฟเบอร์ (วิทยาการคอมพิวเตอร์)
- งาน (การคำนวณ)
- ความขนานของงาน
- อนาคตและคำสัญญา
- เธรด POSIX
- Fork (การเรียกใช้ระบบ) § Clone
ลิงก์ภายนอก
- "สระว่ายน้ำกระบวนการน้ำหนักเบา" โดย จิม เมาโร
- "กระบวนการของ Solaris" โดย Scott Cromar
- โมเดลเธรด (จากเอกสารไวท์เปเปอร์ HP-UX Process Management)
สรุปเนื้อหา
ข้อมูลสำคัญจากบทความ
ข้อมูลสำคัญเกี่ยวกับ กระบวนการน้ำหนักเบา
ใน ระบบปฏิบัติการ คอมพิวเตอร์ กระบวนการ น้ำหนักเบา ( LWP ) เป็นวิธีการหนึ่งในการบรรลุ การทำงานแบบมัลติทาสกิ้ง ในความหมายดั้งเดิมของคำนี้ ตามที่ใช้ใน Unix System V และ Solaris นั้น...
เธรดเคอร์เนล
เธรดเคอร์เนลได้รับการจัดการโดย เคอร์เนล ทั้งหมด ไม่จำเป็นต้องเชื่อมโยงกับกระบวนการใดๆ เคอร์เนลสามารถสร้างเธรดเคอร์เนลได้ทุกเมื่อที่ต้องการทำงานเฉพาะอย่าง เธรดเคอร์เนลไม่สามารถทำงานในโหมดผู้ใช้ได้ LWP (ในระบบที่ LWP เป็นเลเยอร์แยกต่างหาก)...
ผลงาน
การสร้าง LWP นั้นช้าและมีค่าใช้จ่ายสูงกว่าเธรดผู้ใช้ เมื่อใดก็ตามที่มีการสร้าง LWP จะต้องมี การเรียกใช้ระบบ เพื่อสร้างเธรดเคอร์เนลที่สอดคล้องกันก่อน ซึ่งจะทำให้เกิดการสลับไปยังโหมดเคอร์เนล...
การเปิดใช้งานตัวกำหนดเวลา
ในขณะที่ไลบรารีเธรดของผู้ใช้จะกำหนดตารางเวลาเธรดของผู้ใช้ เคอร์เนลจะกำหนดตารางเวลา LWP ที่อยู่เบื้องหลัง หากไม่มีการประสานงานระหว่างเคอร์เนลและไลบรารีเธรด เคอร์เนลอาจตัดสินใจกำหนดตารางเวลาที่ไม่เหมาะสม นอกจากนี้...