Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Operating System Chapter 5

11,036 views

Published on

Computer Operating System Concept Chapter 5

Published in: Technology
  • Be the first to comment

Operating System Chapter 5

  1. 1. บทที่ 5 เธรด Threads <ul><li>บทนำ Overview </li></ul><ul><li>ตัวแบบการทำงานแบบหลายเธรด หรือ โมเดล มัลติเธรด Multithreading Models </li></ul><ul><li>การทำงานของเธรด Threading Issues </li></ul><ul><li>พีเธรด Pthreads </li></ul><ul><li>เธรดของวินโดวส์เอ็กซ์พี Windows XP Threads </li></ul><ul><li>เธรดของลีนุกซ์ Linux Threads </li></ul><ul><li>เธรดของจาวา Java Threads </li></ul>
  2. 2. โปรเซสแบบเธรดเดียวและแบบมัลติเธรด Single and Multithreaded Processes
  3. 3. ประโยชน์ที่ได้รับ <ul><li>มีการตอบสนองที่รวดเร็ว Responsiveness </li></ul><ul><li>มีการแบ่งสรรทรัพยากรในการใช้งาน Resource Sharing </li></ul><ul><li>ประหยัด Economy </li></ul><ul><li>ก่อให้เกิดประโยชน์ สำหรับโครงสร้างแบบ MP Utilization of MP Architectures </li></ul>
  4. 4. เธรดระดับผู้ใช้ User Threads <ul><li>การบริหารจัดการเธรดกระทำโดยเธรดไลบารีระดับผู้ใช้ </li></ul><ul><li>เธรดไลบารี สามเธรดหลัก </li></ul><ul><li>1 POSIX Pthreads </li></ul><ul><li>2 จาวาเธรด Java threads </li></ul><ul><li>3 วิน 32 เธรด Win32 threads </li></ul>
  5. 5. เธรดระดับเคอร์แนล Kernel Threads <ul><li>รองรับการทำงานโดยเคอร์แนล </li></ul><ul><li>อาทิเช่น </li></ul><ul><li>วินโดวส์ เอ็กซ์พี หรือ 2000 Windows XP/2000 </li></ul><ul><li>โซลาริส Solaris </li></ul><ul><li>ลินุกซ์ Linux </li></ul><ul><li>ทรู 64 ยูนิกซ์ Tru64 UNIX </li></ul><ul><li>แมก โอเอส เอ็กซ์ Mac OS X </li></ul>
  6. 6. ตัวแบบ ( โมเดล ) ในการทำมัลติเธรด Multithreading Models <ul><li>Many-to-One </li></ul><ul><li>One-to-One </li></ul><ul><li>Many-to-Many </li></ul>
  7. 7. Many-to-One <ul><li>เธรดระดับผู้ใช้หลายๆ เธรดถูกแมพเข้ากับเธรดระดับเคอร์แนลเพียงเธรดเดียว </li></ul><ul><li>อาทิเช่น </li></ul><ul><ul><li>โซลาริสกรีนเธรด Solaris Green Threads </li></ul></ul><ul><ul><li>จีนูพอร์ทเทเบิลเธรด GNU Portable Threads </li></ul></ul>
  8. 8. Many-to-One Model
  9. 9. One-to-One <ul><li>เธรดระดับผู้ใช้หนึ่งเธรด แมพกับหนึ่งเคอร์แนลเธรด </li></ul><ul><li>อาทิเช่น </li></ul><ul><ul><li>วินโดวส์ เอ็นที เอ็กซ์พี และ 2000 Windows NT/XP/2000 </li></ul></ul><ul><ul><li>ลินุกซ์ Linux </li></ul></ul><ul><ul><li>โซลาริส ตั้งแต่รุ่นที่ 9 เป็นต้นไป Solaris 9 and later </li></ul></ul>
  10. 10. One-to-one Model
  11. 11. Many-to-Many Model <ul><li>อนุญาตให้ เธรดระดับผู้ใช้หลายเธรดสามารถแมพกับเคอร์แนลเธรดหลายเธรด </li></ul><ul><li>อนุญาตให้ระบบปฏิบัติการ สามารถสร้างเธรดระดับเคอร์แนลได้ตามจำนวนที่ต้องการ </li></ul><ul><li>โซลาริสเริ่มใช้ตัวแบบนี้ตั้งแต่รุ่นที่ 9 </li></ul><ul><li>วินโดวส์ เอ็นที 2000 ใช้แพ็กเกจ เธรดไฟเบอร์ ThreadFiber package </li></ul>
  12. 12. Many-to-Many Model
  13. 13. ตัวแบบแบบสองระดับ Two-level Model <ul><li>มีความแตกต่างจาก M:M ยกเว้นความสามารถในการเชื่อมระหว่างเธรดระดับผู้ใช้กับเธรดระดับเคอร์แนลเข้าไว้ด้วยกัน </li></ul><ul><li>อาทิเช่น </li></ul><ul><ul><li>IRIX </li></ul></ul><ul><ul><li>HP-UX </li></ul></ul><ul><ul><li>Tru64 UNIX </li></ul></ul><ul><ul><li>Solaris 8 และรุ่นถัดไป </li></ul></ul>
  14. 14. Two-level Model
  15. 15. การทำงานของเธรด Threading Issues <ul><li>หมายถึงการทำงานการเรียกระบบด้วย fork() และ exec() </li></ul><ul><li>การยกเลิกเธรด </li></ul><ul><li>การจัดการกับอานัติสัญญาณต่างๆ </li></ul><ul><li>เธรดพูล หรือแหล่งรวมเธรด </li></ul><ul><li>ข้อมูลเฉพาะสำหรับเธรด </li></ul><ul><li>การจัดลำดับงานการกระตุ้นเพื่อให้เกิดการทำงาน </li></ul>
  16. 16. Semantics of fork() and exec() <ul><li>Does fork() duplicate only the calling thread or all threads? </li></ul>
  17. 17. การยกเลิกเธรด Thread Cancellation <ul><li>การสิ้นสุดการทำงานของเธรดก่อนที่จะทำงานเสร็จสิ้น </li></ul><ul><ul><li>การยกเลิกแบบไม่สัมพันธ์ Asynchronous cancellation ทำให้เธรดนั้นสิ้นสุดการทำงานโดยทันทีทันใด </li></ul></ul><ul><ul><li>การยกเลิกแบบเชิงสัมพันธ์ Deferred cancellation อนุญาตให้เธรดที่ต้องการยกเลิก ได้รับการตรวจสอบถึงความเหมาะสมว่ายามารถยกเลิฏได้หรือไม่ก่อน </li></ul></ul>
  18. 18. การจัดการอานัติสัญญาณ Signal Handling <ul><li>ระบบอานัติสัญญาณถูกนำมาใช้ในระบบยูนิกซ์ เพื่อแจ้งเตือนโปรเซสว่าเกิดเหตุการใดๆ ขึ้น </li></ul><ul><li>การจัดการแบบเดี่ยว A signal handler ใช้เพื่อการอานัติสัญญาณโปรเซส </li></ul><ul><li>1. อานัติสัญญาณถูกสร้างขึ้นโดยเหตุการณ์ต่างๆ </li></ul><ul><li>2. อานัติสัญญาณจะถูกส่งให้กับโปรเซส </li></ul><ul><li>3. อานัติสัญญาณได้รับการบริหารจัดการ </li></ul><ul><li>การเลือกสรร </li></ul><ul><li>การส่งอานัติสัญญาณไปยังเธรด เพื่อการรับรู้อานัติสัญญาณ </li></ul><ul><li>การส่งอานัติสัญญาณไปยังทุกๆ เธรดในโปรเซส </li></ul><ul><li>การส่งอานัติสัญญาณไปยังเธรดเพื่อการทำงานที่ถูกต้องในโปรเซส </li></ul><ul><li>การกำหนดเธรดคุณสมบัติเฉพาะหนึ่งรับทุกๆ อานัติสัญญาณเพื่อโปรเซส </li></ul>
  19. 19. แหล่งรวมเธรด หรือเธรดพูล Thread Pools <ul><li>สร้างเธรดขึ้นจำนวนหนึ่งเก็บไว้ในเธรดพูลเมื่อเธรดนั้นต้องรอคอยในการทำงาน </li></ul><ul><li>ประโยชน์ </li></ul><ul><li>แบ่งงานบริการออกเป็นส่วนย่อยๆ ทำให้สามารถทำงานได้รวดเร็ว โดยเธรดที่มีอยู่เดิมสามารถสร้างเธรดใหม่ขึ้นได้ </li></ul><ul><li>อนุญาตให้จำนวนของเธรดในแอพพลิเคชั่นสามารถกำหนดให้ผูกพันกับขนาดของแหล่งรวมเธรดหรือเธรดพูลได้ </li></ul>
  20. 20. ข้อมูลเฉพาะของเธรด Thread Specific Data <ul><li>อนุญาตให้เธรดแต่ละเธรดสามารถมีสำเนาข้อมูลเป็นของตนเอง </li></ul><ul><li>มีประโยชน์มากเมื่อ คุณไม่มีสิทธิ์ในการควบคุมโปรเซสในการสร้างเธรด ( อาทิ เมื่อใช้เธรดพูล ) </li></ul>
  21. 21. การจัดลำดับงานการกระตุ้นเพื่อให้เกิดการทำงาน Scheduler Activations <ul><li>ทั้ง M:M และ ทั้งตัวแบบสองระดับ จำเป็นต้องมีการสื่อสาร เพื่อการบริหารจัดการจำนวนของเธรดระดับเคอร์แนลที่มีอยู่ในแอพพลิเคชั่น </li></ul><ul><li>ตัวจัดลำดับงานการกระตุ้นเพื่อให้เกิดการทำงานรองรับการทำงานแบบ เรียกขึ้น upcalls หมายถึงกลไกการสื่อสารจากเคอร์แนลไปยังเธรดไลบรารี่ </li></ul><ul><li>การสื่อสารนี้อนุญาตให้แอพพลิเคชั่นสามารถบริหารจัดการเธรดระดับเคอร์แนลให้มีจำนวนที่เหมาะสมถูกต้อง </li></ul>
  22. 22. Pthreads <ul><li>มาตรฐาน POSIX (IEEE 1003.1c) API สำหรับการสร้างเธรด และการทำงานเชิงสัมพันธ์ </li></ul><ul><li>API จะกำหนดพฤติกรรมของเธรดไลบรารี่ การนำไปใช้งานขึ้นอยู่กับการพัฒนาไลบรารี่ </li></ul><ul><li>โดยปกติมีใช้อยู่ใน ระบบปฏิบัติการยูนิกส์ ( โซลาริส ลินุกซ์ แม็กโอเอสเอ็กซ์ ) </li></ul>
  23. 23. เธรดของวินโดวส์เอ็กซ์พี Windows XP Threads <ul><li>ใช้การแมพแบบ One to One </li></ul><ul><li>แต่ละเธรดประกอบไปด้วย </li></ul><ul><ul><li>เธรดไอดี thread id </li></ul></ul><ul><ul><li>เซ็ตของรีจิสเตอร์ Register set </li></ul></ul><ul><ul><li>แบ่งระหว่าง แสต็กของผู้ใช้กับของเคอร์แนล Separate user and kernel stacks </li></ul></ul><ul><ul><li>พื้นที่การจัดเก็บข้อมูลแบบไพรเวท ( แบบเฉพาะตัว ) Private data storage area </li></ul></ul><ul><li>เซ็ตของรีจีสเตอร์ แสต็ก และ พื้นที่การจัดเก็บข้อมูลแบบไพรเวท รวมเรียกว่าคอนเท็กซ์หรือสภาพแวดล้อม context ของเธรด </li></ul><ul><li>โครงสร้างข้อมูลพื้นฐานของเธรด ประกอบด้วย </li></ul><ul><ul><li>ETHREAD (executive thread block) </li></ul></ul><ul><ul><li>KTHREAD (kernel thread block) </li></ul></ul><ul><ul><li>TEB (thread environment block) </li></ul></ul>
  24. 24. เธรดของลีนุกซ์ Linux Threads <ul><li>ในระบบลีนุกซ์อ้างอิงโดยเรียกว่า ทาสค์หรืองาน แทนที่จะเรียกว่า เธรด </li></ul><ul><li>การสร้างเธรดสามารถทำได้โดยการเรียกระบบด้วยคำสั่ง clone() </li></ul><ul><li>คำสั่ง clone() อนุญาตให้ทาสค์ลูกสามารถร่วมใช้พื้นที่แอดเดรสหรือ แอดเดรสสเปซ ของทาสค์ต้นกำเนิด ( โปรเซส ) </li></ul>
  25. 25. เธรดของจาวา Java Threads <ul><li>เธรดของจาวาถูกบริหารจัดการโดย JVM Java Virtual Machine </li></ul><ul><li>เธรดของจาวาอาจถูกสร้างโดย </li></ul><ul><ul><li>การขยายคลาสของเธรด </li></ul></ul><ul><ul><li>การใช้อินเตอร์เฟสที่สามารถรันได้ </li></ul></ul>
  26. 26. สถานะของเธรดในจาวา Java Thread States

×