Chapter 2 Process Pisit Nakjai
Process ในตอนแรกระบบคอมพิวเตอร์ เป็นแบบทำงานโปรแกรมได้ทีละ 1 โปรแกรม โปรแกรมจะใช้ รีซอร์สของระบบทั้งหมด แต่เพียงผู้เดียว สำหรับในปัจจุบัน สามารถโหลดโปรแกรมไว้หลายๆ โปรแกรมใน Ram ได้ และทำการ รันโปรแกรมพร้อมกันหลายๆ โปรแกรม ได้ ทำให้ต้องมีการแบ่งโปรแกรมออกเป็นช่วงๆ และต้องทำการควบคุม โปรแกรม เหล่านั้นอย่างเหมาะสม โปรแกรมที่กำลังทำงานอยู่ เราจะเรียกมันว่า Process
โปรเซส จึงหมายถึง โปรแกรมที่กำลังเอ็กซิคิวต์อยู่ ในขณะที่โปรเซสกำลังเอ็กซิคิวต์อยู่นั้นจะมีการใช้ทรัพยากร (Resource) ของระบบ เช่น CPU, หน่วยความจำ, ไฟล์, อุปกรณ์ อินพุต/เอาต์พุต ในระบบ Multiprogramming อาจประกอบด้วยโปรเซสมากมาย OS จึงมีหน้าที่ในการจัดการโปรเซสในระบบทั้งหมด ไม่ว่าจะเป็นการสร้าง ลบ การจัดเวลา การจัดจังหวะและการติดต่อสื่อสารภายในโปรเซส
องค์ประกอบของ Process แม้ว่า Process จะคือโปรแกรมที่กำลังเอ็กซิคิวอยู่ แต่เอ็กซิคิว จะเรียงลำดับเรื่อยๆไป Process ที่สมบูรณ์จะต้องประกอบด้วย สิ่งต่างๆ ดังนี้ หมายเลขโปรเซส(Process ID) เป็นหมายเลข ประจำโปรเซสเพื่อกำหนดลำดับการเอ็กซิคิวต์ หมาเลขนี้ใน แต่ละโปรเซสจะไม่เหมือนกัน โค้ดโปรแกรม (Program code) เป็นโค้คำสั่งที่เป็น ภาษาเครื่องที่สามารถเอ็กซิคิวได้ทันที
องค์ประกอบของ Process ข้อมูล (Data) เป็นตัวแปรที่เก็บข้อมลเพื่อสนับสนุนให้ โปรเซสเอ็กซิคิวต์โปรแกรมได้ บล็อกควบคุมโปรเซส (Process control Block) PCB เป็น เนื้อที่จองหน่วยความจำที่ OS กำหนดเพื่อเก็บข้อมูลสำคัญ ของโปรเซสไว้ PSW (Program Status Word) เป็นตัวควบคุมลำดับการเอ็ก ซิคิวต์คำสั่งของโปรเซส และเก็บข้อมูลเกี่ยวกับสถานะของ โปรเซส ที่อยู่ของคำสั่งที่จะเอ็กซิคิวต่อไป
องค์ประกอบของ Process คุณสมบัติของโปรเซส ซึ่งประกอบไปด้วย ลำดับความสำคัญของโปรเซส (Priority) ลำดับความสำคัฐของ โปรเซสนี้จะถูกำหนดโดยระบบปฏิบัติการเมื่อโปรเซสถูกสร้าง ขึ้นมา สามารถเปลี่ยนค่าได้โปรเซสใดที่มีความสำคัฐมาก ระบบปฏิบัติการจะให้สิทธิมากกว่าโปรเซสอื่นๆ อำนาจหน้าที่ของโปรเซส (Authority) เป็นการบอกอำนาจ หน้าที่ของโปรเซสนั้นว่าทำอะไรได้บ้าง สามารถใช้ Device อะไร ได้บ้าง
บล็อกควบคุมโปรเซส (Process Control Block : PCB) OS จะ กำหนดเนื้อที่บางส่วนในหน่วยความจำเพื่อทำเป็น PCB
(Process Control Block : PCB) 4.1 พอยเตอร์(Pointer) สำหรับชี้ตำแหน่งของโปรเซสที่อยู่ใน หน่วยความจำ และตำแหน่งของทรัพยากรที่โปรเซสครอบครอง อยู่ 4.2 สถานะของโปรเซส(Process Status) แสดงสถานะของ โปรเซสที่เป็นอยู่ในปัจจุบัน
(Process Control Block : PCB) 4.3 หมายเลขโปรเซส(Process ID) เป็นหมายเลข ประจำตัวของโปรเซส 4.4 ตัวนับจำนวน(Program Counter) เป็น ตัวนับที่แสดงที่อยู่ของคำสั่งต่อไปที่จะถูกประมวลผล
(Process Control Block : PCB) 4.5 รีจิสเตอร์(Register) ทำหน้าที่เก็บข้อมูลสถานะระบบเมื่อ มีอินเทอร์รัพเกิดขึ้นเพื่อทำให้โปรแกรมสามารถทำงานต่อไปได้ เมื่อกลับมาทำงานอีกครั้ง รีจิสเตอร์จะมีค่าและประเภทที่ เปลี่ยนแปลงได้ขึ้นอยู่กับสถาปัตยกรรมของคอมพิวเตอร์ ประเภทของรีจิสเตอร์คือ Accumulator, Index, Stack Pointer และรีจิสเตอร์ทั่วไป
4.6 ข้อมูลการจัดการเวลาซีพียู(CPU Scheduling Information) เป็นข้อมูลที่ประกอบด้วยลำดับความสำคัญของโปรเซสที่ถูกกำหนด โดยระบบปฏิบัติการ เมื่อโปรเซสถูกสร้างขึ้นมา สามารถเปลี่ยนค่าไปได้ ซึ่งโปรเซสใดที่ มีความสำคัญมากระบบปฏิบัติการจะให้สิทธิมากกว่าโปรเซสอื่น เช่น ให้เวลาซีพียูนานกว่า เป็นต้น
4.7 ข้อมูลการจัดการหน่วยความจำ(Memory Management Information) เป็นข้อมูลเกี่ยวกับหน่วยความจำที่ระบบปฏิบัติการ กำหนดไว้ เช่นขนาดหน่วยความจำ, ค่าของรีจิสเตอร์, Page table และ Segment table เป็นต้น
4.8 ข้อมูลแอ็กเคาต์(Account Information) เป็นข้อมูลที่ อาจประกอบด้วยจำนวน CPU, เวลาที่กำหนด, หมายเลข แอ็กเคาต์, หมายเลขโปรเซส และอื่นๆ 4.9 ข้อมูลสถานะอินพุต/เอาต์พุต(I/O Status Information) เป็นข้อมูลแสดงรายการของอุปกรณ์อินพุต/ เอาต์พุตที่โปรเซสนี้ใช้ เป็นต้น
สถานะของโปรเซส ในขณะที่ Process ทำงาน จะมีการเปลี่ยนแปลงสถานะ ของ Process เกิดขึ้น ซึ่งสถานะดังกล่าวจะถูกกำหนดขึ้นโดย กิจกรรม ณ เวลาปัจจุบันที่ process นั้นๆ กำลังกระทำอยู่ โดย ที่แต่ละกระบวนการจะอยู่ในสถานะใดสถานะหนึ่งดังต่อไปนี้ สถานะเริ่มต้น (New) เป็นสถานะที่เริ่มต้นสร้างโปรเซส สถานะพร้อม (Ready) เป็นสถานะที่พร้อมจะครอบครองซีพียู แต่ยังไม่มีการรัน
สถานะของโปรเซส สถานะรัน (Running) เป็นสถานะที่โปรเซสเข้าครอบครอง ซีพียูและมีการเอ็กซิคิวต์คำสั่งในโปรแกรมของโปรเซส สถานะรอ (Wait) เป็นสถานะที่โปรเซสกำลังรอเหตุการณ์บางอย่าง เช่น การรอสัญญาณ การจัดการอินพุต/เอาต์พุตดีไวซ์
สถานะบล็อก (Block) เป็นสถานะที่โปรเซสต้องการใช้ อุปกรณ์อินพุต/เอาต์พุต หรือเกิดอินเทอร์รัพต์ระหว่างที่รัน โปรเซส ซึ่งจะต้องรอให้มีการจัดการอุปกรณ์อินพุต/เอาต์พุต หรือจัดการอินเทอร์รัพต์ให้เรียบร้อยก่อนจะกลับไปสถานะรันได้ ต่อไป สถานะสิ้นสุด (Terminate) เป็นสถานะที่หยุดนิ่งอันเกิดจาก โปรเซสถูกเอ็กซิคิวต์หมดทุกคำสั่งในโปรแกรมแล้ว
แผนภาพการสับเปลี่ยน กระบวนการ
Diagram Process Statement
ขั้นตอนการเปลี่ยนสถานะของโปรเซส เมื่อผู้ใช้ต้องการส่งงานให้เครื่องคอมพิวเตอร์ทำงาน OS จะเป็นผู้ที่รับทราบความต้องการนี้ และจะเตรียมสร้างโปรเซสให้กับงานใหม่ที่ถูกส่งเข้ามา OS จะต้องพิจารณาว่าเนื้อที่หน่วยความจำหลักของระบบมีเพียงพอหรือไม่ ถ้าเพียงพอก็จะทำการสร้างโปรเซสใหม่โดยเก็บไว้ในหน่วยความจำหลัก ถ้าไม่เพียงพอก็จะต้องรอจนกว่าจะมีโปรเซสอื่นจบลงและมีเนื้อที่ในหน่วยความจำเหลือมากพอเมื่อโปรเซสถูกสร้างขึ้นมาใหม่จะอยู่ในสถานะพร้อมก่อน ยังไม่สามารถเข้าไปใช้งาน CPU ได้
ขั้นตอนการเปลี่ยนสถานะของโปรเซส สาเหตุที่โปรเซสไม่สามารถเข้าใช้งาน CPU ได้ทันที เนื่องจากระบบคอมพิวเตอร์ในปัจจุบันเป็นระบบที่มีผู้ใช้หลายคนในเวลาเดียวกัน ทำให้มีโปรเซสมากมายเกิดขึ้น ซึ่งโปรเซสเหล่านี้ต้องการใช้ CPU ทั้งสิ้น ต้องมีการจัดคิวและแจ้งสถานะพร้อมให้กับโปรเซสไว้ก่อน
ขั้นตอนการเปลี่ยนสถานะของโปรเซส เมื่อโปรเซสที่ใช้งาน CPU ทำงานเสร็จสิ้นหรือถูกยกเลิก ทำให้ CPU จะว่าง โปรเซสต่อไปที่อยู่ในคิวก็จะเลื่อนเข้าไปใช้ CPU (เปลี่ยนสถานะจากพร้อมเป็นสถานะรัน) เหตุการณ์ทั้งหมดผู้ที่ทำหน้าที่ควบคุมการทำงานคือ OS
ขั้นตอนการเปลี่ยนสถานะของโปรเซส เริ่มต้น รัน พร้อม สิ้นสุด
ขั้นตอนการเปลี่ยนสถานะของโปรเซส กรณีที่โปรเซสใดใช้เวลารันเป็นเวลานานก็จะครอบครองซีพียูเป็นเวลานาน ทำให้โปรเซสอื่น ๆ เสียเวลาในการรอนานเกินไป เพื่อแก้ปัญหานี้ OS จะกำหนดเวลาในการอยู่ในสถานะการรันของทุกโปรเซสไว้ เรียกว่า “เวลาควันตัม (Quantum time)” ถ้าโปรเซสใดใช้เวลาครอบครอง CPU เกินกว่าเวลาควันตัม ระบบปฏิบัติการจะย้ายโปรเซสนั้นไปต่อคิวใหม่และเปลี่ยนเป็นสถานะพร้อม และนำโปรเซสที่อยู่ในคิวต่อไปมารัน
ขั้นตอนการเปลี่ยนสถานะของโปรเซส ภายในระยะเวลาควันตัม ถ้าโปรเซสจบลง โปรเซสก็จะออกจากระบบ ทรัพยากรต่าง ๆ ที่โปรเซสครอบครองก็จะถูกส่งคืนให้กับระบบ เริ่มต้น รัน พร้อม สิ้นสุด เกินเวลาควอนตัม
ขั้นตอนการเปลี่ยนสถานะของโปรเซส กรณีที่โปรเซสกำลังอยู่ในสถานะรัน มีความต้องการใช้อุปกรณ์อินพุต/เอาท์พุต หรืออาจจะเกิดอินเทอร์รัพต์ (Interrupt) ขึ้น OS ก็จะย้ายโปรเซสจากสถานะรันไปอยู่ในสถานะบล็อก และดึงโปรเซสที่อยู่ในคิวต่อไปมารัน เริ่มต้น รัน พร้อม สิ้นสุด บล็อก
ขั้นตอนการเปลี่ยนสถานะของโปรเซส กรณีที่ระบบมีงานมากเกินไป OS ไม่สามารถตอบสนองการทำงานของโปรเซสทั้งหมดได้ OS จะนำเอาโปรเซสบางโปรเซสไปเก็บไว้ในสถานะรอชั่วคราวก่อน รอจนจำนวนโปรเซสในระบบลดลงมาอยู่ในระดับปกติ จึงค่อยย้ายโปรเซสเหล่านั้นกลับมาทำงาน รัน พร้อม รอ บล็อก
Device Queue สำหรับคิวของ Process ที่รอการตอบสนองจากการใช้ I/O จะเรียกว่า ดีไวซ์คิว (device queue) อุปกรณ์แต่ละอันจะมีคิวเป็นของตนเอง ที่มีพอยเตอร์เก็บส่วนหัวและส่วนท้ายของ PCB ที่เรียกใช้อุปกรณ์นี้ และในส่วนของ PCB ก็จะมีพอยเตอร์ที่บอกว่า PCB ใดเป็นโปรเซสต่อไปที่จะรัน
Queue Diagram
Context Switch เมื่อ CPU รัน Process จนเสร็จเรียบร้อยแล้วก็จะต้องมีการ Switch เพื่อให้ Process อื่นๆ ได้เข้าใช้งานในคิวต่อไป การสวิตซ์นี้เรียกว่า Context Switch เวลาที่เสียไปในการ Switch ขึ้นอยู่กับความเร็วของหน่วยความจำ ?? (หรือ CPU ดี) จำนวน Register ที่จะถูกคัดลองและคำสั่งที่มีอยู่ใน ระบบ
Operation ของ Process Process ต่างๆ ที่มี ในระบบที่รันได้พร้อมๆ กัน จะต้องมีการสร้างและ ลบ ตลอดเวลา ระบบปฏิบัติการจะเป็นตัวสร้าง Process เหล่านี้ รวมทั้ง ส่งให้ Process เหล่านี้สิ้นสุดด้วย Process หนึ่งๆ อาจจะสร้าง Process ใหม่เกิดขึ้นได้ โดยการใช้คำสั่งเรียก ระบบการสร้าง Process และ Process ที่เกิดขึ้นอาจจะสร้าง Process อื่นๆ อีกเป็นทอดๆ ไปได้เช่นกัน
Fork Process
กระบวนการที่เป็นผู้สร้าง เราจะเรียกว่า Parent Process โปรเซสแม่ สำหรับ Process ใหม่ที่ถูกสร้างจาก Process แม่จะเรียกว่า Process ลูก โดยทั่วไป Process ต้องการทรัพยากร เช่น เวลาที่เข้าใช้งาน CPU หน่วยความจำ แฟ้มข้อมล เป็นต้น เพื่อให้สามารถทำงานได้เสร็จ สมบูรณ์ และถ้า Process ลูกถูกสร้างขึ้น Process สามารถร้องของทรัพยากรต่างๆ จาก ระบบปฏิบัติการได้โดยตรงหรือบางกรณี Process อาจจะถูก จำกัดให้ใช้ได้เฉพาะทรัพยากรในส่วนของ ทรัพยากรแม่เท่านั้น
หลังจากสร้างกระบวนการย่อยแล้ว กระบวนการแม่อาจทำงานได้ 2 วิธี Process แม่ทำงานพร้อมๆ กับ Process ลูกได้ Process แม่คอยจนกว่า Process ลูกทั้งหดสิ้นสุดการทำงาน
การสิ้นสุดของ Process Process จะสิ้นสุดเมื่อทำคำสั่งสุดท้าย และแจ้งให้ OS ลบมันออกโดยใช้ System call ชื่อว่า exit ขณะที่กำลังออกจากระบบไป อาจจะคืนข้อมูลหรือผลลัพธ์ไปยัง Process แม่ Process หนึ่งสามารถเป็นต้นเหตุให้ Process อื่นๆสิ้นสุดได้เช่นกัน ผู้ใช้สามารถทำลาย Process ได้ โปรดจำไว้ว่า Process แม่จะต้องทราบหมายเลข Process ID ของ Process ลูกทั้งหมด ดังนั้นเมื่อน Process ลูกสร้างขึ้นก็จะต้องส่ง Process ID ลูกไปให้ แม่ด้วย
Process แม่จะหยุดการทำงานของ Process ลูกด้วยเหตุผล ดังนี้ Process แม่ทำงานสิ้นสุดลงแล้ว และ OS ไม่ยอม เอ็กซิคิว Process ลูกเมื่อโปรเซสแม่สิ้นสุดไปแล้ว
โปรเซสสื่อประสาน (Cooperating Processes) โปรเซสที่เอ็กซิคิวต์ในระบบนั้นมี 2 แบบ โปรเซสที่เป็นอิสระ ( Independent Processes) หมายถึงโปรเซสที่ไม่มีผลกระทบหรือไม่ได้รับผลกระทบจากโปรเซสอื่น โปรเซสสื่อประสาน (Cooperating Processes) หมายถึงโปรเซสที่มีผลกระทบหรือได้รับผลกระทบจากโปรเซสอื่น เหตุผลที่ทำให้เกิดการประสานงานระหว่างโปรเซส ต้องการใช้ข้อมูลร่วมกัน ต้องการเพิ่มความเร็วในการคำนวณ
การติดต่อระหว่างโปรเซส (Interprocess communication) ส่งข้อมูล รับข้อมูล หน่วย ความจำร่วม โปรเซส B โปรเซส A รับข้อมูล ส่งข้อมูล เมื่อโปรเซส A ต้องการติดต่อกับโปรเซส B โปรเซส A และ B จะต้องจองเนื้อที่ในหน่วยความจำในส่วนที่ว่างเอาไว้ ทั้ง 2 โปรเซสต้องรู้ว่าหน่วยความจำร่วมนี้อยู่ที่ใด เมื่อโปรเซส A ส่งข้อมูลให้โปรเซส B ข้อมูลจะถูกส่งไปไว้ในหน่วยความจำร่วม
เมื่อโปรเซสต้องการใช้ข้อมูลของโปรเซสอื่น โปรเซสที่ถูกร้องขอจะส่งข้อมูลไปให้ การที่โปรเซสต่าง ๆ มีการติดต่อกันเช่นนี้ เราเรียกว่า การติดต่อระหว่างโปรเซส โดยทั่วไปการติดต่อระหว่างโปรเซสนั้นจะใช้วิธีการคือ การใช้หน่วยความจำร่วม (Shared memory) กลไกการรับส่งข้อมูลผ่านทางหน่วยความจำร่วมนี้ OS จะไม่ช่วยจัดการให้โปรเซสที่ต้องการติดต่อกันจะต้องจัดการเอาเอง
เมื่อโปรเซส A ต้องการติดต่อกับโปรเซส B โปรเซส B จะตรวจสอบได้เองว่าโปรเซส A นำข้อมูลไปวางไว้แล้วหรือยัง ถ้าโปรเซส A ยังไม่ส่งข้อมูลมา โปรเซส B ก็จะยังไม่ดึงเอาข้อมูลมาใช้ นอกจากนั้นโปรเซส B ยังต้องสามารถตรวจสอบได้ว่าข้อมูลที่อยู่ในหน่วยความจำร่วมนั้นเป็นข้อมูลเก่าที่เคยนำมาใช้แล้วหรือยัง สำหรับโปรเซส A ถ้าจะส่งข้อมูลชุดใหม่ให้ โปรเซส A จะต้องตรวจสอบก่อนว่าข้อมูลชุดเดิมที่อยู่ในหน่วยความจำร่วมนั้นถูกนำไปใช้หรือยัง ถ้าถูกนำไปใช้แล้วก็จะนำข้อมูลชุดใหม่ทับลงไป
การสื่อสารทางอ้อมโดยใช้ Port เปรียบเสมือน กล้องรับจดหมาย ที่ๆ Process ใช้ส่งข้อความ หรือลบข้อความ Process 2 Process ติดต่อสื่อสารกันได้ถ้ามีกล่องรับจดหมายร่วมกัน
สมมุติว่ากระบวนการ P1 P2 P3 ใช้กล่องรับจดหมาย A ร่วมกัน P1 ส่ง ข้อความมาไว้ที่ กล่องจดหมาย A ดังนั้น P2 และ P3 รับจากกล่องจดหมาย A ด้วยเช่นกันถามว่า Process ใดจะได้รับข้อความที่ส่งจาก P1 วิธีแก้คือยอมให้มีการเชื่อมต่อมากสุดแค่ 2 Process เท่านั้น อนุญาตให้ระบบเลือกว่า Process ใดจะเป็นผู้รับข้อความ (P2 หรือ ไม่ก็ P3) ระบบจะเป็นผู้จำแนกผู้รับและผู้ส่งเอง
สำหรับ ระบบ เองก็มีกล่องจดหมายเป็นของตัวเอง โดยมีกลไกในการ อนุญาตให้ Process ใช้งานกล่องรับจดหมายดังนี้ สร้างกล่องรับจดหมายใหม่ ส่งและรับข้อความผ่านทางกล่องรับจดหมาย ทำลายกล่องรับจดหมาย ตัวอย่างเช่น ถ้า P1 สร้างกล่องรับจดหมาย A จากนั้นทำการสร้าง Process Q มา P และ Q อาจจะใช้กล่องรับจดหมาย A ร่วมกัน และเมื่อกระบวนการ ทั้งหมดทำงานเสร็จ กล่องรับจดหมายก็จะถูกทำลายโดย ระบบปฏิบัติการ
การบ้าน สถานะของโปรเซสมีอะไรบ้าง จงอธิบาย เวลา Quantum Time คืออะไร สถานะ Block เกิดขึ้นได้อย่างไร การติดต่อกันระหว่าง Process เป็นหน้าที่ของโคร องค์ประกอบของโปรเซส มีอะไรบ้าง องค์ประกอบของ PCB มีอะไรบ้าง Device Queue คืออะไรจงอธิบาย