版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
操作系统第1章引论1.1操作系统的概念1.2操作系统的形成与发展1.3研究操作系统的几种观点1.4操作系统的功能与特点1.5操作系统的硬件环境返回上一页1.1操作系统的概念
计算机系统计算机系统由硬件(子)系统和软件(子)系统组成。硬件(子)系统计算机硬件是指计算机系统中由电子、机械和光电元件等组成的各种计算机部件和计算机设备。这些部件和设备依据计算机系统结构的要求构成的有机整体,称为计算机硬件系统。计算机硬件系统主要由运算器、主存储器、控制器、输入输出控制系统、辅助存储设备等功能部件组成。
软件(子)系统软件是计算机系统中的程序和有关的文件。程序是计算任务的处理对象和处理规则的描述;文件是为了便于了解程序所需的资料说明。返回上一页按照应用的观点,软件可分为系统软件、支撑软件和应用软件三类。系统软件:位于计算机系统中最靠近硬件的一层,其他软件一般都通过系统软件发挥作用。如编译程序和操作系统等。支撑软件:即支撑其他软件的编制和维护的软件。主要包括数据库管理系统、各种接口软件和工具组。应用软件:特定应用领域专用的软件,例如字处理程序。计算机系统的层次结构最下面是硬件系统;最上面是使用计算机的人,即各种各样的用户;人与硬件系统之间是软件系统。系统软件是最靠近硬件的一层,其次是支撑软件和应用软件。
返回上一页计算机组织研究和建立计算机各功能部件间的相互连接和作用,完成各个功能部件内部的逻辑设计等是逻辑实现的内容,称为计算机组织;把逻辑设计深化到元件、器件级,则是物理实现的内容,称为计算机实现。现在统称为计算机组织。什么是操作系统操作系统的地位操作系统实际上是一个计算机系统中硬、软件资源的总指挥部。操作系统的定义操作系统是计算机系统中的一个系统软件,是能有效地组织和管理计算机系统中的硬件和软件资源,合理地组织计算机工作流程,控制程序的执行,并向用户提供各种服务功能,使得用户能够灵活、方便、有效地使用计算机,并使整个计算机系统能高效地运行的一组程序模块的集合。返回上一页操作系统主要有两方面的主要作用:
1、管理系统中的各种资源,包括硬件资源和软件资源
2、为用户提供良好的界面操作系统的目标 方便性、有效性、可扩充性、开放性返回上一页1.2操作系统的形成与发展
操作系统形成无操作系统时的计算机系统人工操作方式
由用户(即程序员)采用人工操作方式直接使用计算机硬件系统缺点:用户独占全机、CPU等待人工操作脱机输入输出方式程序和数据的输入输出都是在外围机的控制下完成优点:减少了CPU的空闲时间、提高I/O速度单道批处理系统系统对作业的处理都是成批地进行的、且在内存中始终只保持一道作业,故称为单道批处理系统。返回上一页
特征:自动性、顺序性、单道性多道批处理系统多道程序设计的基本概念把一个以上的作业(程序)存放在主存中,并且同时处于运行状态,共享处理机时间和外部设备等其他资源的方法。优点:提高了CPU的利用率提高了内存和I/O设备的利用率 增加系统吞吐量多道批处理系统的特征多道性、无序性、调度性多道批处理系统的优缺点优点:资源利用率高、系统吞吐量大缺点:平均周转时间长、无交互能力返回上一页多道批处理系统需要解决的问题处理机管理问题、内存管理问题、I/O设备管理问题文件管理问题、作业管理问题
分时系统分时系统的产生
人-机交互、共享主机、便于用户上机分时系统实现中的关键问题及时接收、及时处理分时系统的实现方法-作业直接进入内存-规定每个程序只运行一个时间片的时间具体方法有以下几种:单道分时系统、具有“前台”和“后台”的分时系统、多道分时系统返回上一页
分时系统的特征多路性、独立性、及时性、交互性实时系统
实时系统的引入实时控制、实时信息处理实时系统定义-实时:所谓“实时”,是表示“及时”、“即时”-实时系统:实时系统是指系统能及时(或即时)响应外部事件的请求,在规定的时间内完成该事件的处理,并控制所有实时任务协调一致地运行实时任务的类型-按任务执行时是否呈现周期性来划分:周期性实时任务、非周期性实时任务-根据对截止时间的要求来划分:强实时任务、弱实时任务
返回上一页
实时系统与分时系统的比较多路性、独立性、及时性、交互性、可靠性操作系统的进一步发展微机操作系统配置在微机上的操作系统称为微机操作系统单用户单任务操作系统只允许一个用户上机、且只允许用户程序作为一个任务运行例如:CP/M、MS-DOS单用户多任务操作系统只允许一个用户上机,但允许将一个用户程序分成若干个任务,使它们并发执行,从而有效地改善系统的性能例如:OS/2、MSWindows、Linux
多用户多任务操作系统允许多个用户通过各自的终端,使用同一台主机,共享主机系统中的各类资源,而每个用户程序又可进一步分为几个任务,使它们并发执行例如:UNIX返回上一页
多处理机操作系统多处理机系统的引入-增加系统的吞吐量-节省投资-提高系统的可靠性多处理的类型紧密耦合MPS、松散耦合MPS
多处理机操作系统的类型非对称多处理机模式(主-从模式)、对称多处理机模式网络操作系统
计算机网络可以定义为一些互连的自主计算机系统的集合计算机网络的类型-按网络拓扑结构分:星型网络、树型网络、总线型网络环型网络、网状型网络返回上一页
-按网络地理范围分:广域网WAN、局域网LAN网络操作系统模式客户机/服务器(C/S)模式、对等模式网络操作系统的功能网络通信、资源管理、网络服务、网络管理、互操作能力分布式操作系统分布式系统-集中式处理系统:处理和控制功能都高度地集中在一台主机上,所有的任务都有主机处理-分布式处理系统:由多个分散的处理单元经互连网络的连接而形成的系统,每个处理单元既具有高度的自治性,又相互协同,并行地运行分布式程序分布式操作系统与网络操作系统的比较分布性、并行性、透明性、共享性、健壮行返回上一页
推动操作系统发展的主要动力
-不断提高计算机资源利用率的需要
-方便用户
-器件的不断更新换代
-计算机体系结构的不断发展返回上一页1.3研究操作系统的几种观点
软件的观点从软件的观点来看,操作系统有其作为软件的外在特性和内在特性计算机系统资源管理的观点操作系统的主要功能是针对处理机、存储器、I/O设备、文件这四类资源进行有效的管理进程的观点把操作系统看作由若干进程和一个对进程进行协调的核心所组成。每个进程都完成某一特定任务,而操作系统的核心则控制和协调这些进程的运行,解决进程之间的通信用户与计算机硬件系统之间接口的观点操作系统处于用户与计算机硬件系统之间,用户通过操作系统来使用计算机
返回上一页
用户可以通过以下两种方式来使用计算机:命令方式、系统调用方式虚机器观点操作系统为用户使用计算机提供了许多服务功能和良好的工作环境,把计算机扩充为功能更强、使用更加方便的计算机系统
服务提供者观点用户角度看操作系统,则它应能为用户提供比棵机功能更强、服务质量更高、使用户更觉方便的灵活的虚拟机器操作系统提供的系统调用一般包括:-文件操作类如,打开、建立文件等
-资源申请类如,分配、归还主存空间等
-控制类如,正常、异常结束等
-信息维护类如,设置、获取时间等
返回上一页1.4操作系统的功能与特点
通用操作系统一个系统兼有批量处理、分时处理和实时处理三者或其中两者的功能,而形成通用操作系统
操作系统的功能存储器管理的功能
内存分配、内存保护、地址映射、内存扩充处理机管理功能进程控制、进程同步、进程通信、调度设备管理功能缓冲管理、设备分配、设备处理、设备独立性和虚拟设备文件管理功能文件存储空间的管理、目录管理、文件的读写管理和存取控制返回上一页
用户接口-命令接口包括联机用户接口和脱机用户接口-程序接口-图形接口操作系统的服务操作系统的公共服务类型程序执行、I/O操作、文件系统操纵、通信、差错检测系统调用的作用在应用程序中,可通过系统调用来调用操作系统的特定过程,以实现特定的服务系统调用与一般过程的不同:系统调用运行再系统态,一般过程运行在用户态系统调用的类型
-进程控制类系统调用返回上一页
-文件操纵系统调用-设备管理系统调用-通信用系统调用-信息维护
操作系统的特征
-并发并行性是指两个或多个事件在同一时刻发生并发性是指两个或多个事件在同一时间间隔内发生-共享互斥共享方式、同时访问方式-虚拟-异步性
返回上一页1.5操作系统的硬件环境
任何系统软件都是硬件功能的延伸,并且都是建立在硬件基础上的,离不开硬件设施的支持。而操作系统更是直接依赖于硬件条件,与硬件的关系尤为密切中央处理器(CPU)
CPU的构成与基本工作方式一般的处理器由运算器、控制器、一系列的寄存器以及高速缓存构成处理器中的寄存器寄存器为处理器本身提供了一定的存储能力,它们的速度比主存储器快得多,但是因为造价很高,存储容量一般都很小处理器一般包括两类寄存器:用户可见寄存器、控制和状态寄存器(如PC、IR、PSW)返回上一页指令执行的基本过程特权指令和非特权指令-特权指令:在指令系统中那些只能由操作系统使用的指令-非特权指令:允许一般的用户使用的指令处理器的状态-管态(特权态、特态、系统态):指操作系统管理程序运行的状态。可以执行全部指令,使用所有资源,具有改变处理机状态的能力
-目态(普通态、普态、用户态):指用户程序运行时的状态。只能执行非特权指令有些系统分为核心状态、管理状态和用户程序状态返回上一页程序状态字PSW
用来指示处理器状态,通常包括以下状态代码:-CPU的工作状态代码-条件码-中断屏蔽码存储系统存储器的类型-读写型存储器(随机访问存储器RAM)-只读型存储器(只读存储器ROM)存储器的层次结构计算机存储系统的设计主要考虑三个问题:容量、速度和成本提高存储系统效能的关键点就在于程序的存储访问局部性原理
返回上一页
存储分块为了简化对存储器的分配和管理,在不少计算机系统中把存储器分成块。在为用户分配主存空间时,以块为最小单位存储保护常用的存储保护机构:界地址寄存器(界限寄存器)、存储键缓冲技术
引入原因:为了解决部件之间速度不匹配的问题类型:单缓冲、双缓冲、多缓冲(Cache)中断技术中断的概念什么是中断-所谓中断是指CPU对系统中或系统外发生的异步事件的响应;引起中断的那些事件称为中断事件或中断源;中断源向处理器发出的请求信号称为中断请求;而把处理中断事件的那段程序称为中断处理程序返回上一页
-中断的作用:能充分发挥处理器的使用效率、提高系统的实时能力-典型的中断:程序中断、时钟中断、I/O中断、硬件失效中断中断的分类-依据中断的功能:可屏蔽中断(I/O中断)、不可屏蔽中断(机器内部故障、掉电中断)、程序错误中断(溢出、除法错等中断)、软件中断(Trap指令或中断指令INT)-依据被激发的手段:强迫性中断、自愿性中断-依据中断事件发生和处理是否是异步:异步中断(中断)、同步中断(异常)-依据中断源的类型:硬件中断、软件中断中断系统中断系统组成部分-中断系统的硬件中断装置-软件中断处理程序
返回上一页
中断装置一般要提供的基本功能-提供识别中断源的方法-提供查询中断状态的方法-提供中断现场保护的能力-提供中断处理程序寻址能力-具有预定义的系统控制栈和中断处理程序入口地址映射表等数据结构和它们在主存中的位置中断逻辑与中断寄存器
-中断寄存器:有的大型计算机中为了区分和不丢失每个中断信号,通常对应每个中断源都分别用一个固定的触发器来寄存中断信号,这些触发器的全体称为中断寄存器-中断扫描机构:处理器的控制部件中能检测中断的机构多级中断和中断屏蔽-中断优先级:高优先级屏蔽低优先级-同一中断级中有多个中断请求时,可采用固定的优先数和轮转法来处理返回上一页
中断响应-CPU何时响应中断:通常在指令周期最后时刻接受中断请求,或是在此时扫描中断寄存器-如何知道提出中断请求的设备或中断源:一是用软件指令去查询各设备接口;二是使用“向量中断”硬件设施中断处理中断处理的一般过程-设备给处理器发了一个中断信号-处理器处理完当前指今后响应中断-处理器处理完当前指令后检测到中断,判断出中断来源并向发送中断的设备发送了确认中断信号,确认信号使得该设备将中断信号恢复到一般状态。-处理器开始为软件处理中断做准备-处理器根据中断源查询中断向量表,获得与该中断相联系的处理程序入口地址,并将PC置成该地址,处理器开始一个新的指令周期,结果是控制转移到中断处理程序
返回上一页
-中断处理程序开始工作-中断处理结束时,处理器检测到中断返回指令,被中断程序的上下文环境从系统堆栈中被恢复,处理器状态恢复成原来的状态-PSW和PC被恢复成中断前的值,处理器开始一个新的指令周期,中断处理结束
多个中断处理问题-正当处理一个中断时禁止中断,此时系统将对任何新发生的中断置之不理-中断按照优先度分级,允许优先级较高的中断打断优先级较低的中断处理过程几种典型中断的处理
I/O中断、时钟中断、硬件故障中断、程序性中断、系统服务请求(自愿性中断)
返回上一页I/O控制
程序控制、中断驱动、直接存储器存取(DMA)、通道时钟时钟的工作-在多道程序运行的环境中,它可以为系统发现一个陷入死循环(编程错误)的作业,从而防止机时的浪费-在分时系统中,用间隔时钟来实现作业间按时间片轮转-在实时系统中,按要求的时间间隔输出正确的时间信号给一个实时的控制设备-定时唤醒那些要求延迟执行的各个外部事件-记录用户使用各种设备的时间和记录某外部事件发生的时间间隔-记录用户和系统所需要的绝对时间,即年、月、日绝对时钟和间隔时钟(相对时钟)-绝对时钟:记录当时的时间(年、月、日、时、分、秒)
-间隔时钟:又叫做相对时钟返回上一页第2章作业管理和用户接口2.1概述2.2批处理作业的管理2.3交互式作业的管理2.4系统调用返回上一页2.1概述
作业的基本概念概念-作业通常是指用户在一次计算过程中或者一次事物处理过程中要求计算机系统所作的工作的集合-任何一个作业都要经过若干加工步骤才能得到结果,作业的每一个加工步骤称为一个作业步-一次有一批作业进入系统,并在操作系统控制下,一个接一个地进行处理,称之为作业流-作业的两种基本类型:批处理作业、交互式作业作用管理的基本功能-作业调度-作业控制(脱机方式、联机作方式)
返回上一页
操作系统与用户接口命令接口用户通过输入设备(终端、键盘、鼠标、触模屏等操作)发出一系列命令告诉操作系统执行所需功能-脱机命令接口为批处理作业的用户提供-交互式命令接口用于交互式作业控制程序接口程序接口通常由若干系统调用组成返回上一页2.2批处理作业的管理
作业控制语言和作业控制说明书作业控制语言作业控制语言是对用户作业的进行组织和管理的各种控制命令的集合作业控制语言提供的主要功能-作业的提交;-控制作业和作业步的执行;-各种软硬件资源的使用;-其它各种功能,如日历、时间、帐号等作业控制语言的种类-相当于汇编语言(如IBM360/370操作系统的JCL)-类似于高级语言(如1900系列机的Ctorge语言)返回上一页
作业说明书作业控制说明书是用户用于描述批处理作业处理过程控制意图的一种特殊程序作业控制说明书主要包括内容
作业的基本描述、作业控制描述和资源要求描述
JCL语句中四个基本语句作业控制语言JCL用“//”标志一项新的作业或作业步-JOB语句(每个作业的第一个语句)格式://作业名JOB登记信息,程序员名,关键字参数-EXEC语句(标志作业步)格式://步名EXECPGM=程序名,关键字参数-DD语句(数据定义语句)格式://DD名DD位置参数/关键字参数-分隔语句(分隔语句用字符“/*”表示)
返回上一页
例,一个需要编译和编辑连接的作业,它的源程序和数据都在穿孔卡片上,编译和编辑连接的结果均需在行式打印机上输出,且编译结果需要保存。编辑连接结果需从卡片穿孔机输出,那么这个作业的程序、数据和作业控制语句可如此组织
作业的组成程序、数据和作业控制说明书作业控制块和作业表作业控制块是批处理作业存在的标志,其中保存了系统对于作业进行管理所需要的全部信息,它们被保存于磁盘区域中作业控制块中包括的内容-作业本身的内容,如作业的名字、程序作者名字、创建时间等-为实现作业调度所而的信息,如作业本身的优先数、现在所处的状态处理机的时间等-作业使用的资源要求,如作业所需主存的大小、打印机、磁带机等-系统指示单元,如该作业所在辅存中的起址和长度等信息
返回上一页
作业表每个作业有一个作业控制块,所有作业的作业控制块构成一个表,称为作业表作业表存放在外存固定区域中,其长度是固定的,这就限制了系统所能同时容纳的作业数量作业的建立一个作业的建立过程包括两个子过程:—个是JCB的建立,一个是作业的输入作业控制块的建立建立作业的作业控制块就是申请分得和填写一张空白的JCB表的过程作用的输入常用的作业的输入方式有三种:-脱机输入方式-SPOOLING系统的输入方式-直接耦合方式返回上一页
批处理作业的调度
-作业调度:操作系统根据允许并行工作的道数和一定的算法从等待的作业(后备作业)中选取若干作业装入主存储器,使它们可以去获得处理器运行-作业调度程序:完成作业调度工作的程序作业调度的基本概念选取调度算法应考虑的主要因素公平性、均衡使用资源、吞吐率、平衡系统和用户要求作业调度性能衡量的指标
CPU利用率、吞吐量、周转时间、平均周转时间、带权周转时间作业调度算法先来先服务算法算法:按照作业进入系统的先后次序来挑选作业,先进入系统的作业优先被挑选
返回上一页
优点:算法容易实现缺点:效率不高、不利于短作业最短作业优先算法算法:总是选取计算时间最短的作业投入运行优点:算法容易实现,缩短了平均周转时间,提高了系统的吞吐能力缺点:忽视了作业等待时间,计算时间靠用户估计响应比最高者优先算法算法:响应比=等待时间/计算时间,作业调度时总是选取响应比高的作业投入运行优点:既照顾了短作业,考虑了系统的吞吐量,又考虑了不使长作业长时间等待缺点:响应比所用计算时间仍是用户的估计时间优先数调度算法
算法:每次总是选择优先数高的作业
返回上一页
优先数的确定:一种是用户自己提出;一种是由系统综合考虑有关因素来确定分类调度算法算法:根据系统运行情况和作业属性将作业分类,作业调度时轮流从这些不同的作业类中挑选作业目标:力求均衡地利用各种系统资源,发挥资源的使用效率,又力求使用户满意作业调度与处理器调度的关系进入计算机系统的作业只有经过两级调度后才能占用处理器。第一级是作业调度,使作业进入主存储器;第二级是处理器调度,使作业进程占用处理器返回上一页作业的执行一个批处理作业被作业调度选中后,操作系统按用户提交的作业控制说明书控制作业的执行,一个作业往往要分几个作业步执行
返回上一页
作业的终止与撤销作业的终止
正常终止、非正常终止撤销作业的过程-报告用户作业是正常终止还是非正常终止-回收发给该进程的资源,包括外设、内存空间,进程运行时打开的文件等-释放该作业JCB
-将此作业注销作业的状态-提交状态作业还未进入算机系统内之前,用户正在向系统提交作业时所处的状态-后备状态作业的提交完成后,作业便处于后备状态-运行状态作业被选中,分配资源,调入内存,创建进程
-完成状态当作业运行结束或异常终止时,作业进入完成状态返回上一页2.3交互式作业的管理
交互式控制方式就是用户使用操作系统提供的联机命令接口来表达作业执行的控制意图;采用交互式控制方式的作业,为交互式作业;交互式作业的特性主要表现在交互性上联机命令操作控制命令一般格式为:命令名参数,参数,…,参数操作控制命令类型有:系统访问命令,文件、目录管理命令,编辑修改命令,编译、连接和执行命令,询问命令,操作员专用命令菜单方式由程序显示出自身能完成的各种功能的名称及其含义,然后用户根据需要指出希望完成的功能名,程序再分析用户的输入并调用不同的功能模块进行处理
返回上一页
优点:菜单技术为用户提供了方便,用户可以不必事先记熟各种命令视窗方式视窗用户接口采用了图形化的操作界面,用非常容易识别的各种图标来将系统的各项功能、各种应用程序和文件直观地表示出来,用户可通过鼠标、菜单和对话框来完成对应用程序和文件的操作命令的接收和解释执行
交互式系统主要包括:一组联机命令,终端处理程序,命令解释程序终端处理程序配置在终端上的终端处理程序主要用于实现人机交互,具有以下功能:-接收用户从终端上输入的字符-字符缓冲管理-回送显示返回上一页
-屏幕编辑-特殊字符处理命令解释程序
-主要功能:对用户输入的命令进行解释,并转入相应的命令处理程序去执行-对命令的处理方法:由命令解释程序直接处理或由子进程代为处理终端作业的管理在多用户的操作系统中,终端用户控制终端作业的执行大致有四个阶段:-终端的连接-用户注册-控制作业执行-用户退出返回上一页2.4系统调用
程序接口通常由各种各样的系统调用所组成处理机状态
中央处理器的工作状态:-管态(核心态、系统态):可以执行包括特权指令在内的一切机器指令-目态(用户态):执行非特权指令系统调用的概念系统调用是操作系统提供给编程人员的唯一接口系统调用分类文件操作类、进程控制类、资源申请类、进程通信类、信息维护类返回上一页
系统调用与一般过程调用的区别-系统调用通过非特权指令——访管指令调用-系统调用与一般过程调用的区别:
通道软中断进入
一般的过程调用可直接由调用过程转向被调用过程;系统调用通常都是通过软中断机制转向相应的命令处理程序
运行在不同的处理器状态一般的过程调用,其调用程序和被调用程序都运行在相同的处理器状态;系统调用调用程序运行在目态,而被调用程序则运行在管态
处理器状态的转换一般的过程调用不涉及系统状态的转换;系统调用需要系统状态转换
返回问题一般的过程调用在被调用过程执行完后,将返回到调用过程继续执行;系统调用不一定返回原调用过程
返回上一页
嵌套调用
像一般过程一样,系统调用也允许嵌套调用,但对嵌套调用的深度都有一定的限制系统调用的处理过程基本概念
-在系统中为控制系统调用服务的机构称为陷入或异常处理机构-由于系统调用引起处理机中断的指令称为陷入或异常指令(或称访管指令)
-每个系统调用都对应一个事先给定的功能号-为了实现系统调用,系统设计人员还必须为实现各种系统调用功能的子程序编写入口地址表,每个入口地址都与相应的系统程序名对应起来
系统调用的执行过程大体上分成以下三步-设置系统调用号和参数-系统调用命令的一般性处理-系统调用命令处理程序做具体处理返回上一页第3章进程管理3.1进程的引入3.2进程3.3进程间的相互作用3.4进程通信3.5进程调度(CPU调度)3.6死锁3.7线程的基本概念3.8Linux的进程管理返回上一页3.1进程的引入
程序顺序执行
前趋图前趋图是一个有向无环图。图中的每个结点可用于表示一条语句、一个程序段或进程;结点间的有向边则表示在两结点之间存在的偏序或前趋关系顺序执行定义程序在执行时,必须按照某种先后次序逐个执行,仅当前一操作执行完后,才能执行后继操作
返回上一页
程序顺序执行的特征-顺序性处理机的操作严格按程序规定的顺序执行,即只有前一操作结束后才能执行后继操作-封闭性
程序一旦开始运行,其执行结果不受外界因素的影响-结果的确定性
程序执行的结果与它的执行速度、时间无关-结果的可再现性程序执行时的环境和初始条件相同,当程序多次重复执行时,都将获得相同的结果程序并发执行定义使一个程序分成若干个可同时执行的程序段的方法成为并发程序设计,能够并发执行的程序成为并发程序返回上一页
程序并发执行特征
-间断性
程序执行的相互制约将导致并发程序具有“执行—暂停执行—执行”这种间断性的活动规律-失去封闭性
因多个程序共享系统中的资源,所以某程序在执行时必然会受到其他程序的影响-结果的不可再现性由于失去了封闭性,也将导致失去其可再现性-资源共享系统中的硬件资源和软件资源不再被单个用户或程序独占,而为多个用户或作业共同使用-程序和计算不再一一对应程序和计算是两个不同的概念,在程序并发执行中一个共享程序可对应多个“计算”,程序与“计算”已不再一一对应
返回上一页
多道程序设计定义让多个程序同时进入计算机计算的方法称为多道程序设计目的提高处理器的效率,从而提高整个系统的效率必须解决的问题-存储保护与程序浮动-处理器的管理和调度-系统资源的管理和调度返回上一页3.2进程
引入进程的原因为了使程序在多道程序环境下能够并发执行,并对并发执行的程序加以控制和描述,引入进程的概念
程序段、数据段及进程控制块三部分构成了一个进程的实体
进程的概念进程的定义进程是具有独立功能的可并发执行的程序在一个数据集合上的运行过程,是系统进行资源分配和调度的独立单位”。或者说,“进程”是进程实体的运行过程。程序与进程的区别与联系-进程是程序的一次执行,是一个动态的概念,程序是完成某个特定功能的指令的有序序列,是一个静态的概念
返回上一页
一个进程可以执行一个或几个程序,同一程序也可能由多个进程同时执行-进程是系统进行资源分配和调度的一个独立单位,程序则不是-程序可以作为一种软件资源长期保存,而进程是程序的一次执行过程,它是临时的,有生命期的-进程是具有结构的进程的特征动态性、并发性、独立性、异步性、结构特征进程的基本状态及其转换进程的三种基本状态就绪状态当进程已分配到除CPU以外的所有必要的资源后,只要能再获得处理机便可立即执行,这时的状态称为就绪状态
返回上一页
执行状态指进程已获得处理机,其程序正在执行
阻塞状态
进程因发生某种事件(如I/O请求、申请缓冲空间等)而暂停执行时的状态进程状态的转换-就绪→执行状态处于就绪状态的进程,当进程调度为之分配了处理机后-执行→阻塞状态正在执行的进程因发生某种事件而无法执行-执行→就绪状态
正在执行的进程如因时间片用完或一个优先权高的进程到来而被暂停执行-阻塞→就绪状态
处于阻塞状态的进程,其等待的事件已经发生
返回上一页
进程的挂起状态挂起状态的引入-终端用户的需要-父进程的需要-操作系统的需要-对换的需要-负荷调节的需要进程状态的转换在引入挂起状态后,又将增加从挂起状态(又称静止状态)到非挂起状态(又称活动状态)的转换
-活动就绪→静止就绪-活动阻塞→静止阻塞-静止就绪→活动就绪-静止阻塞→活动阻塞
返回上一页
进程控制块PCB
进程控制块的作用-进程控制块的作用是使一个在多道程序环境下不能独立运行的程序(含数据)成为一个能独立运行的基本单位,一个能与其它进程并发执行的进程-操作系统是根据进程控制块PCB来对并发执行的进程进行控制和管理的-PCB是进程存在的唯一标志进程控制块中的信息-进程标识符信息进程标识符用于唯一地标识一个进程,通常有外部标识符和内部标识符-处理机状态信息处理机状态信息主要是由处理机各种寄存器中的内容所组成
返回上一页
-进程调度信息存放了一些与进程调度和进程对换有关的信息-进程控制信息
PCB的组织方式链接方式、索引方式进程控制进程控制的主要任务是创建和撤消进程以及实现进程的状态转换操作系统内核定义通常,将一些与硬件紧密相关的模块诸如中断处理程序、各种常用设备的驱动程序以及运行频率较高的模块(诸如时钟管理、进程调度以及许多模块公用的一些基本操作)都安排在紧靠硬件的软件层次中并使它们常驻内存,以便提高操作系统的运行效率,并对它们加以特殊的保护,把这一部分称为操作系统的内核
返回上一页
操作系统内核的功能
中断处理、进程管理、资源管理中的基本操作
原子操作
所谓原子操作是指:一个操作中的所有动作,要么全做,要么全不做。换言之,原子操作是一个不可分割的操作进程的创建进程图-进程图是用于描述进程家族关系的有向树
-子进程可以继承父进程所拥有的资源,当子进程撤销时,应将从父进程那里获得的资源归还给父进程;在撤销父进程时,也必须同时撤销其所有的子进程引起创建进程的事件用户登录、作业调度、提供服务、应用请求进程的创建过程调用进程创建原语create()创建进程
返回上一页
-申请空白PCB
-为新进程分配资源-初始化进程控制块-将新进程插入就绪队列进程的终止
引起进程终止的事件正常结束、异常结束、外界干预进程的终止过程调用进程终止原语destroy()终止进程-根据被终止进程的标识符从PCB集合中检索出该进程的PCB,从中读出该进程的状态-若被终止进程正处于执行状态,应立即终止该进程的执行并设置调度标志为真-若该进程还有子孙进程,还应将其所有子孙进程予以终止-将该进程所拥有的全部资源,或者归还其父进程或者归还给系统
返回上一页
-将被终止进程的PCB从所在队列中移出,等待其他程序来搜集信息进程的阻塞与唤醒引起进程阻塞和唤醒的事件请求系统服务、启动某种操作、新数据尚未到达、无新工作可作进程阻塞过程进程便通过调用阻塞原语block()把自己阻塞-立即停止当前进程的执行-把进程控制块中的现行状态由“执行”改为“阻塞”,并把它插入到阻塞队列-调度程序进行重新调度,保留被阻塞进程的处理机状态(在PCB中),再按新进程的PCB中的处理机状态设置CPU环境进程唤醒过程调用唤醒原语wakeup()将等待该事件的进程唤醒
返回上一页
-把被阻塞进程从等待该事件的阻塞队列中移出-将其PCB中的现行状态由“阻塞”改为“就绪”-然后再将该进程插入到就绪队列中进程的挂起与激活进程的挂起过程当出现了引起进程挂起的事件时,系统就利用挂起原语suspend()将指定进程或处于阻塞状态的进程挂起
-检查被挂起进程的状态,若正处于活动就绪状态,便将其改为静止就绪;对于活动阻塞状态的进程,则将其改为静止阻塞-如被挂起的进程正在执行,则转调度程序重新调度进程的激活过程当发生激活进程的事件时系统将利用激活原语active()将指定进程激活
返回上一页
-将进程从外存调入内存,检查该进程的现行状态:若是静止就绪,便将其改为活动就绪;若为静止阻塞,便将其改为活动阻塞-假如采用的是抢占调度策略,检查是否要进行重新调度
返回上一页3.3进程间的相互作用
进程间的联系-资源共享关系-相互合作关系临界资源是一种多个进程共享的资源。其属性是:共享临界资源的进程必须互斥得访问它,也就是说,同一时刻只允许一个进程访问的共享资源叫临界资源临界区
不论是硬件临界资源,还是软件临界资源,多个进程必须互斥地对它进行访问。我们把在每个进程中访问临界资源的那段代码称为临界区(criticalsection)
返回上一页
同步机制应遵循的准则空闲让进、忙则等待、有限等待、让权等待利用软件方法解决进程互斥问题算法1
设置一个公用整型变量turn,用于指示被允许进入临界区的进程的编号算法描述如下:
while(1){
…while(turn!=1)no-op;criticalsectionturn=2;
…}
返回上一页算法不能保证实现“空闲让进”的准则
算法2
设置一个数组,使其中每个元素的初值为0,表示所有进程都未进入临界区,在每一个进程访问临界资源之前,先去查看一下临界资源是否正被访问。若正被访问,该进程需等待;否则进入自己的临界区
算法描述如下:intflag[2]={0,0};
…P1:
while(1){
…while(flag[1])no-op;flag[0]=1;criticalsectionflag[0]=0;
…}
返回上一页违背了“忙则等待”的准则
算法3
使要进入临界区的进程先设置其要求进入的标志,然后,再去查看其他进程的标志算法描述如下:
intflag[2]={0,0};
…P1:
while(1){
…flag[0]=1;while(flag[1])no-op;criticalsectionflag[0]=0;
…}
返回上一页违背了“空闲让进”和“有限等待”准则
算法4(正确算法)为每个进程设置了相应的标志为flag[];还设置了一个turn变量,用于指示允许进入临界区的进程编号算法描述如下:
intflag[2]={0,0};
…P1:
while(1){
…flag[0]=1;turn=2;
while(flag[1]&&turn==2)no-op;criticalsectionflag[0]=0;
…}
保证了“忙则等待”,又实现了“空闲让进”
返回上一页
利用硬件方法解决进程互斥问题
利用Test-and-Set指令实现互斥
Test-and-Set指令为:
intTS(staticintlock){
intTS=lock;lock=1;return(TS);}
用TS指令实现进程互斥的循环描述为:
while(1){
…while(!TS(lock))dono-op;criticalsectionlock=0;
…}
返回上一页利用Swap指令实现进程互斥
Swap指令称为交换指令,描述为:
voidSwap(staticinta,b){
inttemp;temp=a;a=b;b=temp;}
利用Swap指令实现进程互斥的循环可描述为:
while(1){
…key=1;do{Swap(lock,key);}while(key);criticalsectionlock=0;
…}
返回上一页
信号量机制信号量机制是一种卓有成效的进程同步工具整型信号量机制把整型信号量定义为一个整型量,除初始化外,仅能通过两个标准的原子操作wait(s)和signal(s)来访问
wait操作
wait(s):while(s≤0)no-op;s--;
signal操作
signal(s):s++;
实现为使多个进程能互斥地访问某临界资源,只需为该资源设置一互斥信号量mutex,并设其初始置为1,然后将各进程的临界区CS置于wait(mutex)和signal(mutex)操作之间即可返回上一页
利用信号量实现进程互斥的过程描述
过程描述注意事项
wait(mutex)和signal(mutex)必须成对地出现利用信号量来描述程序或语句之间的前趋关系-方法:一条边一个信号量(信号量初值为0);wait以该节点为终点所有边的信号量,执行该节点,signal以该节点为始点所有边的信号量-例:有6个语句的前驱图可并发执行的算法描述记录型信号量机制在信号量机制中,除了需要一个用于代表资源数目的整型变量value外,还应增加一个进程链表L,用于链接上述的所有等待进程
返回上一页
记录型数据结构描述typedef
struct{
intvalue;listofprocess*L;}semaphore;wait操作voidwait(staticsemaphores){s.value--;if(s.value<0)block(s.L);}
singal操作
voidsignal(staticsemaphores){s.value++;if(s.value≤0)wackup(s.L);}返回上一页
信号量集机制
AND型信号量集机制对若干个临界资源的分配采取原子操作方式,要么全部分配到进程,要么一个也不分配-Swait(SimultaneousWait)操作
Swait(S1,S2,…,Sn){if(S1≥1&&…&&Sn≥1)for(i=1;i<=n;i++)
Si--;elsePlacetheprocessinthewaitingqueueassociated withtheSifoundwithSi<1,andsettheprogram countofthisprocesstothebeginningofSwait operation.}
返回上一页
-Ssignal操作
Ssignal(S1,S2,…,Sn){for(i=1;i<=n;i++)
Si++;RemovealltheprocesswaitinginthequeueassociatedwithSiintothereadyqueue.}
一般“信号量集”机制
一次分配多个某种资源,且当该资源数量少于一定值时,不予分配。因此,在每次分配之前都必须测试该资源的数量是否大于测试值t
-Swait操作
Swait(S1,t1,d1,S2,t2,d2,…,Sn,tn,dn){if(S1≥t1&&…&&Sn≥tn)for(i=1;i<=n;i++)
Si=Si-di;
返回上一页elsePlacetheprocessinthewaitingqueueassociatedwiththeSifoundwithSi<ti,andsettheprogramcountofthisprocesstothebeginningofSwaitoperation.}
-Ssignal操作Ssignal(S1,t1,d1,S2,t2,d2,…,Sn,tn,dn){for(i=1;i<=n;i++){
Si=Si+di;RemovealltheprocesswaitinginthequeueassociatedwithSiintothereadyqueue.}}一般“信号量集”的几种特殊情况
Swait(s,d,d)、Swait(s,1,1)、Swait(s,1,0)
返回上一页
经典进程同步问题生产者-消费者问题有一群生产者进程在生产产品,并将此产品提供给消费者进程去消费。为使生产者进程和消费者进程能并发执行,在它们之间设置一个具有n个缓冲区的缓冲池,生产者进程可将它所生产的产品放入一个缓冲区中,消费者进程可从一个缓冲区取得一个产品消费。尽管所有的生产者进程和消费者进程都是以异步方式运行的,但它们之间必须保持同步,即不允许消费者进程到一个空缓冲区去取产品,也不允许生产者进程向一个已装有消息且尚未被取走产品的缓冲区中投放产品
利用记录型信号量解决生产者-消费者问题
算法描述利用AND信号量解决生产者-消费者问题
算法描述返回上一页
读者-写者问题一个数据文件或记录(统称数据对象),可被多个进程共享。其中,有些进程要求读,而另一些进程对数据对象进行写或修改。我们把只要求读的进程称为“reader进程”,其他进程称为“writer进程”。允许多个reader进程同时读一个共享对象,但决不允许一个writer进程和其他reader进程或writer进程同时访问共享对象所谓读者-写者问题(TheReader-WriterProblem)是只保证一个writer进程必须与其他进程互斥地访问共享对象的同步问题利用记录型信号量解决读者-写者问题
算法描述利用信号量集机制解决读者-写者问题这里的读者-写者问题与前面的略有不同,它增加了一条限制,即最多只允许RN个读者同时读。为此,又引入一个信号量L并赋予其初值为RN,通过执行wait(L,1,1)操作来控制读者的数目
算法描述
返回上一页
哲学家进餐问题有五个哲学家,他们的生活方式是交替地进行思考和进餐。哲学家们共用一张圆桌,分别坐在周围的五张椅子上。在圆桌上有五个碗和五支筷子,平时一个哲学家进行思考,饥饿时便试图取用其左、右最靠近他的筷子,只有在他拿到两支筷子时才能进餐。进餐毕,放下筷子继续思考利用记录型信号量解决哲学家进餐问题
算法描述-解决办法:①至多只允许四个哲学家同时进餐,以保证至少有一个哲学家能够进餐,最终总会释放出他所使用过的两支筷子,从而可使更多的哲学家进餐。②仅当哲学家的左、右两支筷子均可用时才允许他拿起筷子进餐。③规定奇数号哲学家先拿他左边的筷子,然后再去拿他右边的筷子;而偶数号哲学家则相反。按此规定,将是1、2号哲学家竞争1号筷子;3、4号哲学家竞争3号筷子。即五个哲学家都先竞争奇数号筷子,获得后,再去竞争偶数号筷子,最后总会有一个哲学家能获得两支筷子而进餐返回上一页
利用AND信号量机制解决哲学家进餐问题算法描述管程机制管程的引入为了解决信号量大量的同步操作分散,不利于管理;而且还会因同步操作的使用不当而导致系统死锁,所以引入一种新的同步工具——管程信号量操作错误错误1:将wait(s)与signal(s)颠倒
signal(mutex);criticalsectionwait(mutex);
错误2:将程序中的signal(mutex)误写为wait(mutex)
wait(mutex);criticalsectionwait(mutex);
返回上一页对局部于管程的数据设置初值的语句
错误3:在程序中遗漏了wait(mutex)操作,将会使多个进程同时活跃在临界区;而如果遗漏了signal(mutex)操作,则将会使其他进程无法在进入临界区管程的基本概念管程的定义一个管程定义了一个数据结构和能为并发进程所执行(在该数据结构上)的一组操作,这组操作能同步进程和改变管程中的数据管程的组成由定义可知,管程由三部分组成-局部于管程的共享变量说明-对该数据结构进行操作的一组过程-对局部于管程的数据设置初值的语句管程的语法
语法描述返回上一页
条件变量(condition)通常,进程等待的原因可有多个,为了区别它们,引入了条件变量。仅仅表示某个资源,不表示资源数量和资源使用情况原语wait和signal
-wait原语修改为单纯将调用该原语的进程阻塞在对应条件变量上-signal原语修改为单纯唤醒等待在该条件变量上的某个进程,若无进程等待为空操作-格式:conditionx,y;x.waitx.signal
管程可以并发,但是只能由一个进程在相关的管程内处于非阻塞状态,在管程中P进程唤醒Q进程后,有两种处理方法:-P等待,直至Q离开管程或等待另一条件-Q等待,直至P离开管程或等待另一条件返回上一页
利用管程解决生产者-消费者问题-利用管程方法来解决生产者-消费者问题,首先为它们建立一个管程,并命名为Producer-Consumer
Producer-Consumer管程描述-管程建立后,其中的生产者和消费者可描述为:
算法描述利用管程解决哲学家进餐问题
解决哲学家进餐问题的管程描述如下:
dining-philosophers管程描述管程与进程的不同点设置进程和管程的目的不同
从系统管理数据结构角度:管理进程用PCB,管理管程用等待队列;管程是被进程调用的:管程是操作系统的固有成分,无创建和撤消管程是进程同步方面的重要进展使进程本身不存在直接共享问题返回上一页3.4进程通信
基本概念
-进程通信是指进程之间的信息交换-进程的互斥和同步可归结为低级通信-高级进程通信是指用户可直接利用操作系统所提供的一组通信命令高效地传送大量数据的一种通信方式进程通信的类型共享存储器系统在共享存储器系统中,相互通信的进程共享某些数据结构或共享存储区,进程之间能够通过它们进行通信-基于共享数据结构的通信方式-基于共享存储区的通信方式返回上一页
消息传递系统
进程间的数据交换以消息为单位,程序员直接利用系统提供的一组通信命令(原语)来实现通信-直接通信方式-间接通信方式(信箱通信方式)管道通信-所谓管道是指用于连接一个读进程和一个写进程以实现它们之间通信的共享文件,又称为pipe文件。-为了协调双方的通信,管道通信机制必须提供以下三方面的协调能力:互斥、同步、双方是否存在直接通信和间接通信直接通信方式-直接通信方式是指发送进程利用操作系统所提供的发送命令直接把消息发送给目标进程。系统提供下述两条通信原语:
send(receiver,message);
receive(sender,message);返回上一页
-利用直接进程通信原语来解决生产者-消费者问题
算法描述间接通信方式-所谓间接通信方式,是指进程之间的通信需要通过作为某种共享数据结构的实体,该实体用来暂存发送进程发送给目标进程的消息;接收进程则从该实体中取出对方发送给自己的消息。通常把这种中间实体称为信箱
-信箱可由操作系统创建,也可由用户进程创建。可把信箱分为以下三类:私有信箱、共有信箱、共享信箱-在利用信箱通信时,在发送进程和接收进程之间存在着下述四种关系:一对一关系、多对一关系、一对多关系、多对多关系消息缓冲队列通信机制
在这种通信机制中,发送进程利用send原语将消息直接发送给接收进程;接收进程则利用receive原语接收消息
返回上一页
消息缓冲队列通信机制中的数据结构消息缓冲区
消息缓冲区数据结构描述为:
structmessage_buffer{sender;//发送者进程标识符
size;
//消息长度
text;
//消息正文
next;
//指向下一个消息缓冲区的指针
};
PCB中有关通信的数据项在PCB中应增加的数据项可描述为:
structprocesscontrol_block{
…mq;
//消息队列队首指针
mutex;//消息队列互斥信号量
sm;
//消息队列资源信号量
…};
返回上一页
发送原语voidsend(receiver,a){getbuf(a.size,i);//根据a.size申请缓冲区
i.sender=a.sender;//将发送区a中的信息复制到消息缓冲区i中
i.size=a.size;i.text=atext;i.next=0;
getid(PCBset,receiver,j);//获得接收进程内部标识符jwait(j.mutex);insert(j.mq,i);//将消息缓冲区插入消息队列
signal(j.mutex);signal(j.sm);}
返回上一页接收原语voidreceive(b){j=internalname;//j为接收进程的内部标识
wait(j.sm);wait(j.mutex);remove(j.mq,i);//将消息队列中第一个消息移出
signal(j.mutex);b.sender=i.sender;//把消息缓冲区i中的信息复制到接收区bb.size=i.size;b.next=i.next;}返回上一页3.5进程调度(CPU调度)
调度的基本概念高级、中级和低级调度一个作业从提交开始直到完成,往往要经历三级调度高级调度高级调度又称为作业调度,它决定将哪些在外存上处于后备状态的作业调入主机内存,准备执行低级调度低级调度又称为进程调度。它决定就绪队列中哪个进程将获得处理机,并实际执行将处理机分配给该进程的操作中级调度在有的系统中,可能增加一中级调度,主要作用是在内存和外存对换区之间进行进程对换,以解决内存紧张问题
返回上一页
进程调度的功能进程调度就是系统按照某种算法把CPU动态地分配给某一就绪进程。进程调度工作是通过进程调度程序来完成的进程调度程序的主要功能-记录系统中各进程的执行状况-选择进程占有CPU
-进行进程上下文的切换调度方式非剥夺方式该方式规定,分派程序一旦把处理机分配给某进程后便让它一直运行下去,直到进程完成或发生某事件(如提出I/O请求)而阻塞时才把处理机分配给另一进程-优点:简单,系统开销小,貌似公正-缺点:可能导致系统性能的恶化
返回上一页
剥夺方式该方式规定,当一个进程正在运行时,系统可以基于某种原则,剥夺已分配给它的处理机,将之分配给其它进程-剥夺原则:优先权原则、短进程优先原则、时间片原则进程调度算法先进先出(FIFO)算法-算法:把处理机分配给最先进入就绪队列的进程-优点:易于实现、表面上公平-缺点:服务质量不佳、对短进程不利最短CPU运行期优先调度算法-算法:从就绪队列中选出“下一个CPU执行期”最短的进程,为之分配处理机使之执行-优点:可获得较好的调度性能-缺点:进程的CPU执行期难以准确得到、对长进程不利返回上一页
优先级调度算法-算法:将CPU分配给就绪队列中优先级最高的进程优先级-静态优先级再进程创建时确立,确定后运行期间保持不变。确立依据有:进程的类型、进程对资源的需求、用户申请的优先级优点:简单缺点:不能动态反映进程特点,系统调度性能差-动态优先级
进程在开始创建时,根据某种原则确定一个优先级后,随着进程执行时间的变化,其优先级不断地进行动态调整确定依据:根据进程占有的CPU时间的长短来决定,占有时间越长优先级越低;根据进程等待CPU的时间来决定,时间越长优先级越高返回上一页
时间片轮转调度算法-算法:通常用在分时系统,它轮流地调度系统中所有就绪进程,使就绪进程依次获得一个时间片的运行时间时间片长短确定遵循原则既要保证系统各个用户进程及时地得到响应,又不要由于时间片太短而增加调度的开销,降低系统的效率进程依次执行时可能发生的三种情况-进程未用完一个时间片便结束,这时系统应提前进行调度-进程在执行过程中提出I/O请求而阻塞,系统应将它放入相应的阻塞队列并引起调度-进程用完一个时间片后尚未完成。系统应将它重新放到就绪队列的末尾,等待下次执行返回上一页
前后台调度算法-算法:该方法用在批处理和分时相结合的系统中。将分时用户作业放在前台,把批处理作业放在后台。系统对前台作业按照时间片轮转法进行调度,仅当前台无作业时,才把处理机分配给后台作业的进程。后台进程通常按先来先服务方式运行-优点:使分时用户进程得到及时响应,又提高了系统资源的利用率多级反馈队列轮转算法-算法:系统设置多个不同优先级的就绪队列,每次调度总是先调度优先级高的队列,仅当该队列空时,才调度次高优先级队列-优点:能较好地满足各类作业的用户要求,既能使分时用户作业得到满意的响应,又能使批处理用户的作业获得较合理的周转时间返回上一页
进程调度的时机和过程
进程调度的时机-正在执行的进程运行完毕-正在执行的进程调用阻塞原语将自己阻塞起来进入等待状态-正在执行的进程调用了P原语操作,从而因资源不足而被阻塞;或调用了V原语操作激活了等待资源的进程队列-执行中的进程提出I/O请求后被阻塞-在分时系统中时间片已经用完-CPU方式是可剥夺时,就绪队列中的某个进程约优先级变得高于当前运行进程的优先级进程调度的过程-进程调度所依赖的数据结构通常是调度队列,由于调度的原因不同,在单处理器系统中设置了多种等待队列-只有就绪队列中的进程能够获得
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论