x86体系结构具有用于地址空间各个段(ss,ds等)的段寄存器。如果我想在进程地址空间中添加一个新的内存段,是否可以仅通过修改内核来实现,还是需要硬件支持?只是好奇并不想去做任何特定的事情,而是试图了解Linux如何使用段寄存器。
答案 0 :(得分:0)
来自此链接 https://www.cs.princeton.edu/courses/archive/fall02/cs318/proj2/pc-arch.html
现代操作系统和应用程序使用(未分段的)内存 模型¾所有段寄存器都加载了相同的段 选择器,以便程序对所有内存的引用都指向一个 线性地址空间。
编写应用程序代码时,通常会创建段选择器 带有汇编指令和符号。汇编器和/或链接器 然后创建与这些对象关联的实际细分选择器 指令和符号。如果您正在编写系统代码,则可能需要 直接创建细分选择器。
此外,您不能在不更改包括硬件支持在内的许多内容的情况下添加新细分。
答案 1 :(得分:0)
内存通常由名为内存管理单元(MMU)的专用硬件进行管理。 任何x86 CPU都有一个MMU,但这并不意味着必须必须在硬件中进行内存管理。 Linux本身可以通过在软件中模拟MMU来运行。 当然,如果没有硬件支持,实现某些功能将非常困难(在某些情况下甚至是不可能)。 从纯粹的理论角度来看,您可以在软件(内核空间)中模拟具有您喜欢的所有细分的类似细分的行为,但是在现实世界中,这将是一个坏主意。
正如您所说,x86_32支持内存分段,但是自i386以来,它还支持分页。如今,分段被视为已被弃用,并且没有现代的操作系统(AFAIK)使用该分段(也许有些