9front kernel

散歩の足元にしてる靴が長年履いているせいか、浸水するようになった。それと制動性能が落ちてきてたので、買い替えた。

日向と日陰で次々に変わる路面状況に対して、何と言っても滑らない靴が求められる。(受験生は特に重要ですな)そりゃ、スパイク付きの靴でっせ。いやもっと強力なやつで、アイゼン装着なんて手もあるか。雪の時はどうする? そりゃ、かんじき仕様のやつがいいか。いや、長靴に滑り防止用の荒縄を巻くのが、昔からの知恵です。

なんて事を店員さんに話したら、笑われた。そして、滑らない靴なんてありません、とも。正直な方だな。で、靴裏に滑らないマーク付き、靴底に熱遮断用シート付のやつを勧められた。悩んでもしょうがないので、即決。

で、家に帰っていざ履こうとしたら、やけに靴紐が長い。普通に結ぶと、紐が垂れて地面に着きそう。ああ、こんな事なら、紐のセッテングもお願いするんだった。後の祭りである。

ふと思い出した。NHKの番組で山ガールだか趣味のトレッキングだかで、登山靴の紐の結び方を紹介してたな。ネットにも上がっているだろう。探してみるか。

登山で使える!解けにくい靴紐の結び方こんな所かな。まてよ、登山靴で登山に行く訳ではないんで、間口を拡げてみるか。

【靴ひものほどけない結び方18選】スニーカー編

これはおしゃれ、15の靴ひもの結び方

都会仕様の靴紐の結び方が出てきた。

おしゃれの基本は、足元から、ですな。

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のデバッグ環境をつくる

xv6 book(MIT)

(日曜日は)xv6ソースコードリーディング

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さんも登場してるしね。

xv6 global

xv6のブートシーケンスメモ

xv6を読む:アドレススペースの作成

xv6を読む:メモリアロケータ

Intel 80386 Reference Programmer's Manual

ページとPTEとPDE

etc

Computer Languages History

白い帯の部分が長大な年表になってる。マウスをその部分に持って行くと、拡大表示される。見ていると、頭がくらくらするぞ。

pdumpfs: 毎日のスナップショットを保存する

昔懐かしい人がplan9に刺激されて作った、タイムマシン(Macではそういう名前のバックアップツールが有るとか)