计算机操作系统一

                                                                                                                                      计算机操作系统

2.6.版本号:稳定(偶数)

2.1.版本号:开发中的内核

计算机系统把资源管理控制程序执行的功能集中组成一种软件,称为操作系统,是系统软件。

第一章 操作系统引论

影响操作系统的主要目标:计算机系统的规模有关;操作系统的应用环境。

操作系统的目标

1、使计算机系统使用方便

2、可扩充性

3、有效性(提高系统资源利用率;提高系统的吞吐量)。

4、开放性

设置操作系统的作用

1,用户观点:操作系统是裸机与用户的一个界面。用户与计算机硬件系统间的接口。

2,系统观点:操作系统是计算机系统资源的一个“管理员”。

3,实现对计算机资源的抽象。在裸机上铺设的IO软件隐藏了对设备操作的具体细节,向上提供了一组抽象的IO设备。

操作系统的分类,按照操作系统提供的服务,大致可以把操作系统分为:

     单道批处理系统:提高系统资源利用率和系统吞吐量

     多道批处理系统,简称“多道系统”,即多个作业可同时装入主存储器进行运行的系统。多道系统能极大提高计算机系统的效率,表现为:

(1)并行工作,减少了CPU的空闲时间,提高了CPU的利用率。

(2)合理搭配多道使用不同资源的作业,可充分利用计算机系统的资源。

(3)直接在高速的磁盘上存取信息,缩短了作业执行时间,使单位时间内的处理能力得到提高。

(4)作业成批输入、自动选择和控制作业执行减少了人工操作时间和作业交接时间,提高了系统的吞吐率;

优缺点:资源利用率高;系统吞吐量大;平均周转时间长;无交互能力。

     分时系统:在一台主机上连接了多个带有显示器和键盘的终端,同时允许多个用户通过自己的终端,以交互方式使用计算机,共享主机中的资源。

具有多路性、独立性、及时性、交互性。批处理兼分时系统中,由分时系统控制的作业称为“前台”作业,由批处理控制的作业称为“后台”作业。

     实时系统:系统能及时响应外部事件的请求,在规定时间内完成对该事件的处理,并控制所有实时任务协调一致地运行。用于实时控制的系统。在严格时间规定内处理必须结束; 多路性,独立性,及时性,交互性,可靠性。分类:(1)实时控制(2)实时信息处理

     网络系统:可实现资源共享的,为计算机网络配置的操作系统我们使用的windows是网络式系统;

     分布式系统可协调多个计算机以完成一个共同任务的;定义:是一组不共享内存和时钟的处理器的集合,即每个处理器都有它自己的内存,处理器之间的通信可通过各种通信网络加以实现。通过通信网络而松散连接的一组处理器的集合。

发展

MS-DOS单用户单任务

Windows XP:单用户多任务

UNIX:多用户多任务

操作系统的特性

1,  并发性。并行和并发,引入进程(使多个程序能并发执行),引入线程。并行:两个或多个事件在同一时刻发生,并发性:两个或多个事件在同一时间间隔内发生。进程:在系统中能独立运行并作为资源分配的基本单元,由一组机器指令,数据和堆栈等组成的,是一个能独立运行的活动实体。进程是程序执行时的一个实例。进程拥有自己的资源,调度付出的开销较大,引入比进程更小的单位,线程。通常在一个进程中可以包含若干个线程,可以利用进程所拥有的资源。进程作为分配资源的基本单位,线程作为独立运行和独立调度的基本单位。线程比进程更小,基本不拥有系统资源。

2,  共享性:系统中的资源可供内存中多个并发执行的进程(线程)共同使用,或资源复用。互斥共享方式,同时访问方式。互斥式共享:在一段时间内只允许一个进程访问的资源(临界资源或独占资源,如栈,变量和表格)。同时访问的资源:磁盘等。

3,  不确定性???

4,  虚拟技术。虚拟是指通过某种技术把一个物理实体变为若干个逻辑上的对应物。时分复用技术(分时使用方式)(虚拟处理机技术,虚拟设备技术),空分复用技术(虚拟磁盘技术,虚拟存储器技术)。

5,  异步性

并发和共享是操作系统的两个最基本的特征,又是互为存在的条件。资源共享是以程序(进程)的并发执行为条件的,不能并发自然不存在共享;若系统不能对资源共享有效管理,必然影响程序并发执行的程序。

掌握操作系统的基本功能

处理器管理(进程控制,进程同步,进程通信,调度)

