操作系统基本概念与进程管理:从入门到精通

目录

操作系统基本概念与进程管理:从入门到精通

一、常见操作系统与计算机系统层次结构

二、操作系统的概念、功能与特征

三、操作系统的发展与分类

四、进程管理

(一)进程的状态与状态转换

(二)前驱图

(三)进程同步与互斥机制

(四)信号量机制与 PV 操作

(五)PV 操作实现前驱关系

(六)死锁

(七)银行家算法


在计算机的世界里,操作系统就像是一位幕后的 “大管家”,默默管理着计算机的各种资源,协调着各种程序的运行。今天,咱们就深入探讨一下操作系统的基本概念和进程管理相关知识,帮助大家更好地理解这个神秘又重要的领域。

一、常见操作系统与计算机系统层次结构

咱们日常接触到的操作系统五花八门,像大家熟悉的 Windows,广泛应用于个人电脑;Linux 则深受程序员喜爱,常被用于程序开发和服务器领域,比如 CentOS 就是常见的服务器操作系统;还有手机上的安卓和苹果的 iOS,以及平板的 Mac OS。

一台电脑从诞生到我们手中,要经历几个关键阶段。厂家先组装出一台仅有硬件的裸机,就像一个没有灵魂的躯壳。在出售前,商家会给它安装操作系统,就如同赋予它灵魂一样。之后还会安装各种应用程序,比如办公软件、聊天工具、游戏等,电脑才能真正满足我们的各种需求。

从这个过程,我们可以对应想象出计算机系统的层次结构。最底层是裸机,包含 CPU、内存、硬盘、主板等硬件。在裸机之上,安装着操作系统,它是连接硬件和用户的桥梁。而在操作系统之上,则是各种各样的应用软件,为我们提供丰富多彩的功能。

二、操作系统的概念、功能与特征

操作系统(Operating System,简称 OS)是控制和管理整个计算机系统硬件和软件资源的核心系统软件。它合理地组织调度计算机的工作和资源分配,还为用户和其他软件提供接口和环境。

就拿 Windows 系统来说,通过任务管理器,我们能直观看到它对软件和硬件的管理。任务管理器展示了正在运行的软件,以及每个软件占用的 CPU、内存、硬盘等资源情况。

操作系统主要有三个功能和目标:一是作为系统资源的管理者,负责分配 CPU、内存等资源给各个应用程序;二是为上层的用户和应用程序提供方便易用的服务,比如 C 语言编程时调用库函数,就是通过操作系统实现的;三是作为最接近硬件的层次,直接管理和控制硬件设备。

操作系统具有并发、共享、虚拟和异步四个重要特征。并发指两个或多个事件在同一时间间隔内发生,宏观上同时进行,微观上交替执行。比如我们一边用 QQ 聊天,一边听音乐,表面上看两个操作同时进行,但实际上 CPU 在快速交替处理它们。并行则是指两个或多个事件在同一时刻内发生,这和并发是不同的概念。

共享是指计算机中的各种系统资源,可被多个并发执行的进程共同使用。虚拟是把物理上的实体转化为若干个逻辑上对应的实体,比如我们在逻辑上操作的数据结构,和实际存储的数据方式可能不同。异步是指在多道程序环境下,由于资源有限,程序的执行不是连贯的,而是走走停停,以不可预知的速度向前推进。

三、操作系统的发展与分类

操作系统的发展经历了多个阶段。最初是手工操作阶段,那时还没有真正的操作系统,计算机体积庞大,操作复杂。后来发展到批处理阶段,分为单道批处理和多道批处理。单道批处理一次只能装入一个作业,执行完一个才能执行下一个;多道批处理则允许多个作业同时装入内存执行,操作系统也在这个阶段逐渐出现。

接着出现了分时操作系统,它把 CPU 的工作划分为许多很短的时间片,让每个等待运行的作业轮流执行一个时间段。实时操作系统在生产生活中应用广泛,分为硬实时和软实时。像导弹控制系统这种对时间要求极高的,属于硬实时;银行系统中数据的实时更新则属于软实时。

随着网络的发展,网络操作系统应运而生,它能实现网络资源共享,为网络用户提供各种服务。分布式操作系统是网络操作系统的更高级形式,不仅具备网络操作系统的功能,还具有透明性、可靠性和高性能的特点。最后就是我们常用的个人计算机操作系统,如 Windows。

