【愚公系列】软考中级-软件设计师 026-操作系统(进程管理-信号量PV操作)
🏆 作者简介,愚公搬代码
🏆《头衔》:华为云特约编辑,华为云云享专家,华为开发者专家,华为产品云测专家,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操作(等待操作):
- 如果信号量的值大于0,表示资源可用,进程可以继续执行,将信号量的值减1。
- 如果信号量的值等于0,表示资源不可用,进程将被阻塞,直到资源可用。
V操作(释放操作):
- 将信号量的值加1。
- 如果有其他进程因为等待资源而被阻塞,将其中一个被阻塞的进程唤醒。
利用P操作和V操作,可以实现对共享资源的互斥访问。例如,在进入临界区之前先执行P操作,退出临界区后执行V操作,这样可以确保在同一时间内仅有一个进程可以进入临界区。
此外,P操作和V操作还可用于实现进程之间的同步,例如在生产者消费者问题中,生产者在放置数据之前执行P操作,消费者在获取数据之前执行P操作,这样可以确保生产者和消费者之间的顺序执行。
🔎3.生产者和消费者
生产者消费者问题是一个经典的进程同步问题,描述了多个生产者和消费者共享一个有限缓冲区的情况。
在生产者消费者问题中,生产者负责将数据放入缓冲区,而消费者负责从缓冲区中取出数据。缓冲区有一定的容量,当缓冲区已满时,生产者必须等待,当缓冲区为空时,消费者必须等待。
为了实现生产者和消费者的同步,可以使用信号量或互斥锁来解决问题。以下是一种常见的实现方式:
- 定义一个缓冲区,以及缓冲区的容量。
- 定义一个互斥锁(mutex)来保护对缓冲区的访问。
- 定义两个信号量:一个表示缓冲区的空槽数量,一个表示缓冲区的满槽数量。
- 生产者进程执行以下步骤:
- 等待空槽信号量,如果缓冲区已满则等待。
- 获取互斥锁,保护对缓冲区的访问。
- 将数据放入缓冲区。
- 释放互斥锁。
- 增加满槽信号量。
- 消费者进程执行以下步骤:
- 等待满槽信号量,如果缓冲区为空则等待。
- 获取互斥锁,保护对缓冲区的访问。
- 从缓冲区取出数据。
- 释放互斥锁。
- 增加空槽信号量。
通过使用互斥锁和信号量来控制生产者和消费者的访问,可以确保数据的正确性和同步。但需要注意的是,在实现过程中需要处理好各种边界条件,以避免死锁或竞争条件的发生。
🚀感谢:给读者的一封信
亲爱的读者,
我在这篇文章中投入了大量的心血和时间,希望为您提供有价值的内容。这篇文章包含了深入的研究和个人经验,我相信这些信息对您非常有帮助。
如果您觉得这篇文章对您有所帮助,我诚恳地请求您考虑赞赏1元钱的支持。这个金额不会对您的财务状况造成负担,但它会对我继续创作高质量的内容产生积极的影响。
我之所以写这篇文章,是因为我热爱分享有用的知识和见解。您的支持将帮助我继续这个使命,也鼓励我花更多的时间和精力创作更多有价值的内容。
如果您愿意支持我的创作,请扫描下面二维码,您的支持将不胜感激。同时,如果您有任何反馈或建议,也欢迎与我分享。
再次感谢您的阅读和支持!
最诚挚的问候, “愚公搬代码”
- 点赞
- 收藏
- 关注作者
评论(0)