Exokernel
An operating system architecture for
application level resource management
B4. グェン トアン ドゥク
1
全体の内容
1. Abstractions in traditional operating
systems
2. Exokernel overview
3. Exokernel architecture
4. Exokernel design
5. Summary
2
全体の内容
1. Abstractions in traditional operating
systems
2. Exokernel overview
3. Exokernel design
4. Exokernel implementation
5. Summary
3
Abstractions in traditional OS

General purpose abstractions



固定したインタフェースと実装
どのアプリケーションがその上で動いているか
は考慮しない
問題点:


Resourceの管理の仕方はほとんど決められ、
(applicationは)勝手に変えられない
Hardware abstractionはほとんど変わらない

より良いやり方があっても適用しない
4
Abstraction in traditional OS

Applicationはそれらの問題点に影響され
る

アプリケーションのperformanceを減らす


Applicationに(ハードウェアの)情報を隠す


Application特定の性質を利用できない
HW exceptions, page faults, raw device I/O….
Applicationの機能を限定する

Applicationとhardwareとのインタフェースは唯一に決められ
る
5
全体の内容
1. Abstractions in traditional operating
systems
2. Exokernel overview
3. Exokernel design
4. Exokernel implementation
5. Summary
6
Exokernel overview(1)


どのアプリケーションでもresourceを自分で管理
できる
Resourceの管理と保護を分離する



Kernel は安全にresourceを保護する
Applicationは効率的にresourceを管理する
Kernel は resourceをapplicationにexportする



Virtual memory, file systemなどはapplication
libraryにある
それらのライブラリはlibrary operating
system(LibOS)と呼ぶ
Hardware は異なるLibOS間で共有している
7
Exokernel overview(2)

保護と管理の分離の理由



LibOSがprivileged OSと同等な能力を持ち、し
かも(applicationの)performanceに影響しな
い
各OSが“同居”できるようにする
OSのabstractionの仕方を容易に変化できる
ようにする
8
全体の内容
1. Abstractions in traditional operating
systems
2. Exokernel overview
3. Exokernel design
4. Exokernel implementation
5. Summary
9
Exokernel design



3.1. Design principles
3.2. Exokernel architecture
3.3. Resource multiplexing
10
3.1. Design principles


保護機能と管理機能を分離する
何でもExposeする(見せる)
11
保護機能と管理機能を分離する

保護機能に必要な管理機能だけを実現する


保護機能とは?




Timer, TLBはkernelが管理する
Resourceの所有権を監視する
Resourceが使用される度に所有権をチェックする
必要なときには、resourceのaccess権利をapplication
から取り戻す
Resourceの使い方はLibOSに任せる
12
何でもexposeする(1)

Expose hardware


Applicationは全てのhardware resourceにaccessで
きる(CPU, TLB, physical memory, disk, exception,
interrupt…)
保護機能を実現できる限り、resourceを低レベルで見
せる


Disk block, physical pages…を見せる、高度抽象化したファ
イルなどとして見せない.
Expose allocation


Application allocates resource explicitly、つまり、
applicationはresource allocation過程に参加する
Applicationは色々な情報を持っているので、参加す
ると最適化できる
13
何でもexposeする(2)

Expose nameとsystem infomation



Physical nameを使う(physical disk block…)
System全体の情報を見せる(kernel data structure,
system statistic…)
Expose revocation

Visible resource revocation(resourceを取り戻すとき
に、applicationに知らせる)


例えばmemoryを回収するときに、applicationがどのpageを
返すかを決める
Applicationは所有しているresourceを制御できる
14
3.2. Exokernel architecture

Exokernel はハードウェアの上の薄いlayerであ
る。



そのlayerがhardwareをmultiplexするし、exportする
(low-level primitivesとして、exportする)
例): CPU: yeild(), TLB: TLBwrite(), TLBvadelete(),
…
Exokernel上のlibrary operating systemが高度
な抽象化を実現する



Virtual memory, file system…などを実装する
この抽象化は簡単に拡張、変化できる
色々なLibOSが同じkernel上で共存できる
15
Exokernel architecture
16
Secure binding(1)



Resourceを安全にmultiplexする(複数があるように見せ
る)ために、resourceを監視する必要がある
Resourceの監視を効率的に実現するために、kernel は
LibOSをresourceにsecure bindingさせる
Secure bindingとは、application(LibOS) がresourceの
所有権をもらうことである


Kernelが提供されたプリミティブ群を用いて所有権を宣言する
(例: TLBwrite()). 宣言するときはbind timeと呼び、使用すると
きはaccess timeと呼ぶ.
Bind timeでkernelは権限をチェックする、access timeはチェック
しなくて済む.
17
Secure binding(2)
18
Secure binding(3)

Secure bindingを実現するために、3つの方法が
ある

ハードウェアサポートを利用する


Software caching


TLB faultのとき、application(LibOS)がTLBWrite() を 呼ぶ
(bind time)、その後、自由に使える(access time)
Software TLBを実現する
Downloading application code



Application codeをkernel にdownloadする
権限チェックなどの時にこのコードをkernelで実行
Applicationがscheduleされなくてもこのコードが実行できる
19
3.3. Resource multiplexing




Multiplexing
Multiplexing
Multiplexing
Multiplexing
CPU
Physical memory
Network
Disk
20
Multiplexing CPU(1)





