タグ付けされた質問 「kernel」

UNIXカーネルに関するすべて:開発、構成、コンパイル、設計など


1
Unixのプロセス、カーネルスレッド、軽量プロセス、ユーザースレッドの関係は何ですか?[閉まっている]
閉じた。この質問はより集中する必要があります。現在、回答を受け付けていません。 この質問を改善したいですか?この投稿を編集するだけで1つの問題に焦点を当てるように質問を更新します。 2年前に閉店。 VahaliaのUnix Internalには、プロセス、カーネルスレッド、軽量プロセス、ユーザースレッドの関係を示す図があります。この本はSVR4.2に最も注意を向けており、4.4BSD、Solaris 2.x、Mach、およびDigital UNIXについても詳しく探っています。Linuxについては聞いていないことに注意してください。 プロセスごとに、プロセスの基礎となる1つ以上の軽量プロセスが常にありますか?図3.4はイエスと言っているようです。 なぜ図3.5(a)は、CPUの上に直接プロセスを表示し、その間に軽量プロセスを表示しないのですか? 軽量プロセスごとに、軽量プロセスの基礎となるカーネルスレッドは常に1つだけですか?図3.4はイエスと言っているようです。 図3.5(b)は、カーネルスレッドを介さずにプロセスの上に軽量プロセスを直接表示するのはなぜですか? カーネルスレッドだけがスケジュール可能なエンティティですか? 軽量プロセスは、基になるカーネルスレッドをスケジュールすることによって間接的にのみスケジュールされますか? プロセスは、基礎となる軽量プロセスのスケジューリングを介して間接的にのみスケジューリングされますか? 更新: Linuxについても同様の質問をしました。Linux のカーネルスレッドに軽量プロセスが接続されていますか? 「オペレーティングシステムの概念」という本が暗黙的にUnixを使用する概念を紹介し、UnixとLinuxが異なる可能性があるため、Unixカーネルについて読んだためだと思います。 現在の返信に感謝していますが、他の返信を受け入れることができるように、投稿を再開することを望んでいます。

1
カーネル3.10.0-229.el7.x86_64のカーネルヘッダーが見つかりません
service vboxdrv setupCentOS 7ターミナルでコマンドを入力すると、次のエラーが表示されます。 Your kernel headers for kernel 3.10.0-229.el7.x86_64 cannot be found このエラーを解決するにはどうすればよいですか? と入力してログファイルを開くvi /var/log/vbox-install.logと、内容は次のとおりです。 Uninstalling modules from DKMS removing old DKMS module vboxhost version 5.0.4 ------------------------------ Deleting module version: 5.0.4 completely from the DKMS tree. ------------------------------ Done. Attempting to install using DKMS Creating symlink /var/lib/dkms/vboxhost/5.0.4/source -> /usr/src/vboxhost-5.0.4 DKMS: …

2
Linuxカーネルのメモリ制限
困惑している問題があります。sgを使用してカスタマイズされたCDBを実行するライブラリがあります。sgのメモリ割り当てに日常的に問題があるシステムがいくつかあります。通常、sgドライバーには約4mbのハード制限がありますが、これらの少数のシステムでは〜2.3mbのリクエストでそれが見られます。つまり、CDBは2.3MBの転送を割り当てる準備をしています。ここに問題はないはずです:2.3 <4.0。 今、マシンのプロファイル。64ビットCPUですが、CentOS 6.0 32ビットを実行します(ビルドもしなかったし、この決定とは関係ありません)。このCentOSディストリビューションのカーネルバージョンは2.6.32です。16GBのRAMがあります。 システムでのメモリ使用量は次のようになります(ただし、このエラーは自動テスト中に発生するため、このerrnoがsgから返されるときの状態を反映しているかどうかはまだ確認していません)。 top - 00:54:46 up 5 days, 22:05, 1 user, load average: 0.00, 0.01, 0.21 Tasks: 297 total, 1 running, 296 sleeping, 0 stopped, 0 zombie Cpu(s): 0.0%us, 0.0%sy, 0.0%ni,100.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st Mem: 15888480k total, 9460408k used, 6428072k free, 258280k buffers Swap: 4194296k …

