サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
世界禁煙デー
k-onishi.hatenablog.jp
概要 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; } ビルドしたバイナリをエミュレータで実行した結果が以下になる。 実行した命令のトレースやレジスタの値、メモリダンプなどが出力される。 環境構築 クロスコンパイラ 開発はMac
概要 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. クイックソート Ericssonは移動体通信事業を中心とし携帯電話の地上固定設備を世界的に展開しており、現在世界180カ
概要 「詳解Linux Kernel」を参考にVersion 2.6.11のコードリーディングをしていく。CPUのアーキテクチャは書籍に沿ってIntelのx86とする。 今回はプロセスのアドレス空間について見ていく。 メモリ割り当ての指針 カーネルからメモリ要求は最優先とし即座にメモリ割り当てを行い、且つ当該処理にバグが含まれないことを前提にエラーへの対策は必要以上には行わない。 一方でユーザプロセスからのメモリ要求は緊急でないとし、リニアアドレスに対するアクセス権のみを付与し割り当ては遅延させる。実際にアクセスがあるまでページフレームの割り当てを行わず、アドレッシングエラーなども必ず補足する。 プロセスのアドレス空間 プロセスのアドレス空間はリニアアドレスを用いたアドレス空間として独立しており、カーネルはそのアドレス空間に対してリージョンの追加・削除を動的に行う。メモリリージョンは先頭リ
Linux Kernelを無限に読む会 ~ メモリ管理 Ver 2 ~ 概要 「詳解Linux Kernel」を参考にVersion 2.6.11のコードリーディングをしていく。CPUのアーキテクチャは書籍に沿ってIntelのx86とする。 引き続きはメモリ管理について見ていく。 概要 メモリ割り当てには基本的な単位としてページフレームを採用しており、数十バイトや数百バイトのメモリ割り当ての場合には無駄が生じてしまう。代替案として単一のページフレーム内に小さなメモリ領域を複数割り当てられるようにした。 スラブアロケータ Solaris 2.4が初めて採用したスラブアロケータは以下のようなアルゴリズムで実装されている。 メモリ領域をデータ構造と関数を保持したオブジェクトとして扱い、オブジェクト毎にコンストラクタやデストラクタを保持する。初期処理の繰り返しを回避するため解放されたオブジェクトを
概要 「詳解Linux Kernel」を参考にVersion 2.6.11のコードリーディングをしていく。CPUのアーキテクチャは書籍に沿ってIntelのx86とする。 今回はメモリ管理について見ていく。 メモリ管理 x86ではセグメンテーションとページングによって物理メモリが管理され、RAMの一部はカーネルコードや静的なカーネルデータによって永続的に使用される。残りのRAMは動的に確保及び解放が行われる。 参考: https://www.amazon.co.jp/dp/487311313X ページフレーム ページフレームは物理メモリをある一定サイズで区画分けしたもので、IntelのPentiumプロセッサではページフレームのサイズとして4KBもしくは4MB(PSE有効時)(PAEを使用する場合は2MB)が使用可能である。しかし基本的には以下の理由から4KBを採用している。 ページフォルト
概要 「詳解Linux Kernel」を参考にVersion 2.6.11のコードリーディングをしていく。CPUのアーキテクチャは書籍に沿ってIntelのx86とする。 今回はプロセススケジューリングにおけるロードバラシングについて見ていく。 マルチプロセッサ環境でのランキューにおけるロードバランシング Linuxでは対称型マルチプロセッサ(SMP)モデルを採用しており、基本的には全てのCPUが平等である。しかしマルチプロセッサと一口に言ってもハードウェアによって異なる性質を持っておりスケジューラはその違いに合わせて処理方式を変更する。 種別 説明 古典的なマルチプロセッサアーキテクチャ 一般的なマルチプロセッサシステムで、全てのCPUはRAMを共有する。 ハイパースレッディングテクノロジ ハイパースレッディング対応のCPUは複数のスレッドを同時に実行することが可能で、単一のコア内に複数の
概要 「詳解Linux Kernel」を参考にVersion 2.6.11のコードリーディングをしていく。CPUのアーキテクチャは書籍に沿ってIntelのx86とする。 今回は時間管理及びタイマ割り込みについて見ていく。 時間管理 カーネルが行う時間管理の主な機能は以下。 ユーザプロセスはtime()、ftime()、gettimeofday()の3つのAPIを使用し日時を取得する。カーネルも当該APIを用いてネットワークパケットにタイムスタンプを付与する。 カーネルはタイマを用いてカーネル若しくはユーザプロセスに特定の時間が経過したことを通知する。 クロック回路とタイマ回路 クロック回路は現在時刻の取得や正確な時間計測に使用する。タイマ回路は設定可能で予め設定しておいたタイミングで割り込みを発生させることができ、ソフトウェアタイマなどに使用される。 リアルタイムクロック(Real Tim
概要 「詳解Linux Kernel」を参考にVersion 2.6.11のコードリーディングをしていく。CPUのアーキテクチャは書籍に沿ってIntelのx86とする。 今回は割り込み処理について見ていく。(*nは参考文献のn番目に対応する) 割り込み処理 例外ではほとんどの場合その例外の発生元となっているカレントプロセスにシグナルを送信することで処理する。例外処理もシグナルを受け取るまでは遅延される。 しかし割り込みの場合には別の無関係なプロセスが動作している際に発生することがあり、単純にカレントプロセスにシグナルを送信するだけではない。 割り込みは大きく3種類に分類される。 I/O割り込み 当該割り込みでは割り込みに対応する動作を決定するために割り込みハンドラからデバイスに対して問い合わせを行う必要がある。 タイマー割り込み ローカルAPICタイマや外部タイマなどが発生させる割り込みで
このページを最初にブックマークしてみませんか?
『k-onishi.hatenablog.jp』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く