news 2026/7/13 2:55:58

【考研】2026/7/12

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【考研】2026/7/12

政治

2026/7/12

金融资本由工业垄断资本和银行垄断资本融合在一起而形成的一种垄断资本。金融资本形成的主要途径包括金融联系、资本参与和人事参与。

金融寡头:指操纵国民经济命脉,并在实际上控制国家政权的少数垄断资本家或垄断资本家集团。他们在经济领域中的统治主要是通过“参与制”实现的。

参与制:即金融寡头通过掌握一定数量的股票来层层控制企业的制度。

在政治上金融寡头对国家机器的控制,主要是通过同政府的“个人联合”来实现的。金融寡头还通过建立政策咨询机构等方式对政府的政策施加影响,并通过掌握新闻出版、广播电视、科学教育、文化体育等上层建筑的各个领域,左右国家的内政外交及社会生活。

垄断资本的实质在于获取垄断利润

垄断利润:垄断资本家凭借其在社会生产和流通中的垄断地位而获得的超过平均利润的高额利润。

垄断利润的形成,关键在于垄断组织在经济生活中起了决定性作用,从而阻碍了资本在各部门之间的自由转移,限制了利润平均化的趋势,这样一来,垄断资本家有可能长期获得大大超过平均利润的垄断利润。

垄断利润的来源垄断资本所获得的高额利润,归根到底来自无产阶级和其他劳动人民所创造的剩余价值

垄断利润的实现方式垄断利润主要是通过垄断组织制定的垄断价格来实现的。垄断价格是垄断组织在销售或购买商品时,凭借其垄断地位规定的、旨在保证获取最大限度利润的市场价格。

垄断价格:垄断高价、垄断低价。

垄断高价:指垄断组织出售商品时规定的高于生产价格的价格。

垄断低价:指垄断组织在购买非垄断企业所生产的原材料等生产资料时规定的低于生产价格的价格。

垄断价格的产生没有否定价值规律。 它是价值规律在垄断资本主义阶段作用的具体体现

国家垄断资本主义是国家政权和私人垄断资本融合在一起的垄断资本主义。国家垄断资本主义的产生,是垄断资本主义生产关系在自身范围内的部分质变,标志着资本主义发展进入新的阶段

国家垄断资本主义是科技进步和生产社会化程度进一步提高的产物,是资本主义基本矛盾进一步尖锐化的必然结果。

  • 社会生产力的发展,要求资本主义生产资料在更大范围内被支配,从而促进了国家垄断资本主义的产生

  • 经济波动和经济危机的深化,推动国家垄断资本主义的产生。危机的发展和加深,靠私人资本的力量根本难以应付。

  • 缓和社会矛盾、协调利益关系的需求,促使国家垄断资本主义的产生

国家垄断资本主义的主要形式

  • 国家所有并直接经营企业。

  • 国家与私人共有、合营企业。

  • 国家通过多种形式参与私人垄断资本的再生产过程

    • 国家向私人垄断企业大量订货,为私人垄断企业提供有保证的国家市场;国家通过各种形式的津贴和补助,直接、间接地资助私人垄断企业;国家通过社会福利开支,提高社会购买力,扩大消费需求,为私人垄断企业创造市场条件。

  • 宏观调节:主要是国家运用财政政策、货币政策等经济手段,对社会总供给和总需求进行调节,以实现经济快速增长、充分就业、物价稳定和国际收支平衡的基本目标。

  • 微观调控:反托拉斯法、公共事业规制、社会经济规制。

国家垄断资本主义是垄断资本主义的新发展,它对资本主义经济的发展产生了积极的作用

  • 第一,国家垄断资本主义的出现在一定程度上有利于社会生产力的发展。

  • 第二,国家断资本主义在一定范围内突破了私人垄断资本的狭隘界限,在一定程度上适应了社会化大生产的要求,有利于缓解资本主义生产的无政府状态。

  • 第三,通过国家的收入再分配手段,劳动人生活水平有所改善和提高。

  • 第四,在国家垄断资本主义的参与和干预下,各主要资本主义国家的农业、工业、商业、通信业及交通运输业的现代化水平迅速提高,社会生产和社会生活的面貌改观、这些国家国民经济的现代化进程加快。

