สถานะ ใด ที่ โปร เซ ส กำลังถูกประมวลผล โดย ชุด คำสั่ง

โปรเซส

โปรเซส หมายถึง โปรแกรมที่กำลังถูกเอ็กซิคิวซ์ เราอาจเปรียบเทียบโปรแกรมเหมือนกับรถยนต์ที่จอดนิ่งอยู่ ที่พร้อมที่จะวิ่งไปในระบบหลายโปรแกรม (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)

1. สถานะของโปรเซสมีอะไรบ้าง จงอธิบาย

2. เวลา Quantum Time คืออะไร

3. ปัญหา DeadLock เกิดขึ้นได้อย่างไร

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

4. สถานะ Block เกิดขึ้นได้อย่างไร

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

- คัดเลือกโปรเซสที่อยู่ในสถานะ Ready เข้ามาโปรเซสในซีพียู หรือครอบครองซีพียู
   - โหลดค่ารีจิสเตอร์และสถานะของเครื่องจาก PCB ของโปรเซสใหม่

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

6. พอร์ท มีกี่แบบอะไรบ้าง

7. จงยกตัวอย่าง พอร์ทแบบสเต็ก

ข้อมูลชุดใดที่ถูกส่งเข้ามาก่อนจะถูกดึงออกทีหลัง  ข้อมูลที่จะถูกดึงออกจากพอร์ทคือข้อมูลชุดหลังสุดที่ถูกส่งเข้ามาในพอร์ท

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

9. ปัญหาการอดตาย เกิดขึ้นได้อย่างไร

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

10. องค์ประกอบของโปรเซส มีอะไรบ้าง