xv6におけるforkの挙動について

はじめに xv6でのfork関数について、親プロセスと子プロセスとのパラメタ設定の比較を意識してまとめてみた。 なお、context switch(struct contextが関係してる)やsyscall, iret(struct trapframeが関係してる)の詳細は省くので、switching編を参考にしてく…

vm_area_structの探索関数(find_vma_**関数群)について

はじめに "Understanding the Linux Kernel"(version. 2.6.11)のch.9 Process Address Spaceのvm_area_structを探索する関数群: find_vma(struct mm_struct * mm, unsigned long addr) find_vma_prev(struct mm_struct *mm, unsigned long addr, struct vm_…

xv6におけるfilesystemのLayer(下層編)

はじめに xv6におけるfilesystemの構造についてまとめたい。xv6ではext2とかではなく、もう少し簡素な独自filesystemを採用している1。 今回は、filesystemのデータ構造及び、下図のlayerの下三層つまり、"disk layer", "buffer cache layer", "Logging laye…

ABCIシステムの使い方(応用編)

はじめに ABCIシステムの使い方というタイトルでブログ記事を書いたがまぁまぁ反響があったため、自身が実際にどうスパコンの上で基盤構築したかをアプリケーション依存1の話を極力避けてお話したい。 なお、MPIやOpenMPについては説明しない。これについて…

Linux Kernel(2.6.11)の内部実装のアウトプットまとめ

xv6(MITが開発した教育用OS)と同じく、Understanding the Linux Kernel 3rd.ed.をソースコードリーディングしてまとめた記事を羅列しておく。(これも適宜更新していきたい) Note) この本が取り扱っているバージョンは2.6.11でかなり古い。また、x86のコード…

xv6のアウトプットまとめ

xv6に関して自身のアウトプットをまとめておく。Qiita( https://qiita.com/knknkn1162 )とこのブログに分散しているので、良くないと思った(適宜更新していく予定)。 xv6とはMITがUNIX v6をx86仕様に書き直した教育用OSで、 https://github.com/mit-pdos/xv6…

keyboard, UART, VGAの初期化(xv6を例に)

はじめに 本記事では、xv6においてUART, keyboardがboot時にどの様に初期化されているのかを確認する。ソフトウェアエンジニアにとって一番たいへんなところがマジックナンバー(0x3f8, 115200, 9600など)の意味の理解だと思うので、この数字の出自をなるべく…

A20 gateとkeyboard controller(xv6を例にして)

はじめに xv6でのA20 gateをenableしている過程をソースコードレベルで詳しく追っていく。A20 gateの概要に関しては、reference[8] が詳しいので省略。keyboard controllerについては後述する。 Note) 大目標としてはkeyboard入力の際に、どのような過程をた…

spinlockについて

はじめに spinlockはbusy waitによって実現するlockの手法のことである。busy waitとは、lockを取得できるまでloopで待機するという点で原始的だが、lock/unlockに要するオーバーヘッドを最小限にできるので、Linux kernelでは頻繁に登場する。 内部実装的に…

`path_lookup()`を追ってみる

