บทที่ 3 การจัดการโปรเซสและเทรด

 นาย ธนโชติ ฟ้าคะนอง เลขที่ 5

บทที่ 3 
การจัดการโปรเซส และเทรด
 การจัดการโปรเซส Process Management
      โปรเซส คือ  โปรแกรมที่กาลังทางานอยู่ (Execute)ซึ่งในขณะที่โปรเซสกาลังเอ็กซิคิวอยู่นั้นจะมีการใช้ทรัพยากร (Resource) ของระบบ เช่น CPU, หน่วยความจำ, ไฟล์หรืออุปกรณ์อินพุต/เอาต์พุต
องค์ประกอบของโปรเซส 

Process
-Process ID                                 - หมายเลขโปรเซส มีไว้เพื่อกำหนดลำดับการเอ็กซิคิวต์ 
-Program Code                           - โค้ดคำสั่งที่เป็นภาษาเครื่องสามารถเอ็กซิคิวต์ได้ทันที 
-Data                                             - ใช้สำหรับเก็บข้อมูลเพื่อสนับสนุนโปรเซสเอ็กซิคิวต์โปรแกรม
-ProcessControlBlock(PCB) -ตารางข้อมูลที่ใช้เก็บข้อมูลต่างๆที่เกี่ยวข้องกับแต่ละกระบวนการ
 -Program Status Word(PSW)  - ควบคุมลำดับการเอ็กซิคิวต์คำสั่งและเก็บที่อยู่ของคำสั่งที่เอ็กซิคิวต์ต่อไป 
-Property                                     - คุณสมบัติของโปรเซส เช่นลำดับความสาคัญ,อำนาจหน้าที่ที่โปรเซสทำอะไรได้บ้าง
 

สถานะของโปรเซส


การจัดเวลาของโปรเซส

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


    เวลาควอนตัม(Quantum Time) คือระยะเวลาที่ระบบปฏิบัติการกาหนดไว้ให้กับโปรเซสในการอยู่ในสถานะRunning ของโปรเซสซึ่งจะเป็นระยะเวลาหน่วยเล็กที่สุด









3.1) ดีไวซ์คิว (Device Queue) สำหรับคิวของโปรเซสที่รอการตอบสนองจากการใช้อินพุต/เอาต์พุตดีไวซ์เรียกว่า “ดีไวซ์คิว (device queue)”
3.2) คอนเท็กซ์สวิตช์ (Context switch)
    -เมื่อมีการเปลี่ยนสถานะการทำงานของ Process ในซีพียูจะต้องมีการเก็บสถานะปัจจุบันของกระบวนการเดิมไว้ใน PCB(Process Control Box) ก่อนแล้วค่อยโหลดสถานะของกระบวนการใหม่เข้ามา

 

4.1การสร้างโปรเซส
    - กระบวนการหนึ่งๆ อาจสร้างกระบวนการใหม่เกิดขึ้น โดยการใช้คาสั่งเรียกระบบสร้างกระบวนการ และกระบวนการใหม่ๆ ที่เกิดขึ้นมานั้นอาจจะสร้างกระบวนการใหม่ๆ ต่อไปได้อีก
    - กระบวนการที่เป็นผู้สร้าง เรียกว่า กระบวนการแม่ (Parent Process) กระบวนการใหม่ที่ถูกสร้างขึ้นมาเรียกว่า กระบวนการลูก (Children Process)



การสร้างโปรเซสแม่และโปรเซสลูก
    หลังจากสร้างกระบวนการย่อยแล้ว โปรเซสแม่อาจทำงาน (execute) ได้ 2 วิธี
        -กระบวนการแม่ ทำงานพร้อมๆ กัน (concurrent) ไปกับกระบวนการลูก
        -กระบวนการแม่คอยจนกระทั่ง กระบวนการลูกทั้งหมด สิ้นสุดการทำงาน
    ในการระบุพื้นที่ว่างของกระบวนการใหม่(โปรเซสลูก) ทำได้ 2วิธี คือ
        -กระบวนการลูกทำสำเนา (duplicate) มาจากกระบวนการแม่ (จำลองมา)
        -กระบวนการลูกมีโปรแกรมที่ถูก load เข้ามาเอง (สร้างเอง)โอเปอร์เรชันของโปรเซส

