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ではそういう名前のバックアップツールが有るとか)