Process and thread

profilenirojkarki
ProblemSet-022.pdf

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 <pthread.h>

#include <stdlib.h>

#include <unistd.h>

#include <stdio.h>

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