ブートローダ(GrubやU-bootなど)がカーネル(HDDまたは組み込みシステムの場合はフラッシュから)を見つけ、起動時にメモリにロードするという内容を読みました。
これは、ブートローダがカーネルを利用可能なRAMに完全にロードしてから制御を渡すことを意味しますか?私の考えでは、カーネルがRAMに正確に収まらないので、カーネルコマンドはRAMからストレージデバイスに、またはその逆に置き換えられます。
私が理解していないのは、この段階でブートローダが実行を停止し、カーネルが引き継がれたことです。できますか?一つ?
答え1
カーネルは起動時にRAMに完全にロードされ、交換されません。カーネルは、それがどこにロードされたのかわからず、気にしません。ネットワークからロードすることができ、tftpを介して交換するのは困難です。
答え2
より正確に言えば、ブートローダはロードするすべてをメモリにカーネルとしてロードします。カーネル自体である必要はなく、2番目のステップブートローダでもあります(ほとんどの場合、GRUBは実際のカーネルを抽出する解凍ルーチンにジャンプするため、これは実際には技術的に起こります)。またはタイプ1です。その後、Linuxカーネルをロードして実行するハイパーバイザーです。
つまり、すべてがメモリに収まる必要があります。そしてユーザースペースなどに十分なスペースを確保してください。それ以外の場合、システムは起動しません。 (これが現在実行メモリが64M未満のLinuxシステムを構築するのが難しい理由の1つです。)私が知っている他のすべてのUNIXシステム(SVR4、BSD、Solaris、IRIX、Ultrix、Xenixなど)でも同様です。カーネル空間でメモリスワッピングを処理することはあまりにも痛いので、実装する価値はありません。