ระบบปฏิบัติการ - Multi-Threading

Thread คืออะไร?

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

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

เธรดเรียกอีกอย่างว่าไฟล์ lightweight process. เธรดเป็นวิธีการปรับปรุงประสิทธิภาพของแอปพลิเคชันผ่านการทำงานแบบขนาน เธรดแสดงถึงแนวทางของซอฟต์แวร์ในการปรับปรุงประสิทธิภาพของระบบปฏิบัติการโดยการลดเธรดค่าโสหุ้ยนั้นเทียบเท่ากับกระบวนการแบบดั้งเดิม

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

ความแตกต่างระหว่างกระบวนการและเธรด

SN กระบวนการ เกลียว
1 กระบวนการมีน้ำหนักมากหรือใช้ทรัพยากรมาก ด้ายมีน้ำหนักเบาใช้ทรัพยากรน้อยกว่ากระบวนการ
2 การสลับกระบวนการต้องการการโต้ตอบกับระบบปฏิบัติการ การสลับเธรดไม่จำเป็นต้องโต้ตอบกับระบบปฏิบัติการ
3 ในสภาพแวดล้อมการประมวลผลที่หลากหลายแต่ละกระบวนการจะรันโค้ดเดียวกัน แต่มีหน่วยความจำและทรัพยากรไฟล์ของตัวเอง เธรดทั้งหมดสามารถแชร์ไฟล์ที่เปิดชุดเดียวกันกระบวนการย่อย
4 หากกระบวนการหนึ่งถูกปิดกั้นจะไม่มีกระบวนการอื่นใดสามารถดำเนินการได้จนกว่ากระบวนการแรกจะถูกบล็อก ในขณะที่เธรดหนึ่งถูกบล็อกและรอเธรดที่สองในภารกิจเดียวกันสามารถรันได้
5 หลายกระบวนการโดยไม่ใช้เธรดใช้ทรัพยากรมากขึ้น กระบวนการหลายเธรดใช้ทรัพยากรน้อยลง
6 ในหลายกระบวนการแต่ละกระบวนการดำเนินการโดยไม่ขึ้นกับกระบวนการอื่น ๆ เธรดหนึ่งสามารถอ่านเขียนหรือเปลี่ยนแปลงข้อมูลของเธรดอื่นได้

ข้อดีของเธรด

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

ประเภทของเธรด

เธรดถูกนำไปใช้ในสองวิธีต่อไปนี้ -

  • User Level Threads - เธรดที่จัดการโดยผู้ใช้

  • Kernel Level Threads - เธรดที่มีการจัดการของระบบปฏิบัติการที่ทำหน้าที่บนเคอร์เนลซึ่งเป็นแกนหลักของระบบปฏิบัติการ

เธรดระดับผู้ใช้

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

ข้อดี

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

ข้อเสีย

  • ในระบบปฏิบัติการทั่วไปการเรียกระบบส่วนใหญ่จะบล็อก
  • แอปพลิเคชันมัลติเธรดไม่สามารถใช้ประโยชน์จากการประมวลผลหลายขั้นตอนได้

เธรดระดับเคอร์เนล

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

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

ข้อดี

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

ข้อเสีย

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

โมเดลมัลติเธรด

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

  • หลายต่อหลายความสัมพันธ์
  • ความสัมพันธ์แบบหลายต่อหนึ่ง
  • ความสัมพันธ์แบบหนึ่งต่อหนึ่ง

หลายรุ่น

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

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

แบบหลายต่อหนึ่ง

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

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

แบบตัวต่อตัว

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

ข้อเสียของโมเดลนี้คือการสร้างเธรดผู้ใช้ต้องใช้เคอร์เนลเธรดที่สอดคล้องกัน OS / 2, windows NT และ windows 2000 ใช้รูปแบบความสัมพันธ์แบบหนึ่งต่อหนึ่ง

ความแตกต่างระหว่าง User-Level และ Kernel-Level Thread

SN เธรดระดับผู้ใช้ เธรดระดับเคอร์เนล
1 เธรดระดับผู้ใช้สร้างและจัดการได้เร็วกว่า เธรดระดับเคอร์เนลจะสร้างและจัดการได้ช้ากว่า
2 การนำไปใช้โดยเธรดไลบรารีที่ระดับผู้ใช้ ระบบปฏิบัติการรองรับการสร้างเคอร์เนลเธรด
3 เธรดระดับผู้ใช้เป็นเธรดทั่วไปและสามารถรันบนระบบปฏิบัติการใดก็ได้ เธรดระดับเคอร์เนลเป็นเฉพาะสำหรับระบบปฏิบัติการ
4 แอปพลิเคชันแบบมัลติเธรดไม่สามารถใช้ประโยชน์จากการประมวลผลหลายขั้นตอนได้ กิจวัตรของเคอร์เนลเองสามารถเป็นแบบมัลติเธรดได้