オペレーティングシステムの研究(主にLinuxを参照)では、私が研究した資料では十分に説明されていない点がいくつかあります。
メモリにロードされたプログラムは、仮想メモリが純粋にページングに基づいているLinuxのようなオペレーティングシステムのコンテキストでも、テキスト、データ、スタックなどのセグメントに分割されていると説明されることがよくあります。セグメント化されたと呼ばれるのはプログラムだけであり、メモリ自体ではないというのは事実ですか?もしそうなら、私は用語が混乱していると思います。
データセグメントのサイズを大きくする「sbrk」という呼び出しを使用して、mallocをLinuxに実装できることを確認しました。繰り返しますが、この「データセグメント」は、「実際の」セグメントではなく、慣例によりデータに使用されるメモリの領域にすぎませんか?(追加の質問:「sbrk」は「セグメント」のサイズを縮小できないようです。これは、プロセスが終了する以外にOSにメモリを解放できないことを意味しますか?)
また、最近のオペレーティングシステムが(ページングされた)セグメンテーションを使用していないように見える理由を知りたいと思います。特定の種類の攻撃を防ぎ、コードを独自の保護されたセグメントに配置して、セキュリティを強化しませんか?一方で、これは例えばJITコンパイルを不可能/困難にするでしょうか?
上記の質問に対する「はい」/「いいえ」の回答に加えて、私はこの主題に関する洞察に満ちた詳細に興味があります。