首页 数据库 mysql教程 操作系统之进程管理(2)

操作系统之进程管理(2)

Jun 07, 2016 pm 03:00 PM
主要 共同 学习 我们 操作系统 管理 进程

上篇博文我们主要共同学习了进程的一些基本概念,这次我们就要来分析一下进程间的相互作用,即进程的互斥、同步与通信。 进程互斥是进程之间所发生的一种间接性相互作用,这种相互作用是进程本身所不希望的,也是运行进程感觉不到的。进程互斥既可能发生在相

上篇博文我们主要共同学习了进程的一些基本概念,这次我们就要来分析一下进程间的相互作用,即进程的互斥、同步与通信。

         进程互斥是进程之间所发生的一种间接性相互作用,这种相互作用是进程本身所不希望的,也是运行进程感觉不到的。进程互斥既可能发生在相关的进程之间,也可能发生在不相关的进程之间。

         几个概念需要了解:

         共享变量:多个进程均需访问的变量称为共享变量。

         临界区:访问共享变量的程序段称为临界区,也称为临界段。

         临界资源:一次只允许一个进程使用的资源。

         进程互斥:两个或者两个以上的进程不能同时进入关于同一组共享变量的临界区,否则可能发生与时间有关的错误,这种想象称为进程互斥。

         那么如何实现进程互斥呢?

         先给出临界区的框架:

       操作系统之进程管理(2)

         实现互斥就是要编写entrydiv和exit div,保证同一时刻最多只有一个进程处于临界区内。

         下面从软件和硬件两个方面来描述进程互斥的实现:

   l  进程互斥的软件实现

(1)      Dekker互斥算法

      操作系统之进程管理(2)

        操作系统之进程管理(2)                            

         判断一个算法的正确性从三个方面来说明:

u  互斥性原则:任意时刻至多只能有一个进程处于关于同一组共享变量的临界区之中。

u  进展性原则:当临界区空闲时,只有那些执行entry div和exit div的进程参与下一个进入临界区进程的决策,该决策不能被无限期的推迟。

u  有限等待性原则:一个请求进入临界区的进程应当在有限的等待时间内获得进入该临界区的机会。

我们来看看上述算法是否符合这些原则:

先解释一下定义的数据结构:intflag[2];//初值为0  int turn;//初值为0或1

         前者表示进程是想进入或者已经进入临界区,后者表示当前轮流次序。

1.        互斥性:假定P0已经进入临界区,此时flag[0]=1成立,P1欲进入临界区必将在其外层while循环处等待,因而满足互斥性;

2.        进展性:若只有一个进程(设为P0)想要进入其临界区,由于flag[1]=0,P0结束外层while循环,进入其临界区。若两个进程都想进入临界区,假设turn=0,进程P1的if条件成立,将自己的flag[1]置为0,并动态等待P0。P0获得处理器资源运行时,检测到flag[1]不成立,结束外层while循环,进入临界区,因而满足进展性。

3.        有限等待性:假设P0处于临界区中,P1正在执行entry div代码试图进入其临界区。P0离开临界区时,将turn的值置为1,flag[0]=0,这将使P1的内层while循环条件不成立。若P1在判断外层while循环条件之前P0没有再次提出进入临界区的请求,则flag[1]的值为0,P1结束外层while循环进入其临界区;反之,若P1判断外层while循环条件之前P0再次执行entry div代码,则会将flag[0]再次置为1,但是因为flag[1]条件和turn==1条件成立,P0将在其flag[0]标志为0后忙式等待P1,直到P1进入并离开其临界区。因而P1在P0再度进入临界区之前,必能得到进入临界区的机会。

关于软件实现的算法还有很多,诸如Peterson互斥算法、Lamport面包店算法等等,

大家可以自己尝试分析一下,这需要很强的逻辑能力。

l  进程互斥的硬件实现

下面给出一个我认为形式最为简单的算法,开关中断硬件互斥算法

操作系统之进程管理(2)

由于中断是实现进程切换的必要条件,所以关中断后,不会发生进程的切换,进入临界区的进程将连续执行临界区中的全部指令,因而满足互斥性。易于证明,也满足进展性。

         关于进程互斥的硬件实现算法也有很多,诸如:基于测试并设置指令的互斥算法、基于“交换”指令的硬件互斥算法等,大家感兴趣也可以找来算法描述自己分析。

         关于进程互斥的问题我们先了解到这,以后再PV操作中还会涉及到,到时候我们就可以自己写原语,来找出现实问题的求解……

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳图形设置
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您听不到任何人,如何修复音频
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解锁Myrise中的所有内容
4 周前 By 尊渡假赌尊渡假赌尊渡假赌

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

