国考专业课-操作系统
第六章 操作系统
第一节 操作系统概论
考点一 操作系统的概念
操作系统是其最基本也是最为重要的基础性系统软件。从计算机用户的角度来说,计算机操作系统体现为其提供的各项服务;从程序员的角度来说,其主要是指用户登录的界面或者接口;如果从设计人员的角度来说,就是指各式各样模块和单元之间的联系。
考点二 操作系统的特征
- 并发性:
- 并发性是指两个或多个事件在同一时间间隔内发生,但这些事件不一定是同时发生的。在操作系统中,并发性体现在多个程序或进程可以同时运行,尽管在单处理器系统中这些进程实际上是分时交替执行的。
- 并发性的引入提高了系统的吞吐量和资源利用率,但也带来了诸如同步、互斥、通信和死锁等复杂问题。
- 共享性:
- 共享性是指操作系统中的资源(如CPU、内存、外存、打印机等)可以被多个并发执行的进程共同使用。
- 资源共享有两种方式:互斥共享和同时共享。互斥共享意味着资源在同一时刻只能被一个进程使用,而同时共享则允许资源在同一时刻被多个进程以不同方式共同使用。
- 虚拟性:
- 虚拟性是指操作系统通过某种技术把一个物理实体映射为若干个对应的逻辑实体。这种映射关系使用户感觉像是拥有多个物理实体一样。
- 虚拟技术包括时分复用技术和空分复用技术。时分复用技术通过时间上的划分来共享资源,如CPU的分时系统;而空分复用技术则是通过空间上的划分来共享资源,如虚拟内存和虚拟磁盘等。
- 异步性:
- 异步性是指操作系统中的进程不是按照某种固定的先后顺序执行的,而是按照各自的独立速度向前推进。
- 异步性是由并发性引起的,因为并发进程的执行顺序和速度是由进程本身和系统的运行状况共同决定的。异步性使得操作系统中的进程执行变得复杂和不可预测。
考点三 操作系统的主要功能
操作系统主要包括以下几个方面的功能 :
①进程管理,其工作主要是进程调度,在单用户单任务的情况下,处理器仅为一个用户的一个任务所独占, 进程管理的工作十分简单。但在多道程序或多用户的情况 下,组织多个作业或任务时,就要解决处理器的调度、 分配和回收等问题 。
②存储管理分为几种功能:存储分配、存储共享、存储保护 、存储扩张。
③设备管理分有以下功能:设备分配、设备传输控制 、设备独立性。
④文件管理:文件存储空间的管理、目录管理 、文件操作管理、文件保护。
⑤作业管理是负责处理用户提交的任何要求。
考点四 操作系统的分类
- 按与用户交互的界面分类
批处理操作系统:用户不直接与计算机交互,而是通过输入一批作业,由操作系统控制它们自动运行。这种系统适用于大型计算任务,可以提高资源利用率和系统吞吐量。
分时操作系统:允许多个用户同时共享计算机资源,每个用户可以通过终端与系统进行交互。系统会将CPU时间划分成若干时间片,轮流分配给各个用户进程。
实时操作系统:能够及时处理外部事件,并在规定的时间内完成任务的操作系统。这种系统通常用于需要高可靠性和实时响应的领域,如航空航天、军事等。 - 按能同时管理的用户数量分类
单用户操作系统:只允许一个用户使用的操作系统。这种系统通常用于个人计算机或小型计算机。
多用户操作系统:允许多个用户同时使用的操作系统。这种系统通常用于大型计算机或网络计算机。 - 按能管理的任务数量分类
单任务操作系统:只允许一个任务运行的操作系统。这种系统通常用于简单的嵌入式系统或小型计算机。
多任务操作系统:允许多个任务同时运行的操作系统。这种系统能够更有效地利用计算机资源,提高系统的吞吐量和响应速度。 - 按使用环境分类
嵌入式操作系统:专门用于嵌入式系统的操作系统。这种系统通常具有体积小、功耗低、可靠性高等特点,适用于各种智能设备,如智能手机、平板电脑、智能家居等。
个人计算机操作系统:用于个人计算机的操作系统。这种系统通常具有丰富的用户界面和应用程序支持,如Windows、macOS等。
网络操作系统:专门用于管理网络资源和提供网络服务的操作系统。这种系统通常具有强大的网络通信和资源共享功能,如Unix、Linux等。
分布式操作系统:能够管理分布在不同地理位置上的计算机资源和任务的操作系统。这种系统通常具有高度的可靠性和可扩展性,适用于大型企业和数据中心等场景。 - 按内核结构分类
微内核操作系统:将操作系统功能划分为多个独立的模块,每个模块都运行在用户空间中,通过消息传递进行通信。这种系统具有高度的模块化和可扩展性,但可能带来一定的性能开销。
宏内核操作系统:将操作系统功能集成在一个单一的内核中,运行在内核空间中。这种系统具有较高的性能和较低的通信开销,但可能面临可维护性和可扩展性方面的挑战。
第二节 多道程序设计
考点一 多道程序设计
一、定义与原理
- 定义:多道程序设计指的是允许多个程序同时进入一个计算机系统的主存储器并启动进行计算的方法。这些程序在宏观上并发运行,而在微观上则是串行地占用CPU。
- 原理:在采用多道程序设计技术的操作系统中,内存中能同时存放多个独立运行的程序。这些程序在管理程序的控制下交替地执行,共享系统中的内存、外存、外部设备、各种软件和其他资源。
二、特征
- 多道性:内存中能同时存放多个程序,这些程序都处于开始和结束之间的状态。
- 宏观并行性:从用户角度看,多个程序都处于运行中,并且都没有运行结束,表现为并行性。
- 微观串行性:从计算机角度看,各道程序轮流使用CPU,交替执行,表现为串行性。
三、优点
- 提高资源利用率:多道程序设计可以充分利用CPU、内存和外设等资源,提高系统利用率。
- 提高系统吞吐率:由于多个程序可以同时运行,单位时间内可以完成更多的作业,从而提高系统吞吐率。
- 增强系统灵活性:多道程序之间相互独立,互不干扰,因此程序的编写和调试更加灵活。
四、实现条件
- 足够大的内存:内存必须足够大,以容纳多个同时运行的程序。
- 复杂的存储管理:需要有比较复杂的存储管理、保护和地址重定位机构来管理内存中的程序和数据。
- 处理机管理和调度:需要有处理机的管理和调度机构来分配CPU时间给各个程序。
- 资源管理与分配:需要提供对各种资源包括外部设备的管理与分配机制。
五、应用领域
- 操作系统:现代操作系统如Windows、Linux等都采用了多道程序设计技术,实现了多任务处理。
- 数据库系统:数据库系统通过多道程序设计实现并发访问,提高了数据处理速度和响应能力。
- 网络服务器:网络服务器通过多道程序设计实现并发连接,满足大量用户的访问需求。
六、注意事项
- 资源竞争:多道程序设计可能导致系统资源竞争,影响程序运行速度。因此,需要采取有效的资源分配和调度策略来避免或减轻资源竞争。
- 程序间通信与同步:程序间的通信和同步会增加编程的复杂性。因此,需要采用适当的通信机制和同步原语来确保程序间的正确交互和协调。
考点二 程序的并发执行
一、定义与特点
- 定义:程序的并发执行是指在同一时间间隔内,运行多个程序或程序段,使得这些程序或程序段在宏观上看起来是同时进行的。
- 特点:
- 资源共享:并发执行的程序需要共享系统资源,如CPU、内存、外设等。
- 执行时间重叠:一个程序段的执行尚未结束,另一个程序段的执行已经开始。
- 独立性:并发执行的程序在逻辑上是互相独立的,一个程序的执行不会影响到另一个程序的执行。
二、并发执行的实现方式
- 多道程序系统的程序执行环境变化:在多道程序系统中,由于程序的执行环境变化,导致多个程序可以并发执行。这种并发执行是由操作系统的调度程序来控制的。
- 程序段内的并发执行:在某些程序中,可能包含着一部分可以同时执行或顺序颠倒执行的代码。这些代码段可以在同一个程序内并发执行,以提高程序的执行效率。
三、并发执行带来的问题与挑战
- 资源竞争:由于并发执行的程序需要共享系统资源,因此可能会出现资源竞争的问题。这可能导致程序执行速度下降,甚至出现死锁等严重问题。
- 同步与通信:并发执行的程序之间需要进行同步和通信,以确保它们能够正确地协调和执行。这增加了编程的复杂性,并可能导致程序出现错误。
- 上下文切换:操作系统需要在不同的程序之间进行上下文切换,以支持它们的并发执行。这可能会带来一定的性能开销。
四、并发执行的优点与应用
- 提高系统资源利用率:并发执行可以充分利用系统资源,提高系统的吞吐量和响应速度。
- 增强系统灵活性:并发执行允许用户同时运行多个程序,从而提高了系统的灵活性和可用性。
- 广泛应用于各种领域:并发执行在服务器、图形应用、计算机模拟等领域有着广泛的应用。例如,在服务器中,并发执行可以支持多个用户同时访问和请求服务;在图形应用中,并发执行可以实现动画和实时交互等功能。
五、并发执行的实现技术
- 线程:线程是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。线程可以实现程序内的并发执行。
- 进程:进程是操作系统分配资源的最小单位。每个进程都有自己独立的内存空间和系统资源。通过创建多个进程,可以实现程序间的并发执行。
- 并发编程模型:如Actor模型、CSP模型等,这些模型提供了用于构建并发程序的抽象和工具。
第三节 内存管理
考点一 计算机存储体系
一、存储体系的层次结构
计算机存储体系通常包括以下几个层次:
- 寄存器:这是CPU内部的存储器,速度非常快,但容量非常小。寄存器用于暂存CPU正在处理的数据和指令。
- 高速缓存(Cache):位于CPU和主存之间,速度接近CPU,容量比寄存器大但比主存小。Cache用于存储CPU近期可能访问的数据和指令,以减少对主存的访问次数,提高系统性能。
- 主存储器(Main Memory):也称为主存或内存,用于存放当前正在运行的程序和数据。主存的速度比Cache慢,但容量更大,价格也更便宜。
- 辅助存储器(Auxiliary Memory):也称为辅存或外存,如磁盘、磁带和光盘等。辅存用于存放暂时不使用的程序和数据,当需要时再从辅存调入主存。辅存的容量非常大,但速度相对较慢。
二、存储体系的特点
- 层次性:存储体系按照速度、容量和价格等因素分为多个层次,每个层次都有其特定的功能和作用。
- 缓存机制:通过Cache等缓存机制,可以减少对低速存储器的访问次数,提高系统性能。
- 虚拟存储:利用虚拟存储技术,可以将辅存的一部分作为虚拟内存来使用,从而扩大主存的容量。
三、存储体系的优化
为了提高计算机存储体系的性能,可以采取以下优化措施:
- 增加Cache容量:通过增加Cache的容量,可以减少对主存的访问次数,提高系统性能。但需要注意的是,Cache容量的增加也会带来成本的增加和复杂性的提高。
- 采用多级Cache:多级Cache是指将Cache分为多个层次,每个层次都有其特定的功能和作用。通过多级Cache的协作,可以进一步提高系统性能。
- 优化存储管理算法:存储管理算法对于存储体系的性能有着重要影响。通过优化存储管理算法,可以减少存储碎片、提高存储利用率和访问速度。
- 采用新型存储技术:随着科技的不断发展,新型存储技术不断涌现。这些新型存储技术在容量、速度、价格和可靠性等方面都有很大的提升。因此,采用新型存储技术也是提高计算机存储体系性能的重要途径。
四、存储体系的发展趋势
未来计算机存储体系将朝着更高容量、更快速度、更低功耗和更高可靠性的方向发展。具体来说:
- 新型存储器:随着材料科学和纳米技术的不断发展,新型存储器如相变存储器、阻变存储器等不断涌现。这些新型存储器在速度、容量和可靠性等方面都有很大的提升。
- 三维存储技术:三维存储技术是指将存储器堆叠成三维结构,从而增加存储容量和访问速度。这种技术可以大大提高存储器的性能和密度。
- 存储虚拟化:存储虚拟化是指将物理存储设备抽象成逻辑存储设备,从而实现存储资源的共享和管理。这种技术可以提高存储资源的利用率和灵活性。
- 智能存储系统:智能存储系统是指将人工智能技术应用于存储系统中,实现存储资源的智能管理和优化。这种技术可以提高存储系统的性能和可靠性,降低运维成本。
考点二 内存管理的主要任务
一、分配和回收内存资源
- 内存空间的分配:
- 当作业或进程创建后,系统会为它们分配所需的内存空间。
- 内存管理负责确定如何分配这些空间,以确保每个作业或进程都能获得足够的资源来执行其任务。
- 内存空间的回收:
- 当作业或进程结束时,系统会回收它们所占用的内存空间。
- 内存管理负责确保这些空间被正确地回收,以便将来可以被其他作业或进程使用。
二、高效使用内存资源
- 地址转换:
- 在多道程序环境下,程序中的逻辑地址与内存中的物理地址通常是不一致的。
- 内存管理需要提供地址转换功能,将逻辑地址转换成相应的物理地址,以确保程序能够正确地访问内存。
- 内存空间的扩充:
- 利用虚拟存储技术或自动覆盖技术,从逻辑上扩充内存。
- 这使得系统能够在物理内存有限的情况下,运行更大的程序或处理更多的数据。
- 存储保护:
- 内存管理需要确保各个作业或进程在各自的存储空间内运行,互不干扰。
- 这可以通过设置内存保护机制来实现,如使用上下限寄存器来限制每个作业或进程对内存的访问范围。
三、安全使用内存资源
- 避免内存泄漏:
- 内存泄漏是指程序在动态分配内存后,由于某种原因未能正确释放已分配的内存。
- 内存管理需要确保程序在结束时能够正确释放所有已分配的内存,以避免内存泄漏的发生。
- 防止内存碎片:
- 内存碎片是指由于频繁的内存分配和回收操作而产生的无法被有效利用的内存空间。
- 内存管理需要采用有效的算法和技术来减少内存碎片的产生,以提高内存的利用率。
考点三 地址转换
内存管理中的地址转换:
- 虚拟地址到物理地址的转换:操作系统为了提供灵活的内存布局和保护内存安全,引入了虚拟内存的概念。虚拟地址是进程看到的内存地址,它们不对应任何物理实体。当进程需要访问内存时,操作系统会将虚拟地址转换为物理地址,以便实际访问内存。
- 这种转换通常通过页表(Page Table)或段表(Segment Table)来实现,其中包含了虚拟地址到物理地址的映射关系。
硬件实现:现代计算机通常通过内存管理单元(Memory Management Unit,MMU)来实现虚拟地址到物理地址的转换。MMU是一个专门的硬件组件,它负责处理地址转换和内存保护等任务。
软件实现:在某些情况下,操作系统也可以通过软件来实现地址转换。例如,在虚拟机或容器技术中,操作系统会使用特定的软件机制来模拟和管理虚拟内存。
目的:提高内存利用率和安全性,通过虚拟内存和地址转换技术,操作系统可以提供灵活的内存布局和保护内存安全。这有助于防止程序访问不属于它的内存空间,从而避免操作系统内核和应用程序受到病毒或恶意代码的攻击。
第四节 文件管理
考点一 文件与文件系统
文件是数据的集合,是计算机存储数据的基本单位。文件可以包含文本、图像、音频、视频、程序代码等各种类型的数据。不论文件的类型如何,其内部结构通常具有层次性。
文件系统是操作系统用于明确存储设备(如磁盘、固态硬盘等)或分区上的文件的方法和数据结构,即在存储设备上组织文件的方法。操作系统中负责管理和存储文件信息的软件机构称为文件管理系统,简称文件系统。文件系统由三部分组成,包括文件系统的接口、对对象操纵和管理的软件集合以及对象及属性。
考点二 文件的分类
文件可以包含不同类型的数据,如文本文件(.txt)、图像文件(.jpg)、音频文件(.mp3)、视频文件(.mp4)、程序代码文件(.cpp、.java等)等。文件的类型通常由文件的扩展名来表示,扩展名帮助操作系统和应用程序识别文件类型,并确定如何处理这些文件。
考点三 文件的结构
- 逻辑结构:文件的逻辑结构可以分为流式文件和记录式文件。流式文件中的数据是一串字符流,没有结构;而记录文件则由若干逻辑记录组成,每条记录又由相同的数据项组成,数据项的长度可以是确定的,也可以是不确定的。
- 层次结构:大多数文件的内部结构具有层次性,便于数据的组织和管理。文件中的数据通常按一定规则组织成记录,记录是文件中的逻辑单位,可以是文本文件中的一行或数据库文件中的一条记录。记录又由数据项组成,数据项是记录中的具体数据单位。
考点四 文件目录
一、定义与功能
- 定义:文件目录是文件系统中存储文件及其属性信息的数据库或数据结构。它记录了文件系统中所有文件的名称、位置、大小、类型、创建时间、修改时间等元数据。
- 功能:
- 文件管理:文件目录提供了文件的创建、删除、重命名、移动等操作的功能。
- 文件查找:通过文件目录,用户可以快速找到所需的文件,因为目录记录了文件的名称和位置。
- 文件访问控制:文件目录还可以包含文件的访问权限信息,用于控制哪些用户或进程可以访问文件。
- 文件组织:文件目录通过层次结构(如目录树)来组织文件,使得文件系统的结构更加清晰和易于管理。
二、目录结构
- 单层目录结构:所有文件都存储在同一个目录中,这种结构简单但不适用于大型文件系统,因为查找文件效率低下。
- 多级目录结构:也称为树形目录结构,它允许用户创建子目录来组织文件。这种结构更加灵活和高效,因为用户可以根据需要创建多个层次和类别的目录来存储文件。
- 路径:路径是描述文件在文件系统中位置的一种方式。绝对路径从根目录开始,一直指向目标文件;相对路径则是相对于当前目录或某个指定目录的路径。
三、目录项
目录项是文件目录中用于描述文件或子目录的条目。每个目录项通常包含以下信息:
- 文件名:文件的唯一标识符,用于区分不同的文件。
- 文件属性:包括文件的类型(如文本文件、图像文件等)、大小、创建时间、修改时间等。
- 文件位置:文件在存储设备上的物理地址或指向文件数据的指针。
- 访问权限:控制哪些用户或进程可以访问文件的权限信息。
四、目录操作
- 创建目录:用户可以在文件系统中创建新的目录来组织文件。
- 删除目录:当目录不再需要时,用户可以将其删除。但需要注意的是,如果目录中包含文件或子目录,则通常需要先删除它们才能删除该目录。
- 重命名目录:用户可以更改目录的名称以更好地描述其内容或用途。
- 遍历目录:用户可以遍历目录树来查找和访问文件。这通常涉及递归地访问每个目录和子目录,并检查其中的文件。
五、文件目录的演变与改进
随着计算机技术和存储技术的发展,文件目录也在不断改进和完善。例如,现代文件系统通常支持更复杂的访问控制机制、更高效的查找算法以及更灵活的文件组织方式。此外,一些新型文件系统还引入了元数据索引、快照、版本控制等高级功能来进一步提高文件管理的效率和可靠性。
考点五 文件保护与安全
一、文件加密
- 透明加密:采用透明加密技术,可以在不影响用户正常使用的前提下,对文件进行自动加密和解密。这样,即使文件被非法获取,也无法被未授权的人员读取。
- 手动加密:对于不重要的文件,可以使用压缩软件(如WinRAR、7-Zip等)进行加密压缩,设置密码保护。
- 使用强加密算法:如AES-256位加密和RSA 2048位密钥,确保文件在传输和存储过程中的安全性。
二、访问控制
- 权限管理:根据员工的职责和需要,设置不同的文件访问权限。确保只有授权员工才能访问敏感文件。
- 多因素认证:在访问重要文件时,要求用户输入多个认证因素(如密码、指纹、面部识别等),增加访问的安全性。
- 审批流程:建立文件外发的审批机制,确保所有外发文件经过审核。
三、文件水印与审计
- 文件水印:在文档中嵌入不可见的水印,以便在文件泄露时能够追踪来源。
- 文件操作记录:记录文件的打开、编辑、复制、移动等操作,以便在发生泄密事件时进行审计和追溯。
四、物理安全措施
- 安全存储:将重要文件存储在安全的位置,如加密的硬盘、网络存储设备等。确保存储设备本身具有安全防护功能。
- 物理锁定设备:使用USB端口锁等物理设备,限制不必要的外部设备接入,防止未经授权的文件转移。
五、防泄密软件与系统
- 部署防泄密软件:如安企神、Ping32等,这些软件可以监控和记录文件操作行为,及时发现并阻止潜在的泄密风险。
- 数据丢失防护(DLP)系统:监控并阻止敏感数据通过电子邮件、即时消息等渠道外泄。
六、安全传输与备份
- 安全传输:在传输文件时,使用安全的传输协议(如SFTP、HTTPS等),防止文件在传输过程中被截获或篡改。
- 定期备份:定期对关键文件进行备份,并加密备份文件,确保在备份过程中数据的安全性。
第五节 死锁
考点一 死锁
死锁是指两个或两个以上的进程(或线程)在执行过程中,由于竞争资源或者由于彼此通信而造成的一种阻塞的现象,若无外力作用,它们都将无法推进下去。此时称系统处于死锁状态或系统产生了死锁,这些永远在互相等待的进程(或线程)称为死锁进程(或死锁线程)。
产生死锁的核心条件之一是“循环等待”,即多个进程(或线程)之间形成了一个闭环,每个进程(或线程)都在等待下一个进程(或线程)所占有的资源。具体来说,当多个进程(或线程)之间存在资源依赖关系,并且这些进程(或线程)形成了一个环路,每个进程(或线程)都在等待下一个进程(或线程)所占有的资源时,就会产生“循环等待”的情况。这样,每个进程(或线程)都无法继续执行,导致系统无法进一步进行,即产生死锁。
考点二 解决死锁的方法
解决死锁的方法主要有以下几种:
- 超时机制:
- 通过设置超时等待时间,当两个或多个进程(或线程)互相等待超过设定的时间后,其中一个进程(或线程)会进行回滚,释放其占有的资源,以便另一个等待的进程(或线程)能够继续执行。
- 优点:实现简单。
- 缺点:如果事务操作涉及大量数据的更新,回滚操作可能会非常耗时。
- 死锁检测与恢复:
- 不试图阻止死锁的发生,而是当检测到死锁时,采取措施进行恢复。
- 恢复方法包括抢占恢复、回滚恢复和通过杀死进程(或线程)来恢复。
- 其中,InnoDB引擎采用等待图的方式来进行死锁检测。它保存锁的信息链表和事务等待链表,采用深度优先算法来判断是否存在回路。如果存在回路,就表示存在死锁,此时会将持有最少行级排他锁的事务进行回滚来解决死锁。
- 死锁预防:
- 破坏死锁的必要条件,从而预防死锁的发生。
- 方法包括:破坏请求和保持条件(让所有进程在执行前请求所需要的全部资源);破坏环路等待条件(给资源统一编号,进程只能按编号顺序来请求资源)。
- 死锁避免:
- 在程序运行时通过一定的策略来避免发生死锁。
- 常用的算法是银行家算法,但该算法在实际应用中可能较为复杂且难以完全避免死锁。
- 鸵鸟策略:
- 假装没发生问题,因为解决死锁的代价很高,所以鸵鸟策略会获得很高的性能。但这种方法并不推荐,因为它忽略了死锁可能带来的严重后果。
- 按顺序获取锁:
- 在编程时,确保所有进程(或线程)在获取锁资源时都按照固定的顺序进行,从而避免循环等待条件的发生。
- 使用tryLock方法:
- 在尝试获取锁资源时,使用tryLock方法。如果获取失败,则立即释放已经获取的锁资源,并尝试其他策略或进行回滚操作。
考点三 银行家算法
银行家算法(Banker’s Algorithm)是一种经典的死锁避免算法,由计算机科学家艾兹格·迪杰斯特拉(Edsger Dijkstra)在1965年提出。该算法主要用于操作系统中的资源分配,确保系统能够安全地进行资源分配和释放,避免因资源分配不当而导致的死锁。以下是对银行家算法的详细解释:
一、背景与原理
银行家算法的基本思想类似于银行在贷款时要保证其有足够的资金以应对所有客户的最大需求,以免因资金周转不灵而导致破产。在银行家算法中,操作系统被视为银行家,进程向操作系统请求分配资源相当于用户向银行家贷款。算法通过对系统当前状态和资源请求进行检查,来确保系统能够安全地分配资源。
二、关键数据结构
- 可利用资源向量(Available):表示系统中各类资源的剩余数量。这是一个长度为m的数组,其中m表示资源类型的数量。
- 最大需求矩阵(Max):表示每个进程对各类资源的最大需求数量。这是一个n×m的矩阵,其中n表示进程的数量。
- 分配矩阵(Allocation):表示已经分配给每个进程的各类资源数量。这也是一个n×m的矩阵。
- 需求矩阵(Need):表示每个进程还需要的各类资源数量。这个矩阵通过Max - Allocation计算得出,同样是一个n×m的矩阵。
三、算法步骤
- 初始化:设置Available、Max、Allocation和Need四个数据结构,并初始化它们的值。
- 进程请求资源:当进程需要资源时,会向系统发出请求。系统首先检查该请求是否合法,即请求的资源数量是否小于等于进程的需求数量(Need矩阵中的值)且小于等于系统的可利用资源数量(Available数组中的值)。
- 试探性分配:如果请求合法,系统会尝试分配资源。这包括从Available数组中减去请求的资源数量,并在Allocation矩阵和Need矩阵中更新相应的值。
- 安全性检查:在资源分配后,系统需要进行安全性检查,以确定当前状态是否安全。安全性检查通过模拟资源分配和回收的过程,尝试找到一个安全序列,即一个进程序列,使得按照这个序列分配资源后,所有进程都能顺利完成。如果找到这样的序列,则系统处于安全状态;否则,系统处于不安全状态。
- 正式分配或撤销:如果系统处于安全状态,则正式分配资源;否则,撤销分配,恢复系统状态,并拒绝资源请求。
四、安全性检查算法
安全性检查算法是银行家算法的核心部分,它通常包括以下步骤:
- 设置两个工作向量:Work和Finish。Work表示系统可提供给进程继续运行所需的各类资源数量,初始值为Available;Finish表示系统是否有足够资源分配给进程使其运行完成,初始值为false。
- 从进程集合中找到一个满足条件的进程:该进程的Finish值为false,且其需求矩阵中的值小于等于Work向量中的值。
- 如果找到这样的进程,将其资源分配给它(这里是模拟分配,不会实际改变系统的状态),并更新Work和Finish的值。然后重复此过程,直到所有进程都被满足或找不到可满足的进程。
- 如果所有进程的Finish值都为true,则系统处于安全状态;否则,系统处于不安全状态。
总体上来说,就是设置了几个矩阵,一个矩阵记录着当前可用的各类资源数量,另外几个矩阵记录着当前进程占用了的资源数量及其对应的还需资源的数量。从而不断更新矩阵判断是否能存在安全序列(若系统能够找到一个进程执行序列,使得系统只要按此序列为每个进程分配资源,就可以保证进程的资源分配和执行顺序完成,此时称系统处于安全状态)。
五、优缺点与应用
优点:
- 银行家算法是一种有效的死锁避免算法,它能够在资源分配过程中确保系统的安全性。
- 通过动态评估进程的资源需求,算法能够为多个进程的资源分配提供一种有效的解决方案。
缺点:
- 算法的实现相对复杂,需要维护多个数据结构,并进行安全性检查。
- 在实际应用中,由于系统的复杂性和动态性,算法的性能可能会受到影响。
第六节 进程管理
考点一 进程的概念
进程是程序的一次执行过程,具有动态性、独立性、异步性和并发性等特征。它包含程序、数据和进程控制块,这些组成部分共同构成了进程的实体。在多道程序设计系统中,CPU在各进程之间切换,实现多任务处理。
进程与线程的关系
在计算机结构中,进程和线程有着密切的关系。线程是系统分配处理器时间资源的基本单元,一个进程至少包含一个线程,通常称为主线程。进程可以创建多个线程来并行执行任务,提高系统的并发性能。
进程的管理和调度
操作系统通过进程管理来分配和调度系统资源。进程管理包括创建、撤销、挂起和激活等操作。调度算法如优先级调度、轮转调度等用于在多个进程之间合理分配CPU时间,确保系统的高效运行。
考点二 进程通信
进程通信是指在进程间传输数据(交换信息)。 进程通信根据交换信息量的多少和效率的高低,分为低级通信(只能传递状态和整数值)和高级通信(提高信号通信的效率,传递大量数据,减轻程序编制的复杂度)。其中高级进程通信分为三种方式:共享内存模式、消息传递模式、共享文件模式。
基本进程通讯方法
Shared-memory:相互通讯的进程有共享存储区.进程间可以通过直接读写共享存储区的变量来交互数据,同步与互斥在并发程序设计时安排进入程序。操作系统提供这样的共享存储区及同步互斥工具。
最为快捷有效的方式之一,UNIX系统中常被使用。内存共享区的互斥要通过其它机制实现;数据的发送方不关心数据由谁接收,数据的接收方也不关心数据是由谁发送的,存在安全隐患。
消息传递
message-passing:通过操作系统的相应系统调用进行消息传递通讯。分为直接和间接两种:
直接通信方式:点到点的发送
间接通信方式:以信箱为媒介进行传递,可以广播
管道通信
是一种信息流缓冲机构, UNIX系统中管道基于文件系统,在内核中通过文件描述符表示。管道以先进先出(FIFO)方式组织数据传输。
实现方法:
调用pipe()函数创建管道
int pipe(int fd[2]);
fd[0]为管道里的读取端
fd[1]则为管道的写入端。
通过write()函数写入信息
int write (int handle,char *buf,unsigned len)
进程通过read()函数读取信息
int read (int handle,void *buf,unsigned len)
特点
1.管道是一个单向通信信道,如果进程间要进行双向通信,通常需要定义两个管道。
2.管道通过系统调用read(), write()函数进行读写操作。
分类
1.匿名管道:只适用于父子进程之间通信;管道能够把信息从一个进程的地址空间拷贝到另一个进程的地址空间。
2.命名管道:命名管道有自己的名字和访问权限的限制,就像一个文件一样。它可以用于不相关进程间的通信,进程通过使用管道的名字获得管道。 [1]
含义
考点三 进程同步与互斥
一、进程同步
- 定义:
- 进程同步是指在多道程序环境下,不同进程之间存在着直接的相互制约关系,它们通过互相发送消息、进行合作、互相等待,使得各进程按一定的速度执行,从而完成某种特定的任务。
- 基本形式:
- 进程同步的基本形式是“进程-进程”,即不同进程间的合作与协调。
- 实现机制:
- 常见的进程同步机制包括信号量、消息队列、管道等。其中,信号量是一种广泛使用的同步机制,它通过一个计数器来表示资源的可用数量,并通过P(wait)操作和V(signal)操作来实现对资源的申请和释放。
- 应用实例:
- 假设有两个进程P1和P2,P1负责生成数据并放入缓冲区,P2负责从缓冲区中取出数据进行处理。为了保证数据的正确性和完整性,需要确保P1在生成数据并放入缓冲区后,P2才能取出数据进行处理。这就可以通过进程同步机制来实现,例如使用信号量来控制对缓冲区的访问。
二、进程互斥
- 定义:
- 进程互斥是指两个或两个以上的进程不能同时进入关于同一组共享变量的临界区域,否则可能发生与时间有关的错误。也就是说,当一个进程正在访问临界资源时,另一个要访问该资源的进程必须等待。
- 基本形式:
- 进程互斥的基本形式是“进程-资源-进程”,即同种进程间对共享资源的互斥访问。
- 实现准则:
- 为了实现进程互斥,需要遵循以下四个准则:
- 空闲让进:当临界资源处于空闲状态时,允许一个请求进入临界区的进程立即进入临界区。
- 忙则等待:已经有进程进入临界区时,其他准备进入临界区的进程必须等待。
- 有限等待:对要求访问临界资源的进程,应该保证该进程能在有效的时间内进入临界区。
- 让权等待:当进程不能进入临界区时,应该立即释放处理机,防止进程忙等待。
- 为了实现进程互斥,需要遵循以下四个准则:
- 实现机制:
- 常见的进程互斥实现机制包括信号量机制、Peterson算法、TSL指令等。其中,信号量机制是一种广泛使用的实现方式,它通过设置信号量的初值和P、V操作来控制对临界资源的访问。
- 应用实例:
- 假设有两个进程A和B,它们都需要访问同一个打印机资源。为了保证打印机资源的正确使用,需要确保A和B不能同时访问打印机。这就可以通过进程互斥机制来实现,例如使用信号量来控制对打印机的访问。
三、进程同步与互斥的关系
- 联系:
- 进程同步与互斥都是用于协调进程间的关系,以实现资源共享和进程协作。
- 在某些情况下,进程同步可以包含进程互斥,即同步已经实现了互斥,特别是所有写入资源的情况必定是互斥的。
- 区别:
- 进程同步主要关注的是不同进程间的合作与协调,以确保它们按一定的顺序执行。
- 进程互斥则主要关注的是同种进程间对共享资源的互斥访问,以防止发生与时间有关的错误。
第七节 处理机调度
考点一 处理机分级调度
一、分级调度的概念
处理机调度是指动态地把CPU分配给并发执行的进程。由于操作系统中通常存在大量的并发进程,为了有效地管理这些进程并充分利用CPU资源,操作系统采用了分级调度的策略。分级调度将调度任务划分为不同的层次,每个层次负责不同的调度任务,从而形成一个有序的调度体系。
二、分级调度的层次
处理机调度一般可分为以下三个层次:
- 高级调度(作业调度):
- 又称长程调度或宏观调度。
- 主要功能是从输入的一批作业中选出若干个作业,分配必要的资源,并为它们建立相应的进程,使它们具备执行条件。
- 在有些系统中,高级调度可能还负责将选中的作业调入内存,并为其分配适当的内存空间。
- 需要注意的是,在分时系统和实时系统中,由于不存在作业的概念,因此高级调度通常被取消或简化。
- 中级调度(交换调度):
- 又称中程调度。
- 主要任务是在内存和外存交换区之间换出被阻塞的进程或暂时不需要执行的进程,以及换进被选中要执行的进程。
- 通过中级调度,系统可以有效地管理内存资源,解决内存空间紧张的问题,并提高系统的并发性能。
- 中级调度在具有虚拟存储器的系统中尤为重要,因为它可以帮助系统实现内存的自动扩充和收缩。
- 低级调度(进程调度):
- 又称短程调度或微观调度。
- 主要任务是按照某种调度算法从就绪进程队列中选择一个进程占用CPU执行。
- 低级调度是操作系统中最频繁、最重要的调度操作之一,因为它直接决定了哪个进程将获得CPU的控制权。
- 低级调度的实现策略和方法往往决定了操作系统的类型,其算法优劣也直接影响整个系统的性能。
三、分级调度的特点
- 层次性:分级调度将调度任务划分为不同的层次,每个层次负责不同的调度任务,从而形成一个有序的调度体系。
- 灵活性:通过分级调度,系统可以根据不同的需求和场景选择合适的调度策略和方法,从而提高系统的灵活性和适应性。
- 高效性:分级调度可以有效地管理CPU和内存资源,提高系统的并发性能和资源利用率。
- 可扩展性:分级调度策略可以根据系统的规模和需求进行扩展和调整,以适应不同规模和复杂度的应用场景。
考点二 进程调度算法
一、先来先服务(FCFS)调度算法
- 原理:按照作业到达任务队列的顺序进行调度,每次从就绪队列选择最先进入队列的进程,然后一直运行,直到进程退出或被阻塞,才会继续从就绪队列中选择下一个进程接着运行。
- 特点:
- 易于理解和实现,只需要一个队列。
- 相当公平,因为每个进程都按照到达的顺序被调度。
- 对长作业有利,但不利于短作业和I/O繁忙型作业。
- 应用场景:适用于CPU繁忙型作业的系统,但在实时系统中可能不适用。
二、最短作业优先(SJF)调度算法
- 原理:从后备队列中选择一个或若干个估计运行时间最短的作业,将它们调入内存运行。该算法是非抢占式的,即短进程将会越过长作业,跳至队列头。
- 特点:
- 有利于减少平均等待时间,提高系统吞吐量。
- 但对长作业不利,可能导致长作业长期不被运行,出现饥饿现象。
- 作业的长短只是被估算出来的,因此可能存在误差。
- 应用场景:适用于需要优化平均等待时间和吞吐量的系统。
三、时间片轮转(RR)调度算法
- 原理:将CPU处理时间划分为多个时间片,每个进程被分配一个时间片。进程按照到达先后顺序排列,每次调度选择队首的进程执行。当一个时间片用完时,如果进程还在运行,则将其移到队尾,并调度下一个进程。
- 特点:
- 简单易行,能够公平地分配CPU时间给每个进程。
- 平均响应时间短,适用于分时系统。
- 但时间片的大小对系统性能有很大影响,需要谨慎选择。
- 应用场景:广泛用于分时系统和需要公平分配CPU时间的场景。
四、高响应比优先(HRRN)调度算法
- 原理:每次进行进程调度时,先计算每个进程的响应比优先级,然后把响应比优先级最高的进程投入运行。响应比优先级的计算公式为:响应比优先级 = (等待时间 + 要求服务时间) / 要求服务时间。
- 特点:
- 权衡了短作业和长作业,使得长作业也有机会获得CPU时间。
- 但需要一直计算响应比,增加了系统的资源消耗。
- 应用场景:适用于需要平衡短作业和长作业的系统。
五、最高优先级调度算法(HPF)
- 原理:调度程序会从就绪队列中选择最高优先级的进程进行运行。进程的优先级可以是静态的(在创建进程时确定,然后整个运行时间优先级都不会变化)或动态的(根据进程的动态变化调整优先级)。
- 特点:
- 能够确保高优先级的进程优先获得CPU时间。
- 但可能导致低优先级的进程长期得不到运行,出现饥饿现象。
- 应用场景:适用于需要确保高优先级进程优先执行的系统。
六、多级反馈队列调度算法(MFQ)
- 原理:由时间片轮转算法和最高优先级调度算法综合发展而来。设置多个就绪队列,每个队列的优先级从高到低。新的进程会被放入到第一级队列的末尾,按先来先服务的原则排队等待被调度。如果进程在第一级队列规定的时间片没有运行完成,则退出第一级队列,加入到第二级队列的末尾,以此类推,直至完成。在低优先级的队列中的进程在运行时,如果有新进程进入较高优先级的队列,则停止当前运行的进程并将其移入到原队列的末尾,接着让较高优先级的进程运行。
- 特点:
- 很好地兼顾了长短作业,同时有较好的响应时间。
- 无需事先知道各种进程所需要执行的时间。
- 应用场景:广泛用于需要兼顾长短作业和响应时间的系统。
第八节 存储管理
考点一 分页与分级存储管理
分页存储管理
分页存储管理是一种内存分配方案,它将进程的逻辑地址空间划分成若干大小相等的部分,每一部分称为页或页面。相应地,内存空间也被划分为与页面大小相同的若干个存储块,即物理块或页框。用户的任一页可以放在内存的任一块中,实现离散分配。这种方式的优点是可以提高内存的利用率,并减少内存碎片。
在分页系统中,为了能在内存中找到每个页面对应的物理块,系统为每个进程设立一张页面映像表,简称页表。页表的作用是实现从页号到物理块号的地址映射。当进程访问某个逻辑地址时,分页地址变换机构会自动将逻辑地址分为页号和页内地址,然后通过查找页表找到对应的物理块号,最后形成物理地址进行访问。相当于是做了一个内存目录,实现逻辑地址到物理地址的映射。
分级存储管理(HSM)
分级存储管理是一种数据备份存储方案,它利用多种存储介质(如独立磁盘系统组成的冗余磁盘阵列、光纤存储器、磁带等)来经济地利用备份存储设备。每种存储介质的成本以及存取数据速度都不一样,因此分级存储管理可以根据数据的访问频率和重要性来选择适当的存储介质。
分级存储系统通常应用在公司网络中,它为用户提供了安全稳定的数据备份存储方案。管理员可以设定存储规则,如硬盘的最低和最高容量限制,以及根据文件类型定义备份规则。一旦规则建立好,分级存储系统就可以自动完成数据的备份、获取和转移等操作。
分级存储管理的优点包括提高了存储资源的利用率、降低了存储成本,并为用户提供了透明、高效的数据访问和备份服务。此外,它还可以支持自动备份和恢复功能,进一步简化了用户的管理操作。
主要区别
- 目的和应用场景:分页存储管理主要用于提高内存利用率和减少内存碎片,是操作系统中的内存管理方案。而分级存储管理则是一种数据备份存储方案,它利用多种存储介质来经济地利用备份存储设备。
- 实现方式:分页存储管理通过划分页面和页框,并建立页表来实现地址映射。而分级存储管理则通过设定存储规则和自动备份、恢复功能来实现数据的备份和存储管理。
例题:
某系统采用分页存储管理方式,页的大小为4KB(即4096字节),逻辑地址空间为64KB(即65536字节)。现有一个进程的逻辑地址是0x1ABC(十六进制),试求该逻辑地址对应的物理地址。
解答:
确定页大小和逻辑地址空间:
- 页大小:4KB = 4096字节
- 逻辑地址空间:64KB = 65536字节
计算页数和页内偏移量:
- 页数(逻辑地址空间大小除以页大小):65536 / 4096 = 16页
- 每页大小(页内偏移量范围):0 - 4095(十六进制:0x0000 - 0x0FFF)
将逻辑地址转换为页号和页内偏移量:
- 逻辑地址:0x1ABC
- 页号(逻辑地址高位部分,根据页数确定位数):0x1A / 0x10 = 26(十进制),由于页数只有16页,所以实际页号为26 % 16 = 10(十进制),即页号为0x0A(十六进制)
- 页内偏移量(逻辑地址低位部分):0xABC % 0x1000 = 0xABC - 0xA000 = 0xBC(十六进制)
注意:这里的计算是简化的,实际上页号的计算应该直接通过逻辑地址的高位部分来确定,而不是先转为十进制再计算。由于页大小为4KB(即24 = 16页),页内偏移量占据逻辑地址的低12位。
查找页表:
- 假设页表如下(实际情况下页表由操作系统维护):
- 页号 | 物理块号
- 0x00 | 0x01
- 0x01 | 0x02
- …
- 0x0A | 0x05(假设)
- …
- 根据页号0x0A,找到对应的物理块号为0x05。
- 假设页表如下(实际情况下页表由操作系统维护):
计算物理地址:
- 物理地址 = 物理块号 * 页大小 + 页内偏移量
- 物理地址 = 0x05 * 0x1000 + 0xBC = 0x5000 + 0xBC = 0x50BC(十六进制)
因此,逻辑地址0x1ABC对应的物理地址是0x50BC。
考点二 虚拟存储管理
一、虚拟存储的基本概念
虚拟存储是指具有请求调入功能和置换功能,能从逻辑上对内存容量加以扩充的一种存储器系统。它基于局部性原理,即程序在执行时往往会呈现出局部性规律,即在较短的时间内,程序的执行和所访问的存储空间都局限于某个部分。因此,虚拟存储管理只需将当前要运行的部分页面或段调入内存,其余部分暂留在外存上,从而节省内存空间。
二、虚拟存储的实现方式
虚拟存储的实现主要建立在离散分配存储管理基础上,包括请求分页系统和请求分段系统。其中,请求分页系统是最常见的实现方式,它包含请求页表机制和缺页中断机构。当程序要访问的页面不在内存时,会产生缺页中断,操作系统会将所缺页面调入内存。
三、虚拟存储的置换算法
在虚拟存储管理中,页面置换算法是一个重要的组成部分。它决定了当内存已满且需要调入新页面时,应该选择哪个页面进行置换。常见的页面置换算法包括:
- 最佳置换算法(OPT):选择未来最长时间内不再被访问的页面进行置换。然而,由于无法预知未来,这种算法实际上无法实现,但它可以作为评价其他算法的标准。
- 先进先出置换算法(FIFO):选择内存中驻留时间最久的页面进行置换。然而,这种算法与进程实际运行的规律不相适应,可能会导致较高的缺页率。
- 最近最久未使用置换算法(LRU):选择最近最久未使用的页面进行置换。这种算法需要记录页面使用时间的先后关系,硬件开销较大。但在实际应用中,它通常能提供更好的性能。
- 最少使用置换算法(LFU):选择过去使用次数最少的页面进行置换。然而,这种算法也需要较多的硬件支持,实现成本较高。
在实际应用中,为了降低硬件开销并避免频繁的页面交换导致的“抖动”现象,常使用Clock算法等近似LRU的算法来实现页面置换。
四、虚拟存储管理的特点
- 多次性:一个作业被分成多次调入内存运行。
- 对换性:允许在作业的运行过程中进行换进、换出。
- 虚拟性:能够从逻辑上扩充内存容量,使用户所看到的内存容量远大于实际内存容量。
五、虚拟存储技术的应用
虚拟存储技术在多个领域都有广泛的应用,包括但不限于:
- 数据镜像:通过在不同的存储设备间建立数据复本,提高数据的可靠性和可用性。
- 数据复制:实现远距离的数据迁移和灾难恢复。
- 磁带备份增强:在磁带和磁盘间搭建桥路,提高备份工作的效率和安全性。
- 实时复本和恢复:制作数据复本以用于测试、拓展等目的,并在需要时快速恢复数据。
- 应用整合:将存储设备和关键的企业应用行为相整合,提高存储设备的利用率和管理效率。