软件设计师(二):操作系统基本原理(一)

简介: 软件设计师(二):操作系统基本原理(一)

1、操作系统概述


fc8d4b6b129d734546efc02caf995960_606d890b89f3ba4c6e97827c3b7308a4.png



6ab8b9f378f6c3010f7efce4f77b1af9_9d400322e08fd0230ffbead79e78247b.png


2、进程管理


进程:为了能使程序并发执行,并且可以对并发执行的程序加以控制和描述,人们引入了“进程”的概念。


2.1 进程的状态


c43a6b377596122e9138d9b22959ec6d_86659977f72d73fa64f4b490972fc92a.png


2.2 前驱图


4cf78782027098b5aced890ab1bfd586_95b207bedbf0b1f6afea49ae829b9c10.png


2.3 进程的同步与互斥


168f5169767a185355d2d172777537c0_fdbf1875159273d1df46d168a3b954af.png


互斥的反义词是共享

同步的反义词是异步


f5a418462669a5d114d295eca5dc656b_image-20221010121929198.png


生产者消费者


市场就是互斥的

同步就是生产者在市场放入资源会等待消费者把资源拿走后再次放入资源


2.4 PV操作


81e5e0602a14c696edca3e797f9d37a9_image-20221010123022275.png


0fa1b6f86f6e5deffa6d22f25a6665b2_image-20221015201901712.png


对于上面的生产者——消费者问题,s1的初值为1、s2的初值为0,我们参照上面的图,假设s1为空区,s2为满区。

①先执行生产者,后执行消费者:首先P(s1),表示生产者生产产品,要在空区中进行,当执行完P(s1),就代表生产了一个产品,此时空区数量减少1,再执行V(s2),满区数量增加1,即此时s1=s1-1=0、s2=s2+1=1。接下来我们如果继续执行生产者操作P(s1),s1=s1-1=-1,此时s1<0,对于P操作,就要进入等待队列中等候。所以我们此时只能执行消费者操作,首先P(s2),表示消费者消费产品,要在满区中进行,当执行完P(s2),就代表消费了一个产品,此时满区数量减少1,再执行V(s1),空区数量增加1,即此时s2=s2-1=0、s1=s1+1=0。

②先执行消费者,后执行生产者:首先P(s2),表示消费者消费产品,要在满区中进行,s2的初值为0,经过P操作,s2=s2-1=-1,此时s2小于0,无法继续执行下去。换一种思路理解就是,这种情况下,生产者还没有生产任何一个产品,那么消费者自然是无法消费产品的(因为空区的数量为0)。


PV操作练习


c33ff0e4ce2cc54667a3126e6bca70cd_image-20221015203511392.png


答案选 A C

解析:我们来看上面这道题,购书者和收银员两个进程,设置了三个信号量:S1、S2、Sn(初值分别为0、0、n),可以假设有两种情况:①先执行购书者进程,后执行收银员进程(此情况符合大家日常去书店买书的情形),②先执行收银员进程,后执行购书者进程(此情况不太符合常理,如果没有人来书店买书,那收银员去为谁结账呢???),所以我们只能采取第一种情况:先执行购书者进程、后执行收银员进程。

首先P(Sn):Sn=Sn-1,表示有一个购书者进入书店,此时书店最多允许进入的购书者人数就应该减少1;之后购书者可以进行购书,后面进入付款步骤(联系到a1和a2),此时我们想,在购书者没有选择购书付款之前,收银员应该是被阻塞的(通俗的讲:就是坐在那里喝茶,闲着没事干),所以在b1这里需要一个P操作来阻塞它,只有当购书者付款步骤中的a1来到收银员面前结账时,收银员才有事情可做,即a1这里应该是与b1(收银员为购书者结账)相对应的V操作,所以a1:V(S1)、b1:P(S1)。即购书者买书付款→收银员进行结账,购书者不买书或者没有购书者→收银员没事干(阻塞)。

下面我们这样考虑,因为购书者此时在收银员这里等待付款,并不是说购书者直接扔几张100的红票子直接就走人了,而是需要等待收银员把购书者所买书籍一一扫码消磁、计算出总价之后,再由购书者付款,所以在这期间,购书者是在等待(即购书者处于阻塞状态),也就是说a2这里需要一个P操作来阻塞购书者,而b2需要一个V操作与a2相对应,所以a2:P(S2)、b2:V(S2)。即收银员将总价计算好→购书者进行付款,收银员结账过程中→购书者等待(阻塞)。


2.5 PV操作与前驱图


2cc1c537b4dec30abc48744bea9a5a62_image-20221015211421418.png


a1bfe9f4a94de57f05d2ea1a62bbbd5d_f641b6d3adafb2462dbb997d9b839613.png


答案:C、A、A


2.6 死锁问题


bed375cc21e7341647e9ba80293e9ffb_image-20221016201227299.png


死锁的预防与避免


ba42d5daee6bd6a8736f65575bd841d3_88b9d697bfa777d11ba09bce0e441057.png


2.7 银行家算法


分配资源的原则


90d56cb5f51f2470cdc89dc582c2061b_d8cdc522f21e5b31247a969a16274da8.png


327300f745e849c7de5d5b3eb33e350d_d3da3a646574a804bc4d18178dc4ec9c.png




对于银行家算法这类问题,其实并不是太难。上面这道题,首先我们需要计算的就是当前系统中还有多少可用的资源,因为三类资源的总数分别为9、8、5,而已经分配给5个进程的三类资源数为:7、7、5,所以此时这三类资源还剩2、1、0。下面的做法其实就是将当前可用的资源数分配给5个进程中的一个,看能否达到它的最大需求量,如果不能,则选择其他进程;如果能,就加上该进程已分配的资源数,运行完释放,此时资源数=已分配给该进程的资源数+当前系统中剩余的资源数。后面是同样的道理,继续分配给其他的进程,能满足最大需求量就分配,直到所有进程都可以顺序运行,就可以找到这样一条安全序列来保证系统不发生死锁。

