ホームページ  >  記事  >  運用・保守  >  uclinuxとlinuxの違いは何ですか

uclinuxとlinuxの違いは何ですか

WBOY
WBOYオリジナル
2022-05-17 11:02:504086ブラウズ

相違点: 1. Uclinux はメモリ ページング管理を使用しますが、Linux は仮想メモリ管理を使用します; 2. Uclinux は fork システム コールを持たず、vfork を使用しますが、Linux は fork システム コールを使用します; 3. Uclinux はメモリを増やすことができません実行時のプロセス スタック、Linux は実行時にプロセス スタックを増やすことができます。

uclinuxとlinuxの違いは何ですか

#このチュートリアルの動作環境: linux7.3 システム、Dell G3 コンピューター。

uclinux と linux の違いは何ですか

英語の uClinux では、u は小さいという意味の Micro、C は制御という意味の Control を意味します。 uClinux は Micro-Control-Linux で、文字通り「マイクロ制御の分野のために設計された Linux システム」を意味します。

ucLinux と linux の違い

    仮想メモリ管理がない
  • プロセスを増やすことができない実行中のスタック
  • #ページングは​​サポートされていません
  • 実行可能プログラムは elf ではなく、フラットです
  • ##fork は使用できません。代わりに vfork を使用してください
  • ##RAMDISK

  • uClinux は、制御分野用の組み込み Linux オペレーティング システムです。 Linux 2.0/2.4 カーネル そこから派生し、主流の Linux の機能のほとんどを継承しています。

  • メモリ管理ユニット (MMU) を持たないマイクロプロセッサ/マイクロコントローラに適しています。 MMU サポートの欠如が、uClinux と主流の Linux の根本的な違いです。

uCLinux の場合、その設計は MMU のないプロセッサ向けであり、プロセッサの仮想メモリ管理テクノロジを使用できません。 uCLinux は依然としてメモリ ページング管理を使用しており、システムは起動時に実際のメモリをページングします。アプリケーションのロード中に、プログラムはページ単位でロードされます。ただし、MMU 管理がないため、uCLinux は実際には実メモリ管理戦略を採用しています。

uCLinux システムはメモリに直接アクセスでき、すべてのプログラムでアクセスされるアドレスは実際の物理アドレスです。オペレーティング システムはメモリ領域を保護せず、実際には各プロセスが実行領域を共有します。プロセスが実行される前に、システムはプロセスに十分な連続アドレス空間を割り当て、それをすべてメイン メモリの連続空間にロードする必要があります。

メモリ保護なしの操作

(メモリ保護)は次の結果をもたらします:

無効なポインタが特権のないプロセスによって呼び出された場合でも、アドレスがトリガーされます。エラーが発生し、プログラムがクラッシュしたり、システムがハングしたりする可能性があります。当然のことながら、そのようなシステムで実行されるコードは、堅牢性とセキュリティを確保するために慎重にプログラムされ、徹底的にテストされる必要があります。 通常の Linux では、さまざまなユーザー プログラムを実行する必要があり、メモリ保護がないとシステムのセキュリティと信頼性が大幅に低下しますが、組み込み uClinux システムでは、実行中のプログラムによりセキュリティが強化されることがよくあります。工場から出荷される前に、システムのセキュリティを損なうプログラム侵入の潜在的な危険がないため、アプリケーションが比較的完全なテストを受けている限り、問題の発生確率を限られた範囲内に制御できます。

仮想メモリがない

(仮想メモリ)は主に次の結果をもたらします:

まず、カーネルによってロードされるプロセスは、カーネル内で独立して実行できる必要があります。記憶 場所は関係ありません。この目標を達成する最初の方法は、プログラムが RAM にロードされたときにプログラムのベース アドレスを「固定」することです。もう 1 つの方法は、相対アドレス指定のみを使用するコード (「位置独立コード」と呼ばれます) を生成することです。写真)。 uClinux は両方のモードをサポートします。 2 番目に、フラット メモリ モデルにおけるメモリの割り当てと解放の問題を解決する必要があります。非常に動的なメモリ割り当てはメモリの断片化を引き起こし、システム リソースを使い果たす可能性があります。動的メモリ割り当てを使用するアプリケーションの場合、堅牢性を高める 1 つの方法は、malloc() 呼び出しを事前に割り当てられたバッファ プールに置き換えることです。

uclinux では仮想メモリが使用されないため、ページが RAM 内の同じ場所にロードされるという保証がないため、メモリ内およびメモリ外のページ スワップは実装されません。通常のコンピュータでは、オペレーティング システムにより、アプリケーションは物理メモリ (RAM) よりも大きなメモリ領域を使用できます。これは、多くの場合、ハード ディスク上にスワップ パーティションを設定することで実現されます。しかし、組み込みシステムでは通常、ハードディスクの代わりにフラッシュ メモリが使用され、メモリ ページ スワップ アクセスを効率的に実装することが難しいため、実行中のアプリケーションに割り当て可能な領域はシステムの RAM 領域以下に制限されます。

マルチタスクには影響しません

。 fork() を広く使用している古いネットワーク デーモン (デーモン) を変更する必要があります。子プロセスは親プロセスと同じアドレス空間で実行されるため、場合によっては両方のプロセスの動作を変更することも必要になります。

