×
操作系统教程操作系统的定义和功能操作系统的类型

进程管理

与进程有关的时间操作系统CPU调度操作系统调度算法操作系统FCFS调度操作系统FCFS护航效果操作系统FCFS与开销操作系统最短作业优先(SJF)调度预测SJF进程的CPU突发时间最短剩余时间优先(SRTF)调度算法循环调度算法循环调度算法示例最高响应比下(HRRN)调度最高响应比下(HRRN)调度示例优先级调度非抢占式优先级调度抢先式优先级调度

同步

进程同步简介临界区问题锁定变量机制测试集锁定机制优先级反转开启可变或严格的交替方式感兴趣变量机制帕特森(Peterson)解决方案同步机制无需等待睡眠和唤醒信号量介绍计算信号量的问题计算信号量的问题二进制信号量或互斥量

死锁

死锁简介处理死锁的策略死锁预防避免死锁避免死锁使用RAG进行死锁检测死锁检测和恢复

内存管理

内存管理简介固定分区动态分区压缩(碎片整理)用于动态分区的位图链表动态分区分区算法分页技术分页技术实例二进制地址基础知识物理和逻辑地址空间页表从页表映射到主内存页表项查找最佳页面大小虚拟内存后备缓冲器按需分页转换页表页面替换算法Belady异常分段分页与分段比较分段的分页

文件管理

文件的属性文件上的操作文件访问方法目录结构一级目录两级目录树型结构目录非循环图结构化目录文件系统文件系统结构主引导记录(MBR)磁盘中的数据结构内存中的数据结构目录实现目录实现连续分配链表分配文件分配表索引分配链接索引分配索引节点空闲空间管理磁盘调度

帕特森(Peterson)解决方案


这是在用户模式下实现的软件机制。 这是一个繁忙的等待解决方案,只能实施两个流程。 它使用两个变量:回转变量和感兴趣变量。

解决方案的代码如下-

# define N 2   
# define TRUE 1  
# define FALSE 0   
int interested[N] = FALSE;  
int turn;   
voidEntry_Section (int process)   
{  
    int other;   
    other = 1-process;  
    interested[process] = TRUE;  
    turn = process;   
    while (interested [other] =True && TURN=process);  
}  
voidExit_Section (int process)  
{  
    interested [process] = FALSE;  
}

到目前为止,每个解决方案都受到一个或另一个问题的影响。 但是,Peterson解决方案为您提供了所有必要的要求,例如互斥,进度,有限等待和可移植性。

Peterson解法分析

voidEntry_Section (int process)   
{  
    1. int other;   
    2. other = 1-process;  
    3. interested[process] = TRUE;  
    4. turn = process;   
    5. while (interested [other] =True && TURN=process);  
}  

Critical Section   

voidExit_Section (int process)  
{  
    6. interested [process] = FALSE;  
}

这是一个双进程解决方案。假设有两个合作进程:P1和P2。 入口部分和退出部分如下所示。 最初,感兴趣的变量和转向变量的值是0

最初进程P1到达并想要进入临界区。 它将其感兴趣的变量设置为True(指令行3),并将其设置为1(行号4)。 由于P1中给出的条件完全满足P1,所以它将进入临界区。

P1 → 1 2 3 4 5 CS

同时,进程P1被抢占,进程P2被计划。 P2也想进入临界区并执行入口部分的指令1,2,3和4。 在指令5中,由于它不满足条件(其他感兴趣的变量的值仍然为真),它被卡住了。 因此它进入了繁忙的等待状态。

P2 → 1 2 3 4 5

P1再次按计划执行,并通过执行指令编号完成临界区。 6(将感兴趣的变量设置为false)。 现在,如果P2检查,那么它将满足条件,因为其他进程的感兴趣变量变为false。 P2也将进入临界区。

P1 → 6   
P2 → 5 CS

任何过程都可以在临界区输入多次。 因此,该过程按循环顺序进行。

相互排斥

该方法确实提供互斥。 在入口部分,while条件涉及两个变量的标准,因此一个进程无法进入临界区,直到另一个进程感兴趣,并且进程是最后一个更新转向变量。

进展
一个不感兴趣的进程永远不会阻止另一个感兴趣的进程进入临界区。 如果另一个进程也有兴趣,那么这个进程将会等待。

有限的等待

感兴趣的变量机制失败了,因为它没有提供有限的等待。 但是,在Peterson解决方案中,死锁永远不会发生,因为首先设置转向变量的进程肯定会进入临界区。 因此,如果在执行入口部分的第4行之后进程被抢占,那么它在下一次机会中肯定会进入临界区。

可移植性

这是完整的软件解决方案,因此它在每个硬件上都是可移植的。


分类导航

关注微信下载离线手册

bootwiki移动版 bootwiki
(群号:472910771)