Memory 内存段是否由操作系统或体系结构定义?

Memory 内存段是否由操作系统或体系结构定义?,memory,linux-kernel,virtual-address-space,Memory,Linux Kernel,Virtual Address Space,x86体系结构具有用于不同地址空间段(ss、ds等)的段寄存器。如果我想在进程地址空间中添加一个新的内存段,我可以通过修改内核或者需要硬件支持来实现吗?不想做任何具体的事情,只是好奇并试图理解Linux是如何使用段寄存器的 从这个链接 现代操作系统和应用程序使用(未分段)内存 型号¾所有段寄存器均加载同一段 选择器,使程序的所有内存引用都指向单个 线性地址空间 编写应用程序代码时,通常创建段选择器 使用汇编指令和符号。汇编程序和/或链接器 然后创建与这些字段关联的实际段选择器 指令和符号。如果

x86体系结构具有用于不同地址空间段(ss、ds等)的段寄存器。如果我想在进程地址空间中添加一个新的内存段,我可以通过修改内核或者需要硬件支持来实现吗?不想做任何具体的事情,只是好奇并试图理解Linux是如何使用段寄存器的

从这个链接

现代操作系统和应用程序使用(未分段)内存 型号¾所有段寄存器均加载同一段 选择器,使程序的所有内存引用都指向单个 线性地址空间

编写应用程序代码时,通常创建段选择器 使用汇编指令和符号。汇编程序和/或链接器 然后创建与这些字段关联的实际段选择器 指令和符号。如果您正在编写系统代码,则可能需要 直接创建段选择器


此外,如果不更改包括硬件支持在内的许多内容,就无法添加新的数据段。

内存通常由名为内存管理单元(MMU)的专用硬件进行管理。 任何x86 CPU都有MMU,但这并不意味着必须在硬件中进行内存管理。Linux本身可以通过在软件中模拟MMU来运行。 当然,如果没有硬件支持,实现某些功能将非常困难(在某些情况下甚至不可能)。 从纯理论的角度来看,您可以在软件(内核空间)中模拟您喜欢的所有片段的类似分段的行为,但在现实世界中,这只是一个坏主意

正如您所说的,x86_32支持内存分段,但由于i386还支持分页。如今,分段被认为是不推荐使用的,并且没有使用它的现代操作系统(AFAIK)(除了一些黑客补丁,如grsecurity/PaX及其UDEREF功能)。
还需要注意的是,x86_64完全缺乏对分段的支持。

linux不使用它们