首页 > > 详细

C辅导 Customer解析C编程、C讲解


Introduction
NCustomer

1
NCustomer
2Clerker

2mutex 1 1
1convar ClerkerCustomer mutex,wait
Customer
struct customer_info{
int user_id; id
int service_time;
int arrival_time;
};
,mutex
,,Customer,
Requirement
CSc 360: Operating Systems 1
(Fall 2017) 2
Programming Assignment 1
P1: A Process Manager (PMan)
3
Spec Out: Sept. 7, 2017 4
Code Due: Oct. 2, 2017 (23:55 pm) 5
1 Goals 6
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 work 11
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 any 15
“Unix-like” machine, such as a Mac OS X machine—many students have developed their programs 16
for their Mac OS X laptops only to find that their code works differently on linux.csc.uvic.ca 17
resulting in a substantial loss of marks. 18
You can remote access linux.csc.uvic.ca by ssh . SSH clients 19
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 this 21
assignment. The system calls are in Section 2 of the man pages, so you should type (for example): 22
$ man 2 waitpid 23
2 Schedule 24
In order to help you finish this programming assignment on time, the schedule of this assignment 25
has been synchronized with both the lectures and the tutorials. There are three tutorials arranged 26
during the course of this assignment. 27
1
Tutorial No. Tutorial Milestones
First system programming in C, P1 spec go-through, design hints design and code skeleton
Second more on system programming and testing alpha code done
Third final testing and last-minute help final deliverable
3 Requirements 28
3.1 Prompt for user input 29
Your PMan needs to show the prompt for user input. For example, when you run PMan by type in 30
linux.csc.uvic.ca:/home/user$ ./PMan 31
It prompts 32
PMan: > 33
for user input. 34
3.2 Background Execution of Programs 35
PMan allows a program to be started in the background—that is, the program is running, but PMan 36
continues to accept input from the user. You will implement a simplified version of background 37
execution that supports executing processes in the background. 38
If the user types: bg foo, your PMan will start the program foo in the background. That is, 39
the program foo will execute and PMan will also continue to execute and give the prompt to accept 40
more commands. 41
The command bglist will have PMan display a list of all the programs currently executing in 42
the background, e.g.,: 43
123: /home/user/a1/foo 44
456: /home/user/a1/foo 45
Total background jobs: 2 46
In this case, there are 2 background jobs, both running the program foo, the first one with 47
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 terminate 50
that job. 51
2. The command bgstop pid will send the STOP signal to the job pid to stop (temporarily) that 52
job. 53
3. The command bgstart pid will send the CONT signal to the job pid to re-start that job (which 54
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 man 57
page for the waitpid() system call. You are suggested to use the WNOHANG option. 58
2
3.3 Status of Process 59
Your PMan needs to support a command pstat pid to list the following information related to 60
process pid, where pid is the Process ID. 61
1. comm : The filename of the executable, in parentheses. This is visible whether or not the 62
executable is swapped out. 63
2. state : One of the following characters, indicating process state: R (Running), S (Sleeping 64
in an interruptible wait), D (Waiting in uninterruptible disk sleep), Z (Zombie), T (Stopped 65
(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 (Linux 67
2.6.33 to 3.13 only)), K (Wakekill (Linux 2.6.33 to 3.13 only)), W (Waking (Linux 2.6.33 to 68
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 clock 70
ticks (divide by sysconf( SC CLK TCK)). This includes guest time, guest time (time spent 71
running a virtual CPU, see below), so that applications that are not aware of the guest time 72
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 in 74
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 pages 76
which count toward text, data, or stack space. This does not include pages which have not 77
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 is 85
given by PMan, e.g., 86
PMan:> ttest 87
PMan:> ttest: command not found 88
4 Deliveries and Marking Scheme 89
For your final submission of each assignment you are required to submit your source code to connex 90
dropbox. You should include a readme file to tell TA how to compile and run your code. TAs are not 91
supposed to fix the bugs, either in your source code or in your make file. If following your readme 92
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 Ends 96
5.1 Implementation Hints 97
1. Use fork() and execvp() so that the parent process accepts user input and the child process 98
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 that 101
\proc is not a real file system, because all files have a size zero. The files just include a pointer 102
to process control block (PCB) in the OS kernel. Due to this reason, never try to write 103
anything into \proc! 104
5.2 Warning 105
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 log 107
into your account any more, even from a different machine. Both the instructor and the TAs cannot 108
help you out. You have to go to IT support asking them to kill your buggy process. Clearly, IT 109
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 number 111
of user processes allocated to you (it is normally 50), and reduce this number to a safe value. For 112
instance, if the default max number of user processes is 50, you can use 113
% ulimit -u 35 114
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 kill 116
the buggy process. 117
Please take this warning seriously! 118
4
5.3 Compilation 119
You’ve been provided with a Makefile that builds the sample code (in p1s.tar.gz). It takes care 120
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. 122
5.4 Helper Programs 123
5.4.1 inf.c 124
This program takes two parameters: 125
tag: a single word which is printed repeatedly 126
interval: the interval, in seconds, between two printings of the tag 127
The purpose of this program is to help you with debugging background processes. It acts a trivial 128
background process, whose presence can be “felt” since it prints a tag (specified by you) every few 129
seconds (as specified by you). This program takes a tag so that even when multiple instances of it 130
are executing, you can tell the difference between each instance. 131
This program considerably simplifies the programming of PMan which deals with re-starting, 132
stopping, and killing programs. 133
5.4.2 args.c 134
This is a very trivial program which prints out a list of all arguments passed to it. 135
This program is provided so that you can verify that your PMan passes all arguments supplied 136
on the command line—often, people have off-by-1 errors in their code and pass one argument less. 137
5.5 Code Quality 138
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 when 140
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 addition 142
to yourself. To further elaborate: 143
(a) Your favorite quote from Star Wars or Douglas Adams’ Hitch-hiker’s Guide to the Galaxy 144
does not count as comments. In fact, they simply count as anti-comments, and will result 145
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 global 149
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 assignment 151
specification should be checked and all values should be dealt with appropriately. 152
5
5.6 Plagiarism 153
This assignment is to be done individually. You are encouraged to discuss the design of your solution 154
with your classmates, but each person must implement their own assignment. 155
Your markers will submit the code to an automated plagiarism detection program. 156
We add archived solutions from previous semesters (a few years worth) to the plagia- 157
rism detector, in order to catch “recycled” solutions. 158
159
The End 160

联系我们
  • QQ:99515681
  • 邮箱:99515681@qq.com
  • 工作时间:8:00-21:00
  • 微信:codinghelp
热点标签

联系我们 - QQ: 99515681 微信:codinghelp
程序辅导网!