而下面这种情况,当运行完P2进程,将可用资源数分配给P1进程时,无法达到P1的最大需求量,所以系统无法继续运行下去,就会发生死锁,这就是一个不安全序列!!!


过程:


ff850702916e690af74f2d85c6a8954b_f15cd2396010cb52f185fcb70726eb95.png

相关文章
|
16天前
|
运维 算法 安全
深入理解操作系统的内存管理:原理与实践
【4月更文挑战第25天】 在现代计算机系统中,操作系统扮演着至关重要的角色,它负责协调和管理硬件资源,为上层应用提供必要的服务。其中,内存管理是操作系统的核心功能之一,它不仅关乎系统性能,也直接影响到系统的稳定性和安全性。本文将深入探讨操作系统内存管理的关键原理,包括虚拟内存、物理内存分配、分页机制以及内存保护等,并结合Linux操作系统实例,分析其内存管理的实现细节。通过理论与实践的结合,旨在为读者提供一个全面、深入的操作系统内存管理视角。
|
18天前
|
算法 调度 UED
深入理解操作系统内存管理:原理与实践
【4月更文挑战第23天】 在现代计算机系统中,操作系统的内存管理是保证系统高效、稳定运行的关键组成部分。本文旨在深入探讨操作系统中内存管理的理论基础、关键技术以及实际操作过程,通过对内存分配策略、虚拟内存技术、分页与分段机制等核心概念的详细解析,为读者提供一个清晰、全面的内存管理视角。此外,文章还将通过案例分析,展示内存管理在解决实际问题中的应用,以期加深读者对操作系统内存管理复杂性的认识和理解。
|
2月前
|
安全 物联网 调度
【软件设计师备考 专题 】网络操作系统和嵌入式操作系统基础知识
【软件设计师备考 专题 】网络操作系统和嵌入式操作系统基础知识
67 0
|
1月前
|
算法 Java 内存技术
深入理解操作系统的内存管理:原理与实践
【4月更文挑战第8天】本文旨在深入探讨操作系统中内存管理的关键技术和实现细节。我们将从内存管理的基本原理出发,逐步解析操作系统如何通过各种策略和算法实现高效的内存分配、回收和保护。文章还将介绍一些常见的内存管理问题及其解决方案,帮助读者更好地理解和应对实际工作中可能遇到的挑战。
|
8天前
|
算法 安全 Linux
深入理解操作系统的内存管理:原理与实践
【5月更文挑战第4天】 在现代计算领域,操作系统的内存管理是保证系统稳定、高效运行的关键。本文旨在深入剖析操作系统内存管理的基本原理,包括虚拟内存、物理内存、分页机制和内存交换等概念。同时,文章将探讨如何通过优化内存分配策略,提升系统性能及响应速度。此外,还将讨论当前流行的操作系统(如Linux和Windows)中内存管理的创新技术及其应用案例。
|
11天前
|
缓存 算法 内存技术
深入理解操作系统内存管理:原理与实践
【4月更文挑战第30天】本文旨在深入探讨操作系统中的内存管理机制,包括物理内存的分配与回收、虚拟内存技术、分页系统以及内存优化策略。通过对内存管理概念的详细解读和实际案例分析,读者将获得对操作系统如何处理内存资源的全面认识,并了解如何在实践中应用这些知识以提高系统性能和稳定性。
|
12天前
|
存储 算法 安全
深入理解操作系统内存管理:原理与实践
【4月更文挑战第29天】 在现代计算机系统中,操作系统的内存管理是其核心功能之一。有效的内存管理不仅关乎系统性能,也直接影响到用户程序的稳定性和安全性。本文将详细探讨操作系统内存管理的基本原理、关键技术以及当前的挑战和创新方向。通过对页式管理、段式管理和段页式管理等技术的深入分析,我们旨在为读者提供一个清晰、系统的内存管理知识框架,并讨论虚拟内存技术如何帮助解决物理内存不足的问题。同时,考虑到安全性日益成为关注焦点,文中还将介绍内存保护机制和内存隔离技术。最后,结合最新的硬件发展趋势,如非易失性内存(NVM)的出现,本文也将对内存管理的未来发展方向进行展望。
|
12天前
|
存储 算法 Linux
【计算机操作系统】深入探究CPU,PCB和进程工作原理
【计算机操作系统】深入探究CPU,PCB和进程工作原理
|
13天前
|
存储 缓存
深入理解操作系统:虚拟内存管理的原理与实践
【4月更文挑战第28天】 在现代计算机系统中,虚拟内存是操作系统提供的一项重要功能,它允许程序使用比物理内存更大的地址空间。本文将深入探讨虚拟内存的工作原理,包括分页、分段和请求分页等技术,以及它们在操作系统中的应用。
|
14天前
|
存储 算法 安全
深入理解操作系统内存管理:原理与实践
【4月更文挑战第27天】 在现代计算机系统中,操作系统的内存管理是其核心功能之一,它负责协调和分配系统内存资源,确保程序高效稳定地运行。本文将详细探讨操作系统内存管理的基本原理、关键技术以及面临的挑战。通过对内存分配策略、分页机制、虚拟内存技术等关键概念的剖析,揭示操作系统如何优化内存使用,支持多任务并发执行,并保证系统的稳定与安全。同时,文中还将对最新的内存管理技术和趋势进行展望,为读者提供一个全面、深入的理解框架。