国家垄断资本主义在本质上是资产阶级国家力量同垄断组织力结合在一起的垄断资本主义,它在一定程度上促进生产力发展的同时,却加大了对劳动人民的剥削和掠夺,更好地保证了垄断资产阶级获得高额垄断利润,更有利于维护资本主义制度。它的出现是资本主义经济制度内的经济关系调整,并没有从根本上消除资本主义的基本矛盾。国家垄断资本主义尽管有各种不同的具体形式,其实质都是私人垄断资本利用国家机器来为其发展服务的手段,是私人垄断资本为了维护垄断统治和获取高额垄断利润,而与国家政权相结合的一种垄断资本主义形式

20 世纪 70 年代初,由于资本主义发展不平衡的加深和国际货币体系内在矛盾的激化,布雷顿森林体系崩溃。随后,西方国家普遍走上了金融自由化和金融创新的道路

金融自由化与金融创新是金融垄断资本得以形成和壮大的重要制度条件

金融自由化和金融创新推动资本主义经济的金融化程度不断提高

  • 第一,金融自由化促使由工业垄断资本与银行垄断资本融合而成的金融寡头发生分化,以大银行和非银行金融机构为主体的金融垄断资本脱离实体经济独立发展

  • 第二,金融垄断资本通过形形色色的金融衍生工具在金融市场呼风唤雨、巧取豪夺,使财富以惊人的速度膨胀

  • 第三,在金融垄断资本的推动下,垄断资本主义的金融化程度不断提高,金融业在国民经济中的地位大幅上升,金融资本在资本主义国家国内生产总值和利润总额中所占的比例越来越大。

  • 第四,随着实体经济的资本利润率下降,面对激烈竞争,实体经济部门不得不把利润的一部分投向金融领域,导致金融资本的急剧膨胀,制造业就业人数严重减少,以金融为核心的服务业就业人数逐步增加,虚拟经济越来越脱离实体经济

  • 第五,随着金融垄断资本势力的爆炸性增长,金融垄断资本的控制能力大大提升,不但学握了越来越多的社会财富,而且还通过控制政府决策部门和决策过程实现对整个国家的政治控制,利用国家机器维护自身的利益。

金融垄断资本快速发展的作用:一方面促进了资本主义经济的发展,另一方面也造成了经济过度虚拟化,导致金融危机频繁发生,不仅给资本主义经济带来灾难,也给全球经济带来灾难。

英语

2026/7/12

①Their analysisruled outthe possibilitythat it was firms' political influence, rather than their CSR stand, thataccounted fortheleniency: companies that contributed more to political campaigns did not receive lower fines.

他们的分析排除了这种可能性,即公司的政治影响,而不是他们的企业社会责任立场,导致了宽大处理:对政治运动贡献更多的公司并没有收到更低的罚款。

ruled out 排除,使不可能

accounted for 解释,导致,占...比例

leniency n. 宽大,仁慈

②The Conservatives' planning reform explicitly gives rural development priority overconservation, even authorising “off-plan" buildingwhere local people might object.

保守党的规划改革明确将农村发展置于保护之上,甚至授权在当地人可能反对的地方进行“非规划”建设。

conservation n. 保护

数学

2026/7/12

专业课

2026/7/12

调度程序(调度器):用于调度和分派CPU的组件。由三部分组成:

排队器:将系统中的所有就绪程序按照一定的策略排成一个或多个队列,以便于调度程序选择。每当有一个进程转变为就绪态时,排队器便将它插入相应的就绪队列

分派器:依据调度程序所选的进程,将其从就绪队列中取出,将CPU分配给新进程

