私はちょうどLinuxのプロセスについて学び始めました。
ps -ef
(実行中のすべてのプロセスが表示されます)というコマンドが見つかりました。
私はこのように出力されます
UID PID PPID LWP C NLWP STIME TTY TIME CMD
root 1 0 1 0 1 Apr17 ? 00:00:18 /sbin/init splash
何ですか天ぷらここの代表ですか?私はinit
これがコンピュータを起動したときに実行される最初のプロセスであることを知っています。しかし、何ですかsplash
?それは何をしますか?
また、これが最初の実行プロセスと呼ばれる理由を教えてくれる人ですかinit
?ところで、コンピュータの起動時に最初に実行されるのはBIOSまたはUEFIプログラムです。それでは、BIOSやUEFIではなく、最初のプロセスをinitとして呼び出すのはなぜですか?
ベストアンサー1
ここでスプラッシュとはどういう意味ですか?私はinitがコンピュータを起動したときに実行される最初のプロセスであることを知っています。しかし、スプラッシュとは何ですか?それは何をしますか?
まず、起動中にスプラッシュ画面を表示できるubuntuを使用して実行しているため、スプラッシュパラメータがsystemd
あります。よりスプラッシュ.cソースコード
[編集] 私が知っている限り、systemdは起動パラメータをサポートする唯一の初期化であるため、コンピュータでsystemdを実行しています。他にもあるかもしれませんが、Ubuntuでもデフォルト値なので、これが安全な推測であると仮定します。 。 Ubuntuには、デフォルトでロードされたカーネルであるものへの/sbin/init
シンボリックリンクがあります。ここでプロセスのコマンドラインを使用すると、これが表示されます。/usr/lib/systemd/systemd
/sbin/init splash
ps
/sbin/init splash
また、誰かがinitを実行する最初のプロセスだと言いますが、コンピュータを起動したときに最初に実行されるのはBIOSまたはUFEIプログラムと言えますか?それでは、BIOSやUFEIの代わりに最初のプロセスをinitとして呼び出すのはなぜですか?
簡単に説明すると、BIOS / UEFIは起動時にロードされるプログラムであり、追加のシステム起動用の設定データが含まれています。最終的には、ブートマネージャ(grubなど)で起動する次のプログラムを見つけてカーネルを起動できます。ここでは簡単に説明しようとしていますが、これについて読むことができます。 LinuxおよびUnixシステムでは、initはカーネルによって生成された最初のプログラムなので、PID 1を取得します。
もっと読むことができますここ、実際にその記事はかなり古いです。私は次の内容が100%正しいと主張しません。
x86コンピュータを起動するには、最初にすべきことは電源ボタンを押すことです。電源装置はマザーボードに電力を供給し、十分な電力を供給するためにスイッチモード電源装置(SMPS)からの信号を待ちます。たとえば、PCIeグラフィックカードの電力が十分であること、CPUとRAMがあることを確認します。
これインテル管理エンジン(私)/AMDセキュリティ技術この時点から、IMEは未知のminix 3オペレーティングシステムを備えた独立したIntel CPUであり、AMDの同等の製品は中央CPUに組み込まれているARMコアを使用しています。
マザーボードがSMPSを受信すると、CPUの継続的なリセットが中断され、CPUはROMのアドレスを読み取ります。これには通常、FFFF:0000h
ファームウェアコード(ショートカットなど)へのジャンプが含まれます。
ファームウェアは、キーボードでのみ使用できるBIOSというモノリシックコードブロックでした。そしてUEFIこれは、ミニファイルシステムを備えた完全なオペレーティングシステムです。現在のジャンプポイントは、解凍されたUEFIブートコード(おそらくBIOSと呼ばれます)です。 UEFIは、マウスサポート、ネットワークブート、SCSI、RAID、ディスク、および/またはメモリチェッカーなど、さまざまな機能を備えたミニオペレーティングシステムのようなものです。
UEFIがロードされたら、Power-On Self-Test(POST)を実行して、すべてのハードウェアが正常であることを確認します。
フルPOSTは、CMOS、ビデオROM、コントローラ、DMA(デバイスがRAMに直接アクセスできる)、CPU、メモリ、その他のデバイスなど、多くのデバイスをスキャンします。 PCを初期化するとき(つまり、リセットボタンを押すか再起動コマンドを実行する場合)、CMOSに問題があるかどうかなどの問題を認識せずに簡単なPOSTが行われます。 CMOSは、揮発性メモリ(電源が遮断されるとメモリが失われる)と時計を含むマザーボードの小さなチップです。このチップは小さなバッテリーで電力を供給され、UEFIのすべての設定が含まれています。
UEFIはこれらの設定を読み、システムに必要な変更を加え、システムの起動を続行します。 UEFI はドライブからブートレコードを検索し、既存のブートを実行するか、より近代的な UEFI ブート方法を使用できます。これには、ロードできるUEFIブートコードを含むFAT32形式のパーティションが必要です。Linuxカーネル、ブートマネージャ(Windows)またはブートローダgrub
(例:
UNIXシステムのカーネルは、必要なすべてのデバイスドライバをロードし、initプロセスをロードします。初期化systemd
は他のプログラムかもしれません。たとえば、bash
カーネルパラメータで設定できます。 UEFIを使用してカーネルを直接ロードすることを選択した場合、カーネルパラメータを設定する方がはるかに困難になります。ロードされると、initはPID 1を取得し、ユーザースペース(システムシェルとオプションのグラフィカルユーザーインターフェース)をロードします。