四、进程管理

(一)进程的状态与状态转换

进程有五种基本状态:创建态、就绪态、运行态、阻塞态和终止态。创建态是进程正在被创建的阶段,操作系统会为其分配资源、初始化 PCB(进程控制块)。PCB 就像是进程的 “身份证”,记录着进程的 ID(PID)、所属用户 ID(UID)、分配的资源、运行情况等信息。

进程创建完成后进入就绪态,此时它具备运行条件,但由于 CPU 资源有限,暂时不能运行。当进程获得 CPU 资源开始运行时,就进入了运行态,CPU 会执行该进程对应的程序。在运行过程中,如果进程请求某个事件发生,比如等待 I/O 输入,就会进入阻塞态,直到请求的事件完成,才会重新进入就绪态,等待 CPU 调度再次运行。当进程完成任务或遇到错误,调用系统函数请求终止时,就会进入终止态,操作系统会回收其占用的资源。

进程的状态转换遵循一定的规则。从创建态到就绪态,是系统完成创建工作后自动转换的;从就绪态到运行态,需要进程被调度;运行态可能因为任务完成或出现错误进入终止态,也可能因为请求资源进入阻塞态;阻塞态在资源满足时进入就绪态,就绪态被调度后再次进入运行态。需要注意的是,阻塞态不能直接转化为运行态,就绪态也不能直接转化为阻塞态。

(二)前驱图

前驱图是一种有向无环图,由节点和节点间的有向边组成。节点代表各个阶段的操作,有向边表示程序段操作之间的前驱关系。比如包饺子,剁绞肉、切葱姜、切姜末这些操作都完成后,才能进行搅拌成饺子馅的操作,最后才能包饺子,这一系列操作之间的关系就可以用前驱图表示。

(三)进程同步与互斥机制

进程同步和互斥是进程管理中的重要概念,但它们不是反义词,同步的反义词是异步,互斥的反义词是共享。

进程同步是为了完成某种任务,多个进程在某些位置协调工作次序而产生的制约关系,也叫直接制约关系。以管道通信为例,写进程和读进程并发运行,由于并发会导致异步性,可能出现写进程还没写入数据,读进程就去读的情况。为了避免这种情况,就需要进程同步机制来保证先写后读的顺序。

进程互斥则是因为多个进程不可避免地要共享一些系统资源,如内存、打印机、摄像头等。而临界资源在一段时间内只允许一个进程使用,像打印机,多个进程不能同时使用,否则会出现打印混乱的情况。进程互斥就是当一个进程访问临界资源时,其他想要访问的进程必须等待,直到当前进程结束并释放资源。

对临界资源的访问在逻辑上分为进入区、临界区、退出区和剩余区。临界区是访问临界资源的代码段,进入区和退出区负责实现互斥访问。进入区检查是否可以进入临界区,若可以则设置访问标志;退出区解除访问标志,就像解锁一样,允许其他进程访问。为了保证对临界资源的互斥访问,同时保证系统性能,需要遵循空闲让进、忙则等待、有限等待和让权等待四个原则。

(四)信号量机制与 PV 操作

信号量机制是实现进程同步和互斥的重要手段。信号量本质是一个变量,可以是整数或更复杂的记录型变量,用来表示系统中某种资源的数量。比如系统中只有一台打印机,就可以设置一个初值为 1 的信号量来表示。

原语是一种特殊的程序段,执行时一气呵成,不能被中断。操作系统提供了一对原语,即 wait 原语和 signal 原语,通常简称为 PV 操作。PV 操作来源于荷兰语,在做题时,我们常把 wait (S) 和 signal (S) 写为 P (S) 和 V (S)。

P 操作表示申请一个资源,执行时信号量 S 减 1,如果资源不够(S 小于 0),则进程阻塞等待;V 操作表示释放一个资源,执行时信号量 S 加 1。通过 PV 操作,可以方便地实现进程的互斥、同步和前驱关系。

