Operating System Chapter 5

9,666 views

Published on

Computer Operating System Concept Chapter 5

Published in: Technology
0 Comments
12 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
9,666
On SlideShare
0
From Embeds
0
Number of Embeds
78
Actions
Shares
0
Downloads
0
Comments
0
Likes
12
Embeds 0
No embeds

No notes for slide
  • Chapter 5: Threads Overview Multithreading Models Threading Issues Pthreads Windows XP Threads Linux Threads Java Threads
  • 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

    ×