
操作系统
niliushall.
这个作者很懒,什么都没留下…
展开
-
【操作系统】页面置换算法
页面置换算法 在进程运行过程中,若需要访问的物理块不在内存中,就需要通过一定的方式来将页面载入内存,而此时内存很可能已无空闲空间,因此就需要一定的算法来选择内存中要被置换的页面,这种算法就被称为页面置换算法。页面置换算法的好坏,将直接影响系统的性能。一个好的页面置换算法,应做到减少页面置换的频率。尽量将以后不会用到的或较长时间不会使用的页面给置换出。下面介绍几种常用的页面置换算法。...原创 2018-06-10 22:34:17 · 19526 阅读 · 1 评论 -
【操作系统】哲学家就餐问题
问题有五个哲学家围坐在一圆桌旁,桌中央有一盘通心粉,每人面前有一只空盘子,每两人之间放一只筷子。每个哲学家的行为是思考,感到饥饿,然后吃通心粉。为了吃通心粉,每个哲学家必须拿到两只筷子,并且每个人只能直接从自己的左边或右边去取筷子。 一个简单的解法是,用一个信号量表示一支筷子,这五个信号量构成信号量数组,所有信号量初始值为1,第I个哲学家的活动课描述为:semaphore chops...原创 2018-07-12 10:56:35 · 2048 阅读 · 0 评论 -
【高性能定时器】 时间轮
时间轮 简述顾名思义,时间轮就像一个轮子,在转动的时候外界会指向轮子不同的区域,该区域就可以被使用。因此只要将不同时间的定时器按照一定的方法散列到时间轮的不同槽(即时间轮划分的区域)之中,就可以实现在运转到某个槽时,进行判断该定时器是否已经到达运行时间(需要判断是由于有的定时器并非在这一圈就需要运行,可能需要后面几圈才会运行。从图中也可以看出,每个槽中的定时器是以(双向)链表...原创 2018-07-31 17:08:21 · 9511 阅读 · 0 评论 -
线程池的分析与实现
在需要频繁开线程时,创建和销毁线程会话费大量时间,为了提高效率,我们可以在任务开始前,先创建一定数量的线程。这样在接收到任务时,就可以直接使用线程池中处于wait状态的线程,在任务结束后线程回到wait状态,等待新任务的到来,这就避免了线程的创建与销毁,从而提高程序执行效率。所需数据需要存储有多少线程( int thread_number )需要开辟对应的数组,存储线程号( pth...原创 2018-07-28 10:35:57 · 413 阅读 · 0 评论 -
【高性能定时器】时间堆(最小堆)
最小堆及其应用:时间堆 最小堆及其应用:时间堆 一、 堆1. 概念2. 最小堆的实现3. 性质4. 代码二、时间堆1. 概念简述2. 实现细节3. 代码一、 堆1. 概念 堆是一种经过排序的完全二叉树,其中任一非终端节点的数据值均不大于(或不小于)其左子节点和右子节点的值。其中,两个叶子节点的大小没有顺序。堆又分为两...原创 2018-08-01 17:15:12 · 10471 阅读 · 4 评论 -
【操作系统】生产者消费者问题
生产者消费者模型 生产者消费者模型 一、 生产者消费者问题二、 问题分析三、 伪代码实现四、代码实现(C++)五、 互斥锁与条件变量的使用比较一、 生产者消费者问题 生产者消费者问题(英语:Producer-consumer problem),也称有限缓冲问题(英语:Bounded-buffer problem),是一个多线程同步问题的经典案...原创 2018-08-11 00:43:20 · 172568 阅读 · 33 评论