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

csvの空行・コメント行・コメント部分を除外したフィールド数をカウントする

awkを使った、テキストファイルを処理するスクリプトです。csvファイル(sample.csv)から1行ずつ読み込み、そのフィールド数を標準出力する。 行頭の直後が行末である行は空行とする。 (半角スペースまたはタブ文字)のみで構成された行は空行とする。 行…

シェルにおける終了コードの扱い

シェルで扱うコマンドの終了コードは、その指定可能な値の範囲は8ビットの整数である。終了コードは、特殊変数「$?」にセットされる。負の整数を指定することも可能だが、その場合、当該値を2の補数表現として解釈した値が「$?」にセットされる。その場合の…

サブシェルとは

サブシェルとは、以下のサンプルコードで言うと、4〜7行目にわたって「()」で括られたリストを指します。「シェルスクリプトを実行する」とは、シェルが新たなシェルを子プロセスとしてメモリ上にロードし、その子プロセスが引数に指定されたスクリプトフ…

リニアアドレス→物理アドレスの変換方式

セグメントディスクリプタのリニアアドレスの算出式を疑似コードで表現すると、 QWORD segment_desc segment_desc := *(QWORD *)((gdtr AND 0xFFFFFFFF0000) + (segment_reg AND 0xFFF8))上で求めたセグメントディスクリプタの値(segment_desc)から、飛び…

論理アドレス空間上のLinuxカーネルの位置

Linuxカーネルは、4GBのアドレス空間上の「0xC0100000」にロードされます。これはおおよそ3Gの位置ですが、「0xC0100000 = 0xC0000000 + 0x100000」なので、正確には「3G+1M」の位置にロードされることになります。論理アドレス上では上記の通りですが、物理…

セグメント・ディスクリプタ

63 56 55 54 53 52 51 48 47 46 44 43 41 40 39 32 +----------------+---+---+---+---+--------------------+---+---+---+------+---+-------------------+ |ベース(上位8bit)| G | D |res|AVL| リミット(上位4bit) | P |DPL| S |タイプ| A | ベース(中8ビ…

セグメント・セレクタ

セグメント・セレクタとは、ディスクリプタ・テーブル上、現在どのディスクリプタを使用しているかを示す「セレクタ値」のことです。セレクタ値は、セグメント・レジスタに格納されます。 15 3 2 1 0 +---------------+--+---+ | Index |TI|RPL| +----------…

GDTR(Global Descriptor Table Register)

GDTRについて。 GDTR(Global Descriptor Table Register)とは、論理アドレス→物理アドレスのマッピングテーブルの先頭アドレスを格納するレジスタである。 47 16 15 0 +---------------------+-------------+ | Linear Base Address | Table Limit | +----…