1
random.cで使用されるエントロピー推定を説明できますか
/dev/randomカーネル割り込みのタイミングを使用して、エントロピープールに追加します。プール内のエントロピーの量は、という名前の変数で追跡されますentropy_count。 関連するコードの抜粋を次に示しますrandom.c。これは、変数の最後の2つのinteruptsとdelta deltaの差との間の時間(私が思うにわずか)を表しますdelta2。 delta = time - state->last_time; state->last_time = time; delta2 = delta - state->last_delta; state->last_delta = delta; if (delta < 0) delta = -delta; if (delta2 < 0) delta2 = -delta2; delta = MIN(delta, delta2) >> 1; for (nbits = 0; delta; nbits++) delta >>= 1; r->entropy_count += …
12 linux  kernel  random 

4
* BSDがネットワークインターフェイスにドライバー固有の名前を使用するのはなぜですか?それは制限を意味しますか?
ネットワークカードのブランドによって、インターフェイス名が異なることに気付きます(ドライバーに依存すると思います)。 * BSDがネットワークインターフェイスにドライバー固有の名前を使用するのはなぜですか? カーネル内に「汎用ネットワークインターフェイス」を記述する抽象化レイヤーがないため、各ドライバーは独自のAPIを介して内部でアドレス指定されますか? (どのように)リンク集約、トラフィックシェーピング、QoS(ALTQ)、フィルタリングなどのサブシステムに影響しますか? 正確には、pfSenseの下では、リンク集約(LAG)仮想インターフェースでALTQを使用できないようです。 適切な抽象化レイヤーがないため、これはBSD内部の制限ですか?

