2014-12-01から1ヶ月間の記事一覧

OS自作入門 18日目分〜20日目分

だんだんOSっぽくなってきた。 18日目分 dirコマンド コンソールで入力された文字列をコマンドとして受け取って、コマンドに応じて対応する処理をする。dirコマンドではファイルの情報を表示。メモリにロードしておいたディスクイメージ中のファイル情報を…

OS自作入門 15日目分〜17日目分

筆者様曰く、このあたりになるとだいぶ知識が身についているはず、ということだったので楽になるかと思ったが、そうでもなかった。C言語はもともと知っていたので、前日分まではその解説が少し入っていた分、むしろ少し楽だったのかもしれない。 15日目分…

OS自作入門 11日目分〜14日目分

11日目分 ついにウィンドウ ウィンドウというと敷居が高そうに聞こえたが、「下じき」(レイヤー)を1枚用意して、そこにwindowっぽい絵を書いて表示しているだけ。 10日目分の内容を理解していれば簡単。表示を改善していく過程が楽しい。 最後のチラチ…

OS自作入門 8日目分〜10日目分

このあたりになってくると、そろそろ過去の記事を再度確認したくなることも多くなってくるのだが、Kindleだと見たいページ探すの大変だということにいまさら気づいた。せっかくの電子書籍なのに本文内検索ができないのは痛い…1ページずつめくるのもKindleだ…

OS自作入門 5日目分〜7日目分

5日目分〜7日目分の感想 5日目 構造体と文字表示とGDT/IDT初期化 最初の構造体と文字表示の話は簡単だったが、GDT/IDT初期化の話で一気に難度が上がった。 ソースコードで、なぜこうなっているんだ…、という部分があって、無駄に悩んで時間を浪費してしま…

OS自作入門 0日目分〜4日目分

OSを基礎から勉強したいと思い、いろいろ調べていたら、「30日でできる!OS自作入門」に行き着いた。8年前の本だが名著のようだし、kindle版が出ているようだったので、購入した。分量は700ページほどで、中身は0日目〜30日目まで1日ごとに分かれており、毎…

仮想記憶とページング

プロセスが仮想アドレスにアクセスするとき、仮想アドレスを物理アドレスに変換してその物理アドレスにアクセスする必要がある。そのときの流れは以下のようになる。 [1.TLBによる仮想物理変換] ←―――――┐ ↓ yes │ →終了 │ ↓no(TLBミス) │ [2.ページテーブルに…

CentOS のLive CD からブータブル Live USBを作成してみた

Webでいろいろ調べたところ、UnetBootin というツールを使えばブータブルUSBメモリを作成できるとのこと。 このUnetBootin というツール、CentOS の他にもUbuntu, FedoraなどさまざまなLinuxのディストリビューションに対応している模様。 今回はこのUnetBoo…

gcc deep dive その6. 〜リンカ②〜

リンク前のオブジェクトファイルとリンク後の実行オブジェクトの比較のため、それぞれ逆アセンブルしたものを以下に示す。 [user1@vm03 test1]$ objdump -d test1.o test1.o: file format elf32-i386 Disassembly of section .text: 00000000 <main>: 0: 55 push %</main>…

gcc deep dive その5. 〜リンカ①〜

リンカldは複数のオブジェクトファイルやライブラリ・書庫(archive)ファイルを結合し、それらのデータをリロケートして、シンボルの参照をまとめる。 ldはcollect2から呼ばれる。私の環境では、gcc -v としたときの出力のリンカの部分は以下のようになってい…

gcc deep dive その4. 〜アセンブラ〜

asはアセンブリコード(*.s)をアセンブルし、オブジェクトコード(*.o)を生成する。 アセンブリコード(*.s) ↓ ↓as ↓ オブジェクトコード(*.o)比較のために、cc1が生成したアセンブリコード(test1.s)と、asが生成したオブジェクトコード(objdumpを用いて逆…

gcc deep dive その3. 〜コンパイラ〜

gccバージョン3以降はcc1がプリプロセッサとコンパイラを兼ねている。 cc1はプリプロセス(マクロ展開)の結果に基づいてコンパイルを行い、アセンブリコード(*.sファイル)を生成する。 ↓ ↓cc1 ↓ アセンブリコード(*.s)gcc に -S オプションをつけるとcc1によ…

gcc deep dive その2. 〜プリプロセッサ〜

プリプロセッサであるcc1はマクロの展開を行う。 *.c ↓ ↓cc1 プリプロセス処理 ↓ C言語では、行の先頭が#で始まるものはマクロとして処理される。#で始まるマクロとしては、たとえば、#define #include #ifdef などがある。その他のマクロとして、__FILE__、…

gcc deep dive その1. 〜コンパイラの構成〜

C言語コンパイラであるgccは以下から構成される プリプロセッサ: cc1 コンパイラ: cc1 → アセンブリコード(*.s)を出力 アセンブラ: as → オブジェクトファイル(*.o)を出力 リンカ: ld(collect2) → 実行オブジェクトファイル(a.outなど)を出力 プリプロセッサ…