4.2การสิ้นสุดของโปรเซส
การสิ้นสุดโปรเซสด้วยเหตุผลดังนี้
    •โปรเซสลูกใช้ทรัพยากรมากเกินกว่าที่กาหนดไว้
    •ไม่มีความจำเป็นต้องใช้โปรเซสลูกอีกต่อไป
    •โปรเซสแม่สิ้นสุดลงไปแล้วและระบบปฏิบัติการไม่ยินยอมให้เอ็กซิคิวต์โปรเซสลูก เมื่อโปรเซสสิ้นสุดไป
 
 
โปรเซสสื่อประสาร
การทำงานร่วมกันของโปรเซสมีดังนี้
    • การแชร์ข้อมูลข่าวสาร : เนื่องจากผู้ใช้อาจต้องการข้อมูลเดียวกันในเวลานั้น ระบบปฏิบัติการจะต้องเตรียมการเพื่อตอบสนองความต้องการของผู้ใช้
    • การเพิ่มความเร็วในการคำนวณ ด้วยหลักการง่ายๆ : การที่จะเพิ่มความเร็วในระบบได้นั้น ระบบหรือคอมพิวเตอร์จะต้องเป็นแบบมัลติโปรเซสซิง
    • ความสะดวก
    •IPC (InterProcessCommunication) จัดเตรียมกลไกลในการให้โปรเซสติดต่อสื่อสารและประสานงาน (Synchronize) กับกิจกรรมต่างๆ ของโปรเซส
    • ระบบข้อความ (Message System) เป็นระบบที่ดีที่สุดในการสนับสนุนการสื่อสารระหว่างโปรเซส

การติดต่อระหว่างโปรเซส
การติดต่อแบบทางตรง (Direct Communication)

    *การทำงานแบบทางตรง Process A จะรอจนกระทั้ง Process B ดึงข้อมูลเสร็จสิ้นแล้วจึงทำการวางข้อมูลใหม่ลงใหม่ เพื่อป้องกันข้อมูลขาดหาย ทำเช่นนี้จนกว่าข้อมูลจะหมด กลไกที่ในการตรวจสอบเวลาที่เหมาะสมในการรับ-ส่งข้อมูลนี้เรียกว่า“การซินโครไนซ์โปรเซส”
 
 
โครงสร้างพื้นฐาน (Basic Structure)
    ระบบข่าวสาร (Message System) คือระบบติดต่อสื่อสารของโปรเซสที่ไม่จาเป็นต้องใช้ตัวแปรร่วม (Share Variable) IPC แบ่งการทางานออกเป็น 2 ส่วนคือ
    •Send (Message)
    •Receive (Message)
    ถ้าโปรเซสใดต้องการ Message จากโปรเซสอื่น จะส่งคาร้องขอไปยังโปรเซสนั้นโปรเซสที่ถูกร้องขอจะส่ง Message นั้นไปให้การติดต่อระหว่างโปรเซส
    

การติดต่อแบบทางตรง (Direct Communication)
    • ถ้ากระบวนการ A และ B ต้องการติดต่อสื่อสารกัน ต้องส่งและรับข้อความซึ่งกันและกันผ่านหน่วยความจาร่วม
    • ขนาดของหน่วยความจำร่วมจะมีขนาดคงที่หรือไม่ก็ได้
    • ก่อนจะมีการรับส่งข้อความจะต้องมีการสร้างลิงค์ให้พร้อม ทั้งลิงค์ทางกายภาพ (Physical) และทางตรรกะ (Logical)

คุณสมบัติการติดต่อแบบทางตรง (Direct Communication)
    • การสร้างลิงค์เป็นแบบอัตโนมัติระหว่างคู่โปรเซสที่ต้องการติดต่อ โปรเซสจะทราบหมายเลขโปรเซสที่จะติดต่อด้วย
    • ลิงค์หนึ่งๆ จะมีความสัมพันธ์เฉพาะโปรเซสสองโปรเซสเท่านั้น
    • ระหว่างโปรเซสแต่ละคู่จะมีเพียงลิงค์เดียวเท่านั้น
    • ลิงค์นี้เป็นแบบทิศทางเดียวและสองทิศทาง ปกติจะเป็นสองทิศทาง

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

   ระบบปฏิบัติการมีกล่องรับจดหมายเป็นของตัวเอง โดยจะมีกลไกในการอนุญาตให้Process ใช้งาน mailbox ดังนี้
