কম্পিউটার টিউটোরিয়াল

সি++ প্রোগ্রাম: মেমরি ম্যানেজমেন্টে বেস্ট ফিট অ্যালগরিদম


ব্লক সাইজ এবং প্রসেস সাইজ ধারণকারী দুটি অ্যারে দেওয়া আছে; কাজ হল বেস্ট ফিট অ্যালগরিদম অনুযায়ী মেমরি ম্যানেজমেন্টের ফলাফল প্রিন্ট করা।

বেস্ট ফিট অ্যালগরিদম কী?

বেস্ট ফিট একটি মেমরি ম্যানেজমেন্ট অ্যালগরিদম যা অনুরোধকারী প্রসেসের প্রয়োজনীয়তা পূরণ করার জন্য সবচেয়ে ছোট ফ্রি পার্টিশন বরাদ্দ করে। এই অ্যালগরিদমে আমরা পুরো মেমরি ব্লকে সার্চ করে প্রসেসের জন্য সবচেয়ে ছোট এবং উপযুক্ত ব্লক খুঁজে বের করি, তারপর সেই ব্লকটি প্রসেসের জন্য বরাদ্দ করি।

তাই আমরা ব্লক সাইজ এবং প্রসেস সাইজ लेकर প্রসেস এবং কোন ব্লক কোন প্রসেসের জন্য বরাদ্দ হবে সেটির আউটপুট রিটার্ন করব।

সি++ প্রোগ্রাম: মেমরি ম্যানেজমেন্টে বেস্ট ফিট অ্যালগরিদম

উদাহরণ

ইনপুট: bsize[] = {100, 500, 200, 300, 400}   psize[] = {112, 518, 110, 526}
আউটপুট: 
প্রসেস নং  প্রসেস সাইজ  ব্লক নং
1           112           3
2           518           Not Allocated
3           110           4
4           526           Not Allocated

সমস্যা সমাধানের পদ্ধতি

  • প্রসেস এবং ব্লক সাইজ ইনপুট নিন।
  • শুরুতে সব মেমরি ব্লকে ফ্রি হিসাবে সেট করুন।
  • প্রতিটি প্রসেস নিয়ে সেটির চেয়ে বড় সর্বনিম্ন ব্লক সাইজ খুঁজুন।
  • যদি পাওয়া যায় তবে বরাদ্দ করুন, নাহলে সেই প্রসেসটি বাদ দিয়ে পরবর্তী প্রসেস চেক করুন।

অ্যালগরিদম

Start
Step 1→ ফাংশন void bestfit(int bsize[], int m, int psize[], int n) এ
    int alloc[n] ডিক্লেয়ার করুন
    memset(alloc, -1, sizeof(alloc)) কল করুন
    For i=0; i= psize[i] হয়
                If bestIdx == -1 হয়
                    bestIdx = j সেট করুন
                Else If bsize[bestIdx] > bsize[j] হয়
                    bestIdx = j সেট করুন
            If bestIdx != -1 হয়
                alloc[i] = bestIdx সেট করুন
                bsize[bestIdx] -= psize[i] সেট করুন
    For i = 0; i < n; i++ লুপ
        i+1, psize[i] প্রিন্ট করুন
        If alloc[i] != -1 হয়
            alloc[i] + 1 প্রিন্ট করুন
        Else
            "Not Allocated" প্রিন্ট করুন
        নিউলাইন প্রিন্ট করুন
Step 2→ ফাংশন int main() এ
    bsize[] = {100, 500, 200, 300, 400} ডিক্লেয়ার ও ইনিশিয়ালাইজ করুন
    psize[] = {112, 518, 110, 526} ডিক্লেয়ার ও ইনিশিয়ালাইজ করুন
    m = sizeof(bsize)/sizeof(bsize[0]) সেট করুন
    n = sizeof(psize)/sizeof(psize[0]) সেট করুন
    bestfit(bsize, m, psize, n) কল করুন
Stop

সি++ কোড উদাহরণ

#include <iostream>
#include <cstring>
using namespace std;

void bestfit(int bsize[], int m, int psize[], int n) {
    int alloc[n];
    memset(alloc, -1, sizeof(alloc));

    for (int i = 0; i < n; i++) {
        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 (bestIdx != -1) {
            alloc[i] = bestIdx;
            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;
    }
}

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

  1. প্রায়োরিটি শিডিউলিং (Priority Scheduling) C++ প্রোগ্রাম

  2. সি++ প্রোগ্রাম: অপ্টিমাল পেজ রিপ্লেসমেন্ট অ্যালগরিদম

  3. C++-এ পিরামিডের ভলিউম বের করার প্রোগ্রাম

  4. C++-এ কুইকসর্ট (QuickSort) প্রোগ্রাম