In this assignment, you will implement several programs with Unix/Linux semaphores and shared memory to handle airline reservations taken by different agents connected to the “Fall-OS” airline’s central computer.

computer science

Description

COSC 3360/6310 - Operating Systems Fall 2020

Programming Assignment 2: Unix/Linux Semaphores and Shared

Memory; EDF and LLF Scheduling

In this assignment, you will implement several programs with Unix/Linux semaphores and shared memory to handle airline reservations taken by different agents connected to the “Fall-OS” airline’s central computer.

Suppose each travel agent is represented by a process and the body of the process consists of all the reservations/ticketing made by that agent. An agent can make reservations, ticketing (selling of seats), cancellation of reservations/ticketing. Two or more agents may be doing the same transactions at around the same time. Obviously, reservations/ticketing to the same flight must be performed atomically (mutual exclusively). If an agent tries to reserve/ticket a seat that has already been taken, then disallow this action and print a “seat taken” message. If a transaction tries to operate on a non-existent flight or seat, print an appropriate error message.

To ensure these concurrent operations yield correct results, you are to use Unix semaphores to control access to flights, which are stored in shared variables. Each individual flight should be controlled by at least one semaphore. Also, the information database for each flight is stored in shared memory.

To simulate (1) the transmission delay between the airline’s central computer and an agent’s computer terminal and (2) the processing of each transaction, the first six lines in the body of each agent specify the required total execution time (in milliseconds) for each of the six operations performed at that agent. In your implementation, each specified time is the length of the critical section for the corresponding transaction.

Valid transactions are:

reserve flight_number seat_number name_of_passenger deadline d1

wait flight_number seat_number name_of_passenger deadline d2

waitany flight_number seat_number name_of_passenger deadline d3

ticket flight_number seat_number name_of_passenger deadline d4

cancel flight_number seat_number name_of_passenger deadline d5

check_passenger passenger_name deadline d6 /* show seats reserved or ticketed */

 

You don’t need to reserve before you ticket a seat. The ‘wait’ transaction is like ‘reserve’ except that ‘wait’ will wait-list the passenger for the selected seat if this seat is currently not available, and is like ‘ticket’ if this seat is currently available. The agent with this ‘wait’ transaction continues to perform the next transaction regardless of the availability of the selected seat. Note that if this seat is currently unavailable and later becomes available as a result of a ‘cancel’ transaction by another passenger, then this seat will be sold to the passenger who first executed the ‘wait’ transaction in case there are two or more passengers waiting for this seat. The ‘waitany’ transaction is like ‘wait’ except that at the end of the execution of the agent executing this transaction, if no one cancels the requested seat, then the airline reservation system assigns an available seat in a lowest-numbered row (closest to the front) on this flight.

You can cancel a seat only after you have reserved/ticketed it.

Each transaction is followed by the keyword deadline and its numerical value (in milliseconds, relative to the start time of the process or process creation time) for completing this transaction.


Related Questions in computer science category