Communicationsmodels
- 需要kernel参与 => 性能更好
- kernel只提供一个shared memory => 安全性更好,不直接暴露数据
IPC
Interprocess communication
Models: shared memory; message passing
In xv6: pipe
通过read write交互
Message passing
- 过程:
- Communication link
- Exchange message via send/receive
- Direct communication
- Send(P, message); receive(Q, message)
- Links are established automatically
- One link between any two processes
- P, Q connect directly
- Indirect communication
- Mailboxes
- Operations:
- Create a new mailbox
- Send/receive through mailbox
- Destroy a mailbox
- Synchronization & asynchronous
- Message passing => blocking/non-blocking
- Blocking => synvhronous
- Sender block until the message is received
- Receiver block until a message is available
- Non-blocking => asynchronous
- Sender send message and continue
- Receiver receive a valid message or null
Interrupt, trap, sys call
Sys call
User ask for an OS service
Exception
Refer to illegal program action
Interrupt
Refer to sigal generated by a hardware device
LRPC (lightweight RPC)
- Simple control transfer: Client's thread executes in server's domain
- Simple data transfer: Shared argument stack
- Simple stubs: highly optimized marshalling
- Better concurrency
- High overhead of previous efforts
- Stubs copy lots of data
- Message copied from kernel
- Access validation => security
- Message transfer => wait
- Scheduling
- Context switch => 2 times
- Dispatch =>one after another
- Connection setup phase
- PDs (procedure descriptors) registered with kernel => like FDs
- Argument stacks (a-stack) => 也保存返回值
- Linkage records => store return address
- Kernel return a-stack list to client
- Calling sequence
- Client get a-stack
- Find linkage
- Ensure no thread using that a-stack/linkage
- Put caller's return address and stack pointer in linkage
- Push linkage on to thread control block's stack
- Find an execution stack (E-stack => server's stack, like kernel stack) in server's domain
- Update thread's SP to run off e-stack
- CR3 perform address space switch to server domain
- Upcall server's stub at address given in PD
- Discussion
- Main kernel houskeeping task is allocationg A-stacks and E-stacks
- Shared A-stacks safe and quick
- Address spack switch is most of the overhead (no TLB tags => don't need to clear up the TLB)