操作系统学习
文章平均质量分 77
Mirants
这个作者很懒,什么都没留下…
展开
-
最佳替换算法模拟
定义最佳(Optimal)置换算法是指,其所选择的被淘汰页面,将是以后永不使用的,或许是在最长(未来)时间内不再被访问的页面。采用最佳置换算法,通常可保证获得最低的缺页率。但由于人们目前还无法预知一个进程在内存的若干个页面中,哪一个页面是未来最长时间内不再被访问的,因而该算法是无法实现的,但可以利用该算法去评价其它算法。算法过程现举例说明如下。 假定系统为某进程原创 2015-06-15 21:01:22 · 2344 阅读 · 0 评论 -
线程模式
创建多线程应用的第一步原创 2015-08-09 16:10:30 · 2992 阅读 · 1 评论 -
I/O多路复用之总结
poll() 和 select() 的区别虽然 poll() 和select() 完成相同的工作,但 poll() 调用在很多方面仍然优于 select() 调用:poll() 不需要用户计算最大文件描述符值加 1 作为参数传递给它。poll() 对于值最大的文件描述符,效率最高。试想一下,要通过 select() 监视一个值为900的文件描述符,内核需要检查每个集合中的每个位原创 2015-08-08 23:55:54 · 1087 阅读 · 0 评论 -
I/O 多路复用之 Event Poll
概述由于 poll() 和 select() 的局限,Linux 2.6内核引入了 event poll(epoll) 机制。虽然 epoll 的实现比 poll() 和 select() 要复杂得多,epoll 解决了前两个存在的基本性能问题,并增加了一些新的特性。对于poll() 和 select(),每次调用时都需要所有被监听的文件描述符列表。内核必须遍历所有被监视的文件描述原创 2015-08-08 22:36:48 · 2538 阅读 · 0 评论 -
I/O 多路复用之select
概述Linux提供了三种 I/O 多路复用方案:select,poll和epoll。在这一篇博客里先讨论select和poll,epoll是Linux特有的高级解决方案,将在下一篇中介绍。select()select()系统调用提供了一种实现同步 I/O 多路复用的机制:#include int select (int n, fd_set原创 2015-08-08 12:40:39 · 1178 阅读 · 0 评论 -
I/O 多路复用之poll
概述poll() 系统调用是System V 的I/O多路复用的解决方案。它解决了一些 select() 的不足,不过 select() 还是被频繁的使用(还是出于习惯或可移植性的考虑)。Poll() #include int poll(struct pollfd *fds, nfds_t nfds, int timeout);select() 使用了原创 2015-08-08 14:11:35 · 790 阅读 · 0 评论 -
随机置换算法
算法过程:在内存块初始化后,取出页面访问序列队列的队头。首先判断内存块中是否已经存在该队头页面,如果存在则直接显示内存块当前情况;否则,判断此时内存是否已满。如果内存未满,循环遍历找出空闲内存块,进行页面置换;若内存已满,在所有的内存块中随机选出一个作为被置换页面,缺页数加1。如此循环迭代,直到页面访问序列队列为空时,整个算法执行完毕。最后计算并显示缺页率。其流程图如图所示。原创 2015-06-16 15:14:16 · 5068 阅读 · 0 评论 -
FIFO先进先出置换算法
算法过程:将内存块数组视为队列,在实现的过程中,初始化时,队头指针指向第一个内存块位置,队尾指针指向最后一个内存块位置。每次进行页面置换时,算法总置换当前队头,并且,队头指针循环加1,队尾指针循环加1.在内存块初始化后,取出页面访问序列队列的队头。首先判断内存块中是否已经存在该队头页面,如果存在则直接显示内存块当前情况;否则,判断此时内存是否已满。如果内存未满,循环遍历找出空闲内存块,原创 2015-06-16 15:20:53 · 12144 阅读 · 0 评论 -
LRU最近最久未使用算法
算法过程最近最久未使用算法需要引入内存块时钟,即为每个内存块设定一个计时器,用于记录相应内存块中的页面已经存在的时间。每次置换选出所有内存块时钟中最大者作为被置换页面,当页面发生置换时,将其对应的计时器清零,并且其他计时器加1.可用等长的整型数组来表示每个内存块的计时器。在内存块初始化后,取出页面访问序列队列的队头。首先判断内存块中是否已经存在该队头页面,如果存在则直接显示内存块当前情况;原创 2015-06-16 15:22:01 · 11982 阅读 · 0 评论 -
改进型Clock算法
算法过程:改进型的Clock算法需要综合考虑某一内存页面的访问位和修改位来判断是否置换该页面。在实际编写算法过程中,同样可以用一个等长的整型数组来标识每个内存块的修改状态。访问位A和修改位M可以组成一下四种类型的页面。1类(A =0, M = 0):表示该页面最近既未被访问,又未被修改,是最佳淘汰页。2类(A =0, M = 1):表示该页面最近未被访问,但已被修改,并不是很好的淘原创 2015-06-16 16:15:50 · 20553 阅读 · 3 评论 -
简单Clock算法
算法过程: 简单Clock算法需要根据页面内存是否被访问来决定是否置换该页面。实际编程中,与最近最久未置换算法类似,用整型数组来表示当前每个内存页面是否被访问,其中1代表被访问过,0代表未访问过。每次置换,指针循环遍历,找出第一个访问位不为1的那个内存页面。并且在找到被置换页面之前,将所经过的所有页面内存对应的访问位置0.在内存块初始化后,取出页面访问序列队列的队头。首原创 2015-06-16 16:05:58 · 29811 阅读 · 0 评论 -
线程小结
二进制程序,进程和线程二进制程序(binaries)是指保存在存储介质上的程序,以给定操作系统和计算机体系结构可访问的格式编译生成,可以运行但尚未开始。进程(process)是操作系统对运行的二进制程序的抽象,包括:加载的二进制程序,虚拟内存,内核资源如打开的文件,关联的用户等。线程(threads)是进程内的执行单元,具体包括:虚拟处理器,堆栈,程序状态。换句话说,进程是正在运行的二进制程序原创 2015-08-09 14:23:45 · 832 阅读 · 0 评论