タグ

kernelに関するyheldのブックマーク (23)

  • 独自OSを作ってみよう!

    このホームページは以下に移動しました. ブックマークを張り直してください. 5秒後に自動的に移動します. http://kozos.jp/kozos/

    yheld
    yheld 2007/11/19
    そういや30日本。まだ全然読んでないなぁ。
  • Linux カーネルのコンテキストスイッチ処理を読み解く - naoyaのはてなダイアリー

    Linux カーネルのプロセススケジューラの核である kernel/sched.c の schedule() を読み進めていくと、タスク切り替え(実行コンテキスト切り替え)はその名も context_switch() という関数に集約されていることが分かります。2.6.20 の kernel/sched.c だと以下のコードです。 1839 static inline struct task_struct * 1840 context_switch(struct rq *rq, struct task_struct *prev, 1841 struct task_struct *next) 1842 { 1843 struct mm_struct *mm = next->mm; 1844 struct mm_struct *oldmm = prev->active_mm; 1845 184

    Linux カーネルのコンテキストスイッチ処理を読み解く - naoyaのはてなダイアリー
  • FirefoxのsetTimeoutの実装 - bits and bytes

    Firefoxのソースコードを追っているうちに、たまたま1年遅れで IT戦記 - JavaScript を学ぶ際に一番重要なのに、誤解されがちな setTimeout 系の概念 の裏側がどうなっているかがわかったので、その話を。 タイマーの管理方法 そもそもjavascriptからsetTimeoutを呼ぶと、どういう仕組みで指定した時間後に渡した関数が呼び出されるようになっているのでしょう。Linuxであればsleepのように一定時間後にawakeするという処理は、タイマーリストによって管理されています。カーネルの中にN jiffies(LinuxのOS内時間の単位はjiffyと呼ぶそうです)経過後に実行することリストがあって、カーネルが4msごとに毎回タイマーリストをチェックしてやることがあったときにはそれを実行しています。 FirefoxもLinuxと同じようにタイマーリストみたいな

  • לינוקס דרייבר

    כיום, רוב הארגונים מודעים לחשיבות של ייעוץ הנדסי בהובלת פרויקטים מורכבים. אך האמת היא שרוב האנשים...

  • mixi Engineers’ Blog » Linux Programming、epollの話

    お久しぶりです、初めての日の夏に圧倒されているトールマエサカです。 今日はLinuxにおけるネットワークプログラミング関連のネタです。分散データベースサーバの開発過程で最近よくLinuxのepollというイベントハンドリング機能を使っています。これがまた優秀な機能なので紹介します。 このContextでいうイベントハンドラーはサーバがクライエントのリクエストを処理するためのメカニズムです。イベントの感知と通知は大雑把にいうと以下の三つの処理で構成されています: 一つもしくは複数のディスクリプタを監視 ディスクリプタの準備が整うまでハチ公のごとくひたすら待ち続ける 準備が整ったディスクリプタの通知 アプリケーションでの実装は一昔までselect(2)、もしくはpoll(2)というシステムコールで行われていました。二つとも役目は同じですがselect(2)の場合、kernelをいじらない限り

    mixi Engineers’ Blog » Linux Programming、epollの話
  • 起動するまでの長い道のり メモリ管理編(2) メモリ・マップ取得の巻 - Outlandish Watch

    ページングのことを書こうかと思ったが、まずマシンに何MBのメモリが搭載されているのか分からないと始まらない。それに、実はメモリ領域にも使えるところと使えないところがある。そういった情報も必要だ。 今回は、ACPIのファンクションを使ってメモリの領域情報を得る方法について解説する。 今回のソース setup.s memorymap.d startup.d メモリ量を得るには メモリがいくつ搭載されているか調べるには、またまたBIOSファンクションを使わなければならない。BIOSファンクションを使わないで調べる方法もあるらしいけど私は良く知らない。 メモリ量を調べるBIOSファンクションにも何種類かある。まずint 12hというファンクションがある。これを使うとKB単位でメモリ量が分かる。ただ、16ビットの数値で返ってくるので最大で64K*1K=64Mバイトまでしか分からない。いまどき64MB

    起動するまでの長い道のり メモリ管理編(2) メモリ・マップ取得の巻 - Outlandish Watch
  • カーネル探検隊すごろくでカーネルのお勉強 | スラド

    日経Linuxにおいて2006年1月から連載された「カーネル探検隊」をまとめて新規記事を加えたムック「Linuxカーネル徹底理解」が発売された。「何より,楽しく読めて身に付く内容を心がけました」と紹介記事にある通り、このムックには特製カーネルすごろく(サンプル画像)なるものがついてくるらしい。 すごろくで遊びながらカーネルのことを学ぶ、というのは一体どの世代を狙ったものなのだろうか?

  • 起動するまでの長い道のり メモリ管理編(1) ページング概要の巻 - Outlandish Watch

    またしても再開……。 さて、D言語が普通に動かせるようになった。scope指定をすればクラス・オブジェクトも作れるようになった。 が、まだ動的なメモリ確保やオブジェクト作成ができない。もっと言えば、実行時にサイズが初めて確定するようなデータのメモリ領域を確保できない。 動的なメモリ確保を行うためには、メモリ領域を色々と管理しなければならない。どの領域がどのくらい空いているのか、あるいは使われているのか、常に把握しておく必要がある。 これから、とりあえずカーネル・モードでのメモリ管理について解説する。 ページングについて ページングとは、メモリ管理の方法の一つだ。 少し前にセグメンテーションというメモリを分割する機能のことを説明した。ページングも同じようにメモリを分割する。ただ、ページングではメモリを固定サイズのページに区切る。具体的に言うと4KBで区切る(実は4MBでも区切れたりするが割愛

    起動するまでの長い道のり メモリ管理編(1) ページング概要の巻 - Outlandish Watch
  • https://upload.wikimedia.org/wikipedia/commons/e/e7/PS3_Linux_kernel_overview_fig._1.png

  • IBM リダイレクト - Japan

    IBM Developer is your one-stop location for getting hands-on training and learning in-demand skills on relevant technologies such as generative AI, data science, AI, and open source.

    IBM リダイレクト - Japan
  • セグメントレジスタのメモ。 - ボクノス

    Mona読んでて気になった所。 セグメント・・・。 ちと理解が足らない所なのでセグメントレジスタについてまとめておこう。 まず、セグメントレジスタの特徴。 16ビット時代の遺産。サイズは16ビット。 メモリを1Mバイトに拡張するための苦肉の策。 OS作る人以外はいじる必要なし。 プロテクトモードでは使用法が異なる? nasmの場合、segment:offsetの形で書く。 計算方法は、 リニアアドレス = segment * 16 + offset ブートの場合、0x07C00に飛ぶので、CS:SIは、0x07C0:0x0000となる。 CS コードセグメント SI(実行ポインタ)が参照する DS データセグメント mov等が参照する SS スタックセグメント push,pop,call,retなどスタック関連の時参照する ES エクストラセグメント おまけ FS,GS 名前なし? おま

    セグメントレジスタのメモ。 - ボクノス
    yheld
    yheld 2007/06/11
    16bit時代の遺産,苦肉の策,拡張
  • 起動するまでの長い道のり D言語編(3) 標準ライブラリ格闘の巻(1) - Outlandish Watch

    D言語を使って(あれを「使って」と言って良いなら……)、シリアル・ポートを叩くことに成功した。 しかし今のコードはカッコ悪い。IOを直に叩いているだけで、printfでHello,World!するのとあまり変わらない。これから先シリアル・ポートを叩く機会もたくさんあるだろうから、シリアル・ポート操作用の処理をまとめておきたい。今回はそれにチャレンジし、壁にぶちあたる(笑)。 今回のソース startup.d serial.d シリアル・ポート・クラスの作成 さて、シリアル・ポートの処理をまとめる。しかもオブジェクト指向らしくクラスでラップする。ポート番号をメンバ変数に持ち、初期化はコンストラクタ・入出力や待機処理はメンバ関数で行わせる。定数は全部enumで定義する。 で、大体以下のようになった。 module outlandish.os.serial; import std.stdint;

    起動するまでの長い道のり D言語編(3) 標準ライブラリ格闘の巻(1) - Outlandish Watch
    yheld
    yheld 2007/06/08
    シリアルポートキターーーーー!!!今自分が一番知りたい場所ですw
  • 起動するまでの長い道のり D言語編(2) それとなくシリアル・ポートの巻 - Outlandish Watch

    D言語の関数を呼び出すことに成功した。これからどんどんD言語で機能を追加していく。 OSを作っている以上、外部デバイスをいじれないとつまらない。画面表示や何かに動いているという証が欲しい。今回は、割合制御が簡単なシリアル・ポートに文字列を出力させてみる。シリアル・ポートの出力ならqemuからも簡単に見られたりする。 今回のソース startup.d io.d IO関数の用意 シリアル・ポートはIOポートを叩くことによって制御する。IOポートはアセンブラの命令で叩くことができる。が、D言語の世界に既に移行してしまったので、できればD言語の関数でIOポートを叩けるようにしたい。今後もIOを操作する機会は多いだろうから、アセンブラ命令を単純にラップした関数を用意しておく。 実はD言語の標準ライブラリ(Phobos)には、IOポートを叩くための関数が用意されている。しかし、OSを作るに当たって標準

    起動するまでの長い道のり D言語編(2) それとなくシリアル・ポートの巻 - Outlandish Watch
  • 起動するまでの長い道のり D言語編(1) 関数呼び出しの巻 - Outlandish Watch

    不完全ながらプロテクト・モードに移行し、通常の32ビットコードを使う準備ができた。ここでいよいよD言語を導入していくことにする。 モジュール階層の準備 D言語のソース・ファイルをこれから追加していくわけだが、そのためにモジュール階層をまず用意することにする。モジュールとは、Javaで言うパッケージとほとんど同じものだ。ファイルパスでx/y/z.dというソースファイルは、モジュールで言うとx.y.zに属することになる。1ソースファイルが1モジュールとなる。で、x.y.zというモジュール階層を作る場合はxとyディレクトリを掘らなければならない。 ここではoutlandish.os以下に各ソース・ファイルを置くことにした。つまり各ソースファイルはoutlandish.os.XXXというモジュールを作ることになる。というわけで、outlandish/osディレクトリを掘る。 ソースコードの追加 と

    起動するまでの長い道のり D言語編(1) 関数呼び出しの巻 - Outlandish Watch
  • Linux I/O のお話 write 編 - naoyaのはてなダイアリー

    write はページに dirty フラグを立てるだけなので決してユーザープロセスを待たせない って、当にそうなんでしょうか?(否定しているわけではなく、純粋な疑問です。) と質問をもらったので、最近追ったことをここでまとめます。かなり長文です、すいません。また、まだまだ不勉強なので間違っているところもあるかもしれません。ツッコミ大歓迎です。 まず、オライリーのカーネルの 15章 ページキャッシュ 15.3 汚れたページのディスクへの書き込み から引用。 ご存知のように、カーネルは、ブロック型デバイスのデータを含むページをページキャッシュに蓄えています。プロセスが何らかのデータを更新した場合は、必ず対応するページに汚れている印をつけます。すなわち、PG_dirty フラグを設定します。 UNIX システムでは、汚れたページのブロック型デバイスへの書き込みを遅延することができます。この方

    Linux I/O のお話 write 編 - naoyaのはてなダイアリー
    yheld
    yheld 2007/05/24
    そういや、Linux2.6カーネル本。まだプロセスの所しか読んでないなぁ・・・
  • 起動するまでの長い道のり プロテクト・モード移行編(1) セグメンテーション薀蓄の巻 - Outlandish Watch

    プロテクト・モードへの移行は起動処理の山場の一つだ。リアル・モードからプロテクト・モードに移って初めて32ビットのコードが動き、64KBの壁を破って4GBまでの全メモリにアクセスできるようになる。 x86系CPUでプロテクト・モードに移行するには、最低限セグメンテーションと割り込みディスクリプタテーブルを初期化する必要がある。だが、割り込みを禁止した状態ならばとりあえずセグメンテーションさえ設定すれば大丈夫だ。 今回は、プロテクト・モードにおけるセグメンテーションについて解説しようと思う。 プロテクト・モードにおけるセグメンテーション プロテクト・モードのセグメンテーションは、リアル・モードのそれと何が違うか。当に違う。まったく違う。別物なんじゃないかと思うくらい違う。実際に別物だ。 リアル・モード時にはぶっちゃけ64KBの壁をどうにか超えるためのオフセットに過ぎなかった。ある意味後ろ向

    起動するまでの長い道のり プロテクト・モード移行編(1) セグメンテーション薀蓄の巻 - Outlandish Watch
  • Linux の close は fsync 相当を調べる - naoyaのはてなダイアリー

    Linuxのcloseは暗にfsyncするから、ここであげられている 100000回繰り返し open 8K write close というパターンだとfsyncコストが見えちゃうので良くないんじゃないかな とのことで、そうなのか! と思ったので例によって深追いしてみました。 まず fsync(2) の実装は fs/sync.c にあります。 asmlinkage long sys_fsync(unsigned int fd) { return __do_fsync(fd, 0); } static long __do_fsync(unsigned int fd, int datasync) { struct file *file; int ret = -EBADF; file = fget(fd); if (file) { ret = do_fsync(file, datasync);

    Linux の close は fsync 相当を調べる - naoyaのはてなダイアリー
  • naoyaのはてなダイアリー - Linuxのページキャッシュ

    世間では PHP が、Perl が、と盛り上がっているようですが空気を読まずまたカーネルの話です。今回はページキャッシュについて。 /dev/shm に参照系DBを持っていくと I/O 負荷が激減した件(当たり前だけど) - drk7jp で、ディスク上にあったファイルを /dev/shm (tmpfs) に移したら I/O 待ちがなくなって負荷がさがった、ということなんですがおそらくこれは tmpfs に置く必要はないかなと思います。Linux (に限らず他の OS もそうですが) にはディスクの内容を一度読んだらそれはカーネルがキャッシュして、二度目以降はメモリから読む機構 = ページキャッシュがあります。tmpfs にデータを載せることができた、ということは物理メモリの容量に収まるだけのデータサイズかと思うので、放っておけば該当のファイルの内容すべてがメモリ上にキャッシュされて io

    naoyaのはてなダイアリー - Linuxのページキャッシュ
  • Yahoo | Mail, Weather, Search, Politics, News, Finance, Sports & Videos

    Police: Shooting suspect is barricaded with hostages in N.J. home

    Yahoo | Mail, Weather, Search, Politics, News, Finance, Sports & Videos
  • マルチコア時代のロードアベレージの見方 - naoyaのはてなダイアリー

    ちょっと煽り気味のタイトルですが、CPU がマルチコアになり 2個、4個と増えていく中 Linux の負荷の指針になるロードアベレージをどう読むべきか、という話です。気になったところを少し調べたのでそのまとめを。 http://d.hatena.ne.jp/naoya/20070222/1172116665 でも書いたとおり、Linux のロードアベレージは「ロードアベレージは過去1分、5分、15分の間の実行待ちプロセス数の平均数 = 実行したくても他のプロセスが実行中で実行できないプロセスが平均で何個ぐらい存在してるか」を示す値です。ボトルネックが CPU、メモリ、ディスク等々どこにあるかは関係なく、仕事の実行までにどれぐらい待たされているかを示す値なので、システムのスループットを計測する指標の入り口になる値です。 このロードアベレージですが、実装を見るとランキュー(待ち行列)に溜まった

    マルチコア時代のロードアベレージの見方 - naoyaのはてなダイアリー