บทนำ
ในบทช่วยสอนนี้ เราจะเรียนรู้เกี่ยวกับ Fixed Partitioning (การแบ่งพาร์ติชันแบบคงที่) ซึ่งเป็นเทคนิคการจัดการหน่วยความจำในระบบปฏิบัติการแบบเก่าแก่
คืออะไร?
Fixed Partitioning แบ่งหน่วยความจำหลัก (Main Memory) ออกเป็นบล็อกขนาดเท่ากันล่วงหน้า ขนาดของแต่ละบล็อกถูกกำหนดไว้ล่วงหน้าและ ไม่สามารถเปลี่ยนแปลงได้ ระบบจะจัดสรรบล็อกเหล่านี้ให้กับโปรเซสที่ต้องการหน่วยความจำแบบต่อเนื่อง (Contiguous)
ข้อดีและข้อเสีย
- ข้อดี: ง่ายต่อการนำไปใช้ ไม่มี fragmentation ภายในบล็อก (Internal fragmentation อาจเกิดขึ้นถ้าโปรเซสเล็กกว่าบล็อก)
- ข้อเสีย: ไม่ยืดหยุ่น ขนาดบล็อกคงที่ อาจเกิด Internal Fragmentation มาก ถ้าโปรเซสใหญ่กว่าบล็อกก็ไม่สามารถรันได้
ตัวอย่างโปรแกรมจัดสรรหน่วยความจำ
#include <iostream>
using namespace std;
int main() {
int blockNumber = 5, processesNumber = 3;
int blockSize[5] = {4, 4, 4, 4, 4};
int processSize[3] = {1, 2, 3};
int flags[5], allocation[5];
// เริ่มต้น flags และ allocation
for(int i = 0; i < 5; i++) {
flags[i] = 0;
allocation[i] = -1;
}
// จัดสรรบล็อกให้โปรเซส (First Fit)
for(int i = 0; i < processesNumber; i++) {
for(int j = 0; j < blockNumber; j++) {
if(flags[j] == 0 && blockSize[j] >= processSize[i]) {
allocation[j] = i;
flags[j] = 1;
break;
}
}
}
// แสดงผล
for (int i = 0; i < blockNumber; i++) {
if (flags[i] == 1) {
cout << "Process " << processSize[allocation[i]] << " is allocated" << endl;
}
}
return 0;
}
ผลลัพธ์
Process 1 is allocated Process 2 is allocated Process 3 is allocated
สรุป
Fixed Partitioning เป็นเทคนิคพื้นฐานในการจัดการหน่วยความจำ แม้จะไม่ค่อยใช้ในระบบปฏิบัติการสมัยใหม่แล้ว แต่เข้าใจง่ายและเป็นพื้นฐานของ Dynamic Partitioning หากมีคำถาม สามารถถามได้ในส่วนความคิดเห็นครับ