操作系统
-
虚拟:
1)时分复用技术:多个进程能在同一个处理器上并发执行使用了时分复用技术,让每个进程轮流占有处理器,每次只执行一小个时间片并快速切换。
2)空分复用技术:虚拟内存使用了空分复用技术,它将物理内存抽象为地址空间,每个进程都有各自的地址空间。地址空间的页被映射到物理内存,地址空间的页并不需要全部在物理内存中,当使用到一个没有在物理内存的页时,执行页面置换算法,将该页置换到内存中。 -
进程 VS. 线程:
1)进程:资源分配单位
进程控制块(Process Control Block, PCB)
2)线程:基本调度单位
3)系统开销:线程切换时只需保存和设置少量寄存器内容,开销很小。进程涉及到各种资源的分配或回收。
4)通信:线程间可以通过直接读写同一进程的数据进行通信,但进程通信需要借助IPC。 -
页面置换算法:
1)OPT, Optimal replacement algorithm 最佳:最长时间内不再被访问。
2)LRU,Least Recently Used 最近最久未使用:为了实现 LRU,需要在内存中维护一个所有页面的链表。当一个页面被访问时,将这个页面移到链表表头。这样就能保证链表表尾的页面是最近最久未访问的。
0326-01.png
3)NRU, Not Recently Used 最近未使用:每个页面都有两个状态位:R 与 M,当页面被访问时设置页面的 R=1,当页面被修改时设置 M=1。其中 R 位会定时被清零。可以将页面分成以下四类:
R=0,M=0
R=0,M=1
R=1,M=0
R=1,M=1
当发生缺页中断时,NRU 算法随机地从类编号最小的非空类中挑选一个页面将它换出。
NRU 优先换出已经被修改的脏页面(R=0,M=1),而不是被频繁使用的干净页面(R=1,M=0)。
4)FIFO, First In First Out 先进先出
5)第二次机会算法:FIFO 算法可能会把经常使用的页面置换出去,为了避免这一问题,对该算法做一个简单的修改:
当页面被访问 (读或写) 时设置该页面的 R 位为 1。需要替换的时候,检查最老页面的 R 位。如果 R 位是 0,那么这个页面既老又没有被使用,可以立刻置换掉;如果是 1,就将 R 位清 0,并把该页面放到链表的尾端,修改它的装入时间使它就像刚装入的一样,然后继续从链表的头部开始搜索。
6)Clock 时钟:第二次机会算法需要在链表中移动页面,降低了效率。时钟算法使用环形链表将页面连接起来,再使用一个指针指向最老的页面。 -
分段:虚拟内存采用的是分页技术,页的大小是固定的。如果编译器在编译过程中建立了多个动态增长的表,就有可能出现页面覆盖的问题。
分段的做法是把每个表分成段,一个段构成一个独立的地址空间。每个段的长度可以不同,并且可以动态增长。 -
段页式:程序的地址空间划分成多个拥有独立地址空间的段,每个段上的地址空间划分成大小相同的页。这样既拥有分段系统的共享和保护,又拥有分页系统的虚拟内存功能。
-
分页与分段的比较
1)对程序员的透明性:分页透明,但是分段需要程序员显示划分每个段。
2)地址空间的维度:分页是一维地址空间,分段是二维的。
3)大小是否可以改变:页的大小不可变,段的大小可以动态改变。
4)出现的原因:分页主要用于实现虚拟内存,从而获得更大的地址空间;分段主要是为了使程序和数据可以被划分为逻辑上独立的地址空间并且有助于共享和保护。