18. PERTERSON
int turn;
boolean interested[2];
do { do {
enter region
interested[0] = TRUE; interested[1] = TRUE;
turn = 0; turn = 1;
while (turn == 0 && interested[1]); while (turn == 1 && interested[0]);
/* critical region */ /* critical region */ leave region
interested[0] = FALSE; interested[1] = FALSE;
/* non critical region */ /* non critical region */
} while (TRUE); } while (TRUE);
0 1
41. _RESTART
struct stackframe_s (struct proc )
call save save jmp
SS SS k_stktop _restart
ESP ESP
EFLAGS EFLAGS
CS CS
EIP EIP
hwint_XX ret address (RETADR) hwint_XX ret address
EAX mov esp, k_stktop
ECX
save EDX
EBX save
ret jmp
ESP
hwint_XX ret _restart push
EBP
ESI
v3.1.8 EDI
DS ES
FS GS
struct stackframe_s
42. call save
SS SS
ESP ESP
EFLAGS EFLAGS
CS CS
EIP EIP
(Error Code) CPU push old EFLAGS
old CS
old EIP
_exception or
_errexception
C