init commit of lab2_challenge1

lab2_challenge1_pagefaults
Zhiyuan Shao 3 years ago
parent 5b9d0b55ea
commit be365dea30

@ -4,8 +4,9 @@ Copyright License
The PKE software is: The PKE software is:
Copyright (c) 2021, Zhiyuan Shao (zyshao@hust.edu.cn), Copyright (c) 2021, Zhiyuan Shao (zyshao@hust.edu.cn),
Yi Gui (gy163email@163.com), Yixin Song (474309045@qq.com),
Yan Jiao (773709579@qq.com), Ziming Yuan (1223962053@qq.com),
Boyang Li (liboyang_hust@163.com),
Huazhong University of Science and Technology Huazhong University of Science and Technology
Permission is hereby granted, free of charge, to any person obtaining Permission is hereby granted, free of charge, to any person obtaining

@ -1,5 +1,6 @@
/* /*
* The application of lab2_3. * The application of lab2_challenge1_pagefault.
* Based on application of lab2_3.
*/ */
#include "user_lib.h" #include "user_lib.h"
@ -12,17 +13,24 @@
// may consume more memory (from stack) than a physical 4KB page, leading to a page fault. // may consume more memory (from stack) than a physical 4KB page, leading to a page fault.
// PKE kernel needs to improved to handle such page fault by expanding the stack. // PKE kernel needs to improved to handle such page fault by expanding the stack.
// //
uint64 sum_sequence(uint64 n) { uint64 sum_sequence(uint64 n, int *p) {
if (n == 0) if (n == 0)
return 0; return 0;
else else
return sum_sequence( n-1 ) + n; return *p=sum_sequence( n-1, p+1 ) + n;
} }
int main(void) { int main(void) {
// we need a large enough "n" to trigger pagefaults in the user stack // FIRST, we need a large enough "n" to trigger pagefaults in the user stack
uint64 n = 1000; uint64 n = 1024;
// alloc a page size array(int) to store the result of every step
// the max limit of the number is 4kB/4 = 1024
// SECOND, we use array out of bound to trigger pagefaults in an invalid address
int *ans = (int *)naive_malloc();
printu("Summation of an arithmetic sequence from 0 to %ld is: %ld \n", n, sum_sequence(n+1, ans) );
printu("Summation of an arithmetic sequence from 0 to %ld is: %ld \n", n, sum_sequence(1000) );
exit(0); exit(0);
} }

Loading…
Cancel
Save