char与wchar_t在C语言中的区别 char与wchar_t在C语言中的区别 Apr 03, 2025 pm 03:09 PM

在 C 语言中,char 和 wchar_t 的主要区别在于字符编码:char 使用 ASCII 或扩展 ASCII,wchar_t 使用 Unicode;char 占用 1-2 个字节,wchar_t 占用 2-4 个字节;char 适用于英语文本,wchar_t 适用于多语言文本;char 广泛支持,wchar_t 依赖于编译器和操作系统是否支持 Unicode;char 的字符范围受限,wchar_t 的字符范围更大,并使用专门的函数进行算术运算。

不会Rust也能用Tauri开发桌面应用吗? 不会Rust也能用Tauri开发桌面应用吗? Apr 04, 2025 pm 11:42 PM

Tauri框架下Rust语言熟练度对桌面程序开发的影响Tauri作为一款使用Rust构建的桌面应用开发框架,凭借其轻量级和...

H5和小程序与APP的区别 H5和小程序与APP的区别 Apr 06, 2025 am 10:42 AM

H5、小程序和APP的主要区别在于:技术架构:H5基于网页技术,小程序和APP为独立应用程序。体验和功能:H5轻便易用,功能受限;小程序轻量级,交互性好;APP功能强大,体验流畅。兼容性:H5跨平台兼容,小程序和APP受平台限制。开发成本:H5开发成本低,小程序中等,APP最高。适用场景:H5适合信息展示,小程序适合轻量化应用,APP适合复杂功能应用。

爱心代码复制粘贴 爱心代码免费复制粘贴手机 爱心代码复制粘贴 爱心代码免费复制粘贴手机 Apr 04, 2025 am 06:48 AM

复制粘贴代码并非不可行,但需谨慎对待。代码中环境、库、版本等依赖项可能与当前项目不匹配,导致错误或不可预料的结果。务必确保上下文一致,包括文件路径、依赖库和 Python 版本。此外,复制粘贴特定库的代码时,可能需要安装该库及其依赖项。常见的错误包括路径错误、版本冲突和代码风格不一致。性能优化需根据代码原用途和约束重新设计或重构。理解并调试复制的代码至关重要,切勿盲目复制粘贴。

如何通过JavaScript或CSS控制浏览器打印设置中的页首和页尾? 如何通过JavaScript或CSS控制浏览器打印设置中的页首和页尾? Apr 05, 2025 pm 10:39 PM

如何使用JavaScript或CSS控制浏览器打印设置中的页首和页尾在浏览器的打印设置中,有一个选项可以控制是否显�...

C语言条件编译:新手入门到实战应用的详尽指南 C语言条件编译:新手入门到实战应用的详尽指南 Apr 04, 2025 am 10:48 AM

C语言条件编译是一种根据编译时条件选择性编译代码块的机制,入门方法有:使用#if和#else指令根据条件选择代码块。常用条件表达式包括STDC、_WIN32和linux。实战案例:根据操作系统打印不同消息。根据系统位数使用不同的数据类型。根据编译器支持不同的头文件。条件编译增强了代码的可移植性和灵活性,使其适应编译器、操作系统和CPU架构变化。

无法以 root 身份登录 mysql 无法以 root 身份登录 mysql Apr 08, 2025 pm 04:54 PM

无法以 root 身份登录 MySQL 的原因主要在于权限问题、配置文件错误、密码不符、socket 文件问题或防火墙拦截。解决方法包括:检查配置文件中 bind-address 参数是否正确配置。查看 root 用户权限是否被修改或删除,并进行重置。验证密码是否准确无误,包括大小写和特殊字符。检查 socket 文件权限设置和路径。检查防火墙是否阻止了 MySQL 服务器的连接。

如何在网页上使用本地安装的字体文件? 如何在网页上使用本地安装的字体文件? Apr 05, 2025 pm 10:57 PM

如何在网页上使用本地安装的字体文件你是否在网页开发中遇到过这样的情况:你已经在自己的电脑上安装了一...

See all articles