5.3 Combining Segment and Page Translation 

联合使用段与分页转换

Figure 5-12 combines Figure 5-2 and Figure 5-9 to summarize both phases of the transformation from a logical address to a physical address when paging is enabled. By appropriate choice of options and parameters to both phases, memory-management software can implement several different styles of memory management.

图5-12联合图5-2与图5-9一起总结了当分页被启用后从逻辑地址转换到物理地址时所有转换部分。通过在两个转换部分选择适当的选项和参数,内存管理软件可以实现几种不同风格的内存管理。

5.3.1 "Flat" Architecture 扁平结构

When the 80386 is used to execute software designed for architectures that don't have segments, it may be expedient to effectively "turn off" the segmentation features of the 80386. The 80386 does not have a mode that disables segmentation, but the same effect can be achieved by initially loading the segment registers with selectors for descriptors that encompass the entire 32-bit linear address space. Once loaded, the segment registers don't need to be changed. The 32-bit offsets used by 80386 instructions are adequate to address the entire linear-address space.

当80386用来执行为不具有段架构的软件时,有效的方法就是关闭80386的分段特性。80386没有哪种模式可以关闭段,但是通过在初始化时为段寄存器装入一个选择子,这个选择子所指向的描述符占用整个32位线性地址空间,可以达到一样的效果。一旦载入后,段寄存器不再需要修改。80386指令使用的32位偏移地址足够来寻址整个线性地址空间。

5.3.2 Segments Spanning Several Pages 段跨越多个页

The architecture of the 80386 permits segments to be larger or smaller than the size of a page (4 Kilobytes). For example, suppose a segment is used to address and protect a large data structure that spans 132 Kilobytes. In a software system that supports paged virtual memory, it is not necessary for the entire structure to be in physical memory at once. The structure is divided into 33 pages, any number of which may not be present. The applications programmer does not need to be aware that the virtual memory subsystem is paging the structure in this manner.

80386架构允许段限长大于或小于一页大小(4K)。例如,一个段用来寻址和保护一个达到132K大小的数据结构。在一个支持分页的虚拟内存系统中,将全部结构马上放在物理内存中不是必须的。这个结构可以被分为33页,其中的一部分可以不存在于物理内存中。应用程序不需要知道虚拟内存子系统把它用这种方式分页。

5.3.3 Pages Spanning Several Segments 多页跨越几个段

On the other hand, segments may be smaller than the size of a page. For example, consider a small data structure such as a semaphore. Because of the protection and sharing provided by segments (refer to Chapter 6 ) , it may be useful to create a separate segment for each semaphore. But, because a system may need many semaphores, it is not efficient to allocate a page for each. Therefore, it may be useful to cluster many related segments within a page.

另一方面,多个段可能小于一页的大小。例如,考虑一个小的数据结构,比如信号量。因为段提供保护和共享(参见第6章),为每个信号量创建一个独立的段是有益的。但是,因为一个系统可能需要很多信号量,为每一个分配一个页是低效的。因此,在一页内聚合很多相关的段是有益的。

5.3.4 Non-Aligned Page and Segment Boundaries 非对齐页和段边界

The architecture of the 80386 does not enforce any correspondence between the boundaries of pages and segments. It is perfectly permissible for a page to contain the end of one segment and the beginning of another. Likewise, a segment may contain the end of one page and the beginning of another.

80386架构不强制任何页与段的边界对齐。它允许一个页包含一个段的尾部和另一个段的开始。另外,一个可以包含一个页的尾部和另一个的页的开始。

5.3.5 Aligned Page and Segment Boundaries 对齐的页和段边界

Memory-management software may be simpler, however, if it enforces some correspondence between page and segment boundaries. For example, if segments are allocated only in units of one page, the logic for segment and page allocation can be combined. There is no need for logic to account for partially used pages.

尽管如此,如果强制页与段边界对齐会让内存管理软件变得简单。例如,如果段都只能被分配在一个页单元中,对段和页的定位逻辑可以组合起来。因此计算被使用的部分页在逻辑上是不需要。

5.3.6 Page-Table per Segment 每段一个页表

An approach to space management that provides even further simplification of space-management software is to maintain a one-to-one correspondence between segment descriptors and page-directory entries, as Figure 5-13 illustrates. Each descriptor has a base address in which the low-order 22 bits are zero; in other words, the base address is mapped by the first entry of a page table. A segment may have any limit from 1 to 4 megabytes. Depending on the limit, the segment is contained in from 1 to 1K page frames.A task is thus limited to 1K segments (a sufficient number for many applications), each containing up to 4 Mbytes. The descriptor, the corresponding page-directory entry, and the corresponding page table can be allocated and deallocated simultaneously.

