进行地址变换时,首先利用段号S,将它与段长TL进行比较。若S<TL,表示未越界,利用段表始址和段号来求出该段所对应的段表项在段表中的位置,从中得到该段的页表始址,并利用逻辑地址中的段内页号P来获得对应页的页表项位置,从中读出该页所在的物理块号b,再利用块号b和页内地址来构成物理地址。 在段页式系统中,为了获得一条指令或数据,须三次访问内存。第一次访问内存中的段表,从中取得页表始址;第二次访问内存中的页表,从中取出该页所在的物理块号,并将该块号与页内地址一起形成指令或数据的物理地址;第三次访问才是真正从第二次访问所得的地址中,取出指令或数据。 显然,这使访问内存的次数增加了近两倍。 为了提高执行速度,在地址变换机构中增设一个高速缓冲寄存器。每次访问它时,都须同时利用段号和页号去检索高速缓存,若找到匹配的表项,便可从中得到相应页的物理块号,用来与页内地址一起形成物理地址;若未找到匹配表项,则仍须再三次访问内存。
复制的。
linux运行在保护模式下,并且在启动保护模式之前准备好了分页式内存管理的页表,在进入保护模式的同时一并开启了分页模式(同时置PE和PG位,即or eax,0x80000001)。需要注意的是不要把保护模式和分页模式混淆,与实模式相对的是保护模式,与分页式内存管理相对的是分段式内存管理;当然,也有两者结合的段页式。
你这个问题太宽泛了,不同的 *** 作系统有不同的管理方式,采用不同的数据结构。但是大体说来,可以分为页式、段式和段页式三种。现在比较流行的 *** 作系统,如windows和linux,主要采用的是以分页式为主的内存管理方式,段式的功能基本不太用到了。
当然这里面涉及到很多技术细节,就不是在这里能讲清楚的了,推荐你看相关的书籍,比如<windows internals><深入理解linux内核>等
希望对你有所帮助!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)