Custom-OS-Kernel / phase3 / resources / testers / swapStress.c
swapStress.c
Raw
/* Tests the memory management. */

#include "/usr/include/umps3/umps/libumps.h"

#include "h/tconst.h"
#include "h/print.h"


void main () {
	char i;
	int corrupt;

	print(WRITETERMINAL, "swapTest starts\n");

	/* write into the first word of pages 20-29 of kuseg */
	for (i = 20; i < 30; i++) {
		*(int *)(SEG2 + (i * PAGESIZE)) = i;
		 print(WRITETERMINAL, "swapTest ok: wrote to page of VM\n"); 
	}

	print(WRITETERMINAL, "swapTest ok: wrote to pages of seg kuseg\n");

	/* check if first word of pages still contain what we wrote */
	corrupt = FALSE;
	for (i = 20; i < 30; i++)
		if (*(int *)(SEG2 + i * PAGESIZE) != i) {
			print(WRITETERMINAL, "swapTest error: swapper corrupted data\n");
			corrupt = TRUE;
			break;
		}

	if (corrupt == FALSE)
		print(WRITETERMINAL, "swapTest ok: data survived swapper\n");
	
	/* try to access segment ksegOS Should cause termination */
	/* i = getSTATUS(); */
	i = *((char *)(0x20000000));
	print(WRITETERMINAL, "swapTest error: could access segment kseg1\n");
	
	SYSCALL(TERMINATE, 0, 0, 0);
}