บทที่ 2 การจัดการ Process

บทที่2
การจัดการ Process
โดย นายวีรินทร์ เรือนก้อน  รหัสนักศึกษา 6031280063 

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

ส่วนประกอบของโปรเซส 
1. ชื่อและหมายเลขประจำตัว
     เป็นชื่อหรือหมายเลขโปรเซส ซึ่งจะไม่มีการซ้ำกัน
2. คำสั่งโปรแกรม
     เป็นคำสั่งที่สามารถรันได้ทันที (ภาษาเครื่อง)
3. ข้อมูล
     คือ ข้อมูลที่โปรแกรมต้องการหรือนำไปใช้ประกอบการทำงาน ซึ่งข้อมูลนี้อาจจะเป็นข้อมูลของโปรเซสอื่นๆ ที่อาจใช้งานร่วมกันได้
4. บล็อกควบคุมโปรเซส (Process Control Bolck : PCB)
     PCB เป็นโตรงสร้างข้อมูลชนิดหนึ่งที่โอเอสสร้างขึ้นในหน่วยความจำเพื่อไว้เก็บข้อมูลสำคัญๆ ของโปรเซสต่างๆ ไว้ เช่น
     - หมายเลขประจำตัวโปรเซส (Process Identification Number : Process ID
     - สถานะโปรเซส Process State
     - ลำดับความสำคัญของโปรเซส (Process Piority)
     - พอยน์เตอร์ชี้ไปยังตำแหน่งที่อยู่ของโปรเซสในหน่วยความจำ (Location of Process)
     - พอยน์เตอร์ชี้ไปยังทรัพยากรต่างๆ ที่โปรเซสครอบครอง (Current Resource and Limits)
     - พื้นที่ที่เก็บค่าของรีจิสเตอร์ (Resgister save area)
     - ช่วงเวลาสูงสุด เวลาสะสมในการทำงานของโปรเซส (Maximum run time and accumulated run time)
5. PSW (Program Status Words)
     เป็น ตัวควบคุมลำดับการรันคำสั่งของโปรเซส ซึ่งจะเก็บข้อมูลสถานะของโปรเซสแอดเดรสของคำสั่งต่อไปที่จะถูกรัน ซึ่งเปรียบ                         เสมือนโปรแกรม Counter
6. คุณสมบัติของโปรเซส
     เป็นตัวกำหนดคุณสมบัติของแต่ละโปรเซส ซึ่งประกอบด้วย
     - ลำดับความสำคัญ (Piority)โปรเซสแต่ละโปรเซสจะถูกกำหนดความสำคัญในขณะที่โปรเซสถูกสร้างขึ้น ความสำคัญโปรเซสนี้อาจเปลี่ยนแปลงได้หรือไม่ขึ้นอยู่กับตัวโอเอส แต่โอเอสจะให้สิทธิพิเศษกับโปรเซสที่มีความสำคัญสูง เช่น อาจให้ระยะเวลาในการครอบครองซีพียูที่ยาวนานกว่าโปรเซสอื่นๆ ทั่วไปหรือจะโปรเซสงานที่มีลำดับความสำคัญสูงเป็นอันดับแรกก่อน เป็นต้น
     - อำนาจหน้าที่ (Authority) เป็นรายละเอียดที่บอกถึงโปรเซสนั้นๆ ว่าสามารถทำอะไรบ้าง ใช้อุปกรณ์ชิ้นไหนได้บ้าง ตัวอย่างเช่น โปรเซส เอ สามารถรับข้อมูลจากทุกๆโปรเซสในระบบได้ แต่ไม่สามารถใช้งานดิสก์ได้ เป็นต้น
     - คุณสมบัติอื่นๆ ที่ตัวโอเอสเป็นตัวกำหนดให้มี
รูปที่ 2.3 Process Control Block (PCB)
     อาจกล่าวได้ว่า PCB นี้เป็นศูนย์กลางในเก็บข้อมูลสำคัญทั้งหลายของทุกๆ โปรเซส เช่น ในระยะเวลาควอนตัม (Quantum time) ที่กำลังโปรเซสงานหนึ่งอยู่ เมื่อครบเวลาแล้วแต่งานนั้นยังไม่เสร็จสิ้น ก็จำเป็นต้องพักงานชั่วคราวเพื่อไปทำงานโปรเซสในลำดับต่อไปช่วงเวลานี้เป็นช่วงเวลาที่สำคัญมาก เนื่องจากจะต้องเก็บข้อมูลสถานะต่างๆ ของโปรเซสนั้นไว้ใน PCB ก่อน ที่จะไปทำงานในโปรเซสอื่น ดังนั้นจะต้องพักงาน
     ในโปรเซสนี้ชั่วคราวเพื่อไปทำงานในโปรเซสอื่น แต่หลังจากกลับมาทำงานต่อจากโปรเซสเดิมที่พักชั่วคราวไว้ โอเอสหรือระบบปฏิบัติการจะต้องสามารถจัดการสานงานต่อจากงานเดิมได้ ดังนั้นหน้าที่ของโอเอสจะต้องเก็บสถานะและรายละเอียดสำคัญๆ ของแต่ละโปรเซสไว้ใน PCB

Process Control Block : PCB 
4.1 พอยเตอร์ (Pointers)
     Pointer คือตัวแปรดัชนีที่ เก็บค่าตำแหน่งแอดเดรสของหน่วยความจำ ซึ่งตัวแปรพอยเตอร์นั้น จะมีเครื่องหมายดอกจันทร์ (*) นำหน้าเสมอ ดังตัวอย่างต่อไปนี้
     ตัวแปรพอยเตอร์มีประโยชน์ในการลดปริมาณหน่วยความจำที่ต้องใช้ในการเขียนโปรแกรม โดยการส่งข้อมูลในรูปพอยเตอร์ เข้าไปในฟังก์ชันที่โปรแกรมเรียกพร้อมกันหลายฟังก์ชัน แทนการส่งข้อมูลในรูปตัวแปรธรรมดา ซึ่งต้องใช้ตัวแปรหลายตัว
ตัวแปรพอยเตอร์มีลักษณะคล้ายตัวแปรตารางอาเรย์ แต่ที่แตกต่างกันคือ ตัวแปรตารางอาเรย์จะเก็บเฉพาะค่าต่างๆ ที่เป็นชนิดกันเดียวกับตัวแปรอาเรย์แต่ ตัวแปรพอยเตอร์จะเก็บเฉพาะค่าตำแหน่ง Address ตัวแปรเท่านั้น โดยไม่ได้มีการจัดเตรียมหน่วยความจำแบบไดนามิกส์ (Dynamic Memory Allocation) ไว้
     การเข้าถึงตำแหน่งแอดเดรสทำได้โดย ใช้เครื่องหมายแอมเปอร์แซนด์ (&) ซึ่งจะแสดงให้เห็นดังตัวอย่างต่อไปนี้ ในที่นี้กำหนดให้ตัวแปร Andy อยู่ในตำแหน่ง Address ที่ 1776 ดังตังอย่างในภาพที่ 6.1


Andy = 25; // Assigning Value 25 to Andy
Fred = Andy; // Assigning Value 25 (Value of Andy) to Fred
Ted = &Andy // Assigning Value 1776 (Address of Andy) to Ted via &
     อย่างไรก็ดี ถ้าต้องการให้ตัวแปร Ted สามารถ ดึงค่า จากตัวแปร Andy ได้ ให้ ใช้สัญลักษณ์ ตัวอ้างอิงโดยอ้อม (Indirect operand) ซึ่งเป็นนำเครื่องหมายดอกจันทร์ (*) นำหน้าตัวแปรที่เก็บค่าแอดเดรสตัวแปร ดังตัวอย่างในภาพที่ 6.2


Beth = *Ted // Beth มีค่าเท่ากับ ค่าที่ตัวแปร Ted ชี้ซึ่งเท่ากับ 25
     ตัวพอยเตอร์จะใช้กับตัวแปรชนิดใดก็ได้โดยที่ ตัวแปรพอยเตอร์ดังกล่าวจะได้รับการกำหนดหน่วยความจำตามลักษณะชนิดตัวแปรด้วย เช่น ตัวแปรพอยเตอร์ประเภท int จะได้รับการกำหนดหน่วยความจำไว้ที่ 4 ไบต์
     ตัวอย่างการกำหนด ค่า Pointer จะแสดงให้เห็นดังนี้ โดยผลการกำหนดค่าจะแสดงให้เห็นในภาพที่ 6.3 สังเกตให้ดีจะพบว่า ตำแหน่งแอดเดรสหน่วยความจำเลื่อนไป 4ไบท์ ระหว่างตัวแปร j กับ k และ ตัวแปร k กับ ptr

4.2 สถานะของโปรเซส (Process Status)
     สามารถแบ่งสถานะของโปรเซสได้เป็น 5 สถานะ ดังนี้

     - Hold คือ สถานะเริ่มต้นของโปรเซสทุกโปรเซส
     - Ready คือ สถานะที่เปลี่ยนแปลงจาก Hold มาเมื่อโปรเซสได้รับการจัดสรรทรัพยากรต่างๆเรียบร้อยแล้ว และพร้อมสำหรับการประมวลผล
     - Running คือ สถานะที่โปรเซสได้รับการประมวล (การเปลี่ยนแปลงสถานะจาก Ready มาเป็น Running เป็นหน้าที่ของ Process scheduler)
     - คือ สถานะที่เกิดจากการรอคอยทรัพยากรบางอย่าง เช่น เมื่อโปรเซสได้รับการประมวลผลและโปรเซสจำเป็นต้องใช้ทรัพยากรบางอย่าง  เพื่อรอรับการประมวลผลต่อไป
    - Finished คือ สถานะที่โปรเซสได้รับการประมวลผลโดยสมบูรณ์หรือสถานะที่เกิดข้อผิดพลาดขึ้นกับการประมวลผลโปรเซส

Process Control Block (PCB)
     Process Control Block หรือ PCB (บางครั้งเรียกว่า Process descriptor) คือ โครงสร้างข้อมูลของโปรเซสซึ่งประกอบด้วยข้อมูลสำคัญต่างๆ ที่บ่งบอกลักษณะเฉพาะของโปรเซสนั้น โดยตัวอย่างข้อมูลที่ถูกเก็บอยู่ใน PCB มีดังนี้
     Process identification (PID) โปรเซสแต่ละโปรเซสจะมีหมายเลข PID เฉพาะของตัวเองซึ่งจะไม่ซ้ำกับโปรเซสอื่น ดังนั้น หมายเลข PID สามารถใช้ระบุตัวตนของแต่ละโปรเซสได้ 
     Process status ใช้แสดงสถานะปัจจุบันของโปรเซสว่าขณะนี้อยู่ในสถานะใด (Hold, Ready, Running หรือ Waiting)
     Program counter เป็นค่าที่ใช้ตรวจสอบว่าคำสั่งใดจะได้รับการประมวลผลจากโปรเซสเซอร์เป็นลำดับต่อไป
     Process priority เป็นลำดับความสำคัญของโปรเซสที่ระบุว่าโปรเซสนั้นมีลำดับความสำคัญมากน้อยเพียงใด
     Pointer เป็นตัวชี้ที่ชี้ไปยังส่วนต่างๆ ที่เกี่ยวข้อง ได้แก่ ตัวชี้ที่ชี้ไปยังโปรเซสพ่อแม่ของโปรเซสนั้น, ตัวชี้ที่ชี้ไปยังโปรเซสลูกของโปรเซสนั้น, ตัวชี้ที่ชี้ไปยังข้อมูลและคำสั่งในหน่วยความจำหลัก เป็นต้น
     Execution context (เรียกอีกอย่างว่า Register contents) เมื่อโปรเซสเปลี่ยนสถานะออกจากสถานะ Running แล้ว PCB จะเก็บค่ารายละเอียดต่างๆ ของรีจิสเตอร์ที่โปรเซสนั้นใช้งานอยู่ก่อนเปลี่ยนสถานะออกจาก Running เอาไว้ด้วย โดยเก็บลงใน Execution context เพื่อที่ว่าเมื่อโปรเซสนั้นเปลี่ยนสถานะกลับสู่ Running อีกครั้ง

4.3 หมายเลขโปรเซส (Process ID)
     เป็นหมายเลขประจำตัวของโปรเซส

4.4 ตัวนับจำนวน (Program Counter)
     เป็นตัวนับที่แสดงจำนวนที่แสดงที่อยู่ของคำสั่งต่อไปที่จะถูกประมวลผล

4.5 รีจิสเตอร์ (Register)
     1. เป็นส่วนประกอบหนึ่งใน Microprocessor ทำหน้าที่ในการเก็บข้อมูลชั่วคราว
     2. หน่วยความจำขนายย่อยที่เก็บผลจากการคำนวณ โดยแยกพื้นที่ส่วนหนึ่งของหน่วยความจำภายในไมโครโปรเซสเซอร์มาใช้ นั่นคือ Register เป็นหน่วยความจำส่วนหนึ่งใน CPU

Register แบ่งได้ 4 กลุ่ม
     1. รีจิสเตอร์ทั่วไป (General Register)
     2. รีจิสเตอร์เซกเมนต์ (Segment Register)
     3. รีจิสเตอร์ Pointer และ Index (Pointer and Index Register)
     4. รีจิสเตอร์แฟลก (Flag Register)

รีจิสเตอร์ที่ควรรู้จักตัวแรก ๆ มีอะไรบ้าง
แต่ละรีจิสเตอร์มีขนาด 1 word หรือ 1 word = 2 byte
     จากตัวอย่างนี้จะแสดง Register 4 ตัวแรก คือ รีจิสเตอร์ทั่วไป (general purpose Register) กลุ่มข้อมูล อันประกอบด้วย AX, BX, CX และ DX โดยรีจิสเตอร์ที่เหลือคือ SP, BP, SI, DI, DS, ES, SS, CS และ IP ซึ่งเรียกรีจิสเตอร์เหล่านี้ว่า รีจิสเตอร์เฉพาะ(Special Register)
     รีจิสเตอร์แต่ละตัวเก็บตัวเลขได้ 4 หลัก ทำให้เก็บค่าเลขในแต่ละตัวได้สูงสุดเพียง 65536 หรือ 256 * 256 นั่นเอง และ 256 ก็คือ เลขฐาน 16 จำนวน 2 หลัก ดังนั้น 0000 จึงสามารถเก็บได้ตั้งแต่ 0 ถึง 65536 หรือ 64 KB นั่นเอง

4.7 ข้อมูลการจัดการหน่วยความจำ
     หน่วยความจำในระบบคอมพิวเตอร์  ถือเป็นทรัพยากร (Resource) หนึ่งที่สำคัญซึ่งเมื่อกล่าวถึงหน่วยความจำในระบบคอมพิวเตอร์มักจะหมายถึงหน่วยความจำหลัก  (MainMeory) หรือ หน่วยความจำแรมในไมโครคอมพิวเตอร์นั่นเอง
     ข้อบัญญัติข้อหนึ่งของ ดร.จอห์ ฟอน นอยมานน์ กล่าวว่าข้อมูลและชุดคำสั่ง (Data and Instruction) ต้องอยู่ในหน่วยความจำหลัก นั้นหมายถึงว่าโปรแกรมและข้อมูลต้องอยู่ในหน่วยความจำ ซึ่งหน่วยความจำนี้ซีพียูสารถเข้าถึง (Access) ได้โดยตรง และมีความเร็วสูงพอที่จะทำงานเคียงคู่กับความเร็วของซีพียูได้ ถึงแม้จะเทียบกับความเร็วของซีพียูไม่ได้ แต่ก็จะไม่เกิดความเหลื่อมล้ำกันมากนัก แต่อย่างไรก็ตามในปัจจุบันนี้ก็มีหน่วยความจำชนิดหนึ่งที่เรียกว่า หน่วยความจำแคช (Cache Memory) ซึ่งเป็นหน่วยความจำขนาดเล็กแต่มีความรวดเร็ว โดยนำมาใช้งานร่วมกับหน่วยความจำหลัก จึงมีผลให้การประมวลผลรวดเร็วยิ่งขึ้น

ลำดับชั้นของหน่วยความจำ (Memory Hierarchy)
     หน่วยความจำมีอยู่หลายชนิดด้วยกัน แต่ละชนิดต่างก็มีอัตราความเร็วที่แตกต่างกันรวมทั้งขนาดความจุและราคาที่แตกต่างกัน สาเหตุที่เป็นเช่นนั้นก็เพราะว่า เพื่อให้เราเลือกหน่วยความจำใช้งานได้อย่างเหมาะสมนั่นเอง
     หน่วยความจำลำดับบนสุดเป็นหน่วยความจำที่มีความเร็วสูง และลดหลั่นลงมาเรื่อย ๆ ก็จะมีความเร็วที่ต่ำลง ในขณะที่ลำดับบนสุดนั้นจะมีความจุน้อยและลดหลั่นลงมาเรื่อย ๆ ก็จะมีความจุที่มีขนาดใหญ่ขึ้น ในทำนองเดียวกัน หน่วยความจำที่มีขนาดใหญ่นั้นจะมีต้นทุนหรือราคาต่ำกว่าหน่วยความจำที่มีขนาดเล็ก 

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

การจัดการหน่วยความจำ
     การจัดการหน่วยความจำจัดเป็นหน้าที่หนึ่งของระบบปฎิบัติการ หน่วยความจำนี้เป็นองค์ประกอบหนึ่งในการพิจารณาขีดความสามารถของเครื่องคอมพิวเตอร์ด้วย  กล่าวคือถ้าหากคอมพิวเตอร์มีความจำมาก  นั้นหมายถึงขีดความสามารถในการทำงานก็จะเพิ่มขึ้นโปรแกรมที่มีสลับซับซ้อนและมีสมรรถนะสูง มักจะเป็นโปรแกรมที่ต้องการหน่วยความจำสูง แต่ก็เป็นที่ทราบแล้วว่าหน่วยความจำมีราคาแพง (เปรียบเทียบราคาฮาร์ดดิสก์ประมาณ 5,000 บาท สามารถได้ความจุถึง 10 GB ขึ้นไป แต่ถ้าเป็นแรมได้ความจุเพียงหน่วย MB เท่านั้น) ดังนั้นระบบปฎิบัติการที่ดีจะต้องมีการจัดการหน่วยความจำที่มีอยู่จำกัด ให้สามารถรองรับงานต่างๆ ที่จำเป็นต้องใช้หน่วยความจำจำนวนมากได้

การจัดสรรหน่วยความจำ
     ดังที่กล่าวไว้แล้วโปรแกรมต่างๆ ที่ใช้งานจะต้องโหลดเข้าไปในหน่วยความจำ และหน่วยความจำนี้ ซีพียูสามารถเข้าถึงได้โดยตรงการที่โปรมแกรมได้เข้าไปใช้หน่วยความจำของระบบได้เพราะการจัดสรรหน่วยความจำ (Memory allocation) ของระบบปฎิบัติการนั่นเอง

การจัดสรรหน่วยความจำ สามารถแบ่งออกได้เป็น 2 ประเภทคือ
1. การจัดสรรหน่วยความจำแบบต่อเนื่อง (continuous Memory allocation)
     คอมพิวเตอร์ในยุคก่อนๆ นั้นจะมีการครอบครองหน่วยความจำให้โปรแกรมต่างๆ ในลักษณะต่อเนื่องทั้งสิ้น กล่าวคือโปรแกรมหนึ่งๆ จะถูกโหลดลงในหน่วยความจำได้ต่อเมื่อมีหน่วยความจำขนาดใหญ่พอที่จะวางโปรแกรมนั้นลงไปทั้งหมดได้ การจัดการในลักษณะนี้หากมีหน่วยความจำที่ต่อเนื่องกันมีขนาดไม่เพียงพอสำหรับโปรแกรมทั้งโปรแกรมที่จะลงไปได้โปรแกรมนั้นก็จะทำงานไม่ได้ต้องรอจนกว่าจะมีหน่วยความจำเหลือพอที่จะวางโปรแกรมทั้งโปรแกรมนั้นลงไปได้

2. การจัดสรรหน่วยความจำแบบไมต่อเนื่อง (Non-Continuous Allocation)
     การจัดสรรหน่วยความจำลักษณะนี้มักใช้ในระบบปฏิบัติการในปัจจุบัน  กล่าวคือในการครอบครองหน่วยความจำนี้  โปรแกรมจะถูกแบ่งออกเป็นส่วนๆ  หลายๆ  ส่วนด้วยกันเมื่อจะทำการรันโปรแกรม  ก็จะโหลดโปรแกรมลงในหน่วยความจำส่วนไหนก็ได้ที่มีที่ว่างพอและที่ความสำคัญในแต่ละส่วนที่โหลดลงไปในหน่วยความจำนั้น  ไม่จำเป็นต้องเรียงต่อกันอย่างแบบแรก  ดังนั้นการจักสรรหน่วยความจำในลักษณะนี้จะสามารถใช้งานความจำได้เต็มที่กว่าแบบแรก  โดยไม่ต้องรอว่าจะต้องมีหน่วยความจำที่ติดต่อกันทั้งหมดมีขนาดใหญ่เพียงพอกับโปรแกรมทั้งหมดหรือไม่  แต่การจัดสรรหน่วยงานความจำแบบนี้  ตัวระบบปฏิบัติการก็จะต้องมีกระบวนการจัดการที่ยุ่งยากซับซ้อนเพิ่มขึ้น

4.8 ข้อมูลแอ็กเคาต์(Account Information)
     เป็นข้อมูลที่อาจประกอบด้วยจำนวน CPU, เวลาที่กำหนด, หมายเลขแอ็กเคาต์, หมายเลขโปรเซส และอื่นๆ 

4.9 ข้อมูลสถานะอินพุต/เอาต์พุต (I/O Status Information)
     หัวข้อนี้ให้คำแนะนำเบื้องต้นสำหรับข้อควรพิจารณาการโปรแกรมมิง สำหรับรูทีนย่อยการจัดการอินพุตและเอาต์พุต และการจัดการอินพุตและเอาต์พุต (I/O)
     รูทีนย่อยไลบรารี I/O สามารถส่งข้อมูลไปยัง หรือจาก อุปกรณ์ หรือไฟล์ ระบบปฏิบัติต่ออุปกรณ์เสมือนเป็นไฟล์ I/O ตัวอย่าง คุณต้องเปิดและปิดอุปกรณ์เช่นกันเหมือนกับที่กระทำกับไฟล์
     บางรูทีนย่อยใช้อินพุตและเอาต์พุตมาตรฐาน เป็นช่องสัญญาณ I/O อย่างไรก็ตาม สำหรับรูทีนย่อยส่วนใหญ่ คุณสามารถ ระบุไฟล์ที่แตกต่างออกไปสำหรับต้นทางหรือปลายทางของการถ่ายโอนข้อมูล สำหรับบางรูทีนย่อย คุณสามารถใช้ตัวชี้ไฟล์ไปยังโครงสร้างที่มี ชื่อของไฟล์ สำหรับรูทีนย่อยอื่นๆ คุณสามารถใช้ file descriptor (คือ เลขจำนวนเต็มบวกที่กำหนดให้แก่ไฟล์เมื่อถูกเปิด)

องค์ประกอบของโปรเซส
     โปรเซสที่สมบูรณ์มีองค์ประกอบดังนี้
     5. PSW (Program Status Word) เป็นตัวควบคุมลำดับการ เอ็กซิคิวต์คำสั่งของโปรเซส และเก็บข้อมูลเกี่ยวกับสถานะของโปรเซส ที่อยู่ของคำสั่งที่จะเอ็กซิคิวต์ต่อไป

     6.คุณสมบัติของโปรเซส 
     - ลำดับความสำคัญ (Piority)โปรเซสแต่ละโปรเซสจะถูกกำหนดความสำคัญในขณะที่โปรเซสถูกสร้างขึ้น ความสำคัญโปรเซสนี้อาจเปลี่ยนแปลงได้หรือไม่ขึ้นอยู่กับตัวโอเอส แต่โอเอสจะให้สิทธิพิเศษกับโปรเซสที่มีความสำคัญสูง เช่น อาจให้ระยะเวลาในการครอบครองซีพียูที่ยาวนานกว่าโปรเซสอื่นๆ ทั่วไปหรือจะโปรเซสงานที่มีลำดับความสำคัญสูงเป็นอันดับแรกก่อน เป็นต้น
     - อำนาจหน้าที่ (Authority) เป็นรายละเอียดที่บอกถึงโปรเซสนั้นๆ ว่าสามารถทำอะไรบ้าง ใช้อุปกรณ์ชิ้นไหนได้บ้าง ตัวอย่างเช่น โปรเซส เอ สามารถรับข้อมูลจากทุกๆโปรเซสในระบบได้ แต่ไม่สามารถใช้งานดิสก์ได้ เป็นต้น

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

สถานะของโปรเซส
     ในขณะที่เอ็กซิคิวต์โปรเซสอยู่นั้น โปรเซสจะมีการเปลี่ยนแปลงสถานะอยู่ตลอดเวลาสามารถแบ่งสถานะดังนี้
     - สถานะเริ่มต้น (New) เป็นสถานะที่เริ่มต้นสร้างโปรเซส
     - สถานะพร้อม (Ready) เป็นสถานะที่พร้อมจะครอบครองซีพียู แต่ยังไม่มีการรัน
     - สถานะรัน (Running) เป็นสถานะที่โปรเซสเข้าครอบครองซีพียูและมีการเอ็กซิคิวต์คำสั่งในโปรแกรมของโปรเซส

     สถานะรอ (Wait) เป็นสถานะที่โปรเซสกำลังรอเหตุการณ์บางอย่าง เช่น การรอสัญญาณ การจัดการอินพุต/เอาต์พุตดีไวซ์
     สถานะบล็อก (Block) เป็นสถานะที่โปรเซสต้องการใช้อุปกรณ์อินพุต/เอาต์พุต หรือเกิดอินเทอร์รัพต์ระหว่างที่รันโปรเซส ซึ่งจะต้องรอให้มีการจัดการอุปกรณ์อินพุต/เอาต์พุต หรือจัดการ อินเทอร์รัพต์ให้เรียบร้อยก่อนจะกลับไปสถานะรันได้ต่อไป
     สถานะสิ้นสุด (Terminate) เป็นสถานะที่หยุดนิ่งอันเกิดจากโปรเซสถูกเอ็กซิคิวต์หมดทุกคำสั่งในโปรแกรมแล้ว

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

     กรณีที่โปรเซสใดใช้เวลารันเป็นเวลานานก็จะครอบครองซีพียูเป็นเวลานาน

     ทำให้โปรเซสอื่น ๆ เสียเวลาในการรอนานเกินไป

     เพื่อแก้ปัญหานี้ OS จะกำหนดเวลาในการอยู่ในสถานะการรันของทุกโปรเซสไว้ เรียกว่า “เวลาควันตัม (Quantum time)” 

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

     ภายในระยะเวลาควันตัม ถ้าโปรเซสจบลง โปรเซสก็จะออกจากระบบ ทรัพยากรต่าง ๆ ที่โปรเซสครอบครองก็จะถูกส่งคืนให้กับระบบ

     กรณีที่โปรเซสกำลังอยู่ในสถานะรัน มีความต้องการใช้อุปกรณ์อินพุต/เอาท์พุต หรืออาจจะเกิดอินเทอร์รัพต์ (Interrupt) ขึ้น

     OS ก็จะย้ายโปรเซสจากสถานะรันไปอยู่ในสถานะบล็อก และดึงโปรเซสที่อยู่ในคิวต่อไป

     กรณีที่ระบบมีงานมากเกินไป OS ไม่สามารถตอบสนองการทำงานของโปรเซสทั้งหมดได้

     OS จะนำเอาโปรเซสบางโปรเซสไปเก็บไว้ในสถานะรอชั่วคราวก่อน รอจนจำนวนโปรเซสในระบบลดลงมาอยู่ในระดับปกติ จึงค่อยย้ายโปรเซสเหล่านั้นกลับมาทำงาน

ลำดับชั้นของโปรเซส (Process Hierarchy)
     เมื่อผู้ใช้ส่งงานให้กับระบบรัน OS จะทำการสร้างโปรเซสสำหรับงานนั้นขึ้นมา

     การทำงานของ OS ก็ถือว่าเป็นงานของระบบดังนั้นจะมีการสร้างโปรเซสขึ้นเหมือนกัน

     นอกจากนั้นโปรเซสที่ถูกสร้างขึ้นก็สามารถสร้างโปรเซสย่อยได้

     โปรเซสที่ให้กำเนิด เราเรียกว่าโปรเซสแม่ (parent process)

     โปรเซสย่อยที่เกิดขึ้น เราเรียกว่าโปรเซสลูก (child process)

     โดยทั่วไป เมื่อโปรเซสแม่จบลง โปรเซสต่าง ๆ ที่อยู่ภายใต้ตัวมันก็จะจบลงตามไปด้วย

     แต่ OS บางตัวยอมให้โปรเซสแม่จบลง โดยที่โปรเซสลูกไม่ต้องจบลงตามไปด้วย ในกรณีนี้โปรเซสลูกก็จะไม่มีโปรเซสแม่ 
 
     จากตัวอย่างในรูป โปรเซส A จะมีโปรเซสลูก 3 โปรเซสคือ B,C และ D

     ถึงแม้ว่าโปรเซส A เป็นโปรเซสแม่ของโปรเซส B,C และ D แต่โปรเซส A ไม่ได้เป็นผู้ที่สร้างโปรเซส B,C และ D 

     ผู้ที่สร้างโปรเซสทั้งหมดได้แก่ OS ซึ่ง OS จะมีโปรเซสหนึ่งทำหน้าที่สร้างและยุติโปรเซส คือ “ตัวจัดคิวระยะยาว”

     คำถาม
     - โปรเซส  F,G,H นั้นถูกสร้างโดยโปรเซส D ใช่หรือไม่
     - ใครเป็นผู้ที่สร้างโปรเซส A

โปรเซสสื่อประสาน (Cooperating Processes)
     โปรเซสที่เอ็กซิคิวต์ในระบบนั้นมี 2 แบบ
     - โปรเซสที่เป็นอิสระ ( Independent Processes) หมายถึงโปรเซสที่ไม่มีผลกระทบหรือไม่ได้รับผลกระทบจากโปรเซสอื่น
     - โปรเซสสื่อประสาน (Cooperating Processes) หมายถึงโปรเซสที่มีผลกระทบหรือได้รับผลกระทบจากโปรเซสอื่น

     เหตุผลที่ทำให้เกิดการประสานงานระหว่างโปรเซส
     - ต้องการใช้ข้อมูลร่วมกัน
     - ต้องการเพิ่มความเร็วในการคำนวณ

การติดต่อระหว่างโปรเซส (Interprocess communication)
     เมื่อโปรเซส A ต้องการติดต่อกับโปรเซส B
     - โปรเซส A และ B จะต้องจองเนื้อที่ในหน่วยความจำในส่วนที่ว่างเอาไว้
     - ทั้ง 2 โปรเซสต้องรู้ว่าหน่วยความจำร่วมนี้อยู่ที่ใด
     - เมื่อโปรเซส A ส่งข้อมูลให้โปรเซส B ข้อมูลจะถูกส่งไปไว้ในหน่วยความจำร่วม

     เมื่อโปรเซสต้องการใช้ข้อมูลของโปรเซสอื่น โปรเซสที่ถูกร้องขอจะส่งข้อมูลไปให้ การที่โปรเซสต่าง ๆ มีการติดต่อกันเช่นนี้ เราเรียกว่า การติดต่อระหว่างโปรเซส

     โดยทั่วไปการติดต่อระหว่างโปรเซสนั้นจะใช้วิธีการคือ การใช้หน่วยความจำร่วม (Shared memory)

     กลไกการรับส่งข้อมูลผ่านทางหน่วยความจำร่วมนี้ OS จะไม่ช่วยจัดการให้โปรเซสที่ต้องการติดต่อกันจะต้องจัดการเอาเอง

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

     นอกจากการใช้หน่วยความจำร่วมแล้วยังมีวิธีอื่นที่มีความสะดวกมากกว่าและเป็นมาตรฐาน คือการใช้พอร์ท (Port)

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

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

การเข้าจังหวะของโปรเซส (Process Synchronization)
     ในการใช้ทรัพยากรโดยเฉพาะอย่างยิ่งข้อมูลอาจก่อให้เกิดปัญหาที่ทำให้การทำงานไม่ถูกต้อง

ตัวอย่าง
     เริ่มต้นค่า X = 10
     โปรเซสที่ 1 มีการเพิ่มค่า X จากเดิม 10
     โปรเซสที่ 2 มีการลบค่า X ลง 10
     ผลจากการทำงานจะเป็นดังนี้  (10+10-10) = 10

 

 


 

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

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

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

     การป้องกันโปรเซสอื่น ๆ เข้ามาใช้ทรัพยากรซึ่งมีโปรเซสหนึ่งครอบครองอยู่แล้วเรียกว่า การไม่เกิดร่วม (Mutual exclusion)

     ในช่วงเวลาที่โปรเซสเข้าไปครอบครองทรัพยากรแบบการไม่เกิดร่วมนี้เรียกว่า โปรเซสนั้นอยู่ในย่านวิกฤต (Critical region หรือ Critical Section)

ปัญหาการทำงานของโปรเซส
     ปัญหาที่ 1 : การอดตาย (Starvation) หรือ การเลื่อนไหลไปอย่างไม่มีวันสิ้นสุด (Infinite postponement)
     - ถ้าโปรเซส A และ B ต้องการใช้เครื่องพิมพ์พร้อมกัน โปรเซสที่จะได้ใช้ก่อนก็คือโปรเซสที่มีลำดับความสำคัญสูงกว่า
     - เช่น ถ้า โปรเซส B มีลำดับความสำคัญสูงกว่า A โปรเซส B ก็จะได้ใช้เครื่องพิมพ์ ส่วนโปรเซส A ต้องรอ
     - ในขณะที่โปรเซส A กำลังรอ ปรากฏว่ามีโปรเซสอื่น ๆ ที่มีลำดับความสำคัญสูงกว่าโปรเซส A ต้องการใช้เครื่องพิมพ์
     - สิ่งที่เกิดขึ้นกับโปรเซส A คือ โปรเซส A จะถูกโปรเซสอื่นแซงตลอดเวลา เราเรียกเหตุการณ์ที่เกิดขึ้นนี้ว่า “การอดตายของโปรเซส (Starvation) หรือ การเลื่อนไหลไปอย่างไม่มีวันสิ้นสุด (Infinite postponement)

     ปัญหาที่ 2 : วงจรอับ หรือ การติดตาย (Deadlock)
 

อ้างอิงที่มา: https://sites.google.com/site/operatingsystemeng1/sthana-khxng-por-e
           https://sites.google.com/site/operatingsystemeng1/swn-prakxb-khxng-por-1
แบบฝึกหัดบทที่ 2
1. สถานะของโปรเซสมีอะไรบ้าง จงอธิบาย
   ชื่อและหมายเลขประจำตัว
    คำสั่งโปรแกรม 
    ข้อมูล
    บล็อกควบคุมโปรเซส
    PSW (Program Status Words)
    คุณสมบัติของโปรเซส
2. เวลา Quantum Time คืออะไร
    เวลาที่ระบบปฏิบัติการกำหนดในการอยู่ในสถานะรันของ process
3. ปัญหา DeadLock เกิดขึ้นได้อย่างไร
   เมื่อโปรเซสต้องการใช้ทรัพยากร และร้องขอทรัพยากรจากระบบ แต่ทรัพยากรที่โปรเซสต้องการใช้ไม่ว่าง เนื่องจากโปรเซสอื่นกำลังใช้งานอยู่ ทำให้โปรเซสนั้นๆ ต้องรอคอย และเป็นการรอคอยที่ไม่มีที่สิ้นสุด (โปรเซสไม่มีโอกาสได้รับการจัดสรรทรัพยากร)

4. สถานะ Block เกิดขึ้นได้อย่างไร
   - เก็บค่ารีจิสเตอร์ (Register) และสถานะของเครื่องไว้ใน PCB (Process Control Block) ของโปรเซสที่กำลังจะถูกปลดปล่อยจากซีพียู
   - คัดเลือกโปรเซสที่อยู่ในสถานะ Ready เข้ามาโปรเซสในซีพียู หรือครอบครองซีพียู
   - โหลดค่ารีจิสเตอร์และสถานะของเครื่องจาก PCB ของโปรเซสใหม่

5. การติดต่อกันระหว่าง Process เป็นหน้าที่ของโคร
   โปรเซสสื่อประสาน (Cooperating Process)

6. พอร์ท มีกี่แบบอะไรบ้าง
   3 แบบ   1) พอร์ทแบบคิว
          2) พอร์ทแบบไปป์
          3) พอร์ทแบบสแต็ก

