Process and threads | Computer Science homework help

[ad_1]

For this first assignment, you won’t be writing code; instead, you will be reading and executing the given below codes. Read the README instruction below for directions on how to compile and link the programs. Submit your answer in writing onto Blackboard.

  • Experiment 1. Thread and Process Creation
    Study the programs thr_create.c and fork.c. These programs measure the average time to create a thread using thr_create() and to create a process using fork(). Compile and execute the programs. What do you conclude from this experiment? Describe the reasons for the difference in timings.
  • Experiment 2. Processes vs Threads
    Study the two programs thr_shared.c and proc_shared.c. These programs are identical except that one uses threads and the other uses processes. Compile and execute the programs. What do you conclude from this second experiment? Explain the reason for the difference in behavior.
  • Experiment 3: The Update Problem
    Study the programs shared_data.c and SharedData.java. In these examples, multiple threads are both updating (i.e., modifying) a shared variable. Compile and execute both. Are the programs behaving “correctly”? What do you conclude from this experiment?
    README Instructions
  • Run the program on Linux platform.
  • To compile and run a C program (e.g., thr_create.c):
    gcc -o thr_create thr_create.c -lpthread thr_create
  • To build and run a classfile from the java code: javac SharedData.java
    java SharedData

page1image63834912page1image63835200page1image63835488page1image63835776page1image63836128page1image63836416

Submission Guidelines and Requirements

  • Submit your answers for all the experiments as a PDF file onto Blackboard
  • Include your name, UCM ID and Certification statement in your solution:
    //Your name
    // Your UCM ID
    //Certificate of Authenticity: “I certify that the codes/answers of this assignment are entirely my own work.”

thr_create.c

page2image105196192

#include <sys/time.h> #include <stdio.h> #include <pthread.h> #include <errno.h> main()

{
struct timeval start,end; long forktime;
double avgtime; pthread_t last_thread; int i;
int iters = 250;
void *null_proc();

gettimeofday(&start,NULL);

for (i = 0; i < iters – 1; i++) /* create (iters-1) threads */ pthread_create(&last_thread,NULL,null_proc,NULL);

pthread_create(&last_thread,NULL,null_proc,NULL); /* create last thread */ gettimeofday(&end,NULL);

pthread_join(last_thread, NULL); /* wait for last thread */ forktime = (end.tv_sec – start.tv_sec)*1000000 +

(end.tv_usec – start.tv_usec); avgtime = (double)forktime/(double)iters;

printf(“Avg thr_create time = %f microsecn”, avgtime); }

void *null_proc() {}

for (i = 0; i < iters; i++) /* create iters processes */ {

if ((pid = fork()) == 0) /* child process */ {

null_proc();

exit(1); }

else if (pid == -1) {

/* error */

printf(“error %dn”,errno);

exit(-1); }

else /* parent process */ continue;

}

/* only parent process reaches this point */ gettimeofday(&end,NULL);
for ( i = 0; i < iters; i++) /* have to do a wait for each child */ wait(&status);
forktime = (end.tv_sec – start.tv_sec)*1000000 +

(end.tv_usec – start.tv_usec); avgtime = (double)forktime/(double)iters;

printf(“Avg fork time =%f microsecn”, avgtime);

} null_proc() {
}

fork.c

page3image65305088

#include <sys/time.h> #include <stdio.h> #include <errno.h>

