进程调度时机
1.当前运行的进程结束
2.当前进行的进程堵塞
3.在抢占式系统中,更高优先级的进程就绪时
4.在分时系统中,当前进程时间片用完时
5.执行完系统调用返回用户进程时
不能调度的情况
1.中断处理程序执行时
2.操作系统的内核临界区内
3.原子操作过程中
进程调度策略
1.先到先服务
2.短作业优先
3.优先级调度
4.时间片轮换
5.高响应比优先
6.多级队列
6.多级反馈队列
进程调度策略的设计指标
1.CPU利用率
2.吞吐率,单位时间内CPU完成作业的数量
3.响应时间
4.周转时间,作业从提交到完成的间隔:平均周转时间,带权周转时间,平均带权周转时间
进程状态和状态转换
进程状态:运行,阻塞,就绪
进程转换:
1.运行到阻塞:缺少资源或时间片到
2.阻塞到就绪:所需条件满足
3.就绪到运行:所需条件未满足
孤儿进程和僵尸进程
孤儿进程:父进程退出,子进程还在运行。孤儿进程将被init进程收养
僵尸进程:子进程退出,父进程没有用wait获取子进程状态信息,子进程的进程描述符仍保存在系统中
什么是线程?
1.CPU调度的基本单位
2.操作系统可识别的最小执行和调度单位
3.属于同意进程的线程共享同一地址空间
为什么需要线程?
因为进程的不足:1.进程同一时间只能做一个任务,不能充分利用CPU资源。2.进程阻塞时,进程中其他任务也被阻塞
线程优点:1.开辟线程的资源要远小于进程。2.切换效率比进程快,消耗小。3.线程间更方便通信
进程和线程的区别和联系
1.一个线程只能属于一个进程,一个进程可以有多个线程
2.进程有独立的地址空间,多个线程共享同一进程的地址空间
3.进程是资源分配的最小单位,线程是CPU调度的最小单位
4.线程通信比进程通信更简单方便
5.进程不会相互影响,一个进程内的某线程挂掉将导致整个进程挂掉
进程和线程的基本API
多线程模型
1.多对一:多个用户级线程映射到一个内核级线程。该模型下,线程在用户空间进行管理,效率较高,缺点是一个线程阻塞时整个进程都被阻塞
2.一对一:一个用户级线程映射到一个内核级线程。该模型下,一个线程阻塞时不影响其他线程,缺点是内核线程数量有上限,且多数目的线程切换给系统带来消耗,负担。目前Linux和Windows都是一对一模型
3.多对多:多个用户级线程映射到多个内核级线程。结合上面两个模型的特点。
进程同步的方法
1.互斥锁
2.读写锁
3.信号量
4.记录锁
5.条件变量
6.屏障
进程同步和线程同步的区别
因为进程是独立的用户空间,因此同步要把锁放在共享空间。而线程只要把锁放在同一进程空间
死锁四条件
1.互斥:进程独占所分配到的资源
2.占有并等待:对其他资源申请时发生阻塞时,不释放自己手上的资源
3.非抢占:进程已获得的资源只能自己释放不能剥夺
4.循环等待:发生死锁后,必然存在一个进程-资源的环形
如何解决死锁
破坏四条件之一,如
1:破坏“占有并等待”:一次性分配,容易产生饥饿现象
2:破坏“不可抢占”:当申请资源不满足时要释放手中资源
3:破坏“循环等待”:通过定义资源的线性顺序,当进程占用i时只能申请i之后的资源
虚拟内存?
虚拟内存是一种存储模式,让我们感觉,内存能够处理远比内存大得多的数据和文件
常见页面置换算法
1.先进先出FIFO,置换在内存中驻留最久的页面。实现简单,性能较差
2.最近最少使用LRU。置换最近一段时间最长时间未访问过的页面。根据程序局部性原理,可能达到最优效果,但维护访问链表开销较大
3.最不常用LFU。置换访问次数最少的页面。算法开销大
写时复制
多进程读时,每个进程只要保存指向这个资源的指针,避免复制带来的负担。当一个进程要修改时,再复制一份供其修改。
实时操作系统RTOS
即时操作系统,按照排序运行、管理系统资源。和一般的操作系统最大的区别是其实时性,当任务需要,会马上(较短时间内)执行该任务,不会有很长的延时
优先级反转
当高优先级任务在等待一个被低优先级任务占有的资源时,一个介于两个任务优先级之间的中等优先级任务开始执行。这就发生了高优先级等低优先级任务,但低优先级无法执行的类似死锁的事情发生。
解决优先级反转
1.优先级继承:当一个任务阻塞了若干任务时,若阻塞任务中有高优先级任务,就把所有组赛任务中的最高优先级设为此任务的优先级
2.优先级天花板 :每个信号量设置一个优先级天花板,值大于所有使用该信号的任务的优先级。当某任务获得信号量时,将其优先级设为此天花板的值