Win32 Programming

Download Report

Transcript Win32 Programming

Secure Operating Systems
Lesson 5: Shared Objects
Where are we?


We have got more of the fundamental security
structures of our OS in our heads
But now we have to face a real challenge:
shared objects
The OS doesn’t HAVE TO…



I’ve used that heading before, but it’s true
There’s no requirement for our OS to support
sharing between users and processes… but it
sure comes in handy
Once again, we have a tension between
performance and security
Two Parts of the Problem


Sharing actual information
Synchronizing between threads and/or
processes
Peterson’s Solution

Two shared variables:


int turn;
boolean flag[2]
Code:

flag[i] = TRUE;
turn = j;
while (flag[j] && turn == j);
// Do Critical Section
flag[i] = FALSE;
Peterson’s Solution II
PROCESS 0
 flag[0] = TRUE;
turn = 1;
while(flag[1] &&
turn == 1);
// Critical Section
flag[0] = FALSE;
PROCESS 1
 flag[1] = TRUE;
turn = 0;
while(flag[0] &&
turn == 0);
// Critical Section
flag[1] = FALSE;
Hardware Support



The challenge of disabling interrupts is that it’s
expensive
Many OS provide a hardware “test and set”
instruction, which allows atomic access to a
chunk of memory
Swap:
void Swap(boolean *a, boolean *b) {
boolean temp = *a;
*a = *b;
*b = temp;
}
Implemented as…


do {
key = TRUE;
while (key == TRUE)
swap(&lock, &key);
// Critical Section
lock = FALSE;
} while (TRUE);
Mutual-exclusion with Swap…
Semaphores



wait(S) {
while (S <= 0); //nop
S--;
}
signal(S) {
S++;
}
This really looks like a spinlock…
Semaphores

wait(semaphore *S) {
S->value--;
if (S->value < 0) {
add this proc to S->list;
block(); // SLEEP
}
} // This will halt until we own the semaphore
Deadlocks

P0


wait(S);
wait(Q);
…
signal(S);
signal(Q);
P1

wait(Q);
wait(S);
…
signal(Q);
signal(S);
Priority Inversion




Imagine we have three procii , L, M and H,
where L is Low Priority, M, medium, and H,
High
L is holding a resource which is blocking H, but
gets swapped out for M
This is known as Priority Inversion… and it’s a
real problem!
Probably we should talk about different
scheduling approaches
Mars Sojourner





Long running, medium priority Comms task
Low priority weather task
High priority information bus thread
Low priority wx task acquires a mutex for the
bus… gets interrupted by the Comms task (long
running), blocking the high priority bus thread…
tada! Priority Inversion
Can be a security issue too!

Can be solved by priority inheritance
Atomicity




Making sure something is atomic is pretty easy
on a single core system
On a more complex system it can get REALLY
hard
One approach is transactional memory – move
the problem to the memory not the programmer
None of this has even touched on how we
SHARE information between processes…
Race Conditions


Poor synchronization can lead to race
conditions – a subset of which is called
TOCTOU
Race conditions arise from interdependence
that is unrealized or incorrectly implemented
Things to Do

Read “An Investigation of the Therac-25
Accidents”, Nancy Leveson, Clark S. Turner
Questions & Comments

What do you want to know?