上下文切换器:在对CPU进行切换时,发生两对上下文的切换操作:

  • 将当前进程的上下文保存到其PCB中,再装入分派程序的上下文,以便分派程序运行

  • 移出分派程序的上下文,将新选进程的CPU现场信息装入CPU的各个相应寄存器

可以进行进程调度与切换的情况

①创建新进程后,父进程和子进程都处于就绪态,因此需要决定是运行父进程还是运行子进程,调度程序可以合法地决定其中一个进程先运行

②进程正常结束或异常终止后,必须从就绪队列中选择某个进程运行。若没有就绪进程则通常运行一个系统提供的闲逛进程

③当进程因I/O请求、信号量操作或其他原因此被阻塞时,必须调度其他进程运行

④当I/O设备准备就绪后,发出I/O中断,原先等待I/O的进程从阻塞态变为就绪态,此时需要决定是让新的就绪进程投入运行,还是让中断发生时运行的进程继续执行

不能进行进程调度与切换的情况

在处理中断的过程中。中断处理过程复杂,在实现上很难做到进程切换,而且中断处理是系统工作的一部分,逻辑上不属于某一进程,不应被剥夺 CPU 资源

需要完全屏蔽中断的原子操作过程中。如加锁、解锁、中断现场保护、恢复等原子操作。在原子过程中,连中断都要屏蔽,更不应该进行进程调度与切换

进程调度的方式

非抢占调度方式(非剥夺方式)指当一个进程正在CPU上执行时,即使有某个更为重要或紧迫的进程进入就绪队列,仍然让正在执行的进程继续执行,直到该进程运行完成(如正常结束、异常终止)或发生某种事件(如等待I/O操作、在进程通信或同步中执行了Block原语)而进入阻塞态时,才将CPU分配给其他进程

抢占调度方式(剥夺方式):指当一个进程正在CPU上执行时,若有某个更为重要或紧迫的进程需要使用CPU,则允许调度程序根据某种原则去暂停正在执行的进程,将CPU分配给这个更为重要或紧迫的进程

闲逛进程:当进程切换时,若系统中没有就绪进程,则会调度闲逛进程(ldle Process)运行,它的PID为0。若没有其他进程就绪,则该进程就一直运行,并在指令周期后测试中断。闲逛进程的优先级最低,没有就绪进程时才会运行闲逛进程,只要有进程就绪,就会立即让出CPU。闲逛进程不需要CPU之外的资源,它不会被阻塞

两种线程的调度

用户级线程调度:因为内核并不知道线程的存在,所以内核还是和以前一样,选择一个进程,并给予时间控制。由进程中的调度程序决定哪个线程运行

内核级线程调度:内核选择一个特定线程运行,通常不用考虑该线程属于哪个进程。对被选择的线程赋予一个时间片,若超过了时间片,则会强制挂起该线程

调度目标

CPU利用率:CPU利用率 = CPU有效工作事件 / (CPU有效工作时间 + CPU空闲等待时间)

系统吞吐量:单位时间内CPU完成作业的数量

周转时间:指从作业提交到作业完成所经历的时间,是作业等待、在就绪队列中排队、在CPU上运行及I/O操作所花费时间的总和

  • 平均周转时间:指多个作业周转时间的平均值

  • 带权周转时间:指作业周转时间与作业实际运行时间的比值

  • 平均带权周转时间:指多个作业带权周转时间的平均值

等待时间:指进程处于等待CPU的时间之和

响应时间:指从用户到提交请求到系统首次产生响应所用的时间