CPUをtime slices vectorとして見る
ProcessはCPUのtime slicesをallocateできる(メ
モリのように)
Time sliceはtimer interruptでマークされる
Kernel schedulerはそのtime slices vector上の
processesをround robin的にCPUを割り当てる
走っているprocessにtimer interrupt毎に、
kernelが通知する(processが自分のtimer
interrupt handlerを持つ)
21
Multiplexing CPU(2)

走っているprocessが自分のtime slice数がなく
なってもCPUを返さなければ、超えたtime slice数
だけを次のroundでもらえなくなる



超えたtime slice数には上限がある。その限界を超え
たらkernelはcontext switchingをする(processがtime
slice数の規則を守ったらkernelはcontext switchしな
くても良い)
ProcessがCPUを返すときに、必要なregisterだけを保
存する(例: FPU stateを保存必要のないprocessは
FPU stateを保存しなくても良い)
ProcessがCPUを要らないときには、yeild(other pid);
system callで自分の残っているtime slices分を譲るこ
とができる
22
Multiplexing CPU(3)

もしprocessが無理なtime slices数を要求したら、
allocate失敗


CPUがたくさん使いたいprocessは大きなtime slices
数を要求する(switching overheadが小さくなる),
interactiveなprocessは小さなtime slices数を何回も
allocateする(応答性が良くなる)
それでもinteractive processの応答性が良いとは限ら
ない!!

どうするか???
23
Multiplexing Physical memory

Allocation:



Protection



ProcessはTLBWrite(); でphysical pageをもらう
Kernelはpage毎にどのapplicationがアクセス権限や
deallocate権限を持つかを記憶
Pageがアクセスされる度に、kernelは権限検査をする
権限がなければ、accessさせない
Deallocation:

Kernelがその権限を変える。Bindingを開放する。
24
Multiplexing Network(1)

Application networking:


Application library は全てのnetworking機能
(TCP, UDP…)を実現する
Protection:


どのapplicationがこのnetwork messageを所
有するか
Exokernel は分からない


そのmessageの意味が分からないからである。
解決法: Dynamic package filtering(DPF)
25
Multiplexing Network(2)
Application networking
26
Dynamic Package Filter(DPF)



LibOS(application)からの小さなfunctionをkernelに
downloadする(code downloading)
そのfunctionは誰がmessageを所有するかを決める
Protection: DPFは特別な言語で書かれ、runtime時に
compileされる。


PDF言語ではmessageの所有権衝突を容易に検出できる
PDF言語は任意のpriviledged instructionを実行させない
27
Multiplexing Disks

LibOS(application) がLibFS(file
system)を作る




1つのLibOSが複数LibFSを持っても良
い
LibFSがfile systemを作る
LibFSがキャッシュ、disk layout,
write order(scheduling)…を制御
する
異なるLibFSが安全に1つのdisk
blockを共有できるようにする
28
Disk protection

Exokernel vs. Microkernel


Microkernel: privileged, 共有できない
Exokernel: non-privileged, 共有できる
29
Disk protection

Block level protection



複数のfile system(FS)にdiskをmultiplexする必要が
あるからである
異なるFSが1つのblockを共有できる
難しい問題:

誰がこのdisk blockを使用できる?




FSが所有しているdisk blockを記憶しているはずので、
kernelも記憶すると無駄
FSのmetadata(file systemの情報)を再利用したい.
しかし、kernelはそのmetadataのformatや意味が分からな
い
解決法: Untrusted Deterministic Functions(UDF)
30
Untrusted Deterministic Functions(UDF)

LibFSはmetadata type毎にinterpreter function “owns”を提供



Correctness:

Ownsは決定的でなければならない(つまり、Ownsは同じ入力で常に同じ出力を出す)

Own 集合が変わる度にInductive testingをする
UDFの使い方:




Owns(metadata) = set of blocks controled by metadata
Proc Initialize(medatada)
If( owns(metadata) != {} ) then error();
Proc Allocate(metadata, b){
old_set = owns(metadata);
<let LibFS changes metadata>
new_set = owns(metadata);
if( new_set != old_set U {b}) then error();
}
DeallocateはAllocateと同様
Kernelはmetadataが分からなくても、信頼することができる
31
全体の内容
1. Abstractions in traditional operating
systems
2. Exokernel overview
3. Exokernel design
4. Exokernel implementation
5. Summary
32
Exokernel implementation

実際にExokernelを実装したシステムがあ
る:



Xok(x86のExokernel), ExOS(LibOS: Unixlike)
Aegis(Exokernel runs on MIPS)
Xok(Exokernel), ExOS:


OpenBSDのlibcを使う
ほとんどのapplicationをOpenBSDからもらう
33
Xok/ExOSの性能

FreeBSDのbinaryの実行時間(秒)
Xok,
OpenBSD,
FreeBSDの
pax, cp, diff,
gcc, gunzip,
rm 各々に同
じデータを入
力する
34
Global performance: Xok/ExOS vs. BSD

Xok, BSDで同じConcurrent applications setを実行

Total time to complete a concurrent tasks: system throughput
35
5. Summary



Exokernel のdesign principlesと
architectureを調べた.
Exokernelでresourceの保護機能と管理機
能を分離することにより、virtual memory,
file system, …はapplication levelで作れ
る
そのため、performanceが良くなる
36
ダウンロード

exokernel