From 7241838b4cecefb32bad4698e748fc31d008d94d Mon Sep 17 00:00:00 2001 From: Frans Kaashoek Date: Tue, 20 Aug 2019 20:23:18 -0400 Subject: Move labs into 6.828 repo. The lab text isn't dependent on specific xv6 code. Lab submission instructions etc. are likely going to be more MIT 6.828 specific. --- labs/mmap.html | 171 --------------------------------------------------------- 1 file changed, 171 deletions(-) delete mode 100644 labs/mmap.html (limited to 'labs/mmap.html') diff --git a/labs/mmap.html b/labs/mmap.html deleted file mode 100644 index 6f779c4..0000000 --- a/labs/mmap.html +++ /dev/null @@ -1,171 +0,0 @@ - - -Lab: mmap - - - - -

Lab: mmap

- -

In this lab you will use mmap on Linux to demand-page a -very large table and add memory-mapped files to xv6. - -

Using mmap on Linux

- -

This assignment will make you more familiar with how to manage virtual memory -in user programs using the Unix system call interface. You can do this -assignment on any operating system that supports the Unix API (a Linux Athena -machine, your laptop with Linux or MacOS, etc.). - -

Download the mmap homework assignment and look -it over. The program maintains a very large table of square root -values in virtual memory. However, the table is too large to fit in -physical RAM. Instead, the square root values should be computed on -demand in response to page faults that occur in the table's address -range. Your job is to implement the demand faulting mechanism using a -signal handler and UNIX memory mapping system calls. To stay within -the physical RAM limit, we suggest using the simple strategy of -unmapping the last page whenever a new page is faulted in. - -

To compile mmap.c, you need a C compiler, such as gcc. On Athena, -you can type: -

-$ add gnu
-
-Once you have gcc, you can compile mmap.c as follows: -
-$ gcc mmap.c -lm -o mmap
-
-Which produces a mmap file, which you can run: -
-$ ./mmap
-page_size is 4096
-Validating square root table contents...
-oops got SIGSEGV at 0x7f6bf7fd7f18
-
- -

When the process accesses the square root table, the mapping does not exist -and the kernel passes control to the signal handler code in -handle_sigsegv(). Modify the code in handle_sigsegv() to map -in a page at the faulting address, unmap a previous page to stay within the -physical memory limit, and initialize the new page with the correct square root -values. Use the function calculate_sqrts() to compute the values. -The program includes test logic that verifies if the contents of the -square root table are correct. When you have completed your task -successfully, the process will print “All tests passed!”. - -

You may find that the man pages for mmap() and munmap() are helpful references. -

-$ man mmap
-$ man munmap
-
- - -

Implement memory-mapped files in xv6

- -

In this assignment you will implement memory-mapped files in xv6. - The test program mmaptest tells you what should work. - -

Here are some hints about how you might go about this assignment: - -

- -

Run usertests to make sure you didn't break anything. - -

Optional challenges: -

- - - -- cgit v1.2.3