O perating s ystems t hree e asy p ieces



Download 3,96 Mb.
Pdf ko'rish
bet220/384
Sana01.01.2022
Hajmi3,96 Mb.
#286329
1   ...   216   217   218   219   220   221   222   223   ...   384
Bog'liq
Operating system three easy pease

Thread 1

Thread 2

call lock()

while (flag == 1)

interrupt: switch to Thread 2

call lock()

while (flag == 1)

flag = 1;



interrupt: switch to Thread 1

flag = 1; // set flag to 1 (too!)

Table 28.1: Trace: No Mutual Exclusion

O

PERATING



S

YSTEMS


[V

ERSION


0.80]

WWW


.

OSTEP


.

ORG



L

OCKS


297

T

IP



: T

HINK


A

BOUT


C

ONCURRENCY

A

S

M



ALICIOUS

S

CHEDULER



What we also get from this example is a sense of the approach we

need to take when trying to understand concurrent execution. What you

are really trying to do is to pretend you are a malicious scheduler, one

that interrupts threads at the most inopportune of times in order to foil

their feeble attempts at building synchronization primitives. Although

the exact sequence of interrupts may be improbable, it is possible, and that

is all we need to show to demonstrate that a particular approach does not

work.


As you can see from this interleaving, with timely (untimely?) inter-

rupts, we can easily produce a case where both threads set their flags to 1

and both threads are thus able to enter the critical section. This is bad! We

have obviously failed to provide the most basic requirement: providing

mutual exclusion.

The performance problem, which we will address more later on, is the

fact that the way a thread waits to acquire a lock that is already held:

it endlessly checks the value of flag, a technique known as spin-waiting.

Spin-waiting wastes time waiting for another thread to release a lock. The

waste is exceptionally high on a uniprocessor, where the thread that the

waiter is waiting for cannot even run (at least, until a context switch oc-

curs)! Thus, as we move forward and develop more sophisticated solu-

tions, we should also consider ways to avoid this kind of waste.

28.7 Building A Working Spin Lock

While the idea behind the example above is a good one, it is not possi-

ble to implement without some support from the hardware. Fortunately,

some systems provide an instruction to support the creation of simple

locks based on this concept. This more powerful instruction has differ-

ent names – on SPARC, it is the load/store unsigned byte instruction

(ldstub), whereas on x86, it is the atomic exchange instruction (xchg)

– but basically does the same thing across platforms, and is usually gen-

erally referred to as test-and-set. We define what the test-and-set instruc-

tion does with the following C code snippet:

1

int TestAndSet(int *ptr, int new) {



2

int old = *ptr; // fetch old value at ptr

3

*ptr = new;



// store ’new’ into ptr

4

return old;



// return the old value

5

}



What the test-and-set instruction does is as follows. It returns the old

value pointed to by the ptr, and simultaneously updates said value to

new

. The key, of course, is that this sequence of operations is performed




Download 3,96 Mb.

Do'stlaringiz bilan baham:
1   ...   216   217   218   219   220   221   222   223   ...   384




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©hozir.org 2024
ma'muriyatiga murojaat qiling

kiriting | ro'yxatdan o'tish
    Bosh sahifa
юртда тантана
Боғда битган
Бугун юртда
Эшитганлар жилманглар
Эшитмадим деманглар
битган бодомлар
Yangiariq tumani
qitish marakazi
Raqamli texnologiyalar
ilishida muhokamadan
tasdiqqa tavsiya
tavsiya etilgan
iqtisodiyot kafedrasi
steiermarkischen landesregierung
asarlaringizni yuboring
o'zingizning asarlaringizni
Iltimos faqat
faqat o'zingizning
steierm rkischen
landesregierung fachabteilung
rkischen landesregierung
hamshira loyihasi
loyihasi mavsum
faolyatining oqibatlari
asosiy adabiyotlar
fakulteti ahborot
ahborot havfsizligi
havfsizligi kafedrasi
fanidan bo’yicha
fakulteti iqtisodiyot
boshqaruv fakulteti
chiqarishda boshqaruv
ishlab chiqarishda
iqtisodiyot fakultet
multiservis tarmoqlari
fanidan asosiy
Uzbek fanidan
mavzulari potok
asosidagi multiservis
'aliyyil a'ziym
billahil 'aliyyil
illaa billahil
quvvata illaa
falah' deganida
Kompyuter savodxonligi
bo’yicha mustaqil
'alal falah'
Hayya 'alal
'alas soloh
Hayya 'alas
mavsum boyicha


yuklab olish