OS 班の活動内容¶
OS 班では,コンピュータの「オペレーティングシステム (OS)」を自作する活動をしています.
基本的には,『ゼロからの OS 自作入門(著:内田公太 マイナビブックス)』という本を教材にしています.(余談ですが,この本の開発にはパ研部員が数名関わっています.本に載っているので,探してみましょう.)
パ研には一冊置いてありますが,家で開発したり,パ研で他の人が使っていたりしたときのために買っておくとよいでしょう. 4000 円くらいで買えます.
OS とは¶
入部したての,特に中学 1 年生の多くは,「OS」という単語を聞いたことがないか,あっても中身はよくわからない,という人が多いでしょう.
OS というのは,コンピュータ上でアプリを動かすのに必要な,さまざまな基本的な動作を担うシステムのことです. たとえば,今みなさんがこれを見ているコンピュータの画面でも,キーボードを打てば画面に文字が表示され,マウスを動かせば画面上でカーソルが動きます. コピー・アンド・ペーストを知っていれば,それを想像してみてもよいです. このような,コンピュータを使う上で欠かせない,すべてのアプリで共通する操作を管理するのが,このオペレーティング・システム,OS です.
現代では,主流の OS は,Microsoft 社の Windows シリーズと,Apple 社の Macintosh シリーズに二分されます. みなさんの家庭にあるパソコンはほとんど,このどちらかのものだと思います. このような,一般に流通しているような OS は,数千人規模のチームで,数十年にわたって開発されています. 他にも,Web サーバなどでは,Linux というシステムを基盤に作られた,ubuntu, Lubuntu, Kali Linux, CentOS などの OS もよく使われています.
パ研の活動で作る OS は,当然このような大規模なものにはできないので,最低限のファイル管理や画像処理などだけを行うものになります. すなわち,汎用 OS のような日常的な使用に耐えうる OS を作ることはできませんが,最低限の動作を自分の手で実現してみる,というのが,この班の活動の主目的です.
OS を作ることで,普段使っているコンピュータの核の部分の動作が見えてきます.パソコンのメモリをソフトのために確保したり,マウスのクリックの情報をアプリに伝えたりするような,アプリケーションとハードウェアをつなぐインタフェースを構築することで,普段使っているパソコンの核となる動作が見えてきます.
OS 自作の準備¶
『ゼロからの OS 自作入門』に沿って作っていきますが,これには少し準備が必要です.OS 自作を始めるのを決めてからでもいいですが,他の班の活動に役立つこともあるので,やっておいて損はないでしょう.
-
Linux ディストリビューションを使える環境を作る
OS 自作に限らず,ある程度低レイヤの開発をする際は,Linux を使うものと相場が決まっています.『ゼロからの OS 自作入門』でも,ubuntu 環境が前提とされています. コマンドライン操作なども,Windows とその他の OS では全く違う上に,Linux 以外の OS 上で作ろうとすると準備が格段に大変になるので,Linux の使える環境を整備しましょう. 自宅のコンピュータに Linux を入れて起動できる状態にしてもよいですし(デュアルブート),仮想マシンを使ってもよいです. 個人的には,Windows に入れるなら,VMware Workstation Player がおすすめです.
-
Linux のコマンド操作に慣れる
OS 自作には,準備段階から Linux のコマンドを多用します.ターミナルの使用に慣れていないとほとんど作業が進まないので,基本的なコマンドくらいは使いこなせるようにしておきましょう. この部分の教材もそのうち作ってここに載せる予定です.
-
C/C++ に慣れる
OS の開発には,基本的に C や C++ という言語を使います. 開発を始める前に,これらの言語がある程度使いこなせるようになっておきましょう.(逆に言えば,入部すぐの知識のない状態で OS を作るのはおそらく無理です.) これらの言語はほとんどの部員が使えるので質問はしやすいと思います. 競技プログラミング班では,基本的に C++ が使われていると思います.C++ を教えるノウハウは競プロ班に蓄積されているので,C++ を競技プログラミングで学んでから OS 自作を始めるのが手っ取り早いと思います.
-
OS 本に載っている準備を進める
テキストの本には,OS 自作を進めるための環境構築の方法がまとまっています. Linux の操作に慣れて環境構築をできる状態になったら,これに沿って環境構築を始めましょう.
文責:kaage