n সংখ্যক প্রসেস এবং m সাইজের মেমরি ব্লক দেওয়া আছে; কাজ হলো ফার্স্ট ফিট মেমরি ম্যানেজমেন্ট অ্যালগরিদম ব্যবহার করে প্রতিটি প্রসেসের জন্য বেস্ট ফিট মেমরি ব্লক বের করা।
ফার্স্ট ফিট মেমরি ম্যানেজমেন্ট অ্যালগরিদম কী?
অপারেটিং সিস্টেম প্রসেসের জন্য মেমরি ব্লক alok করার জন্য একাধিক মেমরি পার্টিশনিং অ্যালগরিদম ব্যবহার করে:
- ফার্স্ট ফিট অ্যালগরিদম
- নেক্সট ফিট অ্যালগরিদম
- বেস্ট ফিট অ্যালগরিদম
- ওয়ার্স্ট ফিট অ্যালগরিদম
- কুইক ফিট অ্যালগরিদম
ফার্স্ট ফিট অ্যালগরিদম সবচেয়ে সিম্পল টেকনিক। এতে পয়েন্টার মেমরির সব ফ্রি ব্লক ট্র্যাক করে এবং প্রসেসের রিকোয়েস্ট অনুযায়ী মেমরি ব্লক alok করে। পয়েন্টার প্রসেসের জন্য সবচেয়ে বড় প্রথম ফ্রি ব্লক খুঁজে বের করে alok করে। এতে দুটি পার্টিশন তৈরি হয়: একটি হোল জন্য এবং অন্যটি প্রসেস সংরক্ষণের জন্য।
সুবিধা - প্রসেসের জন্য সবচেয়ে দ্রুত মেমরি alok করে।
অসুবিধা - মেমরি বর্জ্য হয় যা অন্য প্রসেসের জন্য মেমরি অভাব সৃষ্টি করে।
উদাহরণ
ইনপুট: block_size[] = {300, 50, 200, 350, 70} process_size[] = {200, 47, 212, 426, 10}
আউটপুট:
Process No. Process Size Block no.
1 200 1
2 47 1
3 212 4
4 426 Not Allocated
5 10 1
প্রোগ্রামে ব্যবহৃত পদ্ধতি -
- ব্লক এবং প্রসেস অ্যারেতে ইনপুট নেওয়া।
- সব মেমরি ব্লক ফ্রি হিসেবে সেট করা।
- যদি (প্রসেস সাইজ) <= (মেমরি ব্লক সাইজ) হয়, তবে প্রসেস alok করুন।
- অন্যথায় অন্যান্য ব্লক ট্র্যাভার্স করুন যতক্ষণ শর্ত পূরণ হয় না।
অ্যালগরিদম
শুরু
ধাপ ১ -> বেস্ট ফিট মেমরি ব্লক গণনার ফাংশন ঘোষণা
void First_Fit(int block_size[], int total_blocks, int process_size[], int total_process)
int allocation[total_process] ঘোষণা
memset(allocation, -1, sizeof(allocation)) কল
লুপ i = 0 থেকে i < total_process এবং i++
লুপ j = 0 থেকে j < total_blocks এবং j++
যদি block_size[j] >= process_size[i]
allocation[i] = j সেট
block_size[j] -= process_size[i] সেট
শেষ
শেষ
শেষ
লুপ i = 0 থেকে i < total_process এবং i++
যদি allocation[i] != -1
allocation[i] + 1 সেট
শেষ
অন্যথায়
"Not Allocated" প্রিন্ট
শেষ
শেষ
ধাপ ২ -> main()-এ
block_size[] = {300, 50, 200, 350, 70} ঘোষণা
process_size[] = {200, 47, 212, 426, 10} ঘোষণা
total_blocks = sizeof(block_size) / sizeof(block_size[0]) হিসাব
total_process = sizeof(process_size) / sizeof(process_size[0]) হিসাব
First_Fit(block_size, total_blocks, process_size, total_process) কল
শেষ
উদাহরণ
#include<bits/stdc++.h>
using namespace std;
// ফার্স্ট ফিট অ্যালগরিদম অনুযায়ী মেমরি alok করার ফাংশন
void First_Fit(int block_size[], int total_blocks, int process_size[], int total_process) {
int allocation[total_process];
memset(allocation, -1, sizeof(allocation));
// এই লুপ প্রতিটি প্রসেস পিক করে ফার্স্ট ফিট ব্লক alok করবে
for (int i = 0; i < total_process; i++) {
for (int j = 0; j < total_blocks; j++) {
if (block_size[j] >= process_size[i]) {
allocation[i] = j;
block_size[j] -= process_size[i];
break;
}
}
}
cout << "\nProcess No.\tProcess Size\tBlock no.\n";
for (int i = 0; i < total_process; i++) {
cout << " " << i+1 << "\t\t" << process_size[i] << "\t\t";
if (allocation[i] != -1)
cout << allocation[i] + 1;
else
cout << "Not Allocated";
cout << endl;
}
}
int main() {
// ব্লক সাইজ সংরক্ষণের অ্যারে
int block_size[] = {300, 50, 200, 350, 70};
// প্রসেস সাইজ সংরক্ষণের অ্যারে
int process_size[] = {200, 47, 212, 426, 10};
// মোট ব্লক সংখ্যা
int total_blocks = sizeof(block_size) / sizeof(block_size[0]);
// মোট প্রসেস সংখ্যা
int total_process = sizeof(process_size) / sizeof(process_size[0]);
// ফার্স্ট ফিট ফাংশন কল
First_Fit(block_size, total_blocks, process_size, total_process);
return 0;
}
আউটপুট
Process No. Process Size Block no. 1 200 1 2 47 1 3 212 4 4 426 Not Allocated 5 10 1