Computer Systems: A Programmer's Perspective Plus Mastering Engineering With Pearson Etext -- Access Card Package (3rd Edition)
Computer Systems: A Programmer's Perspective Plus Mastering Engineering With Pearson Etext -- Access Card Package (3rd Edition)
3rd Edition
ISBN: 9780134123837
Author: Randal E. Bryant, David R. 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
Activity No. Activity Time (weeks) Immediate Predecessors 1 Requirements collection 3 2 Requirements structuring 4 1 3 Process analysis 3 2 4 Data analysis 3 2 5 Logical design 50 3,4 6 Physical design 5 5 7 Implementation 6 6 c. Using the information from part b, prepare a network diagram. Identify the critical path.
Given the following Extended-BNF grammar of the basic mathematical expressions:  Show the derivation steps for the expression: ( 2 + 3 ) * 6 – 20 / ( 3 + 1 ) Draw the parsing tree of this expression. SEE IMAGE
Whentheuserenters!!,themostrecentcommandinthehistoryisexecuted.In the example above, if the user entered the command: Osh> !! The ‘ls -l’ command should be executed and echoed on user’s screen. The command should also be placed in the history buffer as the next command. Whentheuserentersasingle!followedbyanintegerN,theNthcommandin the history is executed. In the example above, if the user entered the command: Osh> ! 3 The ‘ps’ command should be executed and echoed on the user’s screen. The command should also be placed in the history buffer as the next command. Error handling: The program should also manage basic error handling. For example, if there are no commands in the history, entering !! should result in a message “No commands in history.” Also, if there is no command corresponding to the number entered with the single !, the program should output "No such command in history."
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