レガシーガジェット研究所

気になったことのあれこれ。

CPUエミュレータをつくる。

概要

https://github.com/0n1shi/mipsemu

CPUエミュレータを書いたのでまとめる。 今回書いたのはMIPS1のCPUエミュレータ。命令は全て実装したわけではなくC言語のコードいくつか書きクロスコンパイルしたバイナリを実際に動作させ、ある程度のコードが問題なく動作することを確認した。

実際には以下のようなC言語を書き、

int c = 0;

int main(void) {
    int a = 10;
    int b = 3;
    c = plus(a, b);
    return 0;
}

int plus(unsigned int a, unsigned int b) {
    return a + b;
}

ビルドしたバイナリをエミュレータで実行した結果が以下になる。

f:id:k--onishi:20210211153548p:plain

続きを読む

Erlang 入門

概要

1986年にスウェーデンの通信機器メーカーであるEricsson社が電話通信アプリケーションを開発する目的でErlangを開発し1998年にOSSとして公開した。

Erlangは巨大なサーバソフトウェア(メッセージキューイングやWebサーバ、分散データベースなど)などの高レベルプロトコルの実装に向いており、現在ではWhatsApp、ドワンゴ、LINEなどがErlangを採用していることを表明している。

qsort([]) -> [];
qsort([Pivot|Rest]) ->
  qsort([ X || X <- Rest, X < Pivot ])
  ++ [Pivot] ++ 
  qsort([ Y || Y <- Rest, Y >=Pivot ]).

e.g. クイックソート

続きを読む

Linux Kernel ~ ext2ファイルシステム ~

概要

「詳解Linux Kernel」を参考にVersion 2.6.11のコードリーディングをしていく。CPUのアーキテクチャは書籍に沿ってIntelx86とする。

今回はrxt2のファイルシステムについて見ていく。

ext2

ext2は1994年に導入されたファイルシステムLinuxにとってネイティブのファイルシステムである。ext2の特徴としては以下のようなものが挙げられる。

  • ファイルシステム作成時に扱うファイルの平均サイズの予測からブロックサイズを1~4KBの間で選択可能。
  • ファイルシステム作成時に扱うファイル数の予測から一定サイズあたりのiノード数を選択可能。
  • ファイルの断片化を可能な限り防ぐためファイルの拡張のための隣接する領域を予め確保する。
  • シンボリックリンクの文字列が60文字以下の場合にデータブロックではなくiノードにパス名を保存する。
続きを読む

Linux Kernel ~ 仮想ファイルシステムの操作 ~

概要

「詳解Linux Kernel」を参考にVersion 2.6.11のコードリーディングをしていく。CPUのアーキテクチャは書籍に沿ってIntelx86とする。

今回はプロセスの仮想ファイルシステム(VFS)の操作について見ていく。

続きを読む