最近のプログラムの多くは、プロセスの負荷が高い場合でもシステムが「対話型」状態を維持できるように、基本的なタスクを実行するために子プロセスに依存しています。これらのプログラムでは、同じタスクを実行するには大幅な変更が必要になる場合があります。 uクリナックス。重要なアプリケーションがそのような構造に大きく依存している場合は、書き直す必要があります。

fork() を広範囲に使用する単純なネットワーク バックグラウンド プログラム (デーモン) があるとします。このデーモンは、既知のポート (またはソケット) をリッスンし、ネットワーク クライアントが接続するのを待ちます。クライアントが接続すると、デーモンは新しい接続情報 (新しいソケット番号) を与え、fork() を呼び出します。子プロセスは新しいソケットでクライアントに接続し、親プロセスは解放されて新しい接続をリッスンし続けることができます。

uClinux には自動拡張スタック も brk() 関数もないため、ユーザー空間プログラムは mmap() コマンドを使用してメモリを割り当てる必要があります。便宜上、uclinux の C 言語ライブラリに実装されている malloc() は本質的に mmap() です。コンパイル時に、プログラムのスタック サイズを指定できます。

最後に、uClinux ターゲット ボード プロセッサにはメモリ管理ハードウェア ユニットがないため、Linux システム インターフェイスにいくつかの変更が必要です。おそらく最大の違いは、fork() および brk() システム コールがないことです。 fork() を呼び出すと、プロセスがコピーされて子プロセスが作成されます。 Linux では、fork() はコピーオンライト ページを使用して実装されます。 MMU がないため、Uclinux はプロセスを完全かつ再現可能にコピーできず、コピーオンライトにアクセスできません。この欠点を補うために、uClinux は vfork() を実装しており、親プロセスが vfork() を呼び出して子プロセスを作成すると、2 つのプロセスはスタックを含むメモリ空間全体を共有します。子プロセスは、子プロセスが exitI() を呼び出して終了するまで、または exec() を呼び出して新しいプロセスを実行するまで、親プロセスの代わりに実行されます (この時点では、親プロセスはすでにスリープ状態です)。その時点で、実行可能ファイルはロードされます。たとえそれが親プロセスの単なるコピーであっても、このプロセスを避けることはできません。子プロセスが exit() または exec() を実行すると、子プロセスは wakeup を使用して親プロセスをウェイクアップし、親プロセスは実行を継続します。

一般的なアーキテクチャにおけるカーネルの変更点:

uCLinux のリリースでは、/linux/mmnommu ディレクトリが /linux/mm ディレクトリに置き換わりました。前者は、変更されたメモリ管理サブシステムです。 MMU のハードウェア依存性が排除され、カーネル ソフトウェア自体に基本的な内部管理機能が提供されます。

多くのサブシステムを変更、追加、または書き直す必要があります。カーネルとユーザー メモリの割り当てと解放のプロセスは、透過的になるように再実装された インタラクティブ/ページング サポートも削除されました カーネルでは、「カーネル非依存コード (PIC)」をサポートするプログラム サポート モジュールが追加され、フラット フォーマットと呼ばれる新しいバイナリ オブジェクト コード フォーマットが使用されましたPIC (非常にコンパクトなヘッダーを使用) をサポートします。

カーネルは、固定ベース アドレスを使用する実行可能プログラムをサポートするために、ELF 形式をサポートするプログラム ローディング モジュールも提供します。どちらのモードにも、それぞれ長所と短所があります。従来の PICは高速に動作し、コードはコンパクトですが、コード サイズの制限があります。たとえば、Motorola 68K アーキテクチャの 16 ビット相対ジャンプでは、PIC プログラムのサイズが 32KB 以下に制限され、メソッドを使用してリストされるプログラム コードは、実行時の固定ベース アドレスのサイズ制限はありませんが、カーネルのロード後、多くのシステム オーバーヘッドが発生します。カーネル開発者にとって、uCLinux は基本的に Linux と変わりません。唯一の違いは、メモリ管理であることです。 MMU によって提供されるものは使用できません。実際、これはカーネルには影響しません。Linux のすべての標準実行可能ファイル形式は、仮想メモリの一部の機能も使用するため、uCLinux ではサポートされません。uCLinux は別のフラット形式を使用します。フラット形式は、は、簡潔で効率的な実行可能ファイル形式です。値には、実行可能コードとデータ、および実行可能ファイルをメモリ内の任意の場所にロードするために必要な再配置可能な情報が含まれています。

概要: アプリケーションを uClinux に移植する場合、自分でコードを書くだけでなく、プロセス中は常に次の機能に焦点を当てます:

1. 構成するときは、可能であれば、-disable-shared および -enable-static を選択します。

# 2. ソース コード内のすべての fork() を vfork();

3. Makefile およびリンク オプションのクロスコンパイラおよびコンパイル オプションに -Wl、-elf2flt を追加します。これは単なるリンク オプションですが、私はこのオプションを LDFLAGS と CFLAGS、さらには CC でも指定するように注意しています。

推奨学習:

Linux ビデオ チュートリアル

以上がuclinuxとlinuxの違いは何ですかの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。