Computer Systems: A Programmer's Perspective (3rd Edition)
Computer Systems: A Programmer's Perspective (3rd Edition)
3rd Edition
ISBN: 9780134092669
Author: Bryant, Randal E. Bryant, David R. O'Hallaron, David R., Randal E.; O'Hallaron, Bryant/O'hallaron
Publisher: PEARSON
bartleby

Concept explainers

Expert Solution & Answer
Book Icon
Chapter 12, Problem 12.38HW

Explanation of Solution

Implementation of a concurrent prethreaded version of the TINY web server:

Modified code for “sbuf.h” file:

The modified code for “sbuf.h” from section 12.5.4 in book is given below:

#ifndef SBUF_HEADER

#define SBUF_HEADER

#include "csapp.h"

typedef struct

{

int *buf;          /* Buffer array */

int n;             /* Maximum number of slots */

int front;         /* buf[(front+1)%n] is first item */

int rear;          /* buf[rear%n] is last item */

sem_t mutex;       /* Protects accesses to buf */

sem_t slots;       /* Counts available slots */

sem_t items;       /* Counts available items */

} sbuf_t;

//Function declaration

void sbuf_init(sbuf_t *sp, int n);

void sbuf_deinit(sbuf_t *sp);

void sbuf_insert(sbuf_t *sp, int item);

int sbuf_remove(sbuf_t *sp);

//Function declaration for sbuf_empty

int sbuf_empty(sbuf_t *sp);

//Function declaration for sbuf_full

int sbuf_full(sbuf_t *sp);

#endif

Modified code for “sbuf.c” file:

The modified code for “sbuf.c” from section 12.5.4 in book is given below:

#include "csapp.h"

#include "sbuf.h"

/* Create an empty, bounded, shared FIFO buffer with n slots */

void sbuf_init(sbuf_t *sp, int n)

{

  sp->buf = Calloc(n, sizeof(int));

  sp->n = n;                       /* Buffer holds max of n items */

  sp->front = sp->rear = 0;        /* Empty buffer if front == rear */

  Sem_init(&sp->mutex, 0, 1);      /* Binary semaphore for locking */

  Sem_init(&sp->slots, 0, n);      /* Initially, buf has n empty slots */

  Sem_init(&sp->items, 0, 0);      /* Initially, buf has zero data items */

}

/* Clean up buffer sp */

void sbuf_deinit(sbuf_t *sp)

{

  Free(sp->buf);

}

/* Insert item onto the rear of shared buffer sp */

void sbuf_insert(sbuf_t *sp, int item)

{

  P(&sp->slots);                          /* Wait for available slot */

  P(&sp->mutex);                          /* Lock the buffer */

  sp->buf[(++sp->rear)%(sp->n)] = item;   /* Insert the item */

  V(&sp->mutex);                          /* Unlock the buffer */

  V(&sp->items);                          /* Announce available item */

}

/* Remove and return the first item from buffer sp */

int sbuf_remove(sbuf_t *sp)

{

int item;

  P(&sp->items);                          /* Wait for available item */

  P(&sp->mutex);                          /* Lock the buffer */

  item = sp->buf[(++sp->front)%(sp->n)];  /* Remove the item */

  V(&sp->mutex);                          /* Unlock the buffer */

  V(&sp->slots);                          /* Announce available slot */

return item;

}

//Function definition for empty buffer

int sbuf_empty(sbuf_t *sp)

{

//Declare variable

int ne;

//For lock the buffer

  P(&sp->mutex);                        

  ne = sp->front == sp->rear;

//For lock the buffer

  V(&sp->mutex);                         

return ne;

}

//Function definition for full buffer

int sbuf_full(sbuf_t *sp)

{

//Declare variable

int fn;

//For lock the buffer

  P(&sp->mutex);                        

  fn = (sp->rear - sp->front) == sp->n;

//For lock the buffer

  V(&sp->mutex);                        

return fn;

}

For code “tiny.c” and “tiny.h”:

Same code as section 11.6 in book.

sample.html:

<!DOCTYPE html>

<html>

<head>

<meta charset="utf-8" />

<title>Home</title>

</head>

<body>

Tiny server Example

</body>

</html>

main.c:

#include <stdio.h>

#include "csapp.h"

#include "tiny.h"

#include "sbuf...

Blurred answer
Students have asked these similar questions
Task 2: Comparable Interface and Record (10 Points) 1. You are tasked with creating a Java record of Dog (UML is shown below). The dog record should include the dog's name, breed, age, and weight. You are required to implement the Comparable interface for the Dog record so that you can sort the records based on the dogs' ages. Create a Java record named Dog.java. name: String breed: String age: int weight: double + toString(): String > Dog + compareTo(otherDog: Dog): int > Comparable 2. In the Dog record, establish a main method and proceed to generate an array named dogList containing three Dog objects, each with the following attributes: Dog1: name: "Buddy", breed: "Labrador Retriever", age: 5, weight: 25.5 Dog2: name: "Max", breed: "Golden Retriever", age: 3, weight: 30 Dog3: name: "Charlie", breed: "German Shepherd", age: 2, weight: 22 3. Print the dogs in dogList before sorting the dogList by age. (Please check the example output for the format). • 4. Sort the dogList using…
The OSI (Open Systems Interconnection) model is a conceptual framework that standardises the functions of a telecommunication or computing system into seven distinct layers, facilitating communication and interoperability between diverse network protocols and technologies. Discuss the OSI model's physical layer specifications when designing the physical network infrastructure for a new office.
In a network, information about how to reach other IP networks or hosts is stored in a device's routing table. Each entry in the routing table provides a specific path to a destination, enabling the router to forward data efficiently across the network. The routing table contains key parameters determining the available routes and how traffic is directed toward its destination. Briefly explain the main parameters that define a routing entry.
Knowledge Booster
Background pattern image
Computer Science
Learn more about
Need a deep-dive on the concept behind this application? Look no further. Learn more about this topic, computer-science and related others by exploring similar questions and additional content below.
Similar questions
SEE MORE QUESTIONS
Recommended textbooks for you
Text book image
Systems Architecture
Computer Science
ISBN:9781305080195
Author:Stephen D. Burd
Publisher:Cengage Learning
Text book image
Operations Research : Applications and Algorithms
Computer Science
ISBN:9780534380588
Author:Wayne L. Winston
Publisher:Brooks Cole
Text book image
Np Ms Office 365/Excel 2016 I Ntermed
Computer Science
ISBN:9781337508841
Author:Carey
Publisher:Cengage
Text book image
Programming Logic & Design Comprehensive
Computer Science
ISBN:9781337669405
Author:FARRELL
Publisher:Cengage
Text book image
EBK JAVA PROGRAMMING
Computer Science
ISBN:9781337671385
Author:FARRELL
Publisher:CENGAGE LEARNING - CONSIGNMENT
Text book image
LINUX+ AND LPIC-1 GDE.TO LINUX CERTIF.
Computer Science
ISBN:9781337569798
Author:ECKERT
Publisher:CENGAGE L