CIS332-004, CIS 332-104 (Spring 1996) PRINCIPLES OF OPERATING SYSTEMS
Home page:http://www.cis.njit.edu/franz E-mail:franz@cis.njit.edu
Use the comments as guidelines to insert the code for the new task.
To test your program, type in characters; when you type `Z', the program stops.
You need to hand in a printout of your program (the Ada code, not the output)a, by Thursday, February 22nd.
You can send a mail message to Shiwen Chen, Schen@homer.njit.edu, to receive the incomplete code which you will have to complete.
with TEXT_IO; use TEXT_IO; procedure prodcons is item : CHARACTER; task type consumer; task type producer; -- Declare the new task task type buffer is entry start_buffer; entry insert(item : in CHARACTER); -- deposit an item in the buffer entry remove(item : out CHARACTER); -- retrieve an item from the buffer end buffer; -- Create an instance of each task b : buffer; p : producer; c : consumer; task body buffer is n : constant integer := 100; -- buffer size count : integer range 0..n := 0; -- items in the buffer in_ch, out_ch : integer range 1..n := 1; -- in and out indices bound_buf : array(1..n) of CHARACTER; -- the buffer item : CHARACTER; -- items are characters begin accept start_buffer do put_line("Starting buffer"); end; put_line("Buffer is active"); loop select when count < n => -- buffer is not full accept insert( item: in CHARACTER ) do bound_buf(in_ch) := item; put_line("Item inserted into the buffer: "); put(item); -- display produced item in_ch:= (in_ch mod n) + 1; count := count + 1; end; or when count > 0 => -- buffer is not empty accept remove(item : out CHARACTER) do item := bound_buf(out_ch); out_ch := (out_ch mod n) + 1; count := count - 1; end remove; or terminate; end select; end loop; put_line("Exiting buffer"); end buffer; task body producer is item : CHARACTER; begin put_line("Producer is active"); loop get(item); -- read item from the keyboard b.insert(item); -- put it into the buffer get(item); -- read item from the keyboard b.insert(item); -- put it into the buffer exit when item = 'Z'; end loop; put_line("Exiting producer"); end producer; task body consumer is -- You need to write the code for the consumer task. -- Each time it is invoked, the consumer task consumes TWO items. -- Use the producer task as a guideline, and try to find -- useful commmands in the rest of the code. -- Everything you need is already somewhere in here, -- you just have to put it together in the right way. begin put("Producer/Consumer Problem"); NEW_LINE; b.start_buffer; end prodcons;
CIS 332 Principles of Operating Systems Spring 1996; Franz Kurfess.