# Process Basic

## พื้นฐานของโปรเซส (Process Basic)&#x20;

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

<figure><img src="https://1856353139-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MClo3nC-1US0rbK8Qau%2Fuploads%2FaUgNDm4vSDRSbhpM9z6s%2Fprogram_counter.png?alt=media&#x26;token=259e06f5-c86b-48ce-992c-bf1213a5a7cf" alt=""><figcaption><p><em>การทำงานตามลำดับและแบบขนานของโปรเซส</em></p></figcaption></figure>

ระบบปฏิบัติการสามารถที่จะเรียกใช้งานโปรเซสได้หลายรูปแบบอย่างเช่น การให้โปรเซสต่างๆทำงานเป็นแบบลำดับ (Batch) ซึ่งต้องรอให้แต่ละโปรเซสทำงานจนเสร็จสมบูรณ์ก่อนจะไปตัวถัดไปหรือการทำงานแบบพร้อมกัน (multitasking) โดยระบบปฏิบัติการจะสลับให้แต่ละโปรเซสได้มีโอกาสทำงานกันไปจนทยอยกันเสร็จมบูรณ์ แต่อย่างไรก็ตามจะมีเพียงโปรเซสเดียวเท่านั้นที่จะมีสิทธิ์เข้าใช้งาน CPU ณ ช่วงเวลานั้นๆ ดังนั้นระบบปฏิบัติการจะต้องทำการจัดสรรเวลาให้กับโปรเซสต่างๆให้สามารถมีโอกาสเข้าใช้งาน CPU ได้อย่างเท่าเทียมกัน (Time-shared system) หรือตามระดับสิทธิ์ของแต่ละโปรเซส (Priority based)

ระบบโปรเซสในระบบปฏิบัติการ Unix จะมีการจัดลำดับการทำงานของโปรเซส (Scheduling) เพื่อเปลี่ยนงานระหว่างโปรเซสต่างๆในลักษณะ Multilevel Queue Scheduling กล่าวคือแต่ละโปรเซสจะมีเลขลำดับความสำคัญ (priority) ของตัวเอง โดยเลข priority ที่น้อยแปลว่าโปรเซสนั้นมีความสำคัญสูงกว่า และโปรเซสที่มีความสำคัญสูงดังกล่าว ก็จะมีสิทธิได้ใช้เวลาของ CPU (CPU time) มากกว่า&#x20;

### Process Control Block (PCB)

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

<figure><img src="https://1856353139-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MClo3nC-1US0rbK8Qau%2Fuploads%2FkIP42yIKpux5RDGm0uZz%2FPCB.png?alt=media&#x26;token=5ba0af72-837e-4ea5-9ea4-25bae19fdaff" alt=""><figcaption><p><em>โครงสร้างภายในโปรเซส (PCB)</em></p></figcaption></figure>

1. พอยเตอร์ (Pointer) ใช้ชี้ตำแหน่งของโปรเซสที่อยู่ในหน่วยความจำและตำแหน่งของทรัพยากรที่โปรเซสครอบครองอยู่
2. สถานะของโปรเซส (Process state) แสดงสถานะของโปรเซสที่เป็นอยู่ในปัจจุบัน
3. หมายเลขโปรเซส (Program id) เป็นหมายเลขประจำตัวของโปรเซส
4. ตัวนับจำนวน (Program counter)&#x20;
5. รีจิสเตอร์ (Register) ทำหน้าที่เก็บข้อมูลสถานะระบบเมื่อมีอินเทอร์รัพเกิดขึ้นเพื่อทำให้โปรแกรมสามารถทำงานต่อไปได้เมื่อกลับมาทำงานอีกครั้ง รีจิสเตอร์จะมีค่าและประเภทที่เปลี่ยนแปลงได้ขึ้นอยู่กับสถาปัตยกรรมของคอมพิวเตอร์ ประเภทของรีจิสเตอร์คือ Accumulator, Index, Stack Pointer และรีจิสเตอร์ทั่วไป
6. ข้อมูลการจัดเวลาของซีพียู (CPU scheduling information) เป็นข้อมูลที่ประกอบด้วยลำดับความสำคัญของโปรเซส ที่ถูกกำหนดโดยระบบปฏิบัติการ เมื่อโปรเซสถูกสร้างขึ้นมา สามารถเปลี่ยนค่าไปได้ ซึ่งโปรเซสใดที่มีความสำคัญมากระบบปฏิบัติการจะให้สิทธิมากกว่าโปรเซสอื่น
7. ข้อมูลการจัดการหน่วยความจำ (Memory management information) เป็นข้อมูลเกี่ยวกับหน่วยความจำ ที่ระบบปฏิบัติการกำหนดไว้ เช่นขนาดหน่วยความจำ, ค่าของรีจิสเตอร์, Page table และ Segment table เป็นต้น
8. ข้อมูลแอ็กเคาต์ (Account information) เป็นข้อมูลที่อาจประกอบด้วยจำนวน CPU, เวลาที่กำหนด, หมายเลขแอ็กเคาต์, หมายเลขโปรเซส และอื่นๆ
9. ข้อมูลสถานะอินพุต/เอาต์พุต (I/O status information) เป็นข้อมูลแสดงรายการของอุปกรณ์อินพุต/เอาต์พุตที่โปรเซสนี้ใช้
