Complex Computing Problem
Complex Computing Problem
68062
6/7/24
1. Resource Management
Allocation Tables/Maps: Use a data structure (e.g., hash map or array) to track
the allocation of physical memory to each VM. This structure will map each VM
to its allocated memory blocks.
Code to implement:
#include <iostream>
#include <vector>
struct VM {
int vm_id;
size_t allocated_memory;
};
class MemoryManager {
public:
MemoryManager(size_t total_memory) : total_memory(total_memory),
used_memory(0) {}
private:
std::vector<VM> vms;
size_t total_memory;
size_t used_memory;
};
int main() {
MemoryManager manager(TOTAL_PHYSICAL_MEMORY);
manager.allocate_memory(1, 200);
manager.allocate_memory(2, 300);
manager.print_memory_status();
manager.deallocate_memory(1);
manager.print_memory_status();
return 0;
}
Picture of the output:
2. Demand Paging
Page Tables: Each VM will have a page table to map virtual pages to physical
frames. The page table will store information about the location of each page (in
memory or on disk).
Code to implement:
#include <iostream>
#include <vector>
#include <cstdlib>
#define PAGE_SIZE 4
#define NUM_PAGES 256
struct PageTableEntry {
int page_number;
bool in_memory;
int frame_number;
};
struct VM {
int vm_id;
std::vector<PageTableEntry> page_table;
class MemoryManager {
public:
MemoryManager() {}
private:
std::vector<VM> vms;
};
int main() {
MemoryManager manager;
VM* vm = manager.create_vm(1);
manager.access_page(vm, 10);
manager.access_page(vm, 10);
manager.unload_page(vm, 10);
manager.access_page(vm, 10);
return 0;
}
Code to Implement
#include <iostream>
#include <vector>
#include <cstdlib>
struct PageTableEntry {
int page_number;
bool in_memory;
int frame_number;
};
struct VM {
int vm_id;
std::vector<PageTableEntry> page_table;
private:
std::vector<VM> vms;
};
int main() {
MemoryManager manager;
VM* vm = manager.create_vm(1);
manager.access_page(vm, 10);
manager.access_page(vm, 20);
manager.access_page(vm, 10);
return 0;
}
Replacement Algorithms: Implement LRU (Least Recently Used), FIFO (First In,
First Out), and potentially a custom hybrid algorithm.
Selection Criteria: Use access patterns and page usage history to decide which
pages to evict.
Code to implement:
#include <iostream>
#include <vector>
#include <climits>
#include <cstdlib>
#define PAGE_SIZE 4
#define PHYSICAL_FRAMES 64
struct PageTableEntry {
int page_number;
bool in_memory;
int frame_number;
int last_access_time;
};
class VM {
public:
int vm_id;
std::vector<PageTableEntry> page_table;
VM(int id) : vm_id(id), page_table(NUM_PAGES) {
page_table[i].page_number = i;
};
class MemoryManager {
public:
std::vector<VM> vms;
int current_time;
MemoryManager() : current_time(0) {}
vms.emplace_back(vm_id);
return &vms.back();
min_access_time = entry.last_access_time;
lru_page = entry.page_number;
}
return lru_page;
std::cout << "Handling page fault for page " << page_number << "\n";
if (!vm->page_table[i].in_memory) {
frame_number = i;
break;
if (frame_number == -1) {
frame_number = vm->page_table[lru_page].frame_number;
vm->page_table[lru_page].in_memory = false;
vm->page_table[lru_page].frame_number = -1;
vm->page_table[page_number].frame_number = frame_number;
vm->page_table[page_number].last_access_time = current_time;
std::cout << "Page " << page_number << " loaded into frame " << frame_number
<< "\n";
}
current_time++;
if (vm->page_table[page_number].in_memory) {
std::cout << "Page " << page_number << " is in memory at frame " << vm-
>page_table[page_number].frame_number << "\n";
vm->page_table[page_number].last_access_time = current_time;
} else {
std::cout << "Page " << page_number << " is not in memory, triggering page
fault...\n";
handle_page_fault(vm, page_number);
std::cout << "Page " << page_number << " is now in memory at frame " << vm-
>page_table[page_number].frame_number << "\n";
};
int main() {
MemoryManager manager;
VM* vm = manager.create_vm(1);
manager.access_page(vm, 10);
manager.access_page(vm, 20);
manager.access_page(vm, 10);
return 0;
}
Output of the Code:
5. Performance Monitoring
Metrics Collection: Track metrics such as page fault rate, memory utilization,
and response time.
Code to Implement:
#include <iostream>
#include <vector>
#include <climits>
#define PAGE_SIZE 4
#define NUM_PAGES 256
#define PHYSICAL_FRAMES 64
struct PageTableEntry {
int page_number;
bool in_memory;
int frame_number;
int last_access_time;
class VM {
public:
int vm_id;
std::vector<PageTableEntry> page_table;
class MemoryManager {
public:
std::vector<VM> vms;
int current_time;
int page_faults;
return 0;
}