
操作系统
昨夜的秋天
这个作者很懒,什么都没留下…
展开
-
调度算法
1.批处理系统中的调度1.1先来先服务调度最先进入就绪队列的作业。有利于长作业,但不利于短作业,因为短作业必须一直等待前面的长作业执行完毕才能执行,而长作业又需要执行很长时间,造成了短作业等待时间过长。1.2短作业优先调度估计运行时间最短的作业。长作业有可能会饿死,处于一直等待短作业执行完毕的状态。因为如果一直有短作业到来,那么长作业永远得不到调度。1.3 最短剩余时间优先允许比当前进程剩余时间更...原创 2018-03-28 17:12:56 · 453 阅读 · 0 评论 -
进程同步(操作系统层面,不涉及具体系统api)
1.临界区对资源进行锁定的那段代码称为临界区。为了互斥访问临界资源,每个进程在进入临界区之前,需要先进行检查。//entry section//critical section//exit section2.同步与互斥同步:多个进程按一定顺序执行;互斥:多个进程在同一时刻只有一个进程能进入临界区3.信号量信号量(Semaphore)是一个整型变量,可以对其执行down和up操作。down:如果信号...原创 2018-03-29 10:40:08 · 235 阅读 · 0 评论 -
死锁
死锁的必要条件互斥:每个资源要么已经分配给了一个进程,要么就是可用的。占有和等待:已经得到了某个资源的进程可以再请求新的资源。不可抢占:已经分配给一个进程的资源不能强制性地被抢占,它只能被占有它的进程显示地释放。环路等待:有两个或者两个以上的进程组成一条环路,该环路中的每个进程都在等待下一个进程所占有的资源。死锁的处理方法1.鸵鸟策略把头埋在沙子里,假装根本没发生问题。因为解决死锁问题的代价很高,...原创 2018-03-29 11:05:33 · 840 阅读 · 0 评论 -
线程池思路
自己的写的看法:有一个Pool类,内部管理任务(job)的分发。维护任务队列和线程队列(忙碌和空闲),并创建一个分发线程(专门用于任务的分发)。这个分发线程会调用分发函数,分发任务队列中的任务。 当添加一个新任务的时候(CThreadManage->Run()方法添加任务),Pool会将这个新任务添加到任务队列中。添加后任务不一定立即执行,而是等待线程池中的分发线程进行分发。 分发线...原创 2018-08-01 21:57:50 · 313 阅读 · 0 评论 -
WindowsAPI实现的读写锁(C++)
使用Windows提供的互斥体和事件体来实现读写锁。CreateMutex,CreateEvent,WaitForSingleObject,WaitForMultipleObjects,ResetEvent,SetEvent,ReleaseMutex,CloseHandle,不熟悉这组API的童鞋可以边看代码边查。 RWLockImpl.h#ifndef _RWLockImpl_Head...原创 2018-08-30 10:38:58 · 2493 阅读 · 2 评论