問題タブ [kernel]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
kernel - カーネル イメージを ELF から PE に変換する
Msys を使用して、Linux で作成した自家製カーネルを構築しています。Linux はバイナリ形式に ELF を使用し、Msys は PE を使用します。マルチブート仕様を使用して Grub で起動できるようにソースをセットアップしました。ビルドの最後に、未定義のシンボルをいくつか取得します。
これらは ELF 指向のシンボルのようです。PE の世界でこれらをどのように扱うべきか、誰かが私にアドバイスできるなら、例えば同等のものがある場合、それは私を大いに助けてくれるでしょう!
boost - アプリケーションのWDKビルド環境でブーストを使用していますか?
Visual Studio2005ではなくWindowsDriverKit(WinDDK 6001.18001)を使用してユーザースペースアプリケーションをビルドしています。ドライバーコンポーネントもビルドする必要があるため、このアプローチを採用しています。したがって、すべてをビルドするための単一のビルド環境が必要です。 。Microsoft自体は、いくつかの製品にこのアプローチを使用しています。
Boost 1.38.0を使い始めるまで、これは問題なく機能していました。カーネルモードコンポーネントではC++を使用しておらず、ユーザースペースアプリケーションのみを使用しています。C ++コードでは、Boostライブラリを使用するのが自然です。残念ながら、WDKは同意しません。
私が気付いた最初のエラーはptrdiff_t
、Annex Dで必要と思われるように、「#include <cstddef>」がstd名前空間に配置されないことです。これを回避すると、boost\lambda\detail\operator_return_type_traits.hpp
約error C2976: 'std::basic_string' : too few template arguments.
にいくつかのエラーが残りました。iostreamでは冗長に見えます。
Boost、iostream、およびWDKの組み合わせをうまく連携させることができた人はいますか?
私のソースファイル:
service.cpp:
multithreading - オペレーティング システムがスレッドの使用方法の特性を理解する利点はありますか?
オペレーティング システムがスレッドの使用方法の特性を理解する利点はありますか? たとえば、新しいスレッドを作成するときに、集中的な CPU 計算に使用され、I/O でブロックされることを示す方法が Java にあるとしたらどうなるでしょうか。これが機能であれば、スレッドのスケジューリングは改善されないでしょうか?
multithreading - 1024 CPU のカーネル スケジューリング
Azul Systems には、何千ものキャッシュ コヒーレント CPU をサポートするアプライアンスがあります。何千もの同時実行スレッドをスケジュールするために、オペレーティング システムにどのような変更を加える必要があるかについての洞察が欲しいです。
linux - Git クローンのハング
私は将来の Linux 開発者として、Torvalds の git リポジトリのクローンを作成したいと考えています。問題は、しばらくして git clone プロセスがハングした後に git clone を呼び出すときです。エラーメッセージなしタイムアウトなし。だから私はctrl + cを押して再起動し、もう一度同じことをします。
ランダムな割合でハングします。「オブジェクトの取得」プロセス中にハングします。
誰かアイデアはありますか?
open-source - SANOS オペレーティング システム カーネルの使用経験はありますか?
オープン ソース カーネルをブラウジングしていたときに、SANOSに出くわしました。これは、オープン ソースとして存続させる価値のあるもののように感じます。最新の標準に合わせるには、次の機能強化が必要です。
- 複数の CPU/コアのサポート
- IPv6 を追加 (現在は IPv4 のみをサポート)
- 8192 の同時スレッドを実行する機能
- JDK 1.6 に必要な追加のエミュレーションをサポートする機能
そこで、次の質問があります。
- サノスを使って共有したい経験を持っている人はいますか?
- より良いものにするために時間を提供したい人を引き付ける最も適切な方法は何ですか?
- BSD や Linux で使用されているカーネルよりも優れている点は何ですか?
- このプラットフォームに Ruby を移植するメリットはありますか?
performance - 仮想マシンのストレス テストに使用できる Java アプリケーションはどれですか?
SANOSオペレーティング システム カーネルのストレス テストとベンチマークを行う方法に興味があります。
unix - プロセスのスケジューリングに関する質問
たとえば、ディスク I/O の完了を待機しているプロセスは、転送中のデータに対応するバッファ ヘッダーのアドレスでスリープします。ディスク ドライバーの割り込みルーチンは、転送が完了したことを通知すると、バッファー ヘッダーでウェイクアップを呼び出します。割り込みは、その時点で実行されていたプロセスのカーネル スタックを使用し、ウェイクアップはそのシステム プロセスから行われます。
私が強調した段落の最後の行について説明していただけますか。これは、何らかのイベントが発生するのを待っていてスリープ状態になっているプロセスを目覚めさせることです。このパラはGalvinのものです。ところで、UNIX オペレーティング システムを学習するための良い本やリンクを教えてください。
ありがとう。
c - sched_setaffinity() はどのように機能しますか?
Linux syscall sched_setaffinity() の仕組みを理解しようとしています。これは私の質問hereの続きです。
私はこのガイドを持っています。これは、syscall の使用方法を説明し、かなりきちんとした (動作する!) 例を示しています。
そこで、Linux 2.6.27.19カーネル ソースをダウンロードしました。
そのシステムコールを含む行に対して「grep」を実行したところ、91 件の結果が得られました。有望ではありません。
最終的に、カーネルが特定のコア(またはプロセッサ)の命令ポインターを設定する方法を理解しようとしています。
シングルコア、シングルスレッドのプログラムがどのように機能するかはよく知っています。「jmp foo」命令を発行すると、基本的に IP が「foo」ラベルのメモリ アドレスに設定されます。しかし、複数のコアがある場合、「メモリアドレス foo で次の命令をフェッチし、コア番号 2の命令ポインタを設定して、そこで実行を開始する」と言わなければなりません。
アセンブリ コードのどこで、どのコアがその操作を実行するかを指定していますか?
カーネル コードに戻ります。ここで何が重要なのでしょうか? ファイル 'kernel/sched.c' には sched_setaffinity() と呼ばれる関数がありますが、タイプ "long" を返します。これはマニュアル ページと矛盾しています。では、ここで重要なことは何ですか?これらのモジュールのうち、発行された組み立て手順を示しているのはどれですか? 「task_struct」を読み取り、「cpus_allowed」メンバーを見て、それを命令に変換しているモジュールはどれですか? (glibc のソースも調べてみましたが、このタスクを実行するためにカーネル コードを呼び出すだけだと思います。)