进程切换

  • 上下文切换:切换 CPU 到另一个进程需要保存当前进程状态并恢复另一个进程的状态

  • 进程上下文采用进程PCB表示,包括CPU寄存器的值、进程状态和内存管理信息等。当进行上下文切换时,内核将旧进程状态保存在其PCB中,然后加载经调度而要执行的新进程的上下文。在切换过程中,进程的运行环境产生实质性的变化

  • 上下文切换的流程:

    • 挂起一个进程,将CPU上下文保存到PCB,包括程序计数器和其他寄存器

    • 将进程的PCB移入相应的队列,如就绪、在某事件阻塞等队列

    • 选择另一个进程执行,并更新其PCB

    • 恢复新进程的CPU上下文

    • 跳转到新进程PCB中的程序计数器所指向的位置执行

  • 上下文切换的消耗:上下文切换通常是计算密集型的,即它需要相当可观的CPU时间,在每秒几十上百次的切换中,每次切换都需要纳秒量级的时间,所以上下文切换对系统来说意味着消耗大量的CPU时间。有些CPU提供多个寄存器组,这样,上下文切换就只需要简单改变当前寄存器组的指针

  • 上下文切换与模式切换

    • 模式切换:用户态和内核态之间的切换。模式切换时,CPU 逻辑上可能还在执行同一进程。用户进程最开始都运行在用户态,若进程因中断或异常进入内核态运行,执行完后又回到用户态刚被中断的进程运行。

    • 用户态和内核态之间的切换,不是上下文切换,因为没有改变当前的进程上下文切换只能发生在内核态,它是多任务操作系统中的一个必需的特性

!!!CPU调度算法

先来先服务(FCFS)调度算法:作业调度、进程调度

  • 在作业调度中,FCFS调度算法每次从后备作业队列中选择最先进入该队列的一个或几个作业,将它们调入内存,分配必要的资源,创建进程并放入就绪队列

  • 在进程调度中,FCFS调度算法每次从就绪队列中选择最先进入该队列的进程,将CPU分配给它,使之投入运行,直到运行完成或因某种原因此阻塞时才释放CPU

  • 注意,对短作业不利(如果前面是长作业,但不会饥饿),有利于CPU繁忙型作业,不利于I/O繁忙型作业

短作业优先(SJF)调度算法

  • 短作业优先(SJF)调度算法从后备队列中选择一个或几个估计运行时间最短的作业,将它们调入内存运行;短进程优先(SPF)调度算法从就绪队列中选择一个估计运行时间最短的进程,将CPU分配给它,使之立即执行,直到完成或发生某事件而阻塞时才释放CPU

  • 注意,对长作业不利(长作业一直等待,可能会产生“饥饿”现象),SPF算法默认非抢占式,当然还有抢占式SPF调度算法(最短剩余时间优先调度算法)

高响应比优先调度算法:主要用于作业调度

  • 上述两种的折中,同时考虑了每个作业的等待时间和估计的运行时间。在每次进行作业调度时,先计算后备作业队列中每个作业的响应比,从中选出响应比最高的作业投入运行

  • 响应比 = (等待时间 + 要求服务时间)/ 要求服务时间

  • 注意,克服了”饥饿”现象

优先级调度算法:作业调度、进程调度

  • 在作业调度中,优先级调度算法每次从后备作业队列中选择优先级最高的一个或几个作业,将它们调入内存,分配必要的资源,创建进程并放入就绪队列。在进程调度中,优先级调度算法每次从就绪队列中选择优先级最高的进程,将CPU分配给它,使之投入运行

  • 根据新的更高优先级进程能否抢占正在执行的进程

    • 非抢占式优先级调度算法:当一个进程正在CPU上运行时,即使有某个优先级更高的进程进入就绪队列,仍让正在运行的进程继续运行,直到由于其自身的原因此让出CPU时(任务完成或等待事件),才将CPU分配给就绪队列中优先级最高的进程

    • 抢占式优先级调度算法:当一个进程正在CPU上运行时,若有某个优先级更高的进程进入就绪队列,则立即暂停正在运行的进程,将CPU分配给优先级更高的进程

  • 根据进程创建后其优先级是否可以改变

    • 静态优先级:优先级是在创建进程时确定的,且在进程的整个运行期间保持不变。确定静态优先级的主要依据有进程类型、进程对资源的要求、用户要求。注意,可能出现优先级低的进程长期得不到调度的情况

    • 动态优先级:创建进程时先赋予进程一个优先级,但优先级会随进程的推进或等待时间的增加而改变,以便获得更好的调度性能。例如,规定优先级随等待时间的增加而提高于是,对于优先级初值较低的进程,在等待足够长的时间后也可获得CPU

  • 一般来说,进程优先级的设置:

    • 系统进程 > 用户进程

    • 交互型进程 > 非交互型进程

    • I/O型进程 > 计算型进程

