1章~3章gihyo.jp上記を読んだので学んだことをアウトプットしたいと思います。大学の授業で低レイヤのことを学んできませんでした。そのため、本書でLinuxに関して体系的に学べたの非常に良かったです。本書の中で手を動かすパートに関しては、C言語やPythonの代わりにGo言語を使って試してみてます。PCはMacを使っているのですが、Linuxの環境で試したいという気持ちが有ったので、Dockerで仮想的にDebian系のOS上で動かすようにしています。リポジトリは以下になります。コンピュータにとってストレージデバイスは欠かせない存在2章ユーザモードで実現する機能ユーザモードとカーネルモードデバイスの操作やプロセス管理、メモリ管理、プロセススケジューラなど、通常のプロセスから実行できると困る、OSの核となる処理をまとめたプログラムをカーネルという。これらは特権モード、即ちカーネルモードで動作する。OS=カーネルではなく、カーネル以外にもユーザモードで動作する様々なプログラムから構成される。ユーザモードのプロセス処理から、システムコールを通じてカーネルの処理を呼び出す。それを呼び出すのは、プロセス固有のコードやそれが使用するライブラリ(OS提供のもの・そうでないもの)CPUのモード遷移システムコールを発行すると、CPU割り込みが発生。これによって、CPUでは、ユーザモードからカーネルモードに遷移して、カーネルの処理を行う。終わったらユーザモードに戻る。02-syscall-and-non-kernel-os/hello上述のリポジトリにて、上のコマンドを実行すると以下のような結果を得られました。END--------------------------下から3行目のwriteがデータを画面やファイルに出力する「write()」システムコール。省略している部分もシステムコールだが、それはプログラムの開始処理が発行するもの。99.01各行が1つのコアに対応する。今回は殆どがidleモードとなっている。02-syscall-and-non-kernel-os/loop上述のリポジトリにて、上のコマンドを実行すると以下のような結果を得られました。0.00CPUコア1上でユーザプロセス、すなわちloopプログラムが常に動作していることがわかる。02-syscall-and-non-kernel-os/ppidloop上述のリポジトリにて、上のコマンドを実行すると以下のような結果を得られました。98.98CPUコア0上でppidloopプログラムを41%の割合で実行し、親プロセス取得のシステムコールを59%の割合で実行していた。システムコールのラッパー関数システムコールはC言語などの高級言語から直接呼び出せない。アーキテクチャ依存(amd64とかarmとか?)のアセンブリコードを使って呼び出す必要がある。システムコールをラップする関数を内包するライブラリ群がなければ、アーキテクチャ依存のアセンブリソースを書かなくてはいけない。標準CライブラリGNUプロジェクトが提供するglibcをLinuxの標準Cライブラリとして使用する。glibcがシステムコールをラップする関数を内包している。POSIXという規格に定義されている関数も提供。プログラムがどのようなライブラリをリンクしているかは以下でlddコマンドでわかる。同じプロセスの処理を複数のプロセスに分ける際に呼び出される(例:Apacheで子プロセスを生成する)。子プロセス用メモリ領域を作成し、親プロセスのメモリをコピーする。fork関数はカーネルモードからユーザモードに処理が再び移るときに、親プロセスには子プロセスのプロセスIDを、子プロセスには0を返す。これを利用して親子で処理を分岐させる。03-process-management/fork上述のリポジトリにて、上のコマンドを実行すると以下のような結果を得られました。fork()されたときに同じプログラムが複製されて2個同時に動いているような感覚。別のプログラムを生成するときに呼び出される(例:bashからsleepコマンド実行)。実行ファイルを読み出し、その後現在のプロセスのメモリを上書く。最初に実行する命令のメモリアドレス(エントリポイント)Linuxの実行ファイルはELFというフォーマットを使用する。specific)全く新規のプロセスを新規生成する場合には、親となるプロセスからfork()を発行して、復帰後に子プロセスがexec()を発行する。03-process-management/execve上述のリポジトリにて、上のコマンドを実行すると以下のような結果を得られました。fork()の直後にexec()が動いています。以下の資料を読んで理解を深めた。practices月別アーカイブはてなブログをはじめよう!jrywm121さんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。