9front kernel
散歩の足元にしてる靴が長年履いているせいか、浸水するようになった。それと制動性能が落ちてきてたので、買い替えた。
日向と日陰で次々に変わる路面状況に対して、何と言っても滑らない靴が求められる。(受験生は特に重要ですな)そりゃ、スパイク付きの靴でっせ。いやもっと強力なやつで、アイゼン装着なんて手もあるか。雪の時はどうする? そりゃ、かんじき仕様のやつがいいか。いや、長靴に滑り防止用の荒縄を巻くのが、昔からの知恵です。
なんて事を店員さんに話したら、笑われた。そして、滑らない靴なんてありません、とも。正直な方だな。で、靴裏に滑らないマーク付き、靴底に熱遮断用シート付のやつを勧められた。悩んでもしょうがないので、即決。
で、家に帰っていざ履こうとしたら、やけに靴紐が長い。普通に結ぶと、紐が垂れて地面に着きそう。ああ、こんな事なら、紐のセッテングもお願いするんだった。後の祭りである。
ふと思い出した。NHKの番組で山ガールだか趣味のトレッキングだかで、登山靴の紐の結び方を紹介してたな。ネットにも上がっているだろう。探してみるか。
登山で使える!解けにくい靴紐の結び方こんな所かな。まてよ、登山靴で登山に行く訳ではないんで、間口を拡げてみるか。
都会仕様の靴紐の結び方が出てきた。
おしゃれの基本は、足元から、ですな。
delve
前回は、goのtoolを中心に調べてみた。思いのほか充実してる。ならば、Windows上で使ってもいいかな。ふと、どのぐらいの容量とファイル数になるか調べてからにしよう。
debianにgo1.9.2を突っ込んで確認。Windows版でも大差ないだろうという腹積り。
debian:local$ du -sh go 309M go debian:local$ find go | wc 8742 8742 307808
ふーん、これぐらいなら許せる範囲だな。で、debuggerはgdbよりも、 delveの方が良さそう。ちゃんと入るか事前に 確認しておこう。LinuxとMacOSとWindowsってのがサポートされてるようだ。BSD業界は無視 なのね。
gitで取って来いというのは、Windowsでは辛い作業だな。gitとかhgのWindows版を入れなきゃ いけないからね。まてよ、debianでやってみて、そのソースをWindowsへ持って行くっていう手が有るな。(普通の人は、Windowsで動くウブなりを入れるんでしょうけど、そんなの、MSの ストアでしか配っていないからねぇ。オイラーは、そんなストアは大嫌いさ)
debianにdeleveを入れたよ。そこで、ソースを調べれば、他に必要なものも見つかるだろうね。 delve/appveyor.ymlとか言うファイルに、こんな記述が有った。
version: '{build}'
os: Windows Server 2012 R2
clone_folder: c:\gopath\src\github.com\derekparker\delve
environment:
GOPATH: C:\gopath
install:
- ps: |
# Install MinGW.
if (-Not (Test-Path "C:\mingw64")) {
$file = "x86_64-4.9.2-release-win32-seh-rt_v4-rev3.7z"
$url = "https://bintray.com/artifact/download/drewwells/generic/"
$url += $file
Invoke-WebRequest -UserAgent wget -Uri $url -OutFile $file
&7z x -oC:\ $file > $null
}
- set PATH=c:\mingw64\bin;%GOPATH%\bin;%PATH%
- echo %PATH%
- echo %GOPATH%
:
gccの代わりにMinGWを入れて、環境を整えておけって指示だな。全く、Windowsで開発環境を 作るってのは、無駄の極みと思われる。開発環境はdebianだけにしておくか。
そうすると、emacs上からdebuggerを扱いたい。go-dlvを入れておけば良いんだな。
M-x dlv して、Run dlv (like this): dlv debug main.go で、起動出来る。後は、 break main.main:1 とかして、普通に使うとな。
不思議なシャープ
思わぬ事でgoに道草してしまったので、再び9frontに戻る。 9frontに触れていて疑問に思った事が、plan9の概要PDFを読んでいて氷解してきた。 疑問に一つとして、冒頭に#を付けた記法がある。これって何よ?
term% ns bind /root /root mount -aC '#s/boot' /root bind / / bind -a /root / mount -a '#s/boot' / bind '#c' /dev bind '#d' /fd bind -c '#e' /env :
なんとなく、デバイスを表しているっぽい。そんな訳で /devだろうと思ってみると 説明ファイルが置いてあった。
term% cat /dev/drivers #/ root #c cons #¶ swap #P arch #$ pnp #e env #| pipe #p proc #M mnt #s srv #S sd :
なんだか、schemeの接頭語みたいだな。ASCII表では賄いきれない時は、ギリシャ文字も参加 させてる。
term% ls -l /dev ---w------- M 38 glenda glenda 0 Jan 1 1970 /dev/kbin --rw------- M 38 glenda glenda 0 Jan 1 1970 /dev/consctl d-r-xr-xr-x u 0 glenda glenda 0 Oct 30 11:59 /dev/usb --r--r--r-- i 0 glenda glenda 0 Oct 30 11:59 /dev/winname d-r-xr-xr-x u 0 glenda glenda 0 Oct 30 11:59 /dev/usb --rw-rw-r-- r 0 glenda glenda 0 Oct 30 11:59 /dev/rtc d-r-xr-xr-x $ 0 glenda glenda 0 Oct 30 11:59 /dev/pci --rw-rw-rw- A 0 glenda glenda 0 Oct 30 11:59 /dev/audio d-r-xr-xr-x i 0 glenda glenda 0 Oct 30 11:59 /dev/draw :
ファイルのパーミションの次に現れる文字の意味が氷解したよ。で、このデバイスは、勿論 カーネルを作る時に指定する事になる。9/pc/pcが、大雑把なconfigファイルになるかな。
# pc - 386 pc terminal with local disk
dev
root
cons
swap
arch
pnp pci
env
pipe
:
cons
consってコンソールの事なのね。
term% ls -l '#c' --rw-rw-r-- c 0 glenda glenda 24 Oct 30 11:59 '#c/bintime' --r--r--r-- c 0 glenda glenda 0 Oct 30 11:59 '#c/config' :
plan9は何でもファイルに見せるという事なので、リストしてみた。(リナなら/procを見る感覚)。シャープさんは、エスケープしてね。
#c/config をcatしたら、先の9/pc/pcが出てきた。
term% cat '#c/kmesg'
Plan 9
126 holes free
0x0001a000 0x0009f000 544768
0x004fd000 0x0ffff000 263200768
263745536 bytes free
cpu0: 2398MHz GenuineIntel P6 (AX 000406E3 CX 56D8220B DX 078BFBFF)
LAPIC: fee00000 0xe0000000
ELCR: 0E00
cpu0: lapic clock at 999MHz
pcirouting: PCI.0.7.0 at pin 1 link 62 irq 9 -> 10
mpintrenable: can't find bus type 12, number 0
#l0: AMD79C970: 100Mbps port 0xD020 irq 10: 0800274bf964
#A0: ac97 port 0xd200 mixport 0xd100 irq 11
#A0: ac97 cold reset
#A0: ac97 codecs ready: sdin0
#A0: ac97 codecs resumed:
#A0: ac97 codec ext: vra vrm
mpintrenable: can't find bus type 12, number 0
usbohci: 0x106b 0x3f: port 0xf0804000 size 0x1000 irq 11
mpintrenable: can't find bus type 12, number 0
1024M memory: 256M kernel data, 767M user, 1392M swap
/dev/sdC0: VBOX HARDDISK
/dev/sdC0/9fat dos
/dev/sdC0/data
/dev/sdC0/fscache cwfs64x
/dev/sdC0/fsworm
/dev/sdC0/nvram
/dev/sdC0/other
/dev/sdC0/plan9
/dev/sdD0: VBOX CD-ROM
bootargs is (tcp, tls, il, local!device)[local!/dev/sdC0/fscache]
user[glenda]:
current fs is "main"
10 uids read, 3 groups used
63-bit cwfs as of Mon Oct 30 11:57:02 2017
last boot Fri Jan 12 23:38:45 2018
init: starting /bin/rc
こちらは、dmsg相当かな。diskのパーテションを表示してくれてるな。
こうやって、つまみ食いみたいにコードを見ていても埒が明かないので、系統的に見ていくか。 前回の資料で、kernelの解説書が有ったんで参照してるんだけど、惜しいかなVer3の頃の もので、現在のVer4にはマッチしない。それでも、見ておいた方がいいよってヘッダーが 挙げられていたんで、拝んでみる。
pc/dat.h port/portdat.hがそれだ。更に、どんな関数が定義されてるかは、
[fb11: 9]$ wc pc/fns.h port/portfns.h
212 572 5567 pc/fns.h
402 1147 11632 port/portfns.h
約600個ぐらいのやつで、出来上がっている事が分かる。
port/portdat.h あたりで定義されてる巨大な構造体Procあたりから見ていけば良いのでしょうか。それにしてもメンバーが豊富過ぎるぞ!
xv6
Plan9は良いOSと思うけど、あちこちを飛び回るには、エリアが広すぎるように思う。そこで、 資料も豊富な糞石用のxv6を復習してみるか。(これで何度目だ。流行は繰り返すから気にしない。)
糞石と言えば、とんでもないバグが出てますなあ。功を焦るばかりに、投機に走ってしまい、 その空きをついて、よそ様のエリアを見放題になるという、OSも何もあったものじゃない欠陥ですからね。誰か、糞石メーカーに損害賠償を請求してみれ。
CPUの脆弱性 Spectre, Meltdown は具体的にどのような仕組みで攻撃する?影響範囲は?
CPU脆弱性Meltdownのパッチ適用でベンチマークスコアが25%低下した
カーネルとユーザー空間を行ったりきたりするようなやつは、とんでもなく遅くなるとな。 これも、安全のためですよ。我慢してメーカーを叩け。
閉話休題。xv6へコンテキストスイッチします。
titech-os/xv6-public forked from mit-pdos/xv6-public
xv6 borrows code from the following sources:
JOS (asm.h, elf.h, mmu.h, bootasm.S, ide.c, console.c, and others)
Plan 9 (entryother.S, mp.h, mp.c, lapic.c)
FreeBSD (ioapic.c)
NetBSD (console.c)
The following people have made contributions: Russ Cox (context switching,
locking), Cliff Frey (MP), Xiao Yu (MP), Nickolai Zeldovich, and Austin
Clements.
ちゃんとPlan9ともつながっているな。Russ Coxさんも登場してるしね。
Intel 80386 Reference Programmer's Manual
etc
白い帯の部分が長大な年表になってる。マウスをその部分に持って行くと、拡大表示される。見ていると、頭がくらくらするぞ。
昔懐かしい人がplan9に刺激されて作った、タイムマシン(Macではそういう名前のバックアップツールが有るとか)