进一步简化空间管理软件的一个方法是软件保持段选择子与页目录项之间的一一对应,正如图5-13所示。每个描述符有都有一个低22位为0的基址;换句话说,基址被映射到页表的第一项中。段的限长从1到4M。依赖于限长,段被包含在1到1K个的页帧中。因此任务被限定只能有最多1K个段(对于许多应用来说是充足的),每个段最多包含4M。选择子,对应页目录项,对应页表可以同时被配置或解除配置。

【译】x86程序员手册16-5.3联合使用段与分页转换的更多相关文章

  1. 【译】x86程序员手册23-6.5组合页与段保护

    6.5 Combining Page and Segment Protection 组合页与段保护 When paging is enabled, the 80386 first evaluates ...

  2. 【译】x86程序员手册01

    Intel 80386 Reference Programmer's Manual 80386程序员参考手册 Chapter 1 -- Introduction to the 80386 第1章 - ...

  3. 【译】x86程序员手册03 - 2.1内存组织和分段

    2.1 Memory Organization and Segmentation 内存组织和分段 The physical memory of an 80386 system is organized ...

  4. 【译】x86程序员手册14-5.1段转换

    5.1 Segment Translation 段转换 Figure 5-2 shows in more detail how the processor converts a logical add ...

  5. 【译】x86程序员手册11- 4.1系统寄存器

    4.1 Systems Registers 系统寄存器 The registers designed for use by systems programmers fall into these cl ...

  6. 【译】x86程序员手册09-第3章程序指令集

    注:觉得本章内容与理解操作系统不直接相关,所以本章并未看完,也就没有翻译完,放在这里中是为了保证手册的完整.有兴趣的人可以去原址查看. https://pdos.csail.mit.edu/6.828 ...

  7. 【译】x86程序员手册00 - 翻译起因

    从上一次学习MIT的操作系统课程又过去了一年.上次学习并没有坚持下去.想来虽有种种原因,其还在自身无法坚持罢了.故此次再鼓起勇气重新学习,发现课程都已由2014改版为2016了.但大部分内容并没有改变 ...

  8. 【译】x86程序员手册40-10.5初始化的例子

    10.5 Initialization Example初始化的例子 译注:本来想把这个例子全部注释完,但由于对intel汇编实不熟悉,有太多的伪指令,本人也是免强看懂,所以就不再做翻译了. $TITL ...

  9. 【译】x86程序员手册38-10.2实在址模式下的软件初始化

    10.2 Software Initialization for Real-Address Mode   实地址模式的软件初始化 In real-address mode a few structur ...

随机推荐

  1. android从sdcard中读取bitmap

    String sdcard_path=Environment.getExternalStorageDirectory().getCanonicalPath(); String file_path=sd ...

  2. IT领域的罗马帝国——微软公司

    微软公司从做软件开始,起步很小.但是盖茨确是一直深耕于战略布局,像一个棋局高手,每一步棋都是看了后面几步. 盖茨居然用9年的时间憋出一个win3.0,成功击败了apple. 而这9年拖住apple的居 ...

  3. lombok中的@ToString注解作用

    Lombok是一个很好的工具,节省了很多重写方法,而@ToString就是节省了ToString方法,lombok中@ToString就是节省了我们在模型中的冗余代码下面就来举个例子 import j ...

  4. 基于.NET平台常用的框架整理(转)

    基于.NET平台常用的框架整理   分布式缓存框架: Microsoft Velocity:微软自家分布式缓存服务框架. Memcahed:一套分布式的高速缓存系统,目前被许多网站使用以提升网站的访问 ...

  5. Html5离线缓存简介

    一. 什么是manifest 首先manifest是一个后缀名为minifest的文件,在文件中定义那些需要缓存的文件,支持manifest的浏览器,会将按照manifest文件的规则,像文件保存在本 ...

  6. Linux中W与Who命令的使用

    踢掉一个从某个终端连上的用户pkill -kill  -t pts/0 ---------------------------------------------------------------- ...

  7. cc2540 usbdongle 安装驱动失败的终极解决方法 【原创,多图】

    Ghost winxp win7系统安装CC2540 usbdongle CDC驱动程序 [重要提示] 因为非常多朋友使用Ghost系统.导致安装cdc驱动时安装不成功,出现 "INF中的服 ...

  8. phonegap运行原理

    用phonegap(现在名为cordova)来开发手机应用,给人的感觉,就是写了一些HTML5的网页,加上javascript,打包安装在手机上,然后就可以运行了,并且还能访问手机的各种功能和硬件,太 ...

  9. 用NuGet安装NewtonSoft.json

    因为要在C#里读取JSON字符串,资料查来查去,发现只能用第三方的NewtonSoft.json.本来.net也有自带的类库可以处理json,但TM的不停要你将JSON读进类对象里面.我靠,我只不过想 ...

  10. windowActionModeOverlay

    windowActionModeOverlay: android:windowActionModeOverlay=“true|false”  : actionmode 弹出时覆盖部分布局      若 ...