• สร้าง mailbox ใหม่
• ส่งและรับข้อความผ่าน mailbox
• ลบหรือทำลาย mailbox

คุณสมบัติการติดต่อแบบทางอ้อม (Indirect Communication)
จะมีการสร้างลิงค์ระหว่างโปรเซสที่มีการแชร์เมลล์บ็อกซ์เท่านั้น (ใช้ mailbox ร่วมกัน)
• ลิงค์ๆ หนึ่ง อาจจะมีความสัมพันธ์มากกว่าสองโปรเซสได้
• ระหว่างโปรเซสแต่ละคู่นั้นอาจจะมีหลายลิงค์ที่ต่างกันได้ แต่ละลิงค์จะมีเพียง เมลล์บ็อกซ์เดียวเท่านั้น
• การลิงค์อาจจะเป็นทิศทางเดียวหรือสองทิศทางก็ได้

การติดต่อแบบทางอ้อม (Indirect Communication)
รูปแบบของ mailbox มี 3 แบบ คือ
-เมลล์บ็อกซ์แบบคิว (Queue Mailbox) ตามลำดับก่อน-หลัง และความยาวคงที่
-เมลล์บ็อกซ์แบบไปป์(Pipe Mailbox) เข้าก่อนถูกนำไปใช้ก่อน ความยาวไม่จำกัด
-เมลล์บ็อกซ์แบบสแต็ก (Stack Mailbox)เข้าก่อนออกทีหลัง
-เมลล์บ็อกซ์แบบคิว (Queue Mailbox)
    เป็นโครงสร้างที่ดึงข้อมูลออกจากเมลล์บ็อกซ์ตามลำดับก่อน-หลัง ของข้อมูลที่ส่งเข้ามา นั่นคือข้อมูลใดส่งเข้ามาในเมลล์บ็อกซ์ก่อนก็จะถูกดึงออกไปก่อนส่วนข้อมูลใดส่งเข้ามาภายหลังก็จะถูกดึงออกไปภายหลังเรียกการทำงานแบบนี้ว่า FIFO (First InFirst Out)ลักษณะโครงสร้างเมลล์บ็อกซ์แบบคิวเป็นดังรูป

-เมลล์บ็อกซ์แบบไปป์(Pipe Mailbox)
    เป็นโครงสร้างที่คล้ายกับโครงสร้างแบบคิวข้อแตกต่างระหว่างเมลล์บ็อกซ์แบบคิวกับเมลล์บ็อกซ์แบบไปป์คือเมลล์บ็อกซ์แบบคิวจะมีขนาดบ็อกซ์คงที่ถ้าใส่ข้อมูลมากเกินไปเมลล์บ็อกซ์จะเต็ม แต่ถ้าเป็นเมลล์บ็อกซ์แบบไปป์ขนาดของบ็อกซ์จะยืดหยุ่นได้ลักษณะโครงสร้างเมลล์บ็อกซ์แบบไปป์เป็นดังรูป

-เมลล์บ็อกซ์แบบสแต็ก(Stack Mailbox)
    เป็นโครงสร้างตรงข้ามกับเมลล์บ็อกซ์แบบคิวในการดึงข้อมูล นั่นก็คือข้อมูลใดส่งเข้ามาเมลล์บ็อกซ์ก่อนจะถูกดึงออกไปใช้งานภายหลังโดยจะนำข้อมูลที่ส่งเข้ามาภายหลังออกไปใช้ก่อน อาจเรียกการทำงานแบบนี้ว่า FILO (First In Last Out)ลักษณะโครงสร้างเมลล์บ็อกซ์แบบสแต็กเป็นดังรูป
การซิงโครนัสโปรเซส
    การซิงโครนัส หมายถึง
    -การทำงานของโปรเซส 2โปรเซสที่มีความเกี่ยวข้องกัน
    -ใช้รีซอร์สร่วมกัน
    -อาจเป็นการรอการเอ็กซิคิวต์โปรเซสหลังจากที่โปรเซสอื่นเอ็กซิคิวซ์ไปแล้วทำให้มีการรอจังหวะที่เหมาะสมเพื่อให้การทำงานนั้นถูกต้อง
 
