ব্লক আকার এবং প্রক্রিয়া আকার ধারণকারী দুটি অ্যারে দেওয়া; কাজ হল মেমরি ম্যানেজমেন্টে বেস্ট ফিট অ্যালগরিদম অনুযায়ী ফলাফল প্রিন্ট করা।
সেরা ফিট অ্যালগরিদম কি?
সেরা ফিট একটি মেমরি ব্যবস্থাপনা অ্যালগরিদম; এটি ক্ষুদ্রতম বিনামূল্যে পার্টিশন বরাদ্দের সাথে ডিল করে যা অনুরোধ প্রক্রিয়ার প্রয়োজনীয়তা পূরণ করে। এই অ্যালগরিদমে আমরা পুরো মেমরি ব্লকটি সন্ধান করি এবং প্রক্রিয়াটির জন্য সবচেয়ে ছোট এবং সবচেয়ে উপযুক্ত ব্লকটি পরীক্ষা করি এবং তারপর পর্যাপ্ত প্রক্রিয়াটি পূরণ করতে ব্যবহার করা যেতে পারে এমন অবিলম্বে কাছাকাছি ব্লকটি সন্ধান করি৷
সুতরাং আমরা ব্লকের আকার এবং প্রক্রিয়ার আকার নেব এবং প্রক্রিয়াটির আউটপুট ফেরত দেব এবং কোন ব্লকটি একটি প্রক্রিয়ায় বরাদ্দ করা হবে।
উদাহরণ
Input: bsize[] = {100, 500, 200, 300, 400} psize[] = {112, 518, 110, 526} Output: Process No. Process Size Block no. 1 112 3 2 518 Not Allocated 3 110 4 4 526 Not Allocated
উপরের সমস্যা সমাধানের জন্য পদ্ধতি ব্যবহার করা হবে -
- প্রসেস অ্যাড ব্লক সাইজের ইনপুট নিন।
- প্রাথমিকভাবে সমস্ত মেমরি ব্লক বিনামূল্যে হিসাবে সেট করুন।
- প্রতিটি প্রক্রিয়া নিন এবং ন্যূনতম ব্লকের আকার খুঁজুন যা একটি ব্লককে বরাদ্দ করা যেতে পারে মানে পুরো ব্লকের ন্যূনতম যা একটি প্রক্রিয়ার আকারের চেয়ে বড়৷
- যদি পাওয়া যায় তাহলে বর্তমান প্রক্রিয়ায় এটি বরাদ্দ করুন অন্যথা সেই প্রক্রিয়াটি ছেড়ে দিন এবং পরবর্তী প্রক্রিয়াটি পরীক্ষা করুন।
অ্যালগরিদম
Start Step 1-> In function void bestfit(int bsize[], int m, int psize[], int n) Declare int alloc[n] Call function memset(alloc, -1, sizeof(alloc)) Loop For i=0 and i<n and i++ Declare and Initialize bestIdx = -1 Loop For j=0 and j<m and j++ If bsize[j] >= psize[i] then, If bestIdx == -1 then, Set bestIdx = j Else If bsize[bestIdx] > bsize[j] then, Set bestIdx = j If bestIdx != -1 then, Set alloc[i] = bestIdx Set bsize[bestIdx] -= psize[i] Loop For i = 0 and i < n and i++ Print i+1, psize[i] If alloc[i] != -1 Print alloc[i] + 1 Else Print "Not Allocated" Print newline Step 2->In function int main() Declare and initialize bsize[] = {100, 500, 200, 300, 400} Declare and initialize psize[] = {112, 518, 110, 526} Set m = sizeof(bsize)/sizeof(bsize[0]) Set n = sizeof(psize)/sizeof(psize[0]) Call function bestfit(bsize, m, psize, n) Stop
উদাহরণ
#include <iostream> #include <memory> using namespace std; // To allocate the memory to blocks as per Best fit // algorithm void bestfit(int bsize[], int m, int psize[], int n) { // To store block id of the block allocated to a // process int alloc[n]; // Initially no block is assigned to any process memset(alloc, -1, sizeof(alloc)); // pick each process and find suitable blocks // according to its size ad assign to it for (int i=0; i<n; i++) { // Find the best fit block for current process int bestIdx = -1; for (int j=0; j<m; j++) { if (bsize[j] >= psize[i]) { if (bestIdx == -1) bestIdx = j; else if (bsize[bestIdx] > bsize[j]) bestIdx = j; } } // If we could find a block for current process if (bestIdx != -1) { // allocate block j to p[i] process alloc[i] = bestIdx; // Reduce available memory in this block. bsize[bestIdx] -= psize[i]; } } cout << "\nProcess No.\tProcess Size\tBlock no.\n"; for (int i = 0; i < n; i++) { cout << " " << i+1 << "\t\t\t\t" << psize[i] << "\t\t\t\t"; if (alloc[i] != -1) cout << alloc[i] + 1; else cout << "Not Allocated"; cout << endl; } } // Driver code int main() { int bsize[] = {100, 500, 200, 300, 400}; int psize[] = {112, 518, 110, 526}; int m = sizeof(bsize)/sizeof(bsize[0]); int n = sizeof(psize)/sizeof(psize[0]); bestfit(bsize, m, psize, n); return 0 ; }
আউটপুট
Process No. Process Size Block no. 1 112 3 2 518 Not Allocated 3 110 4 4 526 Not Allocated