タグ

カーネルとC言語に関するbaboocon19820419のブックマーク (12)

  • CとRustで一から作るマイクロカーネルOS

    マイクロカーネルは浪漫に溢れる非常に作りがいのあるソフトウェアです。この記事は,「マイクロカーネルベースのOSの一から作ってIaaSで動かす」ことを目標に作ったマイクロカーネルベースのOS Resea(りーせあ)の設計と実装について軽くまとめた物です。 ソースコードはGitHubにあります。 マイクロカーネルとは Linuxのようなモノリシックカーネルでは色んな機能がカーネル空間で動きますが,マイクロカーネルではユーザプロセスたちが互いに通信しながらOSを作り上げます。プロセス・スレッド・仮想メモリ管理,プロセス間通信,タイマーといった必要最低限の機能だけをカーネルが担います。デバイスドライバやファイルシステムといった残りの機能は,独立したユーザプロセスとして動きます。たとえデバイスドライバが暴走しても他のコンポーネントを壊すことはないのです。マイクロカーネルは信頼性が高く,疎結合で美しい

    CとRustで一から作るマイクロカーネルOS
  • Linuxカーネル コードリーディング ( kernel/sched.c ) - komukomo’s diary

    詳解 Linuxカーネル 第3版とLinuxカーネル2.6解読室を参考に Linuxカーネルのkernel/sched.cのschedule()の一部を読んだのでその記録を残しておきます。 この記事はただのコードリーディングのログで、内部を知りたい人向けではありません。 これから読もうと思っている人への何かしらのヒントになったらいいかなと思って公開しています。 (※実際ここに記載するスケジューラのアルゴリズムは2.6.23以降使われていません。 参考:Completely Fair Scheduler の内側) バージョンはv2.6.12、ハードウェア依存のコードはi386のものです。 なぜ読んだか kernelのコードを読むということに慣れておきたい ついでに何か発見があったらラッキー ただなんとなく読んでみたかった、という気持ちも大きいです。 なぜこの部分を選んだか 上記2つの書籍で解

    Linuxカーネル コードリーディング ( kernel/sched.c ) - komukomo’s diary
  • memory cgroupとpageのLRUめも - φ(・・*)ゞ ウーン カーネルとか弄ったりのメモ

    カーネルは4.1系です。 include/linux/mm_inline.hにLRUへの登録・削除処理の実装があります。 static __always_inline void add_page_to_lru_list(struct page *page, struct lruvec *lruvec, enum lru_list lru) { int nr_pages = hpage_nr_pages(page); mem_cgroup_update_lru_size(lruvec, lru, nr_pages); list_add(&page->lru, &lruvec->lists[lru]); __mod_zone_page_state(lruvec_zone(lruvec), NR_LRU_BASE + lru, nr_pages); } static __always_inlin

    memory cgroupとpageのLRUめも - φ(・・*)ゞ ウーン カーネルとか弄ったりのメモ
  • はじめてのOSコードリーディング を(とりあえず)読了 - FPGA開発日記

    はじめてのOSコードリーディング ~UNIX V6で学ぶカーネルのしくみ (Software Design plus) 作者: 青柳隆宏出版社/メーカー: 技術評論社発売日: 2013/01/09メディア: 単行(ソフトカバー)購入: 56人 クリック: 1,959回この商品を含むブログ (29件) を見る ふと思いたって、上記をひととおり読んでみようという気になり、ノートにメモ(まとめ)を取っていきながら読み進んでいった。 途中から複雑になってまだ頭の中が整理され切れていないけど、とりあえず読了。 うーん、プロセスの切り替えの仕組みとか大雑把なところは分かったのだけれども、まだ「ソースコードを読むことによる深い理解」まで行っていない。 ソースコードに注力し過ぎて、まだ「点と点」が結ばれていない感じ。 各システムコールについてソースコードは詳細に解説されているのだけれども、例えばプロセス

    はじめてのOSコードリーディング を(とりあえず)読了 - FPGA開発日記
  • Linux 2.0.40の頃のkmalloc() - φ(・・*)ゞ ウーン カーネルとか弄ったりのメモ

    たまには古いカーネルでも読んでみましょう的なところで、Linux 2.0.40の頃はkmalloc()はどんな実装だったのかというところでも見てみましょう。最近のkmalloc()の実装は使用しているディストーションが採用しているスラブアローケータの__kmalloc()の実装を見てみましょう。今のkmalloc()はスラブアローケータを使用しています。SLUBだとこんな感じです。 で、Linux 2.0.40はkernel.orgのファイル作成日時で見ると08-Feb-2004 07:13となっているので、12年前にリリースされたんですね。このバージョンが2.0系の最終バージョンです。 この当時のkmallocはスラブアローケータは使用していないけど、スラブアローケータ的に要求されたサイズを一番近い2の累乗サイズに切り上げて使っています。サイズはblocksizeという変数で管理してます

    Linux 2.0.40の頃のkmalloc() - φ(・・*)ゞ ウーン カーネルとか弄ったりのメモ
  • Linuxカーネルのコードを読んで勉強になったこと - φ(・・*)ゞ ウーン カーネルとか弄ったりのメモ

    Linuxカーネルのコードを読んでて、なるほど〜と思うことはよくあるけど、その中でも特に今までの考え方をぶち壊してくれたのはなんだっけと思ったところ、やっぱりリスト構造かなと言うところ。 c言語でリスト構造を作る場合、一般的な教科書方式だと↓のようにデータとnextポインタは密結合になってると思います。これの場合、struct foobarのポインタをnext要素に使っているので、他の構造体(例えば、struct hogehoge)で同じことをしようとすると、その構造体ではstruct hogehoge *nextというメンバ変数を持つ必要があります。 ヘッド要素はstruct foobarです。 struct foobar { int n; char s[64]; struct foobar *next; }; struct foobar head; Linuxカーネルの場合、データとリ

    Linuxカーネルのコードを読んで勉強になったこと - φ(・・*)ゞ ウーン カーネルとか弄ったりのメモ
  • カーネルおさんぽまっぷ超入門

    Kernel/VM Advent Calender 2013 7日目 カーネル/VMはておくれなすごい人がけっこう集って、ネタとか披露しているようです. 今年のAdvent Calenderも既に濃い内容が集っています. でも、私達パンピーにはカーネルとかちょっと難しすぎてそもそも カーネル/VMという主題自体敬遠しちゃう…… ということで当にカーネルの第一歩をやってみよう、というのがこの記事です. 記事タイトルはえりっく氏(@siritori)から無断で肖ってます.ありがとうございます 今年の他の記事が高度な内容なので この記事が低レベル(低レイヤということでなく当に程度が低いという意味で)ですいません. 普段からカーネル/VMに参加してる皆様、さようなら. カーネル/VM界隈わいわいしてておもしろそうだけど怖くて敬遠してる方々、こんにちは. 前置きはこのぐらいで文行きます. 少々

    カーネルおさんぽまっぷ超入門
  • Linuxカーネルハッカーになる4つの方法 | Yakst

    Linuxカーネル開発者になりたいと思っても、まず何から手をつけたらいいか分からず、始める前から挫折する人も多いだろう。すぐ始められる最初の一歩の例が、筆者の経験を交えて4つ挙げてある。 (これは、CUSECというイベントでの、カーネルは怖くないという話の続き) カーネルプログラミングを始めるにはどうしたらいいか、アドバイスを求めたことがある。その時は、こう回答があった。 仕事のためにカーネルを理解する必要がなくても、やってみたらどうだろう? Linuxカーネルメーリングリストに登録してみて、精一杯理解しようと頑張ってみよう。 メインのLinuxカーネルの一部にならないコードを書いているなら、時間の無駄だ。 これは私にとっては、全然、少しも役に立たなかった。そんなわけで、ここでは、あなたなりにOSやLinuxカーネルがどう働くか、楽しみながら理解していくための、いくつかの戦略について書いて

    Linuxカーネルハッカーになる4つの方法 | Yakst
  • 情報工学でコンパイラを学ぶべきか | Scene Research Station

    高専の友達と呑んでいた。 なんでそういった話になったか覚えていないが、情報工学畑の僕が 「大学の実験ページを見たらコンパイラ演習が無くなっていて驚いた。情報工学でコンパイラも作ったことないってどうなのよ?アカンでしょ」 と言ったところ、電気電子畑の友が 「そんなもの『電気科で8石スーパーヘテロダインラジオも作らないで卒業するのは許せん!』と言っている老害と同じ。やるべきことは時代で変わる。会社でも特定の技術に長けて成功した人ほど、視野が狭くなって老害化してほんと困る云々」 というようなことを言った。 ちょっと話は逸れるけど、家電メーカーでもあるよね。一度テレビで成功しちゃったが故に、赤字になってもテレビをいつまでも家電の王様と信じて作り続けちゃう、みたいな。バカは死ななきゃ治らない、って言うけど赤字事業でもそれに従事するエンジニアは超一級で、そもそもかつてテレビは最先端の花形事業であって、

  • 第2回 C言語とライブラリの初歩

    なかなかハードルが高く,多くの人が踏み出せないでいるカーネルのソース・コードの読解。連載では,今までカーネル・ソースなんて見たことがないという人に,読みこなすコツをお教えします。今回は,ソースを読むための大前提となるC言語の基知識について学びます。 カーネルのソース・コードは,基的にC言語で書かれています。そのため,C言語をある程度読めなければ話になりません。といっても,カーネル・ソースを読むのが目的ですから,C言語のプログラムを書く必要はありません。コツさえ分かれば,読みこなすのはびっくりするほど簡単です。そこで,今回は,カーネルを読みこなすために最低限知っておくべき,C言語の知識をお教えします。 まず,図1を見てください。C言語をほとんど見たことがない読者の方は,何が何やらさっぱり分からないのではないでしょうか。でも大丈夫です。意外に難しくありません。 1 #include <s

    第2回 C言語とライブラリの初歩
  • はじめてのカーネル・ソース 第1回 どうしたら読めるようになるのか:ITpro

    なかなかハードルが高く,多くの人が踏み出せないでいるカーネルのソース・コードの読解。連載では,今までカーネル・ソースなんて見たことがないという人に,読みこなすコツをお教えします。今回は,どうしたらカーネル・ソースを読みこなせるようになるのか,筆者の経験をお話します。 Linuxユーザーなら誰しもカーネルのソース・コード(カーネル・ソース)を読んで,どのような処理を行っているのかを確認したり,自分なりの変更を加えたりしたくなるのではないでしょうか。しかし,カーネル・ソースの量は膨大な上,C言語で書かれているので,コンピュータ内部やOS(オペレーティング・システム)の仕組みを理解したプログラマでないとなかなか読みこなせません。そのため,カーネルを読むための第一歩を踏み出せない人が数多くいることは事実です。 講座では,プログラマではないごく普通のLinuxユーザーが,カーネルをある程度自力で

    はじめてのカーネル・ソース 第1回 どうしたら読めるようになるのか:ITpro
  • はじめてのカーネル・ソース---目次:ITpro

    なかなかハードルが高く,多くの人が踏み出せないでいるカーネルのソース・コードの読解。連載では,今までカーネル・ソースなんて見たことがないという人に,読みこなすコツをお教えします。 カーネルのコンパイル方法については,関連記事「やってみると意外に簡単!? Linuxカーネル・コンパイル入門」をお読みください。 また,カーネル・パラメータの項目については,関連記事「「Linuxカーネルの設定パラメータ」」で公開しています。 第1回 どうしたら読めるようになるのか 第2回 C言語とライブラリの初歩 第3回 カーネル・ソース内のシステム・コールを確認する 第4回 カーネルが構造体を好むワケ 第5回 デバイス・ドライバとモジュール 第6回 構造体に「関数」を登録する 第7回 ネットワーク処理はモジュール処理と上下が逆 第8回 データに意味付けするキャスティング手法 第9回 機能拡張でよく使われる共

    はじめてのカーネル・ソース---目次:ITpro
  • 1