A C-Program that simulates Virtual Memory Management based on a text file input of logical addresses which represents sequential instructions with address range 0 thru 216 - 1. See the Project Report for more details regarding usage.
This project is the design and implementation of a standalone virtual memory manager, where there is a software-managed TLB. The program is responsible to (1) load a file containing a list of logical addresses, (2) translate logical addresses into physical addresses for a virtual address space of size 216 = 65,536 bytes, and (3) output the value of the byte stored at the translated physical address.
The program reads a file containing a list of 32-bit integer numbers, which represent 32-bit logical addresses. It should be noted that the program only deals with 16-bit addresses. Thus, this simulation implements masking for the rightmost 16 bits of each logical address loaded from the file.
| Page Number | Offset | 
|---|---|
| Bits 15 - 8 | Bits 7 - 0 | 
The page table size is 28 bytes; the TLB contains 16 entries. The page size is 2^8^ bytes, which is the same as the frame size. There are a total of 256 frames in the physical memory, meaning that the total physical memory capability is 65,536 bytes (i.e., 256 frames * 256 bytes/frame). The system parameters of the simulated virtual memory is summarized below.
- Page table size: 28
- Number of TLB entries: 16
- Page size: 28 bytes
- Frame size: 28 bytes
- Number of frames: 256
- Physical memory size: 65,536 bytes
This virtual memory system implements demand paging. The backing store is simulated by a file called “BACKING_STORE.bin”. BACKING_STORE is a binary file of 65,536 bytes. When a page fault occurs, the virtual memory system will perform the following four steps:
- Step 1: read a 256-byte page from the file BACKING_STORE and
- Step 2: store the loaded page frame in the physical memory.
- Step 3: Update the page table
- Step 4: Update the TLB
For example, if a logical address with page number 15 triggers a page fault, your virtual memory system will read in page 15 from the file BACKING_STORE. Then, the loaded page frame is placed in the physical memory. After the page frame is fetched from the disk, the page table and the TLB will be updated accordingly. Subsequent access of page 15 will be referenced by accessing either the TLB or the page table.
-  Compiled and tested using clang compiler: $ clang -o vm_sim vm_sim.c vmtypes.c
-  ALSO Compiled and tested using gcc: $ gcc -o vm_sim vm_sim.c vmtypes.c
- Created Makefile with gcc as Constant
-  SIMPLY download this project and execute makein command line
-  Execute program with $ ./vm_sim InputFile.txtor use an appropriate[input].txtfile
- For how to create smart arrays
- Dynamic Allocation of 2D Array in struct
- For creating physical memory struct
- More dynamic allocation
- Double Pointer Return Type
- How to Perform Bit Masking
- Proper malloc() error output and exiting
- How to use fgets() function
- How to measure clock time
- NOTE: Other sources were also used to gain understanding of Virtual Memory Management concepts
Welcome to Don's VM Simulator Version 1.0
Number of logical pages: 256
Page size: 256 bytes
Page Table Size: 256
TLB Size: 16 entries
Number of Physical Frames: 256
Physical Memory Size: 65536 bytes
Display All Physical Addresses? [y/n]: n
Choose TLB Replacement Strategy [1: FIFO, 2: LRU]: 1
If FIFO is selected, program displays to console:
Results Using FIFO Algorithm: 
Number of translated addresses = 1000
Page Faults = 244
Page Fault Rate = 24.400 %
TLB Hits = 51
TLB Hit Rate = 5.100 %
Average time spent retrieving data from backing store: 5.537 millisec
If LRU is selected, program displays to console:
Welcome to Don's VM Simulator Version 1.0
Number of logical pages: 256
Page size: 256 bytes
Page Table Size: 256
TLB Size: 16 entries
Number of Physical Frames: 256
Physical Memory Size: 65536 bytes
Display All Physical Addresses? [y/n]: n
Choose TLB Replacement Strategy [1: FIFO, 2: LRU]: 2
-----------------------------------------------------------------------------------
Results Using LRU Algorithm: 
Number of translated addresses = 1000
Page Faults = 244
Page Fault Rate = 24.400 %
TLB Hits = 56
TLB Hit Rate = 5.600 %
Average time spent retrieving data from backing store: 4.598 millisec
-----------------------------------------------------------------------------------
If user chooses to display physical addresses, a similar output will immediately precede the results:
-----------------------------------------------------------------------------------
Virtual address: 16916		Physical address: 20		Value: 0
Virtual address: 62493		Physical address: 285		Value: 0
Virtual address: 30198		Physical address: 758		Value: 29
Virtual address: 53683		Physical address: 947		Value: 108
Virtual address: 40185		Physical address: 1273		Value: 0
Virtual address: 28781		Physical address: 1389		Value: 0
Virtual address: 24462		Physical address: 1678		Value: 23
Virtual address: 48399		Physical address: 1807		Value: 67
Virtual address: 64815		Physical address: 2095		Value: 75
Virtual address: 18295		Physical address: 2423		Value: -35
Virtual address: 12218		Physical address: 2746		Value: 11
Virtual address: 22760		Physical address: 3048		Value: 0
Virtual address: 57982		Physical address: 3198		Value: 56
Virtual address: 27966		Physical address: 3390		Value: 27
...
-----------------------------------------------------------------------------------