1
Linuxカーネルの25年間の開発は、素人の言葉で修飾または抽象化できますか?[閉まっている]
閉じた。この質問はより集中する必要があります。現在、回答を受け付けていません。 この質問を改善したいですか?この投稿を編集するだけで1つの問題に焦点を当てるように質問を更新します。 5年前に閉鎖されました。 Linuxカーネルはほぼ25歳です。1991年(開始日)以降のLinuxカーネルの開発履歴、および1994年(1.0.0)から今日までの部分的な短いバージョンを作成する必要があった場合、私はできませんでした。カーネルリリースノートを1つ1つ読むのではなく、最善の方法は、バージョン3.11までのカーネルに追加された一般的なリリース機能である以下を提供することです(ノートとリンクは省略)。 Linuxカーネルのバージョン1.0は1994年3月14日にリリースされました。このリリースのLinuxカーネルは、シングルプロセッサのi386ベースのコンピューターシステムのみをサポートしていました。移植性が懸念されるようになったため、 バージョン1.2(1995年3月7日リリース)は、Alpha、SPARC、およびMIPSアーキテクチャに基づくプロセッサを使用するコンピュータシステムのサポートを獲得しました。 バージョン2.0は1996年6月9日にリリースされました。シリーズには41のリリースがありました。2.0の主な機能は、SMPサポート(つまり、単一システムでの複数のプロセッサのサポート)と、より多くの種類のプロセッサのサポートでした。 バージョン2.2(1999年1月26日リリース)は、グローバルスピンロックを削除し、改善されたSMPサポートを提供し、m68kおよびPowerPCアーキテクチャと新しいファイルシステム(MicrosoftのNTFSの読み取り専用サポートを含む)のサポートを追加しました。 2001年1月4日にリリースされたバージョン2.4.0には、ISAプラグアンドプレイ、USB、およびPCカードのサポートが含まれていました。また、Hewlett-PackardのPA-RISCプロセッサのサポートも含まれていました。2.4.xの開発では、シリーズの期間を通じて、Bluetooth、Logical Volume Manager(LVM)バージョン1、RAIDサポート、InterMezzo、ext3ファイルシステムのサポートなど、より多くの機能が利用できるようになりました。 バージョン2.6.0は2003年12月18日にリリースされました。2.6.xの開発は、シリーズの全期間を通じて新しい機能を含めるようにさらに変更されました。2.6シリーズで行われた変更には、メインラインカーネルソースへのµClinuxの統合、PAEサポート、CPUのいくつかの新しいラインのサポート、メインラインカーネルソースへのALSAの統合、最大2 32ユーザー(最大2 16)、最大2 29プロセスIDのサポート(64ビットのみ、32ビットアーチはまだ2 15に制限されています))、デバイスタイプの数と各タイプのデバイスの数を大幅に増やし、64ビットサポートを改善し、最大16テラバイトのファイルサイズをサポートするファイルシステムのサポート、カーネル内プリエンプション、ネイティブPOSIXスレッドライブラリのサポート(NPTL)、メインラインカーネルソースへのユーザーモードLinux統合、メインラインカーネルソースへのSELinux統合、InfiniBandサポートなどがあります。また、注目すべきは、FUSE、JFS、XFS、ext4など、2.6.xリリース全体でいくつかのファイルシステムが追加されていることです。2.6カーネルシリーズの歴史の詳細は、kernel.orgの2.6カーネルシリーズソースコードリリースエリアのChangeLogファイルに記載されています。 バージョン3.0は2011年7月22日にリリースされました。トーバルズは、大きな変化は「何もありません。絶対に何もない」と発表しました。2011年5月30日、トーバルズは次のように発表しました。「...次のリリースは、まったく新しい光沢のある数字ではなく、優れたカーネルでもあることを確認しましょう。」予想される6〜7週間の開発プロセスの後、Linuxの20周年の近くにリリースされます。 2012年12月、Torvaldsはi386プロセッサのサポートを削除することでカーネルの複雑さを軽減することを決定し、3.7カーネルシリーズ は元のプロセッサを引き続きサポートする最後のシリーズになりました。同じシリーズは、ARMプロセッサのサポートを統合しました。 2013年9月2日にリリースされたバージョン3.11は、一時ファイルの脆弱性を減らすためのopen(2)の新しいO_TMPFILEフラグ、実験的なAMD Radeon動的電力管理、低遅延ネットワークポーリング、zswap(圧縮スワップキャッシュ)などの多くの新機能を追加します。 また、長年にわたってLinux Foundationがカーネル開発について報告していることも付け加えることができます。2012-2013カーネル開発のハイライトは次のとおりです。 536の企業(私たちが知っている)を代表する3,738人の開発者からほぼ92,000の変更セットがマージされました。 重要な新機能の膨大な配列がメインラインにマージされました。これらには、完全なティックレス操作、ユーザー名前空間、ARMのKVMおよびXen仮想化、スケジューラーでのエンティティごとの負荷追跡、ユーザー空間チェックポイント/再起動、64ビットARMアーキテクチャサポート、F2FSフラッシュ指向ファイルシステム、多くのネットワーク改善が含まれますレイテンシとバッファの膨張の問題では、ブロックストレージデバイスの高速キャッシングを提供する2つの独立したサブシステムなどがあります。 Android固有のカーネル機能をめぐる長年の争いは、完全に背景に消えていきました。よく議論されている「ウェイクロック」機能は、最新のAndroidデバイスで使用されている別のメインラインソリューションに静かに置き換えられました。 この期間中、開発カーネルのバグを見つけるための自動化ツールの使用が大幅に増加しました。「トリニティ」ファズテスターやゼロデイビルドブートシステムなどのツールは、リリース前のカーネルで多数のバグを検出し、開発サイクルを短縮し、コミュニティがより高品質のリリースを提供できるようにします。 モバイルおよび組み込み業界からの貢献は増え続けています。たとえば、Linaro、Samsung、およびTIは、このペーパーの以前のバージョンの変更の4.4%を共同で提供しました。3.10までの期間、それらはすべての変更のほぼ11%に貢献しました。 カーネルプロジェクトは初めて女性向けのアウトリーチプログラムに参加し、7つの職種に41のアプリケーションを提供しました。アプリケーションプロセス中に、374個のパッチがカーネルに送信され、それらのパッチの1/3以上が3.10カーネルリリースで受け入れられました。インターンプロセスは現在進行中ですが、その結果は、将来のカーネルリリースまで表示されません。 さらに、個々のコミットを超えるメトリックがあるため、カーネルに何が起こっているのかを定量化することはそれほど難しくありません。たとえば、1994年の1.0.0カーネルには176 250行のコードがありました。そして、3.10のような現代のカーネルには15 803 499行のコードがあります。かなりもっと。カーネルのリリース頻度が増加し(3.10の場合は63日間)、変更率も増加しました(私たちが話すように1時間あたり9コミット以上)。Linux Foundationを引用するには: この変化率を何年も維持する能力は、以前のパブリックソフトウェアプロジェクトでは前例のないものです。 しかし、これはすべて私の意見ではほとんど洞察をもたらしません。したがって、私は尋ねます: この四半世紀の進化は、 このカーネルを構成するすべてのリストされた機能を時間の経過とともに線形的に追加することを超えて、簡単に修飾できますか? そして、これは、Linuxカーネルが何であるか、またはそれがどこに向かっているのかについての洞察をもたらしますか?25年の開発の後、それについていくつかの結論を確かに引き出すことができますか? すべてを言うことなく、すべてを言う素人の言葉で抽象的な答えを探しています。
12 kernel  history 

