![いますぐWindowsを捨ててデスクトップでGNU/Linuxを使う10+の理由](https://cdn-ak-scissors.b.st-hatena.com/image/square/5a015c6672d13a740b5952a08b71f834a464504a/height=288;version=1;width=512/https%3A%2F%2Fblogger.googleusercontent.com%2Fimg%2Fb%2FR29vZ2xl%2FAVvXsEg2t78uncbDf73r5WEf-cSUgjTqQ5A_Q-VoyRlhsq97qg_99u9n6rQL1zJ2jmh-aZQgYsyfoR-yAmPUvyIWoCm8S_cP5BuQ28gieCjextxRFb9wOc0z5bqlNz77ZhjUR0TnV8Fi5zxdSIA%2Fw1200-h630-p-k-no-nu%2Fworkspaces.png)
ひとつ前のエントリ id:naoya:20070924:1190653790 では Linux のコンテキストスイッチにおける、主にハードウェアコンテキストの退避/復帰の処理を追ってみました。その中で カーネルスタック (switch_to() 内で pushl %ebp とかして値が積まれるスタック)とはそのときの実行コンテキストに紐づくカーネルプロセススタックという理解でよいか。 という疑問がもやもや湧いて出てきました。ここ数日 はじめて読む486―32ビットコンピュータをやさしく語る を読んでいたのですが、その中にこの疑問への答えへの入り口が載っていまして、そこを糸口に調べてみました。で、結果としては 答え: 良い でした。 x86 は特権レベルの移行と連動してスタックポインタを切り替える仕組みを持っています。Linux の場合モードはカーネルモード(特権レベル0) とユーザーモード
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
Tigran Aivazian tigran@veritas.com7 August 2002 (29 av 6001) 訳: Hiroshi Miura miura@da-cha.org22 May 2003 この文書はLinux 2.4カーネルの手引きです。原文の最新版は、以下のURLからダウンロードできます。 http://www.moses.uklinux.net/patches/lki.sgml また、訳文の最新版は、 http://www.da-cha.org/ にて配布されます。 このガイドは、現在では、LDP (Linux Documentation Project)の一部となっており、 http://www.linuxdoc.org/guides.html から様々なフォーマットでダウンロードできます。 また、最新版は http://www.moses.uklinux.n
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く