时间片轮转(RR)调度算法:分时系统

  • 系统将所有的就绪进程按FCFS策略排成一个就绪队列,每隔一定的时间(如 30ms)使产生一次时钟中断,激活调度程序进行调度,将CPU分配给就绪队列的队首进程,并令其执行一个时间片。在执行完一个时间片后,即使进程并未运行完成,它也必须释放出(被剥夺)CPU给就绪队列的新队首进程,而被剥夺的进程返回到就绪队列的末尾重新排队,等候再次运行

多级队列调度算法

  • 在系统中设置多个就绪队列,将不同类型或性质的进程固定分配到不同的就绪队列。每个队列可实施不同的调度算法,因此,系统针对不同用户进程的需求,很容易提供多种调度策略。同一队列中的进程可以设置不同的优先级,不同的队列本身也可以设置不同的优先级。在多 CPU 系统中,可以很方便为每个CPU设置一个单独的就绪队列,每个CPU可实施各自不同的调度策略,这样就能根据用户需求将多个线程分配到一个或多个 CPU 上运行

多级反馈队列调度算法(融合了前面几种算法的有点)

  • 设置多个就绪队列,并为每个队列赋予不同的优先级。第1级队列的优先级最高,第2级队列的优先级次之,其余队列的优先级逐个降低

  • 赋予各个队列的进程运行时间片的大小各不相同。在优先级越高的队列中,每个进程的时间片就越小。每个队列都采用FCFS算法。新进程进入内存后,首先将它放入第1级队列的末尾,按FCFS原则等待调度。当轮到该进程执行时,如它能在该时间片内完成,便可撤离系统。若它在一个时间片结束时尚未完成,调度程序将其转入第2级队列的末尾等待调度;若它在第2级队列中运行一个时间片后仍未完成,再将它放入第3级队列,以此类推。当进程最后被降到第n级队列后,在第n级队列中便采用时间片轮转方式运行

  • 按队列优先级调度。仅当第1级队列为空时,才调度第2级队列中的进程运行;仅当第 1~i-1级队列均为空时,才会调度第i级队列中的进程运行。若CPU正在执行第i级队列中的某个进程时,又有新进程进入任何一个优先级较高的队列,此时须立即将正在运行的进程放回到第i级队列的末尾,而将 CPU 分配给新到的高优先级进程

基于公平原则的调度算法

  • 保证调度算法:保证调度算法向用户做出明确的性能保证,而非优先运行保证。一种很实际且很容易实现的保证是:若系统中有n个用户登录,则每个用户都保证获得1/n的CPU时间;又如,若在单用户系统中有n个进程正在运行,则每个进程都保证获得1/n的 CPU 时间

  • 公平分享调度算法:公平分享调度算法保证所有用户能获得相同的CPU 时间,或所要求的时间比例。在这种方式下,不论用户启动多少进程,都能保证每个用户分配到应得的 CPU 份额

多处理机调度

非对称多处理机(AMP)

  • 大多采用主从式操作系统,内核驻留在主机上,而从机上只运行用户程序,进程调度由主机负责。当从机空闲时,便向主机发送一个索求进程的信号,在主机中有一个就绪队列,只要队列不为空,主机便从队首摘下一个进程分配给索求进程的从机。这种分配方式实现简单,缺点是主机太忙,容易成为系统瓶颈

