commit c149d017d5c7ba6a1efaeb20c6acacf0fe21d264 Author: Amber Date: Sun Feb 21 21:23:23 2021 -0500 Initial commit. diff --git a/programming-assignment.c b/programming-assignment.c new file mode 100644 index 0000000..e0e418f --- /dev/null +++ b/programming-assignment.c @@ -0,0 +1,92 @@ +#include "pch.h" +#include +#include +#include +#include + +/************************************************************************** + * Authors: Gary Fleming, Amber McCloughan + * Class: CIS452 - Operating Systems Concepts + * Professor: Dr. Greg Wolffe + * Date: 4/11/2019 + * + * A mini programming assignment where we do some memory operations in + * Windows. We get the page size of the system, allocate memory, + * check the state of that memory, deallocate the memory, and then check + * the state of the memory again. + ***************************************************************************/ + +// See function implementation for details. +const char *checkMemState(DWORD); + +/** + * Main function for driving the program. + */ +int main() +{ + // Buffer for holding system info. + SYSTEM_INFO sysInf; + + // Grabbing system info. + GetSystemInfo(&sysInf); + + // Figuring out the size of a page and printing it. + printf("The size of a page is: %lu\n", sysInf.dwPageSize); + + // Allocating a large sum of memory (1M). + printf("Allocating memory...\n"); + int *bigboy = (int *)malloc(1048576); + + // Buffer for holding memory information. + MEMORY_BASIC_INFORMATION buf; + + // Querying memory information about the memory we allocated. + VirtualQuery(bigboy, &buf, sizeof(MEMORY_BASIC_INFORMATION)); + + // Printing out the memory's state. + printf("The state of the memory is: %s\n", checkMemState(buf.State)); + + // Freeing the allocated memory. + printf("Freeing memory...\n"); + free(bigboy); + + // Querying memory information about the memory location again. + VirtualQuery(bigboy, &buf, sizeof(MEMORY_BASIC_INFORMATION)); + + // Printing out the memory's state again. + printf("The state of the memory is: %s\n", checkMemState(buf.State)); + + // Goodbye. + return 0; +} + +/** + * Function that takes the memory state and + * turns it into a user-readable string. + * + * @param DWORD state, the raw value for the + * memory state. + */ +const char *checkMemState(DWORD state) +{ + // Committed state (0x1000) + if (state == 4096) + { + return "COMMITTED"; + } + // Free state (0x10000) + else if (state == 65536) + { + return "FREE"; + } + // Reserved state (0x2000) + else if (state == 8192) + { + return "RESERVED"; + } + // Catch-all for any issues. + else + { + return "UNKNOWN"; + } +}