存储器管理(内存分配,内存保护,地址映射,内存保护)

文件管理(文件存储空间的管理,目录管理,文件的读写管理和保护)

设备管理(缓冲管理,设备分配,设备处理)

操作系统与用户间的接口(用户接口,程序接口)

软件质量评价指标:功能性、有效性、可靠性,易使用性,可维护性和易移植性。

操作系统结构设计

1,传统操作系统结构(无结构操作系统,模块化结构OS,分层式结构OS)模块化结构OS:衡量模块独立性的标准:内聚性,耦合度(模块间相互联系和影响的程度,越低越好)。缺点:各模块设计齐头并进,无法寻找到一个可靠的决定顺序,造成各种决定的“无序性”,模块-接口法又称为无序模块法。分层式结构:有序分成法,在目标系统中核裸机系统间铺设若干个层次的软件,使软件最终能在裸机系统上运行。自底向上法来铺设中间层。每层又由若干个模块组成,各层间只存在着单向的依赖关系,高层仅依赖于紧邻它的低层。优点是有利于系统设计和调试,保证系统的正确性,易扩充和易维护;主要困难在于层次的划分和安排,主要缺点是系统效率降低了。

2,客户/服务器模式(C/S)(组成,交互,优缺点)组成:客户机,服务器,网络系统。优点:数据的分布处理和存储,便于集中管理,灵活性和可扩充性,易于改编应用软件。缺点:存在着不可靠性和瓶颈问题。系统仅有一个服务器时,一旦服务器故障,网络整个瘫痪。服务器重负荷工作时,会显著延长对用户请求的响应时间。

3,面向对象的程序设计:对象时构成操作系统的基本单元。

4,微内核OS结构:支持多处理机运行,非常适用于分布式系统环境。应用“机制与策略分离”原理。

虚拟机:基本思想是单个计算机的硬件抽象为几个不同的执行部件,从而造成一种“幻觉”,仿佛每个独立的执行幻觉都在自己的计算机上运行一样。虚拟机的主要困难与磁盘系统有关。虚拟磁盘。

第二章 进程管理

程序的特点:

i,顺序执行:顺序性,封闭性,再现性

ii,并发执行:无顺序执行时的特点,受约与其他程序,(多通道)

进程是一个程序在一个数据集上的一次执行。进程通过一个控制块来被系统所指挥,因此进程由程序、数据集和进程控制块PCB三部分组成。是资源分配的基本单位。

进程是程序运行的一个实例

              进程是一个可以和别的运算并发执行的运算

              进程是一个独立的可以调度的活动

              进程是一个程序及其数据在处理机上被执行时所发生的活动过程

              进程是一个程序一次执行的过程

动态性:由创建而产生,由调度而执行,由撤销而消亡。异步性,独立性,并发性

进程是程序实体的运行过程,是系统进行资源分配和调度的一个独立单位。

进程与程序的关系

①     程序是一组有序指令的集合(静态)

              进程是程序在一个数据集合上的一次执行过程(动态)

            ②一个程序可由多个进程同时执行

              一个进程可包含多个程序

②     进程是系统进行资源分配和调度的一个独立单位,而程序则不是

③     序可长期保存

进程控制块是进程存在的唯一标志(PCB中记录了操作系统所需的,用于描述进程的当前情况以及控制进程运行的全部信息,包括进程标识符,处理机状态,进程调度信息,进行控制信息)。作业控制块JCB,线程TCB。进程是要执行的,据这点可将进程的状态分为等待态,就绪态,运行态。有的分为:就绪态,执行态,阻塞态。

进程的 三种基本调度状态

   i,就绪状态:进程已获得除CPU外的所有运行所需要的资源。在一个系统中处于就绪状态的进程可能有多个,通常将它们排成一个队列,就绪队列。

   ii,运行状态:已占用CPU,正在运行 。进程运行了,也就用不上排队了,也就没有运行队列了。系统中负责进程入队和出队的工作称为队列管理。

   iii,阻塞状态:进程因等待某一事件的发生而暂时不能运行,即使CPU空闲,它也无法

运行。

阻塞(等待)和就绪不同:阻塞是等待除CPU以外的资源,就绪是等待CPU。

 

一些系统还有一种状态:挂起态。

进程切换指一个进程进处理器,另一个进程出处理器的过程。若有一个进程从运行态变成等待态,或完成工作后就撤消,则必定会发生进程切换。

