时隔快一年了,我回来啦,打算写一篇关于OS的小总结,但是感觉工程量有点大,那就从零碎的知识开始吧~
预告知
本篇分享不会提到所有详细的内容,所以更像是一个OS中的小提纲,其实也就是回头复习用的,具体的代码实现什么的(比如用Pascal)就不说了,也许以后写了也会放在这里的~
那开始吧!
基础知识点
并行:同一个时间下同时运行在不同的处理机上
并发:某一个指定的时间,无论是否在同一个处理机上,只需要两个活动此时的状态都是处于begin和end之间的某一处
时间片 = 系统响应时间/进程数(q = T/N)
作业:指用户在一次计算的过程中或一个事务处理中要求计算机系统所要完成工作的集合
+ 作业步
进程:程序的一次执行,PCB+程序+数据,可拥有资源的独立实体的同时也是一个可以独立调度的实体
PCB:进程名+当前状态+优先级+现场保留区+进程队列链指针+资源清单+进程执行起始地址+家族关系+其他
进程状态转换图:
原语:不可中断的系统程序,创建原语+撤消原语+阻塞原语+唤醒原语
线程:轻量级进程,是进程中的一个实体,是被系统独立调用的基本单位,是使用CPU的基本单位(线程标识符+程序计数器+寄存器组+堆栈)
进程调度:是对CPU的使用的调用,协调和控制各进程对CPU的使用
进程调度算法:FCFS(先来先服务)、RR(轮转调度)、分级轮转法、优先数法
进程通信部分
Bernstein条件:判断程序并发执行结果是否可再现
条件内容:
read_set R(p)={a,a,...,a}
write_set W(P)={b,b,...,b}
对于程序p、p需要满足:[R(P)∩W(P)]∪[R(P)∩W(P)]∪[W(P)∩W(P)]
才能保证并发执行且结果具有再现性
临界资源和临界区:互斥与合作
临界区的访问规则:空闲让进、有限等待、忙则等待、让权等待
同步与互斥:同步(时序上的制约关系),进程之间为了协同工作而存在的一种等待关系。互斥则是进程之间对临界资源的一种竞争关系,排他性地对资源的访问方式。
解决方案
软件解决(皮特森Peterson’s Solution):仅限用于两个进程交替执行临界区,test-and-set(lock),功能其实就是最简单的单锁的lock和unlock操作。
信号量:仅能由P、V操作修改的整型变量,其中P(波兰语proberen),为获取/申请信号量(s=s-1),V(波兰语verhogen)为释放信号量(s=s+1)。
前驱图:Procedence Graph
经典问题:生产者与消费者、读者与写者、哲学家就餐、睡觉的理发师、山洞通行
管程:我对管程的理解,它作为一种数据结构,实际上更接近的是C++或者JAVA这类面向对象语言中的类,一个管程就是管程类的一个具体的实体。管程:共享数据+若干过程,数据表示了该管程的相应资源的状态,过程(produce)则和function类似,主要是完成针对上述数据的某些规定操作。
管程的实现:霍尔方法Hoare
x、y的对列是指阻塞在x和y条件变量上的进程,而next则是获得了资源而要执行的进程
消息缓冲:send、receive