Mach
taskSelf
generally used only with vmAllocateWithPager, vmAllocate, and vmDeallocate
YggdrasilInitImpl uses portRestrict, portAllocate, portUnrestrict, MachPortsLookup,
taskNotify
YggdrasilInitImpl looks for connection failures
Æ vmAllocate
YggFileImpl allocates the shadow bitmap (and something)
Æ vmAllocateWithPager
YggBuffManImpl and YggFileImpl (all kinds of init code)
Æ vmDeallocate
CamelotImpl for dumping VM from messages
YggdrasilInitImpl for GetTheDSPort
YggFileImpl for all kinds of init code
YggBuffManImpl for dumping buffers
msgSend
YggdrasilInitImpl for MIG calls
msgReceive
YggdrasilInitImpl for MIG calls
nameServerPort
YggdrasilInitImpl - init stuff
CamelotImpl - using it to find things
MachPortsLookup
YggdrasilInitImpl wants to find the DS port
portAllocate
YggdrasilInitImpl
portRestrict
YggdrasilInitImpl
portUnrestrict
YggdrasilInitImpl
netnameCheckIn
YggdrasilInitImpl
Camelot
DSInitialize
YggdrasilInitImpl
Æ DSPinObject
YggBuffManImpl, YggDIDMapImpl, YggFileImpl, and YggFileSegmentImpl
Æ DSLogNewValue
YggDIDMapImpl and YggFileImpl
Æ DSLogOldValueNewValue
YggBuffManImpl and YggFileSegmentImpl
DSQInit
YggdrasilInitImpl
TAAddApplication
YggdrasilInitImpl
Æ TABegin
YggTransactionImpl
Æ TAEnd
YggTransactionImpl
Æ TAKill
YggTransactionImpl
CALookup
YggdrasilInitImpl
STServer
YggMIGServerProcsImpl - MIG stuff
SRServer
YggMIGServerProcsImpl - MIG stuff
ATServer
YggMIGServerProcsImpl - MIG stuff
Summary: five things
Communications
init
Pin and log dance: DSPinObject, DSLogNewValue, and DSLogOldValueNewValue
Transactions: TABegin, TAEnd, and TAKill
VM: vmAllocate, vmAllocateWithPager, and vmDeallocate
Implementation ideas
vmAllocate: allocate
vmAllocateWithPager: allocate and read in copy from disk
vmDeallocate: write out if dirty and with pager, and then deallocate
TABegin: note start of xact
TAEnd: note commit of xact; write commit record and force log; unpin everything this xact pinned
TAKill: note abort of xact; write abort record without force; unpin everything this xact pinned
DSPinObject: note pin of object; prevents VM manager from writing it.
DSLogNewValue: log it
DSLogOldValueNewValue: log it
VM manager has to periodically flush altered memory to disk in keeping with some recovery/checkpoint invariant