Memory 基本寄存器和限制寄存器位于何处?

Memory 基本寄存器和限制寄存器位于何处?,memory,memory-management,operating-system,cpu-registers,main-memory-database,Memory,Memory Management,Operating System,Cpu Registers,Main Memory Database,基本寄存器和限制寄存器位于何处 是在CPU中还是在其他地方 每个进程的基地址和限制地址都不同。那么,CPU如何知道每个进程的这些寄存器的值呢 编辑: 每个进程在内存中都有一个位置,起始地址(base)和结束地址(base+limit)。通过查看这些地址,cpu不会对这些地址范围执行任何操作,以免影响其他进程的内存。因此,每个进程都有一个起始地址(基)。我的问题是,cpu如何获得因进程而异的地址?您可能指的是一种称为分段的技术,例如在x86兼容的cpu中使用。在过去,这被用来将内存中的多个进程彼此

基本寄存器和限制寄存器位于何处

  • 是在CPU中还是在其他地方

  • 每个进程的基地址和限制地址都不同。那么,CPU如何知道每个进程的这些寄存器的值呢

  • 编辑
    每个进程在内存中都有一个位置,起始地址(base)和结束地址(base+limit)。通过查看这些地址,cpu不会对这些地址范围执行任何操作,以免影响其他进程的内存。因此,每个进程都有一个起始地址(基)。我的问题是,cpu如何获得因进程而异的地址?您可能指的是一种称为分段的技术,例如在x86兼容的cpu中使用。在过去,这被用来将内存中的多个进程彼此分离,尽管现在这已不再常见,而且在较新的处理器中,对分段的硬件支持甚至已被删除

    内存引用(用于代码和数据)以所谓的段选择器为“前缀”。在x86上,这些是寄存器
    CS
    (用于指令加载)、
    DS
    (数据访问,例如通过
    mov
    )、
    SS
    (堆栈访问)、
    ES
    (例如
    movs
    )和
    FS

    根据段选择器,CPU将使用一个段描述符(由操作系统提供)将该段基址添加到内存地址,并检查该地址是否保持在指定的限制内。(还有其他检查,如权限级别、执行权限等)

    产生的地址是实际用于从主存获取数据的地址

    这些段描述符是由操作系统或用户进程分别设置的全局描述符表或某些本地描述符表的一部分。这些表存储在主内存中的某个位置(CPU使用
    lgdt
    lldt
    指令获取它们的地址)

    为了避免每次访问都必须执行两次内存访问(一次用于查找段描述符和预期的段描述符),当前使用的段描述符被缓存在一些CPU内部寄存器中。这在切换(例如全局描述符表)时变得很明显,因为为了使其生效,需要重置每个段选择器

    因此

    是在CPU中还是在其他地方

    。。。答案是“在主内存中,但缓存在CPU内部”

    每个进程的基地址和限制地址都不同。那么,CPU如何知道每个进程的这些寄存器的值呢


    在任务切换时,操作系统(用于软件多任务)或CPU本身(当使用硬件多任务时,通过另一个称为任务状态段的描述符结构)更改
    CS
    DS
    。。。登记册。这会更改所用的段描述符,从而更改所用的基址和极限地址。

    这些是CPU寄存器,不清楚您具体想询问什么位置。所有进程只使用一组寄存器。每个进程在内存中都有一个位置、起始地址(基)和结束地址(基+限制)。通过查看这些地址,cpu不会对这些地址范围执行任何操作,以免影响其他进程的内存。因此,每个进程都有一个起始地址(基)。我的问题是,cpu是如何获得这个地址的,每个进程的进程控制块中的进程不同
    physical address = logical address + segment base