对称多处理机(SMP)

  • 所有处理机都是相同的,因此由调度程序将任何一个进程分配给任何一个CPU

  • 处理器亲和性:当一个进程从一个CPU移到其他CPU上时,应将第一个CPU的缓存设置为无效,然后重新填充第二个CPU的缓存,这种操作的代价较高,因此系统应尽量避免将进程从一个CPU移到另一个CPU,而应试图让一个进程运行在同一个CPU上

  • 负载平衡(负载均衡):对于SMP系统,应尽量保证所有CPU的,以便充分利用多处理机的优点,否则,一个或多个 CPU 会空闲,而其他CPU会处于高负载状态,且有一些进程处于等待状态。负载平衡应设法将负载平均分配到SMP系统的所有CPU上

  • 然而,负载平衡通常会抵消处理器亲和性带来的好处,保持一个进程运行在同一个CPU上的好处是可以利用它在该 CPU的缓存。而将进程从一个 CPU 迁移到另一个 CPU 会失去这个好处因此,在某些系统中,只有当不平衡达到一定程度后才移动进程

  • 多处理机调度方案

    • 公共就绪队列:系统中仅设置一个公共就绪队列,所有CPU共享同一个就绪队列。这种方案很好地实现了负载平衡,因为CPU一旦空闲,它就立刻从公共就绪队列中选择一个进程运行。缺点是各进程可能频繁地在不同的CPU上运行,处理器亲和性不好

      • 提升处理器亲和性的方法有两种:软亲和、硬亲和

      • 软亲和:指由调度程序尽量保持一个进程到某个CPU上,但这个进程也可以迁移到其他CPU上

      • 硬亲和:指由用户进程通过系统调用,主动请求系统分配到固定的CPU上

    • 私有就绪队列:系统为每个CPU设置一个私有就绪队列,当CPU空闲时,就从各自的私有就绪队列中选择一个进程运行。这种方案很好地实现了处理器亲和性,缺点是必须进行负载平衡

      • 平衡负载的方法通常有两种:推迁移、拉迁移

      • 推迁移:一个特定的系统程序周期性检査每个CPU的负载,若发现不平衡,则从超载CPU的就绪队列中“推”一些进程到空闲CPU的就绪队列,从而平均分配负载。

      • 拉迁移:若一个 CPU 负载很低,则从超载 CPU 的就绪队列中“拉”一些进程到自己的就绪队列

      • 在系统中,推迁移和拉迁移常被并行实现

同步与互斥

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

  • 对临界资源的访问,必须互斥地进行

  • 临界区:访问临界资源地那段代码

  • 临界资源的访问过程:

    • 进入区:为了进入临界区使用临界资源,在进入区要检查可否进入临界区,若能进入临界区,则应设置正在访问临界区的标志,以阻止其他进程同时进入临界区

    • 临界区(临界段):进程中访问临界资源的那段代码

    • 退出区:将正在访问临界区的标志清除

    • 剩余区:代码中的其余部分

同步(直接制约关系):指为完成某种任务而建立的两个或多个进程,这些进程因为需要协调它们的运行次序而等待、传递信息所产生的制约关系

互斥(间接制约关系):当一个进程进入临界区使用临界资源时,另一个进程必须等待,当占用临界资源的进程退出临界区后,另一进程才允许去访问此临界资源

  • 为禁止两个进程同时进入临界区:

    • 空闲让进:临界区空闲时,可以允许一个请求进入临界区的进程立即进入临界区

    • 忙则等待:当已有进程进入临界区时,其他试图进入临界区的进程必须等待

    • 有限等待:对请求访问的进程,应保证能在有限时间内进入临界区,防止进程无限等待

    • 让权等待(原则上应该遵循,但非必须):当进程不能进入临界区时,应立即释放处理器防止进程忙等待

实现临界区互斥的基本方法

软件实现方法

单标志法:违背”空闲让进“准则

// 进程P0 while(turn != 0); // 进入区 critical section; // 临界区 turn = 1; // 退出区 rmainder section; // 剩余区 ​ // 进程P1 while(turn != 1); // 进入区 critical section; // 临界区 turn = 0; // 退出区 rmainder section; // 剩余区

