modify some mistakes.
This commit is contained in:
@@ -19,7 +19,7 @@
|
||||
|
||||
与覆盖不同,交换是用于多道程序的系统当中的。当一个新的应用进程需要被调入内存中,而内存中没有足够的存储空间时,就会触发交换技术,将另一个进程交换到外存当中。可以看到,交换的基本单位是进程,是需要换入换出整个进程的地址空间,因此交换的成本较高。交换技术示例如图所示:
|
||||
|
||||

|
||||

|
||||
|
||||
交换技术面临若干实现上的问题,如交换区的大小应该如何确定,由于需要容纳被交换进程的所有内存映像的拷贝,这个交换区还是需要相当的存储空间的。此外,还有程序换入的位置应该如何确定,在换出后需要再换回原处吗?在实现上,将换出的进程换回原处是非常困难的,因为地址空间很可能早就分配给不同的进程了,但是如果不换回原处的话程序中跳转和调用就应该如何保证正确执行呢?所以就还需要动态地址映射的支持。
|
||||
|
||||
@@ -60,7 +60,7 @@
|
||||
+ 空间局部性。当前指令和邻近的几条指令,当前访问的数据和邻近的几个数据都集中在一个较小区域内
|
||||
+ 分支局部性。一条跳转指令的两次执行,很可能跳转到相同的内存位置
|
||||
|
||||
其实这是非常容易理解的,因为在程序执行的过程中,最多的时间都是在执行循环。而考虑我们最常写的`for`循环的语句,其中的执行的语句,访问的数据,都是具有重复性的,即循环的此次,下次,以及再下次都会访问这些语句和数据,即空间局部性。此外,指令不用说,数据也都是集中在函数堆栈中一个较小的空间里面的,即空间局部性;一次`for`执行结束,都会跳转到循环开始的地方,即分支局部性。
|
||||
其实这是非常容易理解的,因为在程序执行的过程中,最多的时间都是在执行循环。而考虑我们最常写的`for`循环的语句,其中的执行的语句,访问的数据,都是具有重复性的,即循环的此次,下次,以及再下次都会访问这些语句和数据,即时间局部性。此外,指令不用说,数据也都是集中在函数堆栈中一个较小的空间里面的,即空间局部性;一次`for`执行结束,都会跳转到循环开始的地方,即分支局部性。
|
||||
|
||||
这样,利用多级存储器结构,可以将访问低层存储器的概率降到很低,从而可以将读写外存的开销降低很多。其实这也是`cache`的工作原理。
|
||||
|
||||
@@ -68,7 +68,7 @@
|
||||
|
||||
> 虚拟页式存储管理的性能
|
||||
|
||||
有效存储访问时间(effective memory access time EAT)。
|
||||
有效存储访问时间(effective memory access time, EAT)。
|
||||
|
||||
```
|
||||
EAT = 访存时间 * (1-p) + 缺页异常处理时间 * 缺页率p
|
||||
@@ -128,7 +128,7 @@ EAT = 10(1–p) + 5,000,000p(1+q)
|
||||
6. 修改p的页表项驻留位为1,物理页帧号为f;
|
||||
7. 重新执行产生缺页的指令
|
||||
|
||||
整体流程可以看一下下面这个图,不过这个图没有画出内存中还有空闲页,因为可以不用换出页面,直接分配页面的情形。
|
||||
整体流程可以看一下下面这个图,不过这个图没有画出内存中还有空闲页,因此可以不用换出页面,直接分配一个新的物理页帧的情形。
|
||||
|
||||

|
||||
|
||||
|
||||
Reference in New Issue
Block a user