Operating Systems 2018F Lecture 10
Note this lecture did not take place in our usual classroom; instead, it took place via BigBlueButton.
I forgot to hit record so I don't have a recording of the session. If any of you recorded the audio please let me know and I will post it. Sorry!
Readings
See "man 4 urandom"
Notes from Lecture
Lecture 10
----------
Topics
- shared memory
- format, questions on Test 1
- Assignment 2 finalized, submissions open
- randomness
- /dev/random, /dev/urandom
- interrupted system calls
Randomness
randomness versus pseudo-randomness
pseudo-random
- looks statistically random
- but is generated by an algorithm
- so, it is deterministic
- to get different outputs, need a different "seed"
Staticstical randomness is relatively easy
has no relationship to predictability
If you want hard to predict, you need a "cryptographically secure"
pseudo-random number generator
/dev/urandom - cryptographically secure pseudo-random number generator...
seeded by /dev/random (or, the data behind it)
/dev/random - source of "true" randomness
ultimate source of randomness is physics
- flipping a coin
- radioactive decay
- turbulent movement
/dev/random is connected to device drivers
- devices can have access to real randomness (physics phenomena)
- examples
- time for a hard drive head to settle down in a new position
- inter-arrival times of network packets
- CPUs have built-in "random number generators" based on
physical phenomena
- static on an audio device
physical processes won't be unbiased - there will be a probability distribution
So, what /dev/random does is
- gathers events from different "random" sources
- merges them together and processes them so you get a set
of uniform random bits
/dev/random is expensive in two ways
- processing (whitening) costs some cycles
- but most expensive is waiting for the events!
Interrupted system calls
this borders on a complex topic: scheduling
How does the kernel switch between running processes?
When a system call happens
- process makes a system call
- CPU switches to supervisor mode, jumps to system call handler
- kernel processes system call
- kernel switches CPU to user mode and sets up
registers so process resumes where it left off
(with results of system call in registers and the stack)
Why does the kernel have to return to the same process that
made the system call?
- IT DOESN'T
What about sleep?
system call nanosleep just tells the kernel to wait for a while before
running this process again
Supervisor mode versus user mode
Supervisor mode
---------------
- kernel code
- entered by a
- process making a system call
- interrupt from a hardware device
- runs on CPU directly with full privileges
User mode
---------
- process code
- entered by kernel running the process (switching from supervisor->user mode)
- runs on CPU directly, but with limited privileges
Could I run strace for ALL system calls on a system