การซิงโครนัสโปรเซส
อธิบาย  จะเห็นว่าโปรเซส B จะเริ่มเอ็กซิคิวต์ได้ก็ต่อเมื่อโปรเซส A เอ็กซิคิวต์เสร็จเรียบร้อยไปแล้ว (ซึ่งต่างกับโปรเซส C ที่ไม่ต้องรอโปรเซสใดเลยก้สามารถเอ็กซิคิวต์ได้ทันที และไม่มีความเกี่ยวข้องกับโปรเซส A และ B เลย)







เธรด (Threads)
เธรด หมายถึง ส่วนประกอบย่อยของโปรเซส
• แนวคิด OS รุ่นใหม่จะมีหลายThreads
• โปรเซสถูกแบ่งย่อยลงไปอีกเป็นส่วนของโค้ดโปรแกรม (Code Program)
• อยู่ภายใต้สภาวะแวดล้อม (Environment) เดียวกัน
• มีความเป็นอิสระ แยกกันทางาน
• ลดเวลาการทางานโปรเซสลงมาก
เธรด คือ การแบ่งโปรเซสออกเป็นส่วนย่อยๆ อย่างน้อย 1เธรด

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


เหตุผลที่ใช้เธรด
• โปรเซสที่มีหลายๆ เธรดเหมาะกับการทาหน้าที่เป็น Server เช่น Web Server
•เธรดสามารถใช้งานร่วมกันได้ จึงไม่จำเป็นต้องใช้ความสามารถของ OS ในเรื่องการสื่อสารระหว่างโปรเซส ซึ่งกินทรัพยากรมาก
•เธรดมีคุณสมบัติพื้นฐานที่เหมาะกับการประมวลผลบนเครื่องที่มีหลายซีพียู เธรดนั้น มีค่าดำเนินการต่ำาในประเด็นที่ว่า
    -เธรดแต่ละตัวต้องใช้ทรัพยากรที่เป็นส่วนน้อยมาก
    -เธรดใช้ทรัพยากรของระบบปฏิบัติการน้อยมาก และสามารถใช้ทรัพยากรต่างๆรวมกับเธรดอื่นได้
    -การทำการสลับการทำงานระหว่างเธรดต่างๆ (Context Switch) นั้นสามารถทำได้อย่างรวดเร็ว

ปัญหาการทำงานของโปรเซส
    - การตัดตอน (Preemptive)
    ถ้ามีโปรเซสอื่น(ที่มีความสาคัญสูงกว่า) มาแย่งการครอบครองทรัพยากรของโปรเซสแรก โปรเซสแรกต้องหยุดการครอบครองลงชั่วคราวและปลดปล่อยทรัพยากรนั้น
    -การอดตาย (Starvation) หรือ การเลื่อนไปอย่างไม่มีวันสิ้นสุด (Infinite Postponement)
โปรเซสที่มีความสำคัญน้อยกว่า จะต้องรอให้โปรเซสที่มีความสำคัญสูงกว่าเข้าครอบครองทรัพยากร ซึ่งต้องรออย่างไม่มีวันสิ้นสุดปัญหาการทางานของโปรเซส
    - การตัดตอนไม่ได้ (Non-Preemptive)
    ถ้ามีโปรเซสอื่นมาแย่งการครอบครองทรัพยากรของโปรเซสหนึ่ง โปรเซสนี้ไม่ต้องปลดปล่อยทรัพยากรที่มันครอบครองอยู่ เช่น เครื่องพิมพ์ (Printer)
    - การติดตาย (Deadlock)
    การทางานของโปรเซสที่มีการครอบครองทรัพยากรแบบ “ตัดตอนไม่ได้” และการครอบครองแบบ “ไม่เกิดร่วมกัน” คือ โปรเซสเข้าไปครอบครองทรัพยากรได้ครั้งละ 1โปรเซส มีการรอการใช้ทรัพยากรเป็นวงรอบ (Circular Waiting)


การติดตาย (Deadlock)

 
 




 


ความคิดเห็น