双标志先检查法:违背”忙则等待“准则

// 进程P0 while(flag[1]); // 进入区 flag[0] = true; // 进入区 critical section; // 临界区 flag[0] = false; // 退出区 rmainder section; // 剩余区 ​ // 进程P1 while(flag[0]); // 进入区 flag[1] = true; // 进入区 critical section; // 临界区 flag[1] = false; // 退出区 rmainder section; // 剩余区

双标志后检查法:违背”空闲让进“”有限等待“准则

// 进程P0 flag[0] = true; // 进入区 while(flag[1]); // 进入区 critical section; // 临界区 flag[0] = false; // 退出区 rmainder section; // 剩余区 ​ // 进程P1 flag[1] = true; // 进入区 while(flag[0]); // 进入区 critical section; // 临界区 flag[1] = false; // 退出区 rmainder section; // 剩余区

Peterson算法:违背”让权等待“准则,相较于前三个是最好的

// 进程P0 flag[0] = true; // 进入区 turn = 1; // 进入区 while(flag[1] && turn==1) // 进入区 critical section; // 临界区 flag[0] = false; // 退出区 remainder section; // 剩余区 ​ // 进程P1 flag[1] = true; // 进入区 turn = 0; // 进入区 while(flag[0] && turn==0) // 进入区 critical section; // 临界区 flag[1] = false; // 退出区 remainder section; // 剩余区

硬件实现方法

中断屏蔽方法:关中断→临界区→开中断

硬件指令方法——TestAndSet指令(TS指令):原子操作,但不能”让权等待“

// TS指令 boolean TestAndSet(boolean *lock){ boolean old; old = *lock; *lock = true; return old; } ​ // 互斥实现 while TestAndSet(&lock); // 进入区 critical section; // 临界区 lock = false; // 退出区 remainder section; // 剩余区

硬件指令方法——Swap指令:不能”让权等待“,可能导致”饥饿“现象

boolean key = true; // 进入区 while(key != false) // 进入区 Swap(&lock, &key); // 进入区 critical section; // 临界区 lock = false; // 退出区 remainder section; // 剩余区

互斥锁(自旋锁):解决临界区最简单的工具。但是缺点是”忙等待“

