CS307-slides03
Download
Report
Transcript CS307-slides03
CS307 Operating Systems
Processes
Fan Wu
Department of Computer Science and Engineering
Shanghai Jiao Tong University
Spring 2013
Process Concept
An operating system executes a variety of programs:
Batch system – jobs
Time-shared systems – user programs or tasks
All these activities are processes
Process – a program in execution
Textbook uses the terms job and process almost interchangeably
Operating Systems
2
The Process
Multiple parts
The program code, also called text
section
Current activity including program
counter, processor registers
Stack containing temporary data
Function parameters, return
addresses, local variables
Data section containing global
variables
Heap containing memory dynamically
allocated during run time
Operating Systems
3
The Process (Cont.)
What is the difference between program and process?
Program is passive entity, process is active
Program becomes process when executable file loaded into memory
Execution of program started via GUI mouse clicks, command line entry of
its name, etc
One program can be several processes
Consider multiple users executing the same program
Operating Systems
4
Process State
As a process executes, it changes state
new: The process is being created
running: Instructions are being executed
waiting: The process is waiting for some event to occur
ready: The process is waiting to be assigned to a processor
terminated: The process has finished execution
Operating Systems
5
Process Control Block (PCB)
Information associated with each process
Process state
Process number
Program counter
CPU registers
CPU scheduling information
Memory-management information
Accounting information
I/O status information
Operating Systems
6
Process Representation in Linux
Represented by the C structure task_struct
pid t pid; /* process identifier */
long state; /* state of the process */
unsigned int time slice /* scheduling information */
struct task struct *parent; /* this process’s parent */
struct list head children; /* this process’s children */
struct files struct *files; /* list of open files */
struct mm struct *mm; /* address space of this pro */
Operating Systems
7
CPU Switch From Process to Process
Operating Systems
8
Process Scheduling
Maximize CPU use, quickly switch processes onto CPU for
time sharing
Process scheduler selects among available processes for
next execution on CPU
Maintains scheduling queues of processes
Job queue – set of all processes in the system
Ready queue – set of all processes residing in main
memory, ready and waiting to execute
Device queues – set of processes waiting for an I/O device
Processes migrate among the various queues
Operating Systems
9
Ready Queue And Various I/O Device Queues
Operating Systems
10
Representation of Process Scheduling
Operating Systems
11
Schedulers
Long-term scheduler (or job scheduler) – selects which
processes should be brought into the ready queue
Short-term scheduler (or CPU scheduler) – selects which
process should be executed next and allocates CPU
Sometimes the only scheduler in a system
Operating Systems
12
Schedulers (Cont.)
Short-term scheduler is invoked very frequently (milliseconds)
(must be fast)
Long-term scheduler is invoked very infrequently (seconds, minutes)
(may be slow)
The long-term scheduler controls the degree of multiprogramming
Processes can be described as either:
I/O-bound process – spends more time doing I/O than
computations, many short CPU bursts
CPU-bound process – spends more time doing computations;
few very long CPU bursts
Operating Systems
13
Operations on Processes
Process Creation
Process Termination
Operating Systems
15
Process Creation
Parent process create
children processes, which,
in turn create other
processes, forming a tree of
processes
Generally, process identified
and managed via a process
identifier (pid)
Operating Systems
16
Process Creation (Cont.)
Resource sharing
Parent and children share all resources
Children share subset of parent’s resources
Parent and child share no resources
Initialization data
Execution
Parent and children execute concurrently
Parent waits until children terminate
Address space
Child duplicate of parent
Child has a program loaded into it
Operating Systems
17
C Program Forking Separate Process
UNIX examples
fork system call creates
new process
exec system call used
after a fork to replace
the process’ memory
space with a new
program
Operating Systems
18
#include <sys/types.h>
#include <studio.h>
#include <unistd.h>
int main()
{
int i = 1;
pid_t pid;
/* fork another process */
pid = fork();
if (pid < 0) { /* error occurred */
fprintf(stderr, "Fork Failed");
return 1;
}
else if (pid == 0) { /* child process */
printf(“This
is child.");
execlp("/bin/ls",
"ls", NULL);
}
else { /* parent process */
/* parent will wait for the child */
wait (NULL);
printf ("Child Complete.");
}
return 0;
}
Process Execution
Operating Systems
19
Process Termination
Process executes last statement and asks the operating system to
delete it (exit)
Output data from child to parent (via wait)
Process’ resources are deallocated by operating system
Parent may terminate execution of children processes (abort)
Child has exceeded allocated resources
Task assigned to child is no longer required
If parent is exiting
Some operating systems do not allow child to continue if its
parent terminates
–
Operating Systems
All children terminated - cascading termination
20
Interprocess Communication
Processes within a system may be independent or cooperating
Cooperating process can affect or be affected by other processes, including
sharing data
Reasons for cooperating processes:
Information sharing
Computation speedup
Modularity
Convenience
Cooperating processes need InterProcess Communication (IPC)
Two models of IPC
Shared memory
Message passing
Operating Systems
21
Communications Models
Message Passing
Operating Systems
Shared Memory
22
Interprocess Communication – Shared Memory
A region of memory that is shared by cooperating processes is established.
Processes can then exchange information by reading and writing data to the
shared region.
Operating Systems
23
Producer-Consumer Problem
Paradigm for cooperating processes, producer process
produces information that is consumed by a consumer
process
unbounded-buffer places no practical limit on the size of
the buffer
bounded-buffer assumes that there is a fixed buffer size
Producer
Buffer
Consumer
Operating Systems
24
Bounded-Buffer – Shared-Memory Solution
Shared data
#define BUFFER_SIZE 10
typedef struct {
...
} item;
item buffer[BUFFER_SIZE];
int in = 0;
int out = 0;
Operating Systems
25
Bounded-Buffer – Shared-Memory Solution
Producer
while (true) {
/* Produce an item */
while (((in + 1) % BUFFER_SIZE) == out)
; /* do nothing -- no free buffers */
buffer[in] = item;
in = (in + 1) % BUFFER_SIZE;
}
Consumer
while (true) {
while (in == out)
; // do nothing
// remove an item from the buffer
item = buffer[out];
out = (out + 1) % BUFFER_SIZE;
return item;
}
Operating Systems
26
Bounded-Buffer – Shared-Memory Solution
Weakness:
Busy waiting
The solution allows only BUFFER_SIZE-1 elements at the same time
Popquiz:
Rewrite the previous processes to allow BUFFER_SIZE items in the
buffer at the same time
Operating Systems
27
Ordinary Pipes
Ordinary Pipes allow communication in standard producer-
consumer style
Producer writes to one end (the write-end of the pipe)
Consumer reads from the other end (the read-end of the pipe)
Ordinary pipes are in fact unidirectional
Require parent-child relationship between communicating processes
Operating Systems
29
Ordinary Pipe
Output
WRITE
Pipe
Process A
Operating Systems
READ
Input
Process B
30
Using Pipe – Part 1
First, create a pipe and check for errors
int mypipe[2];
mypipe[0]
mypipe[1]
if (pipe(mypipe)) {
fprintf (stderr, "Pipe failed.\n");
return -1;
}
Second, fork your threads
Third, close the pipes you don't need in that thread
reader should close(mypipe[1]);
writer should close(mypipe[0]);
Operating Systems
31
read-end
write-end
Using Pipe – Part 2
Fourth, the writer should write the data to the pipe
write(mypipe[1],&c,1);
Fifth, the reader reads from the data from the pipe:
while (read(mypipe[0],&c,1)>0) {
//do something, loop will exit when WRITER closes pipe
}
Sixth, when writer is done with the pipe, close it
close(mypipe[1]); //EOF is sent to reader
Fifth, when reader receives EOF from closed pipe, close the pipe and exit
your polling loop
close(mypipe[0]); //all pipes should be closed now
Operating Systems
32
Interprocess Communication – Message Passing
Mechanism for processes to communicate and to synchronize their actions
Message system – processes communicate with each other without
resorting to shared variables
IPC facility provides two operations:
send(message) – message size fixed or variable
receive(message)
If P and Q wish to communicate, they need to:
establish a communication link between them
exchange messages via send/receive
Operating Systems
33
Direct Communication
Processes must name each other explicitly:
send (P, message) – send a message to process P
receive(Q, message) – receive a message from process Q
Properties of communication link
Links are established automatically; The processes need to know
only each other’s identity to communicate
A link is associated with exactly one pair of communicating
processes
Between each pair there exists exactly one link
Operating Systems
34
Indirect Communication
Messages are directed to and received from mailboxes (also referred
to as ports)
Each mailbox has a unique id
Processes can communicate only if they share a mailbox
Primitives are defined as:
send(A, message) – send a message to mailbox A
receive(A, message) – receive a message from mailbox A
Properties of communication link
Link established only if processes share a common mailbox
A link may be associated with many processes
Each pair of processes may share several communication links
Operating Systems
35
Sockets
A socket is defined as an endpoint for communication
Concatenation of IP address and port
The socket 161.25.19.8:1625 refers to port 1625 on host
161.25.19.8
Communication consists between a pair of sockets
Operating Systems
38
Socket Communication
Operating Systems
39
Steps to Create Server Side
1.
2.
3.
4.
5.
6.
Create a socket with the
socket() system call
Bind the socket to an
address using the bind()
system call.
Listen for connections with
the listen() system call
Accept a connection with
the accept() system call
(This call typically blocks
until a client connects with
the server)
Send and receive data with
read() and write() system
calls
Close connection with close()
system call
Operating Systems
40
socket()
bind()
listen()
accept()
read()/write()
close()
Steps to Create Client Side
1.
Create a socket with the
socket() system call
socket()
2.
3.
4.
Connect the socket to the
address of the server using
the connect() system call
Send and receive data with
read() and write() system
calls.
Close the socket with close()
system call
Operating Systems
41
connect()
read()/write()
close()
Interaction Between Client and Server
socket()
socket()
bind()
listen()
accept()
connect()
read()/write()
read()/write()
close()
close()
Server
Client
Operating Systems
42
Internet Domain Socket
IP address:
32 bits (IPv4) or 128 bits (IPv6)
C/S work on same host: just use localhost
Port
16 bit unsigned integer
Lower numbers are reserved for standard services
Transport layer protocol: TCP / UDP
Operating Systems
43
Headers
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sstream>
#include <unistd.h>
#include <sys/types.h>
Definitions of a number of data types used in system calls
#include <sys/socket.h>
Definitions of structures needed for sockets
#include <netinet/in.h>
Constants and structures needed for internet domain addresses
Operating Systems
44
Creating Socket
int sockfd
sockfd = socket(AF_INET, SOCK_STREAM, 0);
if (sockfd < 0) {
perror(“ERROR opening socket”);
exit(2);
}
AF_INET: address domain
SOCK_STREAM: stream socket, characters are read in
a continuous stream as if from a file or pipe
0: protocol. The operating system chooses the most
appropriate protocol. It will choose TCP for stream
sockets.
Operating Systems
45
Binding Socket
struct sockaddr_in serv_addr;
serv_addr.sin_family = AF_INET;
serv_addr.sin_addr.s_addr = htonl(INADDR_ANY);
serv_addr.sin_port = htons(BASIC_SERVER_PORT);
bind(sockfd, (sockaddr*) &serv_addr, sizeof(serv_addr));
//error check
INADDR_ANY: get IP address of the host automatically
htonl, htons: data format conversion
bind(): binds a socket to an address
Operating Systems
46
Listening and Accepting Connection
listen(sockfd, 5);
listen(): allows the server to listen on the socket for
connections, with a backlog queue of size 5.
int client_sockfd;
struct sockaddr_in client_addr;
int len = sizeof(client_addr);
client_sockfd = accept(sockfd, (sockaddr *) &client_addr,
&len);
//error check
accept(): block process until a client connects to the
server. It returns a new socket file descriptor, if the
connection is created.
Operating Systems
47
Reading and Writing
char buf[1024];
int nread = read(client_sockfd, buf, 1024);
read(): reads from the socket
write(client_sockfd, buf, len);
write(): writes to the socket
close(client_sockfd);
close(): closes the socket
Operating Systems
48
Connecting A Client to A Server
int sockfd;
sockfd = socket(AF_INET, SOCK_STREAM, 0);
// error check
struct sockaddr_in serv_addr;
struct hostent *host;
serv_addr.sin_family = AF_INET;
host = gethostbyname(argv[1]);
// error check
memcpy(&serv_addr.sin_addr.s_addr, host->h_addr,
host->h_length);
serv_addr.sin_port = htons(BASIC_SERVER_PORT);
connect(sockfd, (sockaddr *) &serv_addr, sizeof(serv_addr))
// error check
Operating Systems
49
Homework
Reading
Chapter 3
Operating Systems
50