«

»

Oct
19

Warning: FIFO Buffer Underrun!

Weeknight tip for today: Get all grocery items for the week ahead of time.  Going to the grocer for that one forgotten or newly inspired item is grossly inefficient.

Grocery stores are full of inefficiencies, but the operators do realize it and try to balance performance with operational expenses.  It costs a lot of overhead to have all-lanes-open, and the non-food-value added cost gets added to the price of food items.  In a way to improve checkout efficiency, lots of stores employ checkout conveyor belts that allow customers to load the carefully selected items to be checked-out while the attendant is moving items along at the front.  This enables the “workload” to be buffered for the checkout attendant (“the processor”).  The FIFO buffer approach ensures that the workload is ready for operation when the cashier is able to pull it.  If not for the conveyor belt, checkout throughput would be severely limited by the rate at which the customer can directly transfer items up to 2-3 at a time from cart/basket to cashier.  See system diagram:

System Diagram of a Typical Grocery Checkout

The Grocery Store Architecture usually works well, but it requires that the customer nodes within the queue are dutifully loading the buffer.  In an effort to improve throughput and space utilization, some customers (like myself) tightly pack and stack items to take up less footprint, leaving more room for the next workload.  (it drives my wife batty sometimes).  Regardless of clustering levels, the buffer has to be fed for the system to operate at peak performance.

Reading Task Interrupt has locked the "Arms" Semaphore preventing the Buffer-Load Task to complete.

One pitfall of many grocery checkout arrangements is the excess interrupt sources (distractions, impulse buy items) that are in place.  Just look at the scenario above: so many colorful pages, tempting candies, and festive decorations that have to be masked out or disabled by the customer upon queue entry.  As we can see, failing to disable interrupts can lead to the Buffer Load Task being starved for resource (arms), leading to Buffer Under-Run.

 

Facebook Twitter Email