0% found this document useful (0 votes)
384 views1 page

The TSL Instruction: Examples To Use Sleep and Wakeup Primitives

The document describes a test-and-set lock (TSL) instruction that can be used to implement mutual exclusion for critical regions. It reads and sets a memory word atomically, allowing a process to acquire the lock by setting the word to a non-zero value. Processes must call enter_region to acquire the lock and busy-wait if it is held, and leave_region to release the lock. This can cause priority inversion problems if a high priority process is waiting for a lock held by a low priority process. Using sleep and wakeup calls instead of busy waiting avoids wasting CPU time and the priority inversion problem.

Uploaded by

suwask
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOC, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
384 views1 page

The TSL Instruction: Examples To Use Sleep and Wakeup Primitives

The document describes a test-and-set lock (TSL) instruction that can be used to implement mutual exclusion for critical regions. It reads and sets a memory word atomically, allowing a process to acquire the lock by setting the word to a non-zero value. Processes must call enter_region to acquire the lock and busy-wait if it is held, and leave_region to release the lock. This can cause priority inversion problems if a high priority process is waiting for a lock held by a low priority process. Using sleep and wakeup calls instead of busy waiting avoids wasting CPU time and the priority inversion problem.

Uploaded by

suwask
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOC, PDF, TXT or read online on Scribd
You are on page 1/ 1

The TSL Instruction

TSL RX,LOCK
(Test and Set Lock) that works as follows: it reads the contents of the memory word LOCK into register RX and then stores
a nonzero value at the memory address LOCK. The operations of reading the word and storing into it are guaranteed to be
indivisibleno other processor can access the memory word until the instruction is finished. The CPU executing the TSL
instruction locks the memory bus to prohibit other CPUs from accessing memory until it is done.
enter_region:
TSL REGISTER,LOCK |copy LOCK to register and set LOCK to 1
CMP REGISTER,#0 |was LOCK zero?
JNE ENTER_REGION |if it was non zero, LOCK was set, so loop
RET |return to caller; critical region entered
leave_region:
MOVE LOCK,#0 |store a 0 in LOCK
RET |return to caller
One solution to the critical region problem is now straightforward. Before entering its critical region, a process calls
enter_region, which does busy waiting until the lock is free; then it acquires the lock and returns. After the critical region
the process calls leave_region, which stores a 0 in LOCK. As with all solutions based on critical regions, the processes must
call enter_region and leave_region at the correct times for the method to work. If a process cheats, the mutual exclusion will
fail.
Problems with mutual Exclusion:
Mutual Exclusion with busy waiting just check to see if the entry is allowed when a process wants to enter its critical region,
if the entry is not allowed the process just sits in a tight loop waiting until it is
1. This approach waste CPU time
2. There can be an unexpected problem called priority inversion problem.
Priority Inversion Problem:
Consider a computer with two processes, H, with high priority and L, with low priority, which share a critical region. The
scheduling rules are such that H is run whenever it is in ready state. At a certain moment, with L in its critical region, H
becomes ready to run (e.g., an I/O operation completes). H now begins busy waiting, but since L is never scheduled while H
is running, L never gets the chance to leave its critical region, so H loops forever. This situation is sometimes referred to as
the priority inversion problem.
Sleep and Wakeup:
Sleep and wakeup are system calls that blocks process instead of wasting CPU time when they are not allowed to enter their
critical region. sleep is a system call that causes the caller to block, that is, be suspended until another process wakes it up.
The wakeup call has one parameter, the process to be awakened.
Page:25 Compiled by: Daya Ram Budhathoki
Examples to use Sleep and Wakeup primitives:
Producer-consumer problem (Bounded Buffer):
Two processes share a common, fixed-size buffer. One of them, the producer, puts information into the buffer, and the other
one, the consumer, takes it out.
Trouble arises when
1. The producer wants to put a new data in the buffer, but buffer is already full.
Solution: Producer goes to sleep and to be awakened when the consumer has removed data.
2. The consumer wants to remove data the buffer but buffer is already empty.
Solution: Consumer goes to sleep until the producer puts some data in buffer and wakes consumer up.

You might also like