操作系统学习笔记(4)



1、顺序环境和顺序程序

  • 顺序环境
    • 程序的指令或语句序列是顺序的;
    • 在计算机系统中只有一个程序在运行;
    • 一个程序独占系统中所有资源;
    • 一个程序执行不受外界影响。
  • 顺序特征
    • 顺序性执行;
    • 封闭独占资源;
    • 确定可再现性。


2、并发环境和并发进程

  • 并发环境
    • 在一定时间内物理机器上有两个或两个以上的程序;
    • 程序处于开始运行但尚未结束的状态;
    • 程序执行次序不是事先确定的。
  • 并发特征
    • 程序结果是不可再现性的;
    • 程序的执行呈现间断性;
    • 系统中各类资源共享;
    • 独立性和制约性;
    • 程序和计算不再对应。


3、相交进程和无关进程

  • 间接式和直接式制约
    • 直接作用:也称"合作关系",是指一个进程执行完后,另一个进程才能开始,否则不能开始;
    • 间接作用:也称“竞争关系”,是指一个进程访问共享资源时,其他需访问此资源的进程必须等待。
  • 相交和无关进程
    • 相交进程:逻辑上的有某种联系的并发进程;
    • 无关进程:逻辑上无任何联系的并发进程;
    • 直接作用只发生在相交进程之间;
    • 间接作用可以发生再相交进程或无关进程之间。


4、进程同步和进程互斥

  • 进程同步(直接制约)
    • 根据一定的时序关系合作完成一项任务;
    • 并发进程因直接制约而互相等待,彼此相互发送消息进行合作,使得个进程按一定的速度执行。进程间的直接制约关系来源于合作;
    • 进程建的互相联系式有意识安排的,直接作用只发生再相交的进程间。
  • 进程互斥(间接制约)
    • 各进程竞争使用临界资源;
    • 临界资源:在操作系统中,进程是占有资源的最小单位(线程可以访问其所在进程内的所有资源,但线程本身并不占有资源或仅仅占有一点必须资源)。但对于某些资源来说,其在同一时间只能被一个进程所占用。这些一次只能被一个进程所占用的资源就是所谓的临界资源。典型的临界资源比如物理上的打印机,或是存在硬盘或内存中被多个进程所共享的一些变量和数据等(如果这类资源不被看成临界资源加以保护,那么很有可能造成丢数据的问题);
    • 进程间通过中介发生联系,是无意识安排的;
    • 可发生在相交进程间,也可发生再无关进程间。
  • 进程同步和互斥的关系
    • 互斥反映了进程间的竞争关系,而同步则反映了进程间的合作关系;
    • 进程互斥是进程同步的一种特殊情况;
    • 互斥所涉及的进程之间没有固定的必然的联系,它们只是竞争获得共享资源的使用权;而同步所涉及的并发进程之间有一钟必然的联系,即使资源可用,若没有获得同步消息,进程也不能去使用。
  • eg.
    • 若干同学去图书馆借书(互斥)
    • 输入进程和计算进程(同步)
    • 流水线生产的各道工序(同步)
    • 若干进程使用一台打印机(互斥)
    • 商品生产和社会消费(同步)


 

5、访问临界资源

  • 对于临界资源的访问,必须是互斥进行。也就是当临界资源被占用时,另一个申请临界资源的进程会被阻塞,直到其所申请的临界资源被释放。而进程内访问临界资源的代码被成为临界区。对于临界区的访问过程分为四个部分:
    • 进入区:查看临界区是否可访问,如果可以访问,则转到步骤二,否则进程会被阻塞
    • 临界区:在临界区做操作
    • 退出区:清除临界区被占用的标志
    • 剩余区:进程与临界区不相关部分的代码


6、临界区及其使用原则

  • 临界区
    • 进程中涉及临界资源的程序段
    • 多个进程的临界区为相关临界区
  • 使用原则
    • 有空让进
    • 无空等待
    • 多中择一(让权等待)
    • 有限等待


7、临界区管理软件方法

  • Dekker算法
    • Dekker算法用指示器turn来指示应该哪个进程进入临界区
1 var inside: array[1..2] of Boolean;
2 inside[1] = false;
3 inside[2] = false;
4 turn: interger;
5 turn := 1 or 2;
    • 进程1
 1 process P1
 2 begin
 3     inside[1] = true;
 4     while inside[2] do if turn = 2 then
 5         begin
 6             inside[1]:= false;
 7             while turn = 2 do begin end;
 8             inside[1]:= true;
 9         end
10     临界区;
11     turn := 2;
12     inside[1]:= false;
13 end;
    • 进程2
 1 process P2
 2 begin
 3     inside[2] = true;
 4     while inside[1] do if turn = 1 then
 5         begin
 6             inside[2]:= false;
 7             while turn = 1 do begin end;
 8             inside[2]:= true;
 9         end;
10     临界区;
11     turn:= 1;
12     inside[2]:= false;
13 end;


8、临界区管理的硬件方法

  • 测试并建立指令TS
 1 /* s代表临界资源状态,由TS指令控制 */
 2 s : boolean;
 3 s := true;
 4 process Pi  /* i = 1,2,...,n */
 5     pi : boolean;
 6 begin
 7     repeat pi := TS(s) until pi;
 8         临界区;
 9     s := true;
10 end;
  • 交换指令SWAP
    • 交换指令将交换两个字的内容
    • 公共变量lock决定临界区是否上锁
    • 每个进程的私有变量key用于与lock交换
 1 /* 交换函数 */
 2 void SWAP(int* a, int* b) {
 3     int temp;
 4     temp = *a;
 5     *a = *b;
 6     *b = temp;
 7 }
 8 
 9 key = true;
10 do {SWAP(&lock, key);}
11 while(key);
12 临界区;
13 lock := flase;
  • 开关中断指令
    • 进入临界区前执行“关中断”指令
    • 离开临界区后,执行“开中断”指令
    • 控制进程互斥进入临界区


9、软硬件方法的优缺点

  • 软硬件方法都采用了忙等待方式
  • 软件方法实现复杂,需要编程技巧
  • 硬件指令方法代码简洁有效
  • 硬件中断屏蔽方法代价较高


 

上一篇:vue 使用turn.js 翻书效果


下一篇:时间戳修改为时间