COMP 3000 Lab 6 2011
A few guidelines:
- Submit your solutions for both Part A and Part B via WebCT by Sunday, November 20th at 11:30 PM.
- Please answer using a single text file (with a .txt extension). Do not submit doc, docx, pdf, or other formats. Also, please do not submit an archive (zip, tarball, rar) of multiple text files, just upload one. (Please don't just cut and paste your work into a text box on webct.) Anything other than a single text file will receive -1 points
- Show all your work. Short answers are not sufficient; you should list any websites or individuals you consult and should document any experiments you conducted. For any question that you could just answer without any external reference or experiment, write "(no work required)" after your answer. If you find an answer by browsing code, explain your search path (e.g., I searched for X, which led me to source file Y, where I found function Z.)
- All submitted code and commands should compile and run. Partial code fragments or explanations may not be given credit. While code may use standard C and UNIX/Linux libraries, no code should rely on external binaries.
Part A
For this section, you will need to refer to the source of the Linux kernel, version 3.1.1. You may download the source code here; however, you will probably prefer to navigate the code through the Linux Cross Reference Project.
- Answer the following questions regarding do_execve_common() in fs/exec.c.
- What information does brpm hold?
- What are the many goto's for?
- What are the two lines immediately before this function returns with no error (i.e., the execve succeeds)?
- What function is the main consumer of copy_process() in kernel/fork.c?
- In mm/mmap.c, what does the line SYSCALL_DEFINE1(brk, unsigned long, brk) do?
Part B
- Briefly explain what each line does in vfs_write() in fs/read_write.c. Your explanation for each line should take up two lines at most.