প্রসেস সংখ্যা এবং মেমরি ব্লকের m আকার দেওয়া হয়েছে এবং কাজটি হল প্রথম ফিট মেমরি ম্যানেজমেন্ট অ্যালগরিদম ব্যবহার করে সংশ্লিষ্ট প্রক্রিয়ার জন্য সেরা ফিট মেমরি ব্লক খুঁজে বের করা।
প্রথম ফিট মেমরি ম্যানেজমেন্ট অ্যালগরিদম কি?
একাধিক মেমরি পার্টিশনিং অ্যালগরিদম উপলব্ধ রয়েছে যা অপারেটিং সিস্টেম দ্বারা মেমরি ব্লকগুলিকে প্রসেসগুলিতে বরাদ্দ করার জন্য ব্যবহৃত হয় −
- প্রথম ফিট অ্যালগরিদম
- পরবর্তী ফিট অ্যালগরিদম
- সেরা ফিট অ্যালগরিদম
- সবচেয়ে খারাপ ফিট অ্যালগরিদম
- দ্রুত ফিট অ্যালগরিদম
ফার্স্ট ফিট অ্যালগরিদম হল সকলের মধ্যে প্রসেসগুলিতে মেমরি ব্লক বরাদ্দ করার সবচেয়ে সহজ কৌশল। এই অ্যালগরিদমে, পয়েন্টার মেমরির সমস্ত ফ্রি ব্লকের খোঁজ রাখে এবং আসন্ন প্রক্রিয়ায় একটি মেমরি ব্লক বরাদ্দ করার অনুরোধ গ্রহণ করে। সেই পয়েন্টারটির পরে প্রক্রিয়াটির জন্য সবচেয়ে বড় প্রথম বিনামূল্যের ব্লকটি অনুসন্ধান করা শুরু করুন এবং সেই মেমরি ব্লকটি আসন্ন প্রক্রিয়ার জন্য বরাদ্দ করুন। এতে, দুটি পার্টিশন তৈরি করা হয় একটি গর্তের জন্য এবং একটি প্রক্রিয়াগুলি সংরক্ষণ করবে।
সুবিধা ফার্স্ট ফিট অ্যালগরিদম ব্যবহার করা হল আসন্ন প্রসেসগুলির জন্য দ্রুততম মেমরি বরাদ্দ কারণ এটি নতুন প্রসেসগুলিতে সবচেয়ে বড় প্রথম ফিট অ্যালগরিদম বরাদ্দ করে৷
অসুবিধা ফার্স্ট ফিট অ্যালগরিদম ব্যবহার করা হল মেমরির অপচয় যা অন্যান্য প্রক্রিয়ার জন্য মেমরির ঘাটতির দিকে পরিচালিত করবে।
উদাহরণ
Input-: block_size[] = {300, 50, 200, 350, 70} process_size[] = {200, 47, 212, 426, 10} Output-: Process No. Process Size Block no. 1 200 1 2 47 1 3 212 4 4 426 Not Allocated 5 10 1
নিম্নলিখিত প্রোগ্রামে ব্যবহৃত পদ্ধতি হল −
- একটি অ্যারেতে ব্লক এবং প্রক্রিয়াগুলি ইনপুট করুন
- সমস্ত মেমরি ব্লক ফ্রিতে সেট করুন
- (একটি প্রক্রিয়ার আকার) <=(একটি মেমরি ব্লকের আকার) কিনা পরীক্ষা করুন তারপর একটি মেমরি ব্লকে প্রক্রিয়াটি বরাদ্দ করুন
- অন্যথায় অন্যান্য ব্লকগুলি অতিক্রম করতে থাকুন যতক্ষণ না (একটি প্রক্রিয়ার আকার) <=(একটি মেমরি ব্লকের আকার) সত্য হবে না৷
অ্যালগরিদম
Start Step 1-> declare function to calculate the best fit memory block void First_Fit(int block_size[], int total_blocks, int process_size[], int total_process) Declare int allocation[total_process] Call function memset(allocation, -1, sizeof(allocation)) Loop For i = 0 and i < total_process and i++ Loop for j = 0 and j < total_blocks and j++ IF block_size[j] >= process_size[i] Set allocation[i] = j Set block_size[j] -= process_size[i] End End End Loop For i = 0 and i < total_process and i++ IF allocation[i] != -1 Set allocation[i] + 1 End Else Print Not Allocated End End Step 2-> In main() Declare an array for blocks as int block_size[] = {300, 50, 200, 350, 70} Declare an array for processes int process_size[] = {200, 47, 212, 426, 10} Calculate total blocks int total_blocks = sizeof(block_size) / sizeof(block_size[0] Calculate total processes int total_process = sizeof(process_size) / sizeof(process_size[0]) Call First_Fit(block_size, total_blocks, process_size, total_process) Stopকল করুন
উদাহরণ
#include<bits/stdc++.h> using namespace std; // Function to allocate memory to // blocks as per First fit algorithm void First_Fit(int block_size[], int total_blocks, int process_size[], int total_process) { int allocation[total_process]; memset(allocation, -1, sizeof(allocation)); //this for loop wll pick eact process and allocate a first fit block to it 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() { //create array to store block sizes int block_size[] = {300, 50, 200, 350, 70}; //create array to store process sizes int process_size[] = {200, 47, 212, 426, 10}; //variable total_blocks that contain total number of blocks int total_blocks = sizeof(block_size) / sizeof(block_size[0]); //variable total_process that contain total number of blocks int total_process = sizeof(process_size) / sizeof(process_size[0]); //calling the function First_fit 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