xv6に関して自身のアウトプットをまとめておく。Qiita( https://qiita.com/knknkn1162 )とこのブログに分散しているので、良くないと思った(適宜更新していく予定)。
xv6とはMITがUNIX v6をx86仕様に書き直した教育用OSで、
辺りにあります。全体の概要については
にありますが、あくまで基本的な部分のみなので、もう少し包括的かつアドバンスな内容をここ1年くらいまとめています。詳しくは下記の最初のリンクを参照のこと。
- xv6の紹介とGNU Assemblyの準備: https://qiita.com/knknkn1162/items/9bd54e165c6c9edca49b
- segment, pagingを中心としたboot処理: https://qiita.com/knknkn1162/items/cb06f19e1f999bf098a1
- GDTとIDTの詳解: http://cstmize.hatenablog.jp/entry/2019/03/14/GDT%E3%81%A8IDT%E5%91%A8%E8%BE%BA%E3%81%AE%E7%90%86%E8%A7%A3%28xv6%E3%82%92%E4%BE%8B%E3%81%AB%29
context switch: https://qiita.com/knknkn1162/items/0bc9afc3ae304590e16c
forkの実装(親プロセスと子プロセスを比較して): http://cstmize.hatenablog.jp/entry/2019/08/06/xv6%E3%81%AB%E3%81%8A%E3%81%91%E3%82%8Bfork%E3%81%AE%E6%8C%99%E5%8B%95%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6
exception/interrupt: http://cstmize.hatenablog.jp/entry/2019/03/20/xv6%E3%81%AE%E5%A0%B4%E5%90%88%E3%81%AEException%E3%81%A8Interrupt%E3%81%AE%E6%8C%99%E5%8B%95
virtual memoryとphysical memory, pagingの関係:
#memo
— Kenta Nakajima (@knknkn26918) August 7, 2019
xv6のvirtual memory 概要 pic.twitter.com/Mt2blKSlLo
- keyboard controller(A20 gateを例にして): http://cstmize.hatenablog.jp/entry/2019/06/11/A20_gate%E3%81%A8keyboard_controller%E3%81%A8%E3%81%AE%E3%82%84%E3%82%8A%E3%81%A8%E3%82%8A%28xv6%E3%82%92%E4%BE%8B%E3%81%AB%E3%81%97%E3%81%A6%29
レガシーデバイス(keyboard, UART, VGA): http://cstmize.hatenablog.jp/entry/2019/06/15/keyboard%2C_UART%2C_VGA%E3%81%AE%E5%88%9D%E6%9C%9F%E5%8C%96%28xv6%E3%82%92%E4%BE%8B%E3%81%AB%29
filesystemの構造と下位レイヤー(Disk layer, Buffer Cache Layer, Logging Layer): http://cstmize.hatenablog.jp/entry/2019/07/14/xv6%E3%81%AB%E3%81%8A%E3%81%91%E3%82%8Bfilesystem%E3%81%AELayer%28%E4%B8%8B%E5%B1%A4%E7%B7%A8%29
プロセスの状態遷移:
#今日のメモ
— Kenta Nakajima (@knknkn26918) 2019年7月13日
xv6 のプロセスの状態遷移 pic.twitter.com/DchN3N2t4O
- inodeの状態遷移
https://t.co/OKIaO0whad
— Kenta Nakajima (@knknkn26918) July 25, 2019
の説明とソースコード照らし合わせたら
inodeのメンバの遷移はだいたいこんな感じになるかな。
igetは、icacheが見つかればip->ref++するだけなので単純😎 pic.twitter.com/oPi9qfudcX
xv6-riscv
xv6-riscvは、xv6のRISC-V versionである。x86(32bit)のとは違い、RV64(64bit)のOS。
https://twitter.com/knknkn26918/status/1175977883577176064?s=20 tweetのthread群に簡易的な比較をしてる
http://cstmize.hatenablog.jp/entry/2019/09/26/RISC-V%E3%81%AB%E3%81%8A%E3%81%91%E3%82%8Bprivilege_mode%E3%81%AE%E9%81%B7%E7%A7%BB%28xv6-riscv%E3%82%92%E4%BE%8B%E3%81%AB%E3%81%97%E3%81%A6%29 RISC-Vにおけるprivilege modeの遷移
http://cstmize.hatenablog.jp/entry/2019/10/01/RISC-V%E3%81%A8x86%E3%81%AEsystem_call%E3%81%AE%E5%86%85%E9%83%A8%E5%AE%9F%E8%A3%85%E3%81%AE%E9%81%95%E3%81%84%28xv6%E3%82%92%E4%BE%8B%E3%81%AB%29 RISC-Vとx86のsystem callの内部実装の違い