CSci 530: Problem Set 2
Processes and Threads
CSci 430 Summer 2020
Overview
In this written problem set you will be given some exercises in order to help
expand your understanding of the concept of processes and threads and what
functions they perform in a modern operating system.
Learning Objectives
� Better understand processes, process preemption, process modes, etc.
� Explore thread concepts, learn what responsbilities threads handle in
an OS and which aspects are part of processes.
� Begin to understand issues of thread concurrency.
Submission
You are to submit the assignment by the end of the day on the assigned due
date. A submission folder has been created in MyLeoOnline for your use.
This assignment has 2 problems, both requiring a written description and
�gures. So you may submit your answer as a plain text comment, or as an
attachment of a plain text �le, or a word or open o�ce document.
1
Problem #1
For the seven-state process model of Figure 9.b, draw a queueing diagram
similar to that of Figure 3.8b.
Problem #2
Consider the following code using the POSIX Pthreads API:
#include
#include
#include
#include
int myglobal = 0;
void* thread_function(void* arg)
{
int i, j;
for(i = 0; i < 20; i++)
{
j = myglobal;
j = j + 1;
printf(".");
fflush(stdout);
sleep(1);
myglobal = j;
}
return NULL;
}
int main(void)
{
pthread_t mythread;
int i;
if (pthread_create(&mythread, NULL, thread_function, NULL) != 0)
{
printf("error creating thread.");
2
abort();
}
for(i = 0; i < 20; i++)
{
myglobal = myglobal + 1;
printf("o");
fflush(stdout);
sleep(1);
}
if (pthread_join(mythread, NULL))
{
printf("error joining thread.");
abort();
}
printf("\n myglobal equals %d \n", myglobal);
exit(0);
}
In main() we �rst declare a variable called mythread, which has a type
of pthread_t. This is essentially an ID for a thread. Next, the if statement
creates a thread associated with mythread. The call pthread_create() re-
turns zero on success and a nonzero error code on failure. The third argument
of pthread_create() is the name of a function that the new thread will ex-
ecute when it starts. When this thread_function() returns, the thread
terminates. Meanwhile the main program itself de�nes a thread, so there
are two threads executing. The pthread_join() function causes the main
thread to wait until the new thread completes.
Questions
1. What di�erences are there between the loops in the thread_function()
and in main()? Are these di�erences signi�cant? In other words, does
something about the di�ereneces in the loop have implications for when
the two functions are run as concurrent threads.
2. Here is output from the above program being executed
$ ./thread2
3
..o.o.o.o.oo.o.o.o.o.o.o.o.o.o..o.o.o.oo
myglobal equals 21
Is this the output you would expect? If not, what has gone wrong and
how would you �x it (please show code)?
4