Starting from:

$24.99

Assignment 1: A Process Manager (PMan)


Programming Assignment 1 P1: A Process Manager (PMan)
 Goals
This assignment is designed to help you:7
1. get familiar with C programming,8
2. get familiar with system calls related to process management,9
3. get familiar with the process control block (PCB).10
You are required to implement your solution in C (other languages are not allowed). Your work11 will be tested on linux.csc.uvic.ca.12
13 Note: linux.csc.uvic.ca is a particular machine at the UVic Department of Computer Sci-14 ence. It does not mean “any Linux machine” at UVic. Even more importantly, it does not mean any15 “Unix-like” machine, such as a Mac OS X machine—many students have developed their programs16 for their Mac OS X laptops only to find that their code works differently on linux.csc.uvic.ca17 resulting in a substantial loss of marks.18 You can remote access linux.csc.uvic.ca by ssh username@linux.csc.uvic.ca. SSH clients19 are available for a wide variety of operating systems including Linux, Mac OS and Windows.20
Be sure to study the man pages for the various systems calls and functions suggested in this21 assignment. The system calls are in Section 2 of the man pages, so you should type (for example):22
$ man 2 waitpid23
2 Schedule24
In order to help you finish this programming assignment on time, the schedule of this assignment25 has been synchronized with both the lectures and the tutorials. There are three tutorials arranged26 during the course of this assignment.27
1
Tutorial No. Tutorial Milestones First P1 spec go-through, design hints, system calls design and code skeleton Second more on system programming and testing alpha code done Third final testing and last-minute help final deliverable
3 Requirements28
3.1 Prompt for user input29
Your PMan needs to show the prompt for user input. For example, when you run PMan by type in30
linux.csc.uvic.ca:/home/user$ ./PMan31
It prompts32
PMan: 33
for user input.34
3.2 Background Execution of Programs35
PMan allows a program to be started in the background—that is, the program is running, but PMan36 continues to accept input from the user. You will implement a simplified version of background37 execution that supports executing processes in the background.38 If the user types: bg cat foo.txt, your PMan will start the command cat with the argument39 foo.txt in the background. That is, the program will execute and PMan will also continue to40 execute and give the prompt to accept more commands.41 The command bglist will have PMan display a list of all the programs currently executing in42 the background, e.g.,:43
123: /home/user/a1/foo44 456: /home/user/a1/foo45 Total background jobs: 246
In this case, there are 2 background jobs, both running the program foo, the first one with47 process ID 123 and the second one with 456.48 Your PMan needs to support the following commands:49
1. The command bgkill pid will send the TERM signal to the job with process ID pid to terminate50 that job.51
2. The command bgstop pid will send the STOP signal to the job pid to stop (temporarily) that52 job.53
3. The command bgstart pid will send the CONT signal to the job pid to re-start that job (which54 has been previously stopped).55
See the man page for the kill() system call for details.56 Your PMan must indicate to the user when background jobs have terminated. Read the man57 page for the waitpid() system call. You are suggested to use the WNOHANG option.58
2
3.3 Status of Process59
Your PMan needs to support a command pstat pid to list the following information related to60 process pid, where pid is the Process ID.61
1. comm : The filename of the executable, in parentheses. This is visible whether or not the62 executable is swapped out.63
2. state : One of the following characters, indicating process state: R (Running), S (Sleeping64 in an interruptible wait), D (Waiting in uninterruptible disk sleep), Z (Zombie), T (Stopped65 (on a signal) or (before Linux 2.6.33) trace stopped ), t (Tracing stop (Linux 2.6.33 onward)),66 W (Paging (only before Linux 2.6.0)), X (Dead (from Linux 2.6.0 onward)), x (Dead (Linux67 2.6.33 to 3.13 only)), K (Wakekill (Linux 2.6.33 to 3.13 only)), W (Waking (Linux 2.6.33 to68 3.13 only)), P (Parked (Linux 3.9 to 3.13 only)).69
3. utime: Amount of time that this process has been scheduled in user mode, measured in clock70 ticks (divide by sysconf( SC CLK TCK)). This includes guest time, guest time (time spent71 running a virtual CPU, see below), so that applications that are not aware of the guest time72 field do not lose that time from their calculations.73
4. stime: Amount of time that this process has been scheduled in kernel mode, measured in74 clock ticks (divide by sysconf( SC CLK TCK)).75
5. rss: Resident Set Size: number of pages the process has in real memory. This is just the pages76 which count toward text, data, or stack space. This does not include pages which have not77 been demand-loaded in, or which are swapped out.78
6. voluntary ctxt switches: Number of voluntary context switches (since Linux 2.6.23).79
7. nonvoluntary ctxt switches: Number of involuntary context switches (since Linux 2.6.23).80
If process pid does not exist, PMan returns an error like:81
Error: Process 1245 does not exist.82
In the above example, 1245 is the pid value.83 To summarize, your PMan should support the following commands: bg, bglist, bgkill,84 bgstop, bgstart, and pstat. If the user types an unrecognized command, an error message is85 given by PMan, e.g.,86
PMan: ttest87 PMan: ttest: command not found88
4 Deliveries and Marking Scheme89
For your final submission of each assignment you are required to submit your source code to connex90 dropbox. You should include a readme file to tell TA how to compile and run your code. TAs are not91 supposed to fix the bugs, either in your source code or in your make file. If following your readme92 file, the TAs cannot compile and run your code, you may get a zero mark for the assignment.93 The marking scheme is as follows:94
3
Components Weight Make file 5 Error handling 10 bg 10 bglist 10 bgkill 10 bgstop 10 bgstart 15 pstat 20 Code style 5 Readme.txt 5 Total Weight 100
95
5 Odds and Ends96
5.1 Implementation Hints97
1. Use fork() and execvp() so that the parent process accepts user input and the child process98 executes arbitrary commands.99
2. Use a data structure (e.g., a linked list) to record the background processes.100 3. Use the \proc pseudo-file system to find out the information required by pstat. Note that101 \proc is not a real file system, because all files have a size zero. The files just include a pointer102 to process control block (PCB) in the OS kernel. Due to this reason, never try to write103 anything into \proc!104
5.2 Warning105
Since you will use fork() in your assignment, it is important that you do not create a fork()106 bomb, which easily eats up all the pid resources allocated to you. If this happens, you cannot log107 into your account any more, even from a different machine. Both the instructor and the TAs cannot108 help you out. You have to go to IT support asking them to kill your buggy process. Clearly, IT109 support will not be happy if many students ask for such a help.110 To avoid the mishap, you MUST use ulimit -u in bash to find out the default max number111 of user processes allocated to you (it is normally 50), and reduce this number to a safe value. For112 instance, if the default max number of user processes is 50, you can use113
% ulimit -u 35114
to reduce this number to 35. Therefore, even if your code has a bug and has created a fork()115 bomb, you still have unused 15 processes left and you can log in from a different machine to kill116 the buggy process.117 Please take this warning seriously!118
4
5.3 Compilation119
You’ve been provided with a Makefile that builds the sample code (in p1s.tar.gz). It takes care120 of linking-in the GNU readline library for you. The sample code shows you how to use readline()121 to get input from the user, only if you choose to use the readline library.


We cannot specify completely the coding style that we would like to see but it includes the following:139
1. Proper decomposition of a program into subroutines (and multiple source code files when140 necessary)—A 500 line program as a single routine won’t suffice.141
2. Comment—judiciously, but not profusely. Comments also serve to help a marker, in addition142 to yourself. To further elaborate:143
(a) Your favorite quote from Star Wars or Douglas Adams’ Hitch-hiker’s Guide to the Galaxy144 does not count as comments. In fact, they simply count as anti-comments, and will result145 in a loss of marks.146 (b) Comment your code in English. It is the official language of this university.147
3. Proper variable names—leia is not a good variable name, it never was and never will be.148
4. Small number of global variables, if any. Most programs need a very small number of global149 variables, if any. (If you have a global variable named temp, think again.)150
5. The return values from all system calls and function calls listed in the assignment151 specification should be checked and all values should be dealt with appropriately

More products