main() {

int pid;
struct timeval start,end;
int i;
long forktime;
double avgtime;
int iters = 250;
int status; gettimeofday(&start,NULL);

#include <sys/time.h> #include <stdio.h> #include <pthread.h> #include <unistd.h> #include <stdlib.h>

void *proc();
int shared_number;

main() {

int i;
pthread_t new_thread; int sleep_time;
int seed;

shared_number = 1;

printf(“Enter a positive integer for seed: “);
scanf(“%d”,&seed);
srand48(seed); /* initialize seed of random number stream */

/* thr_create(NULL,0,proc,NULL,0,&new_thread);*/ pthread_create(&new_thread,NULL,proc,NULL);
/* create new thread */

for (i = 0; i < 50; i++) {

printf(“MAIN THREAD: i = %d, shared_number = %dn”,i,shared_number); sleep_time = 100000.0*drand48(); /* generate random sleep time */ printf(“sleep time = %d microsecondsn”,sleep_time);
usleep(sleep_time);

shared_number = shared_number + 2; }

pthread_join(new_thread,NULL);

printf(“MAIN THREAD: DONEn”); }

thr_shared.c

page4image105085200

void *proc() {

int i = 0; int DONE;

DONE = 0; while (!DONE)

{ i++;

if (i%10000 == 0)
printf(“CHILD THREAD: i = %d,shared_number = %dn”,i,shared_number);

if (i > 5000000) DONE = 1;

}
printf(“CHILD THREAD: DONEn”);

}

#include <sys/time.h> #include <stdio.h> #include <pthread.h> #include <unistd.h> #include <stdlib.h> #include <errno.h>

void *proc();
int shared_number;

main() {

int i;
pthread_t new_thread; int sleep_time;
int pid;
int status;
int seed;

shared_number = 1;

proc_shared.c

page5image105361792

printf(“Enter a positive integer for seed: “); scanf(“%d”,&seed);

srand48(seed);

if ((pid = fork()) == 0) {

proc();

exit(0); }

else if (pid == -1) {

printf(“error %dn”,errno);

exit(-1); }

else
{ /* parent process */

for (i = 0; i < 50; i++) {

/* initialize random number stream */ /* child process */

/* error */

printf(“MAIN PROCESS: i = %d, shared_number = %dn”,i,shared_number); sleep_time = 100000.0*drand48(); /* generate random sleep time */ printf(“sleep time = %d microsecondsn”,sleep_time);
usleep(sleep_time);

shared_number = shared_number + 2; }

wait(&status); /* wait for child process */

printf(“MAIN PROCESS: DONEn”); }

}

void *proc() {

int i;
int DONE;

DONE = 0;
i = 0;
while (!DONE)

{ i++;

if (i%10000 == 0)

printf(“CHILD PROCESS: i = %d,shared_number = %dn”,i,shared_number); if (i > 5000000)

DONE = 1; }

printf(“CHILD PROCESS: DONEn”); }

shared_data.c

page7image64682480

#include <sys/time.h> #include <stdio.h> #include <pthread.h> #include <unistd.h> #include <stdlib.h>

void *proc();
int shared_number;

main() {

int i;
pthread_t new_thread; int sleep_time;
int number;
int seed;

shared_number = 1;
printf(“Enter a positive integer for seed: “); scanf(“%d”,&seed);
srand48(seed);

pthread_create(&new_thread,NULL,proc,NULL);

for (i = 0; i < 20; i++) {

number = shared_number;
printf(“MAIN THREAD: i = %d, shared_number = %dn”,i,shared_number); sleep_time = 100000.0*drand48(); /* generate random sleep time */ printf(“sleep time = %d microsecondsn”,sleep_time);

usleep(sleep_time);

shared_number = number + 2; }

pthread_join(new_thread,NULL);

printf(“MAIN THREAD: DONEn”); }

void *proc() {

int number,i; int sleep_time;

printf(“CHILDn”); for (i = 0; i < 10; i++)

{
number = shared_number;
printf(“CHILD THREAD: i = %d, shared_number = %dn”,i,shared_number); sleep_time = 100000.0*drand48(); /* generate random sleep time */ printf(“sleep time = %d microsecondsn”,sleep_time);
usleep(sleep_time);
shared_number = number + 200000;

}
printf(“CHILD THREAD: DONEn”);

}

SharedData.java

import java.util.Random;
public class SharedData extends Thread {

static Random gRandom = new Random(); static int gSharedNumber = 0;
private int gID;
public SharedData(int id) {

page8image105399776

this.gID = id; }

public void run() { for(int i=0;i<20;i++) {

int number = gSharedNumber; System.out.println(“SharedData[“+gID+”](i=”+i+”) = “+gSharedNumber); try { Thread.sleep(gRandom.nextInt(1000));
} catch (InterruptedException e) { /* ignore */ }
if(gID == 0) gSharedNumber = number + 1;
else gSharedNumber = number + 1000;

} }

public static void main(String args[]) throws Exception { SharedData sd1 = new SharedData(0);
SharedData sd2 = new SharedData(1);

sd1.start(); sd2.start();

sd1.join(); sd2.join(); }

}

Calculate the price
Make an order in advance and get the best price
Pages (550 words)
$0.00
*Price with a welcome 15% discount applied.
Pro tip: If you want to save more money and pay the lowest price, you need to set a more extended deadline.
We know how difficult it is to be a student these days. That's why our prices are one of the most affordable on the market, and there are no hidden fees.

Instead, we offer bonuses, discounts, and free services to make your experience outstanding.
How it works
Receive a 100% original paper that will pass Turnitin from a top essay writing service
step 1
Upload your instructions
Fill out the order form and provide paper details. You can even attach screenshots or add additional instructions later. If something is not clear or missing, the writer will contact you for clarification.
Pro service tips
How to get the most out of your experience with Australia Assessments
One writer throughout the entire course
If you like the writer, you can hire them again. Just copy & paste their ID on the order form ("Preferred Writer's ID" field). This way, your vocabulary will be uniform, and the writer will be aware of your needs.
The same paper from different writers
You can order essay or any other work from two different writers to choose the best one or give another version to a friend. This can be done through the add-on "Same paper from another writer."
Copy of sources used by the writer
Our college essay writers work with ScienceDirect and other databases. They can send you articles or materials used in PDF or through screenshots. Just tick the "Copy of sources" field on the order form.
Testimonials
See why 20k+ students have chosen us as their sole writing assistance provider
Check out the latest reviews and opinions submitted by real customers worldwide and make an informed decision.
Art (Fine arts, Performing arts)
Always follow instructions, especially on style.
Customer 460547, March 29th, 2022
Business and administrative studies
Good work.
Customer 459947, June 4th, 2022
Other
This week's order was phenomenally written and I did not have to request any revisions! Thank you to the writer for following all instructions as written and writing a phenomenal discussion paper.
Customer 452455, February 3rd, 2023
Business and administrative studies
Excellent.
Customer 460073, July 9th, 2022
Military
good job
Customer 456821, March 28th, 2022
Political science
Good comparison.
Customer 457487, April 17th, 2022
Healthcare & Medical
An exceptional blogpost
Customer 463337, December 14th, 2022
Military
Excellent work
Customer 456821, February 26th, 2022
Healthcare & Medical
Good work
Customer 463469, October 22nd, 2022
Medicine
Great job.
Customer 463301, November 14th, 2022
Management
Excellent work. Very grateful. Thank you. Will use again.
Customer 454227, April 4th, 2020
Aviation
Paper was received on time but the revision was late. This was worth the wait as the revision helped me better understand the topic more. Thanks!
Customer 454145, April 12th, 2020
11,595
Customer reviews in total
96%
Current satisfaction rate
3 pages
Average paper length
37%
Customers referred by a friend
OUR GIFT TO YOU
15% OFF your first order
Use a coupon FIRST15 and enjoy expert help with any task at the most affordable price.
Claim my 15% OFF Order in Chat