acquire(){ // 获得锁的定义 while(!available) ; // 忙等待 available = false; // 获得锁 } release(){ // 释放锁的定义 available = true; // 释放锁 }

信号量:两个标准的原语wait()和signal()访问,简写成P()和V(),即P操作和V操作

  • 整型信号量:被定义为一个用于表示资源数量的整型量S。初始化、wait操作、signal操作。不能”让权等待“

    wait(S){ while(S <= 0); // 资源数量不够一直循环等待 S = S-1; } signal(S){ S = S+1; }
  • 记录型信号量:不存在”忙等“现象,用链表记录等待资源的进程

    // 记录型信号量 typedef struct{ int value; struct process *L; }semaphore; ​ void wait(semaphore S){ S.value--; if(S.value < 0){ // 让权等待 add this process to S.L; block(S.L); } } ​ void signal(semaphore S){ S.value++; if(S.value <= 0){ remove a process P from S.L; wakeup(P); } }

利用信号量实现进程互斥:进程互斥

semaphore S = 1; // 初始化信号量,初值为1 P1(){ ... P(S); critical section of P1; V(S); ... } P2(){ ... P(S); critical section of P2; V(S); ... }

利用信号量实现同步:同步

semaphore S = 0; // 初始化信号量,初值为0 P1(){ x; // 执行语句x V(S); // 告诉进程P2,语句x已完成 ... } P2(){ ... P(S); // 检查语句x是否运行完成 y; // 获得x的运行结果,执行语句y ... }

利用信号量实现前驱关系

semaphore a12=a13=a24=a36=a46=a56=0; // 初始化信号量 S1(){ ...; V(a12);V(a13); // S1已经运行完成 } S2(){ P(a12); // 检查S1是否运行完成 ...; V(a24);V(a25); // S2已经运行完成 } S3(){ P(a13); // 检查S1是否已经运行完成 ...; V(a36); // S3已经运行完成 } S4(){ P(a24); // 检查S2是否已经运行完成 ...; V(a46); // S4已经运行完成 } S5(){ P(a25); // 检查S2是否已经运行完成 ...; V(a56); // S5已经运行完成 } S6(){ P(a36); // 检查S3是否已经运行完成 P(a46); // 检查S4是否已经运行完成 P(a56); // 检查S5是否已经运行完成 ...; }

分析进程同步和互斥问题对的方法步骤

关系分析:找出问题中的进程数,并分析它们之间的同步和互斥关系

整理思路:找出解决问题的关键点,并根据做过的题目找出求解的思路

设置信号量:根据上面的两步,设置需要的信号量,确定初值,完善整理

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/13 2:55:14

一个基于Axum实现的,更符合Java开发者习惯的Rust生态的Web框架

WebR 简介 一个轻量的 Rust Web 框架&#xff0c;基于 Axum 构建。提供宏驱动控制器、自动依赖注入、多文件配置管理和中间件系统&#xff0c;旨在简化 Rust 中的 Web 开发。 WebR 引入了 Java 系的框架中的 DI、Controller、Component和自动配置等概念&#xff0c;在保证性能…

作者头像 李华
网站建设 2026/7/13 2:54:32

取整函数实战:金融计算与游戏开发中的5个典型场景与避坑指南

取整函数实战&#xff1a;金融计算与游戏开发中的5个典型场景与避坑指南在数值处理的世界里&#xff0c;取整函数就像瑞士军刀中的精密工具——看似简单却能在关键时刻解决复杂问题。无论是金融系统中精确到分毫的利息计算&#xff0c;还是游戏引擎里角色移动的像素级定位&…

作者头像 李华
网站建设 2026/7/13 2:53:37

Linux日志排查实战:从基础命令到生产环境故障定位

线上环境突发报错时&#xff0c;快速定位问题根源是每个后端开发和运维人员的必备技能。面对海量日志文件&#xff0c;如何高效查找关键错误信息&#xff0c;而不是盲目地翻看日志&#xff0c;直接决定了故障恢复的速度。本文将分享一套实用的 Linux 日志排查方法论&#xff0c…

作者头像 李华
网站建设 2026/7/13 2:52:16

普通人应该追求什么?健康、能力、良好的人际关系、有意义的目标

这是一个很大的问题。不同的人会给出不同答案&#xff0c;但如果从长期幸福、成长和现实可行性来看&#xff0c;我认为普通人可以追求四样东西&#xff1a; 1. 健康——所有目标的基础 没有健康&#xff0c;再多的财富、学历、地位都很难享受。 包括&#xff1a; 保持规律作息锻…

作者头像 李华
网站建设 2026/7/13 2:52:12

TS2007FC类D音频放大器与MK51DN512CLQ10微控制器的高效音频系统设计

1. 音频放大系统设计概述在嵌入式音频系统设计中&#xff0c;TS2007FC类D音频放大器与MK51DN512CLQ10微控制器的组合堪称黄金搭档。这套方案特别适合需要高保真音频输出的便携式设备、智能家居音响系统和专业音频处理设备。TS2007FC作为STMicroelectronics推出的无滤波类D放大器…

作者头像 李华
网站建设 2026/7/13 2:52:11

基于 YOLO11 的学生课堂行为检测:从数据集构建到模型训练全流程

基于 YOLO11 的学生课堂行为检测&#xff1a;从数据集构建到模型训练全流程 一、场景背景 在智慧教育领域&#xff0c;利用计算机视觉技术自动识别学生课堂行为&#xff0c;已成为教学质量分析和课堂管理的重要辅助手段。传统的课堂观察依赖人工记录&#xff0c;效率低且难以量…

作者头像 李华