3
仮想インターフェイス上のトラフィックをどのようにキャプチャしますか?
デバッグのために、Linux仮想インターフェイスでトラフィックをキャプチャしたいと思います。veth、tunおよびdummyインターフェイスの種類を試しています。3つすべてで、tcpdump何かを表示するのに苦労しています。 ダミーインターフェイスの設定方法は次のとおりです。 ip link add dummy10 type dummy ip addr add 99.99.99.1 dev dummy10 ip link set dummy10 up 1つの端末で、次のように監視しtcpdumpます。 tcpdump -i dummy10 すぐに、次の方法で試聴しますnc。 nc -l 99.99.99.1 2048 3番目では、次を使用してHTTP要求を作成しますcurl。 curl http://99.99.99.1:2048/ ターミナル2ではcurlリクエストからのデータを見ることができますが、からは何も表示されませんtcpdump。 A TUN / TAPチュートリアル明確化カーネルは実際には1つのローカルインターフェイス上で動作しているすべてのパケットを送信しないことがあり、いくつかの状況: tsharkの出力を見ると、何もありません。インターフェイスを通過するトラフィックはありません。これは正しいです。インターフェイスのIPアドレスにpingを送信しているため、オペレーティングシステムはパケットを「有線」で送信する必要がないと正しく判断し、カーネル自体がこれらのpingに応答しています。考えてみると、別のインターフェイスのIPアドレス(たとえばeth0)にpingを実行した場合に発生することです。パケットは送信されません。これは明白に聞こえるかもしれませんが、最初は混乱の原因になる可能性があります(私にとっては)。 ただし、これがTCPデータパケットにどのように適用されるかを確認するのは困難です。 たぶん、tcpdump別の方法インタフェースにバインドする必要がありますか?
12 networking  kernel  ip  tcp  tcpdump 


