【愚公系列】软考中级-软件设计师 026-操作系统(进程管理-信号量PV操作)

举报
愚公搬代码 发表于 2024/01/26 23:26:44 2024/01/26
【摘要】 🏆 作者简介,愚公搬代码🏆《头衔》:华为云特约编辑,华为云云享专家,华为开发者专家,华为产品云测专家,CSDN博客专家,CSDN商业化专家,阿里云专家博主,阿里云签约作者,腾讯云优秀博主,腾讯云内容共创官,掘金优秀博主,51CTO博客专家等。🏆《近期荣誉》:2022年度博客之星TOP2,2023年度博客之星TOP2,2022年华为云十佳博主,2023年华为云十佳博主等。🏆《博客内容...

🏆 作者简介,愚公搬代码
🏆《头衔》:华为云特约编辑,华为云云享专家,华为开发者专家,华为产品云测专家,CSDN博客专家,CSDN商业化专家,阿里云专家博主,阿里云签约作者,腾讯云优秀博主,腾讯云内容共创官,掘金优秀博主,51CTO博客专家等。
🏆《近期荣誉》:2022年度博客之星TOP2,2023年度博客之星TOP2,2022年华为云十佳博主,2023年华为云十佳博主等。
🏆《博客内容》:.NET、Java、Python、Go、Node、前端、IOS、Android、鸿蒙、Linux、物联网、网络安全、大数据、人工智能、U3D游戏、小程序等相关领域知识。
🏆🎉欢迎 👍点赞✍评论⭐收藏


🚀前言

操作系统中的进程是指正在运行的程序的实例。每个进程都有自己的地址空间、数据和代码。进程是操作系统进行资源分配和调度的基本单位。

每个进程都由操作系统维护,并被分配一个唯一的进程标识符(PID)。操作系统利用进程控制块(PCB)来记录和管理各个进程的状态信息,包括进程的优先级、执行状态、寄存器值、分配给进程的资源等。

操作系统通过调度算法来决定进程的运行顺序。调度算法可以根据进程的优先级、时间片轮转、最短作业优先等策略来进行选择。

进程可以通过进程间通信(IPC)来进行相互之间的数据交换和协作。常见的进程间通信机制包括管道、消息队列、共享内存和信号量等。

进程可以存在多个状态,包括运行态、就绪态、阻塞态等。进程可以通过系统调用来进行状态的转换和操作,比如创建新的进程、终止进程、挂起和恢复进程等。

操作系统中的进程管理功能包括进程的创建、终止、调度、同步和通信等。进程的管理和调度是操作系统的重要任务,它能够提高系统的资源利用率和系统的响应速度。

🚀一、进程管理-信号量PV操作

🔎1.同步与互斥

术语 描述
互斥 某资源(即临界资源)在同一时间内只能由一个任务单独使用,使用时需要加锁,使用完后解锁才能被其他任务使用;如打印机。
同步 多个任务可以并发执行,只不过有速度上的差异,在一定情况下停下等待,不存在资源是否单独或共享的问题;如自行车和汽车。
临界资源 各进程间需要以互斥方式对其进行访问的资源。
临界区 指进程中对临界资源实施操作的那段程序。本质是一段程序代码。
互斥信号量 对临界资源采用互斥访问,使用互斥信号量后其他进程无法访问,初值为1。
同步信号量 对共享资源的访问控制,初值一般是共享资源的数量。

🔎2.信号量

进程中的信号量是一种用于同步和互斥访问共享资源的机制。它是一个计数器,可以被多个进程共享,并且可以通过两个基本操作来操作它:P(等待)和V(释放)。

信号量的PV操作是信号量的两个基本操作,用于实现进程之间的同步和互斥。

P操作(等待操作):

  1. 如果信号量的值大于0,表示资源可用,进程可以继续执行,将信号量的值减1。
  2. 如果信号量的值等于0,表示资源不可用,进程将被阻塞,直到资源可用。

V操作(释放操作):

  1. 将信号量的值加1。
  2. 如果有其他进程因为等待资源而被阻塞,将其中一个被阻塞的进程唤醒。

利用P操作和V操作,可以实现对共享资源的互斥访问。例如,在进入临界区之前先执行P操作,退出临界区后执行V操作,这样可以确保在同一时间内仅有一个进程可以进入临界区。

此外,P操作和V操作还可用于实现进程之间的同步,例如在生产者消费者问题中,生产者在放置数据之前执行P操作,消费者在获取数据之前执行P操作,这样可以确保生产者和消费者之间的顺序执行。

在这里插入图片描述

🔎3.生产者和消费者

生产者消费者问题是一个经典的进程同步问题,描述了多个生产者和消费者共享一个有限缓冲区的情况。

在生产者消费者问题中,生产者负责将数据放入缓冲区,而消费者负责从缓冲区中取出数据。缓冲区有一定的容量,当缓冲区已满时,生产者必须等待,当缓冲区为空时,消费者必须等待。

为了实现生产者和消费者的同步,可以使用信号量或互斥锁来解决问题。以下是一种常见的实现方式:

  1. 定义一个缓冲区,以及缓冲区的容量。
  2. 定义一个互斥锁(mutex)来保护对缓冲区的访问。
  3. 定义两个信号量:一个表示缓冲区的空槽数量,一个表示缓冲区的满槽数量。
  4. 生产者进程执行以下步骤:
    • 等待空槽信号量,如果缓冲区已满则等待。
    • 获取互斥锁,保护对缓冲区的访问。
    • 将数据放入缓冲区。
    • 释放互斥锁。
    • 增加满槽信号量。
  5. 消费者进程执行以下步骤:
    • 等待满槽信号量,如果缓冲区为空则等待。
    • 获取互斥锁,保护对缓冲区的访问。
    • 从缓冲区取出数据。
    • 释放互斥锁。
    • 增加空槽信号量。

通过使用互斥锁和信号量来控制生产者和消费者的访问,可以确保数据的正确性和同步。但需要注意的是,在实现过程中需要处理好各种边界条件,以避免死锁或竞争条件的发生。

在这里插入图片描述
在这里插入图片描述


🚀感谢:给读者的一封信

亲爱的读者,

我在这篇文章中投入了大量的心血和时间,希望为您提供有价值的内容。这篇文章包含了深入的研究和个人经验,我相信这些信息对您非常有帮助。

如果您觉得这篇文章对您有所帮助,我诚恳地请求您考虑赞赏1元钱的支持。这个金额不会对您的财务状况造成负担,但它会对我继续创作高质量的内容产生积极的影响。

我之所以写这篇文章,是因为我热爱分享有用的知识和见解。您的支持将帮助我继续这个使命,也鼓励我花更多的时间和精力创作更多有价值的内容。

如果您愿意支持我的创作,请扫描下面二维码,您的支持将不胜感激。同时,如果您有任何反馈或建议,也欢迎与我分享。

在这里插入图片描述

再次感谢您的阅读和支持!

最诚挚的问候, “愚公搬代码”

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。