操作系统论文Word文件下载.docx
《操作系统论文Word文件下载.docx》由会员分享,可在线阅读,更多相关《操作系统论文Word文件下载.docx(17页珍藏版)》请在冰豆网上搜索。
2011年07月01日
目录
一.摘要 .-3-
二.正文..............................................................................-4-
2.1Linux内存.............................................................-4-
2.1.1Linux操作系统内存管理...........................-4-
2.1.2Linux存储管理的基本框架.......................-4-
2.1.3Linux对虚拟内存的管理...........................-5-
2.1.4Linux对物理内存的管理...........................-6-
2.1.5缓存和刷新机制..........................................-7-
2.1.6小结..............................................................-9-
2.2进程调度..............................................................-10-
2.2.1Unix进程调度...........................................-11-
2.2.2Linux的进程调度.....................................-12-
2.2.3小结............................................................-16-
四.关键字........................................................................-16-
五.参考文献....................................................................-16-
-17-
1.摘要
1.1
Linux支持虚拟内存,就是使用磁盘作为RAM的扩展,使可用内存相应地有效扩大。
核心把当前不用的内存块存到硬盘,腾出内存给其他目的。
当原来的内容又要使用时,再读回内存。
这对用户全透明:
运行于Linux的程序只看到大量的可用内存而不甘心哪部分在磁盘上。
当然,读写硬盘比真的内存慢(慢千倍),所以程序运行较慢。
用做虚拟内存的这部分硬盘叫对换空间。
Linux可以使用文件系统中的普通文件或单独的分区作为对换空间。
对换分区更快,但对换文件更易于改变大小(无须对硬盘重分区)。
如果知道要多少对换空间,应该用对换分区;
如果不能确认,可以先用对换文件,用一段时间后再根据所需空间建立对换分区。
Linux允许同时使用多个对换分区和/或对换文件。
即如果偶尔需要更多的对换空间,可以随时建立一个额外的对换文件。
1.2
以Linux,Unix,Windows操作系统为例,分析其进程调度策略,以期对进程调度过程有更深层次的认识
二.正文
2.1Linux内存
2.1.1Linux操作系统内存管理
Linux是一个遵循POSIX(PortableOperatingSystemInterface)标准的操作系统,它继承了UNIX系统优秀的设计思想,拥有简练、容错强、高效而且稳
定的内核。
此外Linux还具备其他操作系统所不能比拟的优点。
①:
完全免费;
②:
内核源代码完全公开。
Linux内核拥有一个功能完备的内存管理子系统,它增加了对NUMA(非均匀存储结构)体系结构的支持并且使用了基于区(ZONE)的物理内存管理方法,从而保持了物理上连续分布、而逻辑上统一的内存模式和传统的共享内存编程模型,使得系统的性能得以极大的扩展。
这样Linux不仅能够满足传统的桌面应用,而且还能满足高端服务器市场的需要。
目前,Linux不仅在Internet服务器上表现出色,而且还可以胜任大型数据库系统的服务器。
2.1.2Linux存储管理的基本框架
Linux内核采用虚拟页式存储管理,采用三次映射机制实现从线性地址到物理地址的映射。
其中PGD为页面目录,PMD为中间目录,PT为页面表。
具体的映射过程为:
⑴从CR3寄存器中找到PGD基地址;
⑵以线性地址的最高位段为下标,在PGD中找到指向PMD的指针;
⑶以线性地址的次位段为下标,在PMD中找到指向PT的指针;
⑷同理,在PT中找到指向页面的指针;
⑸线性地址的最后位段,为在此页中的偏移量,这样就完成了从线性地址到物理地址的映射过程。
32位的微机平台如Intel的X86采用段页式的两层映射机制,而64位的微处理器采用三级分页。
对于传统的32位平台,Linux采用让PMD(中间目录)全0来消除中间目录域,这样就把Linux逻辑上的三层映射模型落实到X86结构物理上的二层映射,从而保证了Linux对多种硬件平台的支持。
2.1.3Linux对虚拟内存的管理
虚拟内存不仅可以解决内存容量的问题,还可以提供以下附加的功能:
大地址空间;
进程保护;
内存映射;
灵活的物理内存分配;
共享虚拟内存。
Linux对虚拟内存的管理以进程为基础。
32位的线性地址映射的4G的虚拟空间中,从0XC0000000到0XFFFFFFFF的1G空间为所用进程所共享的内核空间,每个进程都有自己的3G用户空间。
Linux的虚拟内存管理需要各种机制的支持,首先内存管理程序通过映射机制把用户程序的逻辑地址映射到物理地址,在用户程序运行时时如果发现程序中要用的虚拟地址没有对应的物理地址,就发出请页要求①:
如果有空闲的内存可供分配,就请求分配内存②,并把正在使用的物理页记录在页缓存中③,如果没有足够的内存分配,就调用交换机制,腾出一部分内存④⑤。
另外在地址映射中要通过TLB(翻译后援存储器)来寻找物理页⑧,交换机制中要用到交换缓存
⑥,并且把物理页内容交换到交换文件中也要修改页表来映射文件地址⑦。
一个进程的虚拟地址映射靠三个数据结构来描述:
mm_struct、vm_area_struct、page。
其中mm_struct结构用来描述一个进程的虚拟内存;
vm_area_struct描述一个进程的虚拟地址区域,在这个区域中的所有页面具有相同的访问权限和一些属性;
page描述一个具体的物理页面。
当进程通过系统调用动态分配内存时,Linux首先分配一个vm_area_struct结构,并链接到进程的虚拟内存链表,当后续指令访问这一内存区域时,产生缺页异常。
系统处理时,通过分析缺页原因、操作权限之后,如果页面在交换文件中,则进入do_page_fault()中恢复映射的代码,重新建立映射关系。
如果因为页面不再内存中,则Linux会分配新的物理页,并建立映射关系。
当物理内存出现不足时,就需要换出一些页面。
Linux采用LRU(LeastRecentlyUsed最近最少使用)页面置换算法选择需要从系统中换出的页面。
系统中每个页面都有一个“age”属性,这个属性会在页面被访问的时候改变。
Linux根据这个属性选择要回收的页面,同时为了避免页面“抖动”(即刚释放的页面又被访问),将页面的换出和内存页面的释放分两步来做,而在真正释放的时候仅仅只写回“脏”页面。
这一任务由交换守护进程kswapd完成。
free_pages_high,free_pages_low是衡量系统中现有空闲页的标准,当系统中空闲页的数量少于free_pages_high,甚至少于free_pages_low时,kswapd进程会采用三种方法来减少系统正在使用的物理页的数量。
①调用shrink_mmap()减少buffercache和pagecache的大小;
②调用shm_swap()将systemV共享内存页交换到物理内存;
③调用swap_out()交换或丢弃页。
2.1.4Linux对物理内存的管理
Linux2.4内核加入了对NUMA的支持,如果系统是NUMA结构的处理机系统,则物理内存被划分为三个层次来管理:
存储节点(Node),管理区(Zone),页面(Page)。
处理器的本地内存组成的区域叫做一个节点(Node),它通过
pglist_data数据结构来描述。
各个节点的物理内存根据不同的作用又分为
ZONE_DMA、ZONE_NORMAL、ZONE_HIGH,ZONE_DMA面积小,且专供DMA使用,
ZONE_NORMAL则供大多数的程序使用,对于ZONE_HIGH仅仅只有页面缓存以及用户进程能够使用该区域的空间。
每个管理区对应一个free_area数组来组织空闲页面队列,该数组的每一项描述某一种页块的信息,第一个元素描述大小为1页
的内存块的信息,第二个元素描述大小为2页的内存块的信息,依此类推,所描述的页块大小以2的倍数增加。
free_area数组的定义如下:
Typedefstructfree_area_struct{Structlist_headfree_list;
Unsignedint *map;
}free_area_t;
list_head是一个双向指针结构,在这里用于将物理页块结构mem_map_t连结成一个双向链表,而map则是记录这种页块组分配情况的位图,例如,位图的第N位为1,表明第N个页块是空闲的。
页分配代码使用向量表free_area来分配和回收物理页。
系统初始化时,
free_area数组也被赋了初值。
也就是说,系统中所有可用的空闲物理页块都已经被加到了free_area数组中。
Linux使用Buddy最先匹配算法来进行页面的分配和回收,并且必须按2的幂次方进行分配。
比如要分配大小为2k的空闲块,如果系统中有足够的空闲块,页面分配代码首先在free_area中查找相应大小的空闲块,如果找到则分配。
如果没有则查找下一尺寸(2倍于请求大小)的页面块,继续这一过程直到找到可以分配的页面,按要求分配之后,将剩余的空闲块仍然按照2的幂次方划分后链入适当的空闲块中。
与分配算法相反,页面回收时总是试图将相邻的空闲页面组合成更大尺寸的空闲块。
这里先给出“伙伴”要满足的三个条件:
①两个块大小相同;
②两个块物理地址连续;
③两个块从同一大块中分离出来。
在用户释放内存时,判断“伙伴”是否是空闲块。
若否,则只要将释放的空闲块简单的插入相应的free