> For the complete documentation index, see [llms.txt](https://docs.aic-eec.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.aic-eec.com/computer-operation-systems/linux-os-dev.-engineer/process-management/process-state.md).

# Process State

เมื่อมีผู้ใช้งานสั่งให้โปรเซสเริ่มทำงาน ระบบปฏิบัติการจะทำการสร้างโปรเซสแล้วส่งเข้าไปสู่ Ready Queue เพื่อรอเข้าประมวลผลภายใน CPU และเมื่อหมดเวลาในการประมวลผล (สำหรับ Preemptive Scheduling) หรือเมื่อโปรเซสต้องรอการทำงานของ I/O ระบบจะเลือกโปรเซสจากสถานะ Ready Queue ตัวถัดไปเข้ามาประมวลผลใน CPU ทั้งนี้การเลือกจะดูที่เลข Priority และลำดับความสำคัญอื่นๆประกอบกัน จะวนเวียนเช่นนี้ไปเรื่อยๆจนกระทั่งโปรเซสทำงานเสร็จและออกจากระบบไป

<figure><img src="https://1856353139-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MClo3nC-1US0rbK8Qau%2Fuploads%2FsJNpmnBovZgotbuUl6pE%2Fprocess%20states.png?alt=media&amp;token=3e2849b2-c1ff-4cc1-8b10-0befba5ed008" alt=""><figcaption><p><em>สถานะการทำงานของโปรเซส</em></p></figcaption></figure>

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

<figure><img src="https://1856353139-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MClo3nC-1US0rbK8Qau%2Fuploads%2FW1jGGKhUYANhM6t6RdXX%2FProcess_P0_P1.png?alt=media&amp;token=5c1d73a5-3ece-48e8-9b5b-6ae29ae5fda3" alt=""><figcaption><p><em>การสลับการทำงานระหว่างโปรเซส</em></p></figcaption></figure>