创建状态:为一个新进程创建PCB;把该进程转入就绪状态并插入就绪队列之中;

进程同步:主要任务是对多个相关进程在执行次序上进行协调,以使并发执行的诸进程之间能有效地共享资源和相互合作,从而使程序的执行具有可再现性。

“生产者”与“消费者”:互斥信号,AND信号,管程;

哲学家进餐问题:记录型信号,先左后右(先大后小)。

进程通信的含义:通过专门的通信机制实现进程间交换大量信息的通信方式称为“进程通信”

通信方式:直接通信(基本原语:有两条:“send(发送)”和“receive(接收)”原语),间接通信(利用信箱,send(N,M)功能:把信件M送到指定的信箱N中。receive(N,X)功能:从指定信箱N中取出一封信,存放到指定的地址X中)。

信箱的基本结构:一个信箱由“信箱说明”和“信箱体”两部分组成。

方式有:

管道及有名管道:可用于具有亲缘关系进程间的通信,有名管道是有名字的管道,所有还增加了允许无亲缘关系进程间通信。只能承载无格式字节流,缓冲区大小受限;

信号:进程间和进程与自己,信息承载量少;

报文队列: 是消息的链接表,有足够权限的进程可以添加消息,有读权限的进程可以读走消息,客服了信息承载信息量少,管道只能承载无格式字节流和缓冲区大小受限的缺点。

共享内存:多个进程可访问同一块内存,最快的可用IPC形式。往往和其他机制结合,达到进程间的同步和互斥。

信号量:主要作为进程间以及同一进程不同线程间的同步手段。

套接口Socket:可用于不同机器间的进程通信。

线程:进程是一个可拥有资源的独立单位(时空开销大),同时又是一个可独立调度和分派的基本单位。线程是进程中可独立执行的子任务,一个进程中可以有一个或多个线程,每个线程都有一个唯一的标识符。支持线程管理的操作系统有Mach,OS2,WindowsNT,UNIX等。线程是进程中的一个实体。模式:单线程,单元线程(自己空间内,多个线程同时执行),自由线程。

线程同步:方式有

临界区:通过对多线程的串行化来访问公共资源或一段代码,速度快,适合控制数据访问。在任意时刻只允许一个线程对共享资源进行访问。临界区被释放后,其他线程才可以抢占。 
互斥量:为协调共同对一个共享资源的单独访问而设计的。只有拥有互斥对象的线程才有访问公共资源的权限,互斥对象只有一个能保证公共资源不会同时被多个线程访问。互斥不仅能实现同一应用程序的公共资源安全共享,还能实现不同应用程序的公共资源安全共享。 
信号量:为控制一个具有有限数量用户资源而设计。 允许多个线程同一时刻访问同一资源。
事 件:用来通知线程有一些事件已发生,从而启动后继任务的开始。

管程:定义了一个数据结构和在该数据结构上的能为并发进程所执行的一组操作,这组操作能同步进程和改变管程中的数据。

进程线程比较

调度:进程作为资源拥有的基本单位,引入线程后,线程作为调度和分派的基本单位。同一进程中,线程的切换不会引起进程的切换,但从一个进程中的线程切换到另一个进程中的线程时,将会引起进程的切换。

进程间是独立的,在现有内存空间,上下文环境上;线程运行在进程空间内。一般,进程无法突破进程边界存取其它进程内的存储空间;同一进程所产生的线程共享同一内存空间(堆)。线程属于进程,当进程退出时该进程所产生的线程都会被强制退出并清除。同一进程中的两段代码不能同时执行,除非引入线程。进程间可通过IPC通信。

线程自己基本上不拥有系统资源,只拥有一点在运行中必不可少的资源(如程序计数器,一组寄存器和栈等),一个线程可以创建和撤销另一个线程。同一进程的所有线程共享该进程的所有资源。进程的地址空间分过为系统空间和用户空间,系统空间为所有进程共享,用户空间是独立的。系统空间为堆,每个线程有各自独立的栈。用完进程的堆要归还,否则会内存泄露(使用完毕后未回收)。处理机分给线程,即真正在处理机上运行的是线程。

线程有自己的堆栈和局部变量,但线程之间没有单独的地址空间,一个线程死掉就等于整个进程死掉,所以多进程的程序要比多线程的程序健壮,但是在进程切换时,耗费的资源较大,效率要差些。

线程的划分尺度小于进程,使得多线程程序的并发性高。

调度

并发性

拥有资源

系统开销