7. จงยกตัวอย่าง พอร์ทแบบสเต็ก
   ข้อมูลชุดใดที่ถูกส่งเข้ามาก่อนจะถูกดึงออกทีหลัง  ข้อมูลที่จะถูกดึงออกจากพอร์ทคือข้อมูลชุดหลังสุดที่ถูกส่งเข้ามาในพอร์ท

8. Mutual exclusion เกิดขึ้นได้อย่างไร
   การกีดกั้นไม่ยอมให้โปรเซสใดๆ เข้าใช้พื้นที่ที่เป็น Critical region

9. ปัญหาการอดตาย เกิดขึ้นได้อย่างไร
   เมื่อโปรเซสใดโปรเซสหนึ่ง  ต้องการใช้อุปกรณ์พร้อมกัน  โปรเซสที่จะได้ใช้ก่อนก็คือโปรเซสที่มีลำดับความสำคัญสูงกว่า
10. องค์ประกอบของโปรเซส มีอะไรบ้าง 
    1) หมายเลขโปรเซส
    2) โค๊ดโปรแกรม                     
    3) ข้อมูล
    4) บล็อคควบคุมโปรเซส
    5) PSW
    6) คุณสมบัติของโปรเซส

Comments

Popular posts from this blog

บทที่ 8 โครงสร้างระบบปฏิบัติการ

บทที่ 1 ความรู้เบื้องต้นเกี่ยวกับระบบปฏิบัติการ