LINUX KERNEL DEVELOPMENTを読んだ.色々気になったステートメントについて書いていきます。
##Introduction to the Linux Kernel
- この章では、Linuxカーネルと、LinuxOSについて紹介する。
- 今日、Unixとは、一ファミリーのOSであり、似たようなAPIと、共有されたデザイン決定を持っている。
いか、Unixの歴史について書いていきます。
- 40年に渡る使用の歴史により、Unixは、現在存在する中でもっともパワフルでエレガントなOSだと、コンピュータ学者は思うようになった。
Unixの他に存在するOSといえば、Windows OS、トロン、ぐらいしか知らないですが、Max OSやLinuxもUnixだとすると、もしかしたらもっともパワフルでエレガントなOSかもしれないですね。
この後、Multicsの歴史に触れていっているようです。Multicsはベル研で開発されたもののようですね。
-
1969年の夏、ベル研のプログラマーは、Unixに進歩するファイルシステムのデザインを考案した。
-
1973年、OSはCによって書き直された。未曾有の変更だったが、将来の移植性に寄与した。
LinuxやFreeBSDは今でもC言語によって書かれていますが、ここから始まったんですね。それ以前は恐らくアセンブラや機械語などで書かれていたんだと思います。アセンブラや機械語は全然移植性がないですね。C言語はそれに対して、ほとんどのアーキテクチャーで使えるので、移植性を担保するにはいい選択だと思います。今では当たり前だと思うんですが、当時は未曾有だったんですね。 -
Unixの設計のシンプルさは、ソースコードと一緒に配布されていると言う事実と並んで、さらなる発展を導いた。
オープンソースの思想が当時からあったんですね。Unixの設計はシンプルだと思いますが、ソースコードは今や相当に巨大になってます。
- もっとも影響のある貢献者は、カリフォルニア大学バークレー校だった。
Free BSDのこと言ってるのかなと思います。 - バークレーの最初のリリース、1BSDは、1977年だった。
結構古いですね。僕が生まれる2年前だ(年齢がバレる)
その後、BSDの歴史が続きます。
- 最初のスタンドアローンのバークレーのUnixは、3BSDで、1979年だ。仮想メモリ(Virtual Memory)が機能のリストに加えられた。
仮想メモリが出てきました。仮想メモリとは、最近使われることがあるのかわからないですが、ハードディスクの一部をメモリとして使う機能のことです。昔のPCだと結構使ってたかもしれません。
- そのあとのリリースで、ジョブコントロール、デマンドページング、TCP/IPなどが付加された。
TCP/IP結構古いですね。ジョブコントロールとは、ユーザがプログラムの実行状態や周辺機器との接続状態をコントロールすることのようです。今では当たり前に見えるんですけどね。
- 1980年代から1990年代にかけて、たくさんのワークステーション会社やサーバー会社が商用バージョンのUnixをリリースした。これらのシステムは、AT&Tかバークレーのリリースをベースにしており、特定のハードウェアアーキテクチャーによってサポートされている。
このあと、Unixはシンプルである理由が述べられています。
理由1、普通のOSは何千もの明確でないシステムコールがあること、それに対し、Unixは数百であること。
理由2、Unixは全てのものがファイルであること。
理由3、UnixはCで記述されていること」
理由4、Unixは非常に早いプロセス生成時間を持っており、ユニークなfork()システムコールを持っている。
理由5、Unixはシンプルで頑健なプロセス間通信(Interprocess communication)を持っている。
そして、Unixはマルチタスク、マルチスレッディング、仮想メモリ、デマンドページング、デマンドローディングによる共有ライブラリ、そして、TCP/IPネットワークを持っている。
そして、Linuxシステムへと続きます。
##Along came Linus:Intruduction to Linux
- Linuxの最初のバージョンは、1991年。リーナスは、パワフルでフリーなUnixがないことに困っていた。
- なんかDOSはゲームする以外に使いにくい。
- Minixはライセンスのせいで再配布できない。
- で、リーナスは自分自身のOSを書くことにした。
- で、1991年の終わりに、リーナスはインターネットに早期のバージョンをリリースした。
- ポストしたら、ものすごくブレークした。
- 今日、Linuxは様々なアーキテクチャーに使われている。スマホから、スパコンまで。
個人的にこれ見て思うことが、やっぱり自分が必要とするものを作るって重要なんだなと思います。逆に言うと、自分が必要としないものを作っても仕方ないんですよね。
- LinuxはUnixのようなシステムだが、Unixではない。それはどう言うことかと言うと、LinuxはUnixやUnixのAPIからいろんなアイディアを借りてきているが、他のUnixシステムのように、ソースコードは、Unixの子孫ではない。
なるほど、Mac OSはUnixのソースコードを使っていて、LinuxはUnixのソースコードを使っていないと言うことになるのか。
- Linuxは、GNU General Public License(GPL) version 2.0によってライセンスされている。なので、ただでダウンロードできるし、改良を加えることができる。
- Linuxの基本はカーネル、Cライブラリ、ツールチェイン、そして基本Utility、例えばログインプロセスとシェルである。
- 今後、Linuxカーネルと言う時は、明示的にLinuxの全システムを指すのか、カーネルを指すのか正確に指定しようと思う。正確に言うと、Linuxはカーネルのことを指す。
言語を明確に定義するのは外人さんらしいですね。この本はLinuxカーネルに関する本なので、Linuxの基本のうちの一つ、Linuxカーネルについて掘り下げていくことになりそうです。