线程的属性:轻型实体,调度和分派的基本单位,可并发执行,共享进程资源。

线程间的同步和通信:互斥锁,条件变量,技术信号量,多读锁,单写锁。

用户级线程与内核级控制线程的连接:一对一模型,多对一模型,多对多模型。

线程实现方式:用户线程与内核线程的区别

用户线程:不需要内核支持而在用户程序中实现的线程,不依赖操作系统,应用进程利用线程库提供创建、同步、调度和管理线程的函数来控制用户线程。不许用户/核心切换,速度快,操作系统内核不知多线程的存在,因此一个线程阻塞将整个进程阻塞。处理器时间片分配以进程为单位,每个线程执行时间相对减少。

内核线程:轻量级线程。有操作系统内核创建和撤销。一个内核线程由于I/O而阻塞,不会影响其他线程的运行。

区别:内核支持线程是OS内核可感知的,用户级不可;用户级的创建等不需要OS内核支持,是在语言这一级处理的,内核需要OS支持,与进程的创建等大体相同;用户级执行系统调用指令时将导致其所属进程被中断,内核是线程;只有用户级的系统内,CPU调度以进程为单位,内核是线程;用户级实体运行在用户态下的程序,内核可运行在任何状态下的;运行在3级特权级上的程序是用户态,大部分用户直接面对的程序都是运行在用户态,0级特权上的是内核态;(Intelx86架构的CPU有0-3四个特权级,0级最高)。

导致用户态切换到内核态:系统调用(用户态通过系统调用申请使用操作系统提供的服务程序完成工作);异常(由当前运行进程切换到处理此异常的内核相关程序中,比如缺页异常);外围设备的中断。只有系统调用时用户进程主动发起的,其他都是被动的。

用户栈和内核栈的区别

操作系统中,每个系统有两个栈,用户栈,用户空间,进程在用户空间运行时,CPU堆栈指针寄存器里的内容是用户堆栈地址,保存用户进程的子程序间调用参数、返回值、返回点及子程序的局部变量;内核栈,内核空间,保存中断现场,保存操作系统子程序相互调用的参数、返回值、返回点及子程序的局部变量。

若只有系统栈,只有15(15个低优先级的中断),则用户程序可能不能被保存;若只有用户栈,则系统程序不能被保护。

内存池、进程池、线程池

池化技术:提前保存大量的资源,以备不时之需以及重复使用。由于实际应用中,分配内存、创建进程、线程都会涉及系统调用,需要程序从用户态切换到内核态,非常耗时。因此当程序中频繁的进行内存申请释放,进程、线程创建销毁等操作时,常用内存池、进程池和线程池技术提升程序的性能。

内存池:指程序预先从操作系统申请一块足够大内存,此后申请内存直接从内存池中获取,释放内存时,也是返回内存池。程序退出时,内存池才将之前申请的真正内存释放。

线程池:类似于操作系统中缓冲区的概念,先启动若干数量的线程,睡眠状态,需开辟一个线程做具体工作时,唤醒一个睡眠线程,完成工作后又处于睡眠,不是将线程销毁。

进程池:同线程池原理。

PE文件:可移植的执行体,微软windows操作系统上的程序文件(可能是间接被执行,如DLL),有EXE,DLL,OCX,SYS,COM。

操作系统所使用的搜索顺序为:内存,KnownDLLs,清单与.local,应用程序目录,当前工作目录,系统目录,路径变量。

静态链接:编译链接时直接将需要的执行代码拷贝到调用处,不需要依赖库,程序可独立执行,体积会相对大一些。

动态链接:编译链接时不直接拷贝代码,记录符号和参数,程序运行时信息传递给操作系统,操作系统负责将需要的动态库链接到内存中,运行到指定代码时,共享执行内存中的动态库代码,最终达到运行时连接的目的。多个程序共享同一段代码,不需在磁盘上存储多个拷贝,但运行时加载可能影响前期执行性能。

静态链接库本身包含了实际执行代码,地址符号表等;是一个或多个obj文件的打包,静态lib只是壳子,在可执行文件生成后,静态链接库.lib文件可弃之不用。

动态链接库DLL的导入库,实际的执行代码位于动态库中,导入库只包含了地址符号表等,确保程序找到对应函数的一些基本地址信息。是作为共享函数库的可执行文件。

区别:静态中的指令都全部被直接包含在最终生成的exe文件中了,动态的不必; 静态库中不能再包含其他的动态链接库或静态链接库,动态可以。静态链接库可能比动态链接库块。