はじめに Linux kernelにおいて、filesystemの内部のデータ構造はかなり把握しづらい。(virtual) filesystemの実装を読み解く上で重要だが、ややこしい関数として2つあると思う: do_kern_mount path_lookup 前者のdo_kern_mountはmounted filesystem(struc…

initcallとは

はじめに linux kernel1を読んでいると、**_initcall(core_initcallとか__initcallとかが色々なところで定義されている。例えば、sysenterの初期設定(IA32_SYSENTER_(CS|EIP|ESP))をしているarch/i386/kernel/sysenter.cでは、 extern const char vsyscall_i…

ABCIシステムの使い方

ABCIシステムについて GPUの環境を整えるのに、オンプレorクラウドかを状況に応じて選択する場合、双方メリット、デメリットがある。オンプレの場合は伝聞だと、運用がとても大変らしい。対して大手クラウドサービス(AWS, GCPなどでGPUインスタンス)を用いる…

linux kernelでのFPU, MMX, SSEについて

linux kernelでのFPU, MMX, SSEについて 本記事では、linux kernel 2.6.11でのFPU(Float Point Unit)やMMX, SSEがどう設定、使用されているのかを確認する。FPU, MMX SSE命令を使用する際は、使用する際に意図的に#NM(Interrupt7: Device not available exce…

slab allocatorの内部実装

slab allocatorの内部実装 page frameは4K単位の管理なので、比較的小さいメモリ領域を確保するときに効率が悪い。そこで、linux2.6では、slab allocatorという仕組みを用いて小さな領域を効率的にreserved/freeするようになっている。cacheという概念自体は…

e820について

linux kernelのsetupの部分を読んでいて、E820という謎の数字?が気になったのと、ここで得られたデータをboot時に後々利用しているので、少し重点的に調べてみる。 reference http://www.uruk.org/orig-grub/mem64mb.html あるいは、BIOSのdocument: https:/…

linux kernelにおけるtimerについて

linux kernelにおけるtimerについて(Timing Measurementsについて) はじめに user landで見えるtimerは時刻の取得やsiginfoとか、epollといったselect系など関数でのtimeoutの設定で用いられるが、kernel側でのtimerの利用はこれとは大きく異なる1。 本記事…

linux2.6の場合のExceptionと`int $0x80`(system call)の挙動

linux2.6の場合のExceptionとint $0x80の挙動 前の記事でxv6ではどうなのかを述べた。今回はlinux kernel(2.6.11)の場合のexceptionとint $0x80の挙動についてまとめる。今回も長いので、I/O APIC, local APICがからんだinterruptは後回しにしたい。 referen…

xv6の場合のExceptionとInterruptの挙動

ExceptionとInterruptの挙動 linux2.6.11の場合のExceptionとInterruptの挙動をまとめようと思って、xv6との比較を書いていたが分量が多くなりすぎたので、簡単にxv6ではException、Interruptをどう処理しているのかをまとめる。 Reference http://www.cse.i…

`switch_to`を読んでみる

reference Understanding the Linux Kernel ch.3 http://caspar.hazymoon.jp/OpenBSD/annex/gcc_inline_asm.html オペランド制約の部分が非常によくまとまっている 概要 linux kernel 2.6.11より schedule() => context_switch(rq, prev, next); => switch_t…

GDTとIDT周辺の理解(xv6を例に)

Motivation Understanding the Linux Kernelを読もうとしたけど、生半可な気持ちでは臨めなさそうなので、xv6で理解の確認しつつ、linux kernel 2.6ではどうなの?という把握をすれば良さそう。 そこで、Understanding the Linux KernelのChapter 2: Memory …

はてブでコメントし続けるとロジカルシンキングの能力がアホみたいに上がった話

社内数人のグループで1、あるビジネス本を読んだ感想文(気づきとか)をお互いに発表する機会があったのだが、個人的に驚くことがあった。 彼(ら)は本の中の一部を引用して、「ここの言葉は自分にとって良かったので、参考にしたいと思いました」と、まるで偉…

1月の棚卸し

なるべく月末にやったことの棚卸しをしたいと思うので、毎月継続して書いていくつもり1。 1月は7日くらいまでキーボードやVGAとFPGAをつないで、プログラム書いて動作確認したりしていた。しかしながら、会社が始まるとなかなか思うように進捗を生み出せず…

今年の自分の感想

今年考えたこととやったこと、やりたいことの棚卸し。 来年8月で30という歳を考え、なんかやばいやろ、みたいな危機感?みたいなのが生まれた結果、今年は6月から本気出した気がする。多分、一日も欠かさず勉強した。 一年を通しての目標としては、低レイヤ…

cache 付きpipelined CPU実装した知見

github.com においた。 本記事の全体的な言い訳だが、2018/9月の末くらいからcomputer architectureの勉強始めたので、ところどころ言葉の使い方があやしい部分があるかもしれない(というかある)。そこは多めに見てくだせい 特徴 cache込みで5段pipeline実装…

FPGAでNeural Networkをフルスクラッチ実装している

まだまだ先は長いけれど。 誤差伝搬法のforward, backwardをVHDLで実装中で、forwardのところは、要素要素の部分についてはだいぶ形になってきて、あとは組み立てる作業をやっている。 ゼロから作るDeep Learning をそこそこ参考にしている。 データはMNIST…

MIPS のsingle cycle processorをVHDLで自力実装した

www.amazon.com を下敷きにした。上の本では実装例も載っているが、あんまり参考にしなかった。自分のものにしたという意味で自力。 https://github.com/knknkn1162/vhdl_sample/tree/single_cycle/src/mips でやった。全体設計するのが一番神経使った.. ten…

xv6だいたい読んだ

GitHub - mit-pdos/xv6-public: xv6 OS のこと。xv6とはUnix V6のx86(32bit)実装の教育用OSで、1万行以下(実質8000行行かないくらいじゃないか?)でソースコードリーディングして得るものはかなり多かった。 だいたい読んで挙動を把握したつもりなので、忘れ…

The Linux Programming Interface(TLPI)の読み方

だいたい読んで2週目に入っている。やっぱり2回目の方が断然楽。 一文一文丁寧に読まない(コード部分はできるだけ追っていく) 全くわからなくなったら、章飛ばす(1回目は6,7割ざっくりわかればいいや、と割り切る) permissionやcapability周り、関心が薄いの…

小説感想

天地明察[冲方丁] .. 一度死ぬほど悔しい思いをした主人公が根回し含めて円熟していくのいいなぁ。他人の人生を最後まで、しかも私のペースで覗き見ることができるのって小説の醍醐味だよなぁ。 本格小説(上)[水村美苗]: 嵐が丘をだいぶ意識しているが、日本…

小説面白い

最近、切り替えたいなぁ、と思って、tsutayaで適当な小説選んで読んだら、すいすい中に入っていけて久しく持っていなかった高揚感みたいなものが生まれてきた。 今の所、 空中ブランコ(奥田 英朗) .. 憎めないおっさん。というかブラックユーモアっぽい感じ…