1
最初のramdiskがこんなに大きいのはなぜですか?
カーネルバージョンに付属するUbuntu 11.10を実行しています3.0.0-14。3.1.0ブランチからカーネルをダウンロードして構築しました。新しいカーネルをインストールした後、/boot/initrd.img-3.1.0ファイルが巨大であることがわかりました。私/boot/initrd.img-3.0.0-14-genericは約13MBですが、それは114MB です。私は明らかにむやみになっているむくみを取り除きたいです。 新しいカーネルを構築する際、元のカーネルの構成を保持する/boot/config-3.0.0-14-genericため.configに、ビルドディレクトリにをコピーしました。実行しmake oldconfig、すべての新しいオプションのデフォルトを選択して、カーネルを構築しました。 各initrd cpioアーカイブ内のファイルサイズを見ると、3.1.0 ramdiskでは、3.0.0-14よりもすべての.koモジュールのサイズが大きいことがわかります。構成ファイルで不要なデバッグフラグがチェックされていると想定しましたが、3.0.0-14構成ファイルでまだ有効になっていないものはありません。 私/boot/config-3.0.0-14-genericはここにいます:http : //pastebin.com/UjH7nEqd そして、私/boot/config-3.0.1はここにいます:http : //pastebin.com/HyT0M2k1 誰もが不必要な膨張がどこから来ているのか説明できますか?


2
kspliceに欠点はありますか?
kspliceLinuxカーネルのオープンソース拡張機能であり、システム管理者がオペレーティングシステムを再起動することなく、実行中のカーネルにセキュリティパッチを適用できるようにします。(ウィキペディアから。) kspliceを使用することに欠点はありますか?何らかの不安定性をもたらしますか?そうでない場合、デフォルトで他のLinuxディストリビューションに含まれないのはなぜですか?
12 linux  kernel  upgrade 

5
initrdを使用せずにLVMにルートを配置することは可能ですか?
Gentooベースシステムをセットアップしたところです(つまり、ブートしてログインし、それで何かをできるようになりました)。私のルートパーティションはLVM2仮想グループにあります(/bootパーティションが分離されています)。起動するには、以下のパラメーターをカーネルに渡す必要があります。 root=/dev/ram0 real_root=/dev/vg/rootlv init=/linuxrc dolvm どうやら、rootをマウントする前に、最初のramdiskを使用して何かを実行しているようです(LVMを読み込んでいると思います)。initrdが必要ないように、このコードをカーネル自体に配置する方法はありますか?そうでない場合、どのようにinitrdを自分で作成できますか? initrdを使用せずに、LVM以外のルート用にカーネルをコンパイルしてみて、完全に機能したことを付け加えると便利かもしれません。それから私はすべてをLVMの下に置こうとしましたが、マシンをブートすることができませんでした(LVMを処理できないと思います)。次に、このgenkernelツールと--lvmオプションを使用し、現在使用している動作中のカーネルとinitrdを作成します。 ここでgenkernel、できればinitrdを使用せずにすべてをスキップして自分で実行したいので、マシンの起動が多少速くなります(柔軟性は必要ありません)。
12 kernel  boot  root  initrd  lvm 

1
なぜ特権分離ではなくカーネルモード設定なのか?
カーネルのモード設定は、最初はLinuxに乗るのがちょっと大変でしたが、今ではとても素晴らしいです。つまり、Xはrootとして実行する必要はありませんか?高解像度ハードウェアアクセラレータコンソール?クール。 問題は、多くのUNIXプラットフォームにモード設定カーネルドライバーがないことです。したがって、KMSに依存するハードウェアは、現在Linuxに限定されています。 私の質問:なぜこれを実際にカーネルに実装するのですか? 画面解像度を設定するためにハードウェアアクセスが必要な場合は、別の特権デーモンまたは小さなsetuidバイナリを使用しないのはなぜですか。これにより、特権コードを分離し、表示サーバーを制限付きユーザーとして実行できるという利点が維持されます。特別なドライバ要件を取り除き、クロスUNIXサポートをより簡単にします。正しい?または私はここで重要な何かを見逃していますか?
12 kernel  xorg  drivers 

3
initramfsがルートファイルシステムを読み取り専用でマウントする理由
ルートファイルシステムがroinitramfs(およびinitrd)にマウントされている理由は何ですか。 たとえば、Gentoo initramfsガイドはルートファイルシステムをマウントします: mount -o ro /dev/sda1 /mnt/root 以下はなぜですか? mount -o rw /dev/sda1 /mnt/root おそらく良い理由がある(そしてそれはおそらくを含むswitchroot)ことがわかりますが、どこにも文書化されていないようです。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.