多线程时,CPU利用率在不阻塞的情况下,利用率一般更高。

批处理文件的扩展名:dat

第三章 处理机调度与死锁

进程的调度

我们使用不同的调度是为了优化,具体说来是提高处理器利用率,增大吞吐量,减少等待时间,缩短响应时间。

处理机调度的层次

高级调度(作业调度或长程调度),主要根据某种算法,把外存上处于后备队列中的那些作业调入内存,它们的调度对象是作业。作业:一个比程序更广泛的概念,包含通常的程序和数据,还有作业说明书,系统根据说明书来对程序的运行进行控制。用户在一次解题或一个事务处理过程中要求计算机所做工作的集合,是由一系列有序的步骤组成。作业步:一个加工步骤为一个作业步。作业调度的主要功能是根据作业控制中心的信息,审查系统能否满足用户作业的资源需求,以及按照一定的算法,从外存后备队列中选取某些作业调入内存,并为它们创建进程,分配必要的资源。然后将新创建的进程插入就绪队列,准备执行。作业调度也称为接纳调度。

低级调度(进程调度,短程调度),调度对象是进程(或内核级线程)。进程调度是最基本的一种调度,在多批道处理,分时和实时三种类型的OS中,都必须配置这级制度。进程调度方式:非抢占方式,抢占方式(优先权原则,短作业优先原则,时间片原则)。

中级调度:引入中级调度的主要目的是为了提高内存利用率和系统吞吐量。

调度算法

常用的算法有先来先服务、高优先权优先调度法、时间片轮转调度法、分级调度(分级调度法可理解为多队列法)。先来先服务调度是先来者,先服务,最简单,作业调度,进程调度,FCFS利于长作业;优先数算法是对每个进程确定一个优先数,以决定先后。时间片轮转法是把规定进程一次使用处理器的最长时间称为“时间片”。让就绪进程按就绪的先后次序排成队列,依次运行。多级反馈队列调度算法,不必事先知道各种进程所需的执行时间,可以满足各种类型进程的需要,是目前公认的一种较好的进程调度算法。设置多个就绪队列,队列不同的优先级。分级调度算法是由系统设置多个就绪队列,每个就绪队列中的进程按时间片轮转法占用处理器,这就是分级调度算法。

优先权调度算法:抢占方式能更好地满足紧迫作业的要求,故而常用于要求比较严格的实时系统中,以及对性能要求较高的批处理和分时系统中。静态优先权:创建进程时确定的,且在进程的整个运行期间保持不变。确定优先权的依据:进程类型(系统进程优先级高于用户进程的优先级),进程对资源的需求,用户要求(要求不高的系统中使用静态优先权)。动态优先权:在创建进程时所赋予的优先权,是可随进程的推进或随其等待时间的增加而改变的。高响应比优先调度:短作业有效不足之处是长作业的运行得不到保证。作业的优先级随等待时间的增加而以加速度a提高,优先权=(等待时间+要求服务时间)/要求服务时间;响应比Rp=(等待时间+要求服务时间)/要求服务时间=响应时间/要求服务时间。

周转时间:等待时间和运行时间之和。

死锁

死锁:多个进程在运行过程中因争夺资源而造成的一种僵局。两个或两个以上的进程在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力作用,都将无法推进下去。产生死锁的原因:进程申请(竞争资源)和释放资源的顺序不当。

产生死锁的四个必要条件

   互斥条件:所涉及的资源都是临界资源,资源是排他性使用的。

   “请求和保持”条件:当进程因请求资源而阻塞时,对已请求的资源保持不放

  “不可剥夺”条件:已占用的资源在用完前,不能被剥夺

  “环路等待”条件:存在一个“进程资源”环

预防死锁法:通过某些限制,来破坏四个条件中的一个。常用的方法有:静态分配、按序分配、抢夺式分配3种。互斥条件无法被破坏。

避免死锁法:不必先限制,而在动态请求资源时,分配与否取决于系统是否会进入死锁。

银行算法是怎样避免死锁的:是通过动态地检测系统中资源分配情况和进程对资源的需求情况,在保证至少有一个进程能得到所需要的全部资源,从而能确保系统处于安全状态,才把资源分配给申请者,从而避免了进程共享资源时系统发生死锁。

检测解除法:允许死锁,但能立即确定其原因并解除。

posted @ 2018-10-18 19:44  huinina  阅读(305)  评论(0)    收藏  举报