2019-08-01から1ヶ月間の記事一覧

mmapにおけるMAP_PRIVATEの挙動

はじめに mmap(2)とはmemory mappingを新規に作成するsystem callである。 #include <sys/mman.h> void *mmap(void *addr, size_t len, int prot, int flags, int fildes, off_t off); mmap(2)は下図(Reference[1]のch.49より引用)のようにmapping typeとprivate/shared</sys/mman.h>…

"Understanding the Linux Kernel 3rd.ed."(邦訳:詳解 Linuxカーネル 第3版)だいたい読んだ

これを大体完走した1。バージョンが古すぎとよく言われる本だが、大規模なコードでもまるで技術書を読むのと同じ感覚でコードリーディングできるようになったと感じる。 ソースコードリーディングするとき、関数の頭から順に読むのでなく、お尻から使用され…

Linux KernelにおけるCopy On Write(CoW)の仕組み(概要編)

はじめに Copy On Write(CoW)とは書き込みが実際に起こるまで、複数のプロセスが同じ物理メモリを共有し続ける方法である。もっと端的に言うと、書き込みが発生したら、そこで初めて該当のpageのみ遅延複製する1。Linuxでは、以下の2つの場面2で用いられる:…

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

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