以两个进程 P1 和 P2 为例,假设它们都执行一段代码,并且有一个初始值为 0 的同步信号量 S。如果先执行 P1,P1 执行完代码后执行 V (S) 操作,S 的值变为 1,表示有可用资源,此时 P2 执行 P (S) 操作,由于 S 为 1,P2 可以顺利执行后续代码。但如果先执行 P2,P2 执行 P (S) 操作时,S 的值变为 - 1,说明没有可用资源,P2 就会阻塞,直到 P1 执行 V (S) 操作释放资源。

(五)PV 操作实现前驱关系

PV 操作可以用来实现进程的前驱关系,这是考试中的重点内容。根据前驱图,我们可以确定进程中是先执行 P 操作还是 V 操作。一般来说,在前驱操作之后要执行 V 操作释放资源,在后驱操作之前要执行 P 操作锁定资源。

比如有多个进程 P1、P2、P3 等,每个进程中有不同的代码段 S1、S2、S3 等,要求按照前驱图的顺序执行。在执行完 S1 后,要释放与 S1 后继操作相关的信号量;在执行 S2 之前,要锁定与 S1 和 S2 前驱关系相关的信号量。通过这样的方式,就能保证进程按照正确的顺序执行。

(六)死锁

死锁是进程管理中一个比较棘手的问题。用一个有趣的例子来理解,就像 “我爱你,你爱他,他爱我” 这种复杂的关系,导致谁也无法进入下一个阶段。在操作系统中,死锁是指多个进程相互等待对方手里的资源,导致所有进程都进入阻塞状态,无法向前推进。

产生死锁必须满足四个条件:互斥条件,即对必须互斥使用的资源进行竞争才会导致死锁;不剥夺条件,进程获得资源后,在未使用完之前不能被其他进程强行夺走,只能主动释放;请求和保持条件,进程已经保持了至少一个资源,又提出新的资源请求,而该资源被其他进程占有,此时请求进程被阻塞,但仍保持已有的资源;循环等待条件,存在一种进程资源的循环等待链,链中的每个进程都已获得资源,同时又被下一个进程请求。

只要这四个条件中有一个不成立,死锁就不会发生。处理死锁的方法有预防死锁、避免死锁和死锁的检测与解除。预防死锁主要是破坏产生死锁的四个必要条件中的一个或几个;避免死锁是用某种方法防止系统进入不安全状态,银行家算法就是一种经典的避免死锁的方法;死锁的检测与解除则是允许死锁发生,但操作系统负责检测并采取措施解除死锁。

(七)银行家算法

银行家算法是避免死锁的重要算法,核心思想是在资源分配之前,预判这次分配是否会导致系统进入不安全状态,以此决定是否答应资源的分配请求。

在银行家算法中,安全序列是关键概念。如果系统按照某种序列分配资源,每个进程都能顺利完成,那么这个序列就是安全序列。只要能找出一个安全序列,系统就处于安全状态;如果找不出任何安全序列,系统就进入不安全状态。需要注意的是,安全状态一定不会发生死锁,而不安全状态未必会发生死锁,但发生死锁时系统一定处于不安全状态。

以一个具体例子来说,假设系统中有三类互斥资源 R1、R2、R3,每种资源的可用数量分别是 9、8、5。在 T0 时刻,有五个进程 P1、P2、P3、P4、P5,每个进程对这三种资源的最大需求量和已分配数量都已知。我们首先要计算每个进程还需要的资源数,以及每种资源剩余的数量。然后根据这些数据,按照银行家算法的规则,逐步分析每个进程是否能得到满足,从而找出安全序列。

例如,在这个例子中,我们先分析 P1,它还需要 R1 资源 5 个,但此时 R1 剩余资源只有 2 个,无法满足 P1 的需求,如果分配给 P1,系统会陷入不安全状态,所以 P1 不能先分配。接着看 P2,它需要的资源数为 0、1、0,当前剩余资源可以满足,所以可以先分配给 P2。P2 执行完后会释放它占用的资源,此时系统的剩余资源数量会发生变化。然后再用变化后的剩余资源去分析 P3、P4、P5,重复这个过程,最终就能找出安全序列。

通过今天的分享,希望大家对操作系统的基本概念和进程管理有了更深入的理解。这部分知识在计算机领域非常重要,无论是学习还是工作,都有很大的帮助。如果大家在学习过程中有任何疑问,欢迎留言讨论。咱们下次再见!

你可能感兴趣的:(软考,软考)