目录
1、不可中断的原子操作?
网上查了一下,Linux和C++的举例有很多,大体是加锁、解锁、中断现场保护、恢复等,总的来说,好像中断用的比较多。
2、进程切换、系统调用关于用户态、内核态的知识
系统调用实际上是应用程序在用户空间激起了一次软中断,在软中断之前要按照规范,将各个需要传递的参数填入到相应的寄存器中。 软中断会激起内核的异常处理,此时就会强制陷入内核态。
进程内线程切换,本质上还是进程切换。. 只要进程切换,就必然已经进入了内核态。. 道理很简单,只有内核才有权力进行进程调度,而且进程调度涉及到数据结构
3、调度算法三两事
①先来先服务算法很少使用,但是,在有优先级的时候,相同优先级,依然按照先来先服务。
②优先级算法中,优先级的评判方法有很多,最主要的,是根据需求,根据实际情况。
③时间片轮转一般用在进程调度,在已经获得所有就绪进程的情况下进行轮转。
④多级反馈队列调度算法,表重要,重要的有几点:一、设置多个队列,优先级从高到低;二、优先级越高,时间片越短,通常相邻的是两倍关系;三、新进程进入,放在第一队列末尾。四、若进入新的进程,中断当前,保护现场,先处理上面加入的。
总的来说,假设A\B\C三个进程,三个队列。
A、B先进,放在第一队列末尾。第一队列按顺序,A结束,放到第二队列最后,接着B占用CPU,B结束,放在A后面。第一队列运行完了,第二队列开始,按顺序,A结束,放到第三队列最后,B运行,运行到一半,C进来了,放在第一队列,B暂停运行,运行第一队列的C,C结束之后,放在第二队列最后,B恢复现场,继续运行。B运行结束,放在第三队列最后,运行C,C结束,放在B后面......
4、临界区和临界资源
临界资源,一种资源,例如一个鼠标,只能一个电脑用,就是临界资源。
临界区,一段程序,很多代码都有,例如,删除、查找、更改位置,对于数据库中的学生信息,这三个功能,不能同时实现,而且,这三个作业对应的程序中,都有一段代码,调用数据库信息,这段代码,在同一时段,只允许一个进程使用,这段代码就是临界区。另外,这段代码,可能会因为最终目的不同,不同进程的临界区多少有点区别,但是调用数据库信息这个行为是一样的。
不可以认为临界资源相同,临界区,即访问这些资源的代码就相同。
5、互斥准则
①空闲让进
②忙则等待
③有限等待,进程能及时进入临界区,运行。
④让权等待,进程异常,释放CPU给其他进程。
6、互斥、同步、异步
互斥,有限资源,只能一个进程使用
同步,相互合作,速度不相同的进程等待一个时间,能相互交换消息之后,才能继续运行,例如,先倒水,才能喝水。
异步,不用同时交换信息,例如,菜在锅里炖着,我先去亲一下老婆。