操作系统_派派后花园

用户中心 游戏论坛 社区服务
发帖 回复
阅读:2225 回复:5

[技巧||心得] 操作系统

刷新数据 楼层直达
关员范

ZxID:235013

等级: 牛刀小试
举报 只看楼主 使用道具 楼主   发表于: 2011-05-15 0
— 本帖被 wp963 执行合并操作(2011-05-16) —
一、操作系统的基本概念
1.引言
现代计算机系统由硬件和软件两部分构成。硬件指的是构成计算机系统的物理设备。操作系统控制和管理所有的系统硬件(如处理器、存储器、各种设备),也控制和管理系统中所有的软件,操作系统对计算机使用者提供了一种良好的操作环境,也为各种应用系统提供了基本的支持环境。操作系统在硬件之上建立了一个服务体系,为各种软件提供强有力的支持,呈现在用户面前的计算机是一个方便的、友好的环境界面。现代计算机系统中硬件与软件之间的关系可分成若干层次。硬件(裸机)在最里层,是计算机系统工作的物质基础,它的外面是操作系统,通过系统程序对计算机系统中各类资源(处理器、存储器、设备、数据等)进行管理和提供方便用户使用的多种服务功能,隐蔽对硬件的复杂操作,把裸机改造成功能更强,使用更方便的系统。
2.什么是操作系统
有几种不同的方法考察操作系统
(1)用户观点操作系统是用户与计算机之间的接口,有了操作系统,用户可以方便地使用计算机;在功能上,操作系统提供功能很强的系统调用,用户软件使用这些系统调用(也称管态)运行。
(2)资源管理观点操作系统是控制和管理计算机系统资源的程序,它的工作是当用户程序和其他程序争用这些资源时,提供有序的和可控的分配。
(3)进程观点操作系统环境中,常同时运行着多个程序(称为并发),这些同时运行的程序称为“进程”(process),或“任务”(task)。每个进程都完成各自的特定任务(如用户程序的运行,处理某个设备的输入输出……)。操作系统则控制和协调这些进程的运行。它从系统各部分可以并行工作为出发点,考虑管理任务的分割和相互之间的关系,通过进程之间的通信解决共享资源时带来的竞争问题。通常,进程可以分为用户进程和系统进程两大类。
(4)分层观点根据使用环境和对用户作业处理方式,操作系统的基本类型可能分为3大类:•批处理操作系统(batch processing operating system);•分时操作系统(time sharing system);•实时操作系统(real time system)随着网络技术的发展与普遍使用,共享网络资源的网络环境下的操作系统也已流行。网络环境下的操作系统又分成网络操作系统和分布式操作系统,网络操作系统是在各单机操作系统的基础上,按照网络体系结构的各个协议、标准进行开发,形成网络软件,包括网络管理、通信、资源共享、系统安全和多种网络应用等;分布式操作系统要求一个统一的操作系统,即废弃(或改造)各单机的操作系统,整个网络设有单一的操作系统。分布式操作系统负责全系统的资源分配和调度,为用户提供统一的界面。用户据此使用系统资源、完成所需任务。至于设备在何处用户是不必知道的,这称为位置透明性。分布式操作系统是一个逻辑上紧密耦合的系统。而网络操作系统用户则需指明欲使用哪一台计算机上的哪个资源。
3.操作系统的功能
操作系统的职能是管理和控制计算机系统中的全部硬件、软件资源,合理组织计算机工作流程,并为用户提供一个良好的工作环境和友好的接口,系统资源管理和提供用户界面是操作系统的功能要点。
(1)处理器(处理机)管理处理器是计算机系统的心脏,在单用户系统或单道系统中,处理器为一个用户或一个作业服务,其管理简单。为提高系统资源利用率,引入多道程序技术,即多个程序(作业)同时运行,他们争用处理器,就要解决对处理器分配调度策略、实施分配和回收资源。许多操作系统是以作业和进程的方式进行管理,实现作业和进程的调度,分配处理器,控制作业和进程的执行。现代的操作系统更引入线程(Thread)作为分配处理器的基本单位。基于操作系统对处理器管理策略的不同,其提供的作业处理方式也就不同,如简单的批处理方式、分时处理方式、实时处理方式、多道成批处理方式和网络环境下的处理方式。从而,呈现在用户面前的就是不同的操作系统。
(2)存储管理计算机系统中,存储器(一般称为主存或内存)是运行程序、存放工作数据的,存储管理的工作主要是对主存储器进行分配、扩充和保护。系统中有多个程序(操作系统,实用程序和用户程序)共享存储器,它们彼此之间不能相互干扰和破坏,这就是存储保护问题。当计算机系统中运行的程序所需要的主存容量超过系统所提供的主存容量时,如何利用外部存储器作为主存的后援,为用户提供一个容量比实存(实际内存)大得多的虚存(虚拟存储器),让用户可运行一个比实存大的用户作业,这就是内存扩充问题。
(3)设备管理现代计算机系统常常配置很多种类的输入输出设备,它们的输入输出速度差别很大,计算机系统常常采用通道、控制器、设备三级控制方法管理这些设备,设备管理的任务就是监视这些资源的使用情况,根据一定的分配策略,把通道、控制器和设备分配给请求输入输出操作的程序,并启动设备完成所需的操作。为了发挥设备和处理机的并行工作能力,常常采用缓冲技术和虚拟技术。
(4)文件管理(信息管理)用户使用计算机系统处理数据(信息),这些数据和程序作为文件储存在外部存储器(如磁盘、磁带、光盘等)上,文件管理的任务是管理文件的存储空间,提供信息的共享和保护,允许多个用户协同工作又不引起混乱。
(5)用户接口(工作管理)上述四项功能是操作系统对硬、软件资源的管理,操作系统也必须为用户提供一个友好的用户接口———命令接口和图形接口。一般,用户通过两种命令接口请求操作系统的服务。一种接口是作业一级的接口,即提供一组操作命令,如UNIX和Linux的shell命令语言或作业控制语言(JCL)让用户组织和控制自己作业的运行。作业控制又分成两类;联机控制和脱机控制。另一种接口是编程接口,即提供一组系统调用命令(又称进管指令SVC)供各种程序(实用程序,应用程序和用户程序等)调用,请求操作系统的服务,这些服务常可分成:处理器服务(作业、进程、线程管理),存储服务,设备服务,文件服务,用户界面服务,异常处理服务,其他类型服务等。
4.操作系统的工作原理
操作系统的基本特征是并发和共享。并发的意思是存在许多同时的活动(或并行的活动);输入输出操作和处理器运行并行活动;在主存中同时驻留几道用户程序等都是并发的例子。并发活动会要求共享资源和信息,这就能提高资源的利用率。多道程序可以并发而共享资源,一个用户的任务也可以组织成几个子任务并发工作而提高运行效率。程序这样运行时,不能使输入设备,处理器和打印机并行工作,若忽略处理器加工数据的处理时间,则完成一批数据加工的时间为输入输出设备耗时的总和,若将这个计算任务分成3个子任务,并引入缓冲技术:输入子任务从输入设备读一批数据到输入缓冲区,处理子任务则把输入缓冲区中的数据处理后放入输出缓冲区,打印子任务则打印输出缓冲区中的内容,从而输入子任务可以与打印子任务并发工作,使完成一批数据加工的时间近似于较慢的设备速度。程序的并发执行,发挥了处理器与输入输出设备并发工作的能力,使系统的效率提高。多个计算程序同时驻留在主存储器中并行执行的程序设计方法称为多道程序设计,这种系统称为多道程序系统。多道程序系统能充分发挥处理器的利用效率,提高系统资源的利用效率。既然他们同处在一个系统中,一个任务(或子任务)的执行会受到其他任务(或子任务)的影响(又称为制约)。
5.操作系统的硬件基础
现代计算机系统设备的发展异常迅速,导致了控制技术的发展,设备控制的基本技术是中断。
(1)中断的基本概念在计算机系统中,中断是改变处理器执行指令顺序的事件,被打断的程序可以在将来某个时候(可能在中断处理完成后立即或推迟,这是由操作系统控制的)恢复执行。计算机系统的中断既来自系统内部,也来自系统外部,分别称为内部中断和外部中断。①内部中断是系统本身在工作过程中出现的各种需要紧急处理的事件:一种是由于运行程序发生意外而产生的,另一种是运行程序需要发生的。内部中断也称为软件中断。②外部中断是由于硬件方面的原因,故也称为硬件中断,硬件中断往往是随机发生的,不是由正在运行的程序所控制的。外部中断和由于运行程序产生的例外中断常常称为强迫中断,而运行程序主动要求而产生的中断称为自愿中断。外部中断可进一步分成可屏蔽中断和不可屏蔽中断。不可屏蔽的中断是一些最紧急最重要的中断,如掉电等。可屏蔽的中断通过处理器内部的中断许可状态确定响应中断的次序或者不响应一些不重要(或不紧急)的中断请求。
(2)中断的响应与处理引起中断的事件(即原因)称为中断源。目前,大多数系统都采用中断向量的技术,所谓中断向量,实际上是一种指针,就是由硬件对不同的中断源将控制转移到不同的中断处理程序入口地址。所有的中断向量构成一个中断向量表,它们通常存放在一个专门的存储区域中,这个区域的地址可以是固定的;相应的处理程序的入口地址通常是在系统引导过程中,通过对系统配置的检测,得到系统中设备配置的情况,在操作系统装入过程中,填写中断向量表中的指针内容。中断处理程序对中断事件的处理分两步进行。第一步是保护好被中断程序的现场信息,即保存被中断程序的寄存器以及PSW(程序状态字)的内容,以保证被中断程序以后能继续运行;第二步是具体处理中断。中断处理完成后,处理器分配给发生中断时正在运行的进程,还是分配给另一进程,这取决于被中断的进程是可剥夺的还是不可剥夺的。如果是不可剥夺的,它重新得到处理器,否则,可能被别的进程(如优先级更高)夺得处理器。
二、进程管理
1.程序、进程和处理器
程序是指令的集合,每一程序完成确定的任务。在只允许一个程序运行的系统(称为单道系统)中,这个程序独占系统资源,而系统按程序的指令顺序运行,程序的顺序执行有两个基本特征,即程序的封闭性和程序的可再现性。封闭性是指程序运行时独占系统资源,只有程序本身能改变系统的状态;可再现性是指程序运行不受外部因素影响,只要初始条件相同,运行结果就相同。多道程序系统让多个程序在系统中轮流运行,当一个程序不用处理器时,另一个程序就使用。也就是说,处理器在程序间切换,从而获得宏观上的并行(微观上的串行),以提高处理器的利用率。这种切换,通常是由中断引起的。由于中断是以不可预测的次序发生,即程序的指令序列也以不可预测的次序前进,这样就会产生操作系统的另一特性:不确定性。即在多道程序系统中,顺序程序的封闭性和可再现性消失了。需要采用一个新的概念———进程来描述程序的执行,进程是运行中的程序。
2.进程间的通信
在操作系统中,进程是可以独立运行的程序单位,系统中的各个进程并不是相互隔离的:一方面它们相互竞争使用有限的资源,如处理器、存储器、设备或文件等;另一方面,它们可能相互协作以达到用户作业预期的目的。因此,进程之间需要某种形式的通信。进程之间直接发生联系的称为相交进程(又称相关进程),否则为不相交进程。相交进程需要协调彼此间的相对运行速度,存在着直接制约的关系。不相交进程之间的联系将表现在资源使用上的间接制约关系。
(1)互斥多道系统中,各进程可以共享各类资源,但有些资源却一次只能供一个进程使用。这种资源常常称为临界资源,如打印机、公共变量、表格等。互斥是要保证临界资源在某一时刻只被一个进程访问。
(2)同步一般一个进程相对于另一个进程的速度是不可预测的,也就是说,进程之间是异步运行的。为了成功地协同工作,有关进程在某些确定的点上应当同步它们的活动:一个进程到达了这些点后,除非另一进程已完成了某个活动,否则就停下来,以等待该活动结束。
(3)死锁当若干进程竞争使用资源时,可能产生下述情况:每个进程要求的资源都已被另一进程占用,于是也就没有一个进程能继续运行。这种情况称为死锁。
3.信号量与P,V操作
用顺序程序设计技术处理同步与互斥是十分困难的,为此引入信号量概念:信号量是一种特殊的变量,它的表现形式是一个整型变量及相应的队列:除了设置初值外,对信号量只能施加特殊的操作:P操作和V操作,P操作和V操作都是不可分割的原子运行,也称为原语(有时分别记为down()和up()或wait()和signal())。P操作的作用是将信号量S的值减1,若S的值成负数,则调用P操作的进程暂停执行,直到另一个进程对同一信号量作V操作。V操作的作用是将信号量S的值加1,若S的值小于等于0,从相应队列(关于S的队列)中选一个进程,唤醒它。
(1)互斥为了保护共享资源(如公共变量等),使它们不被多个进程同时访问,就要阻止这些进程同时执行访问这些资源的代码段,这些代码段称为临界区,这些资源称为临界资源。对临界资源访问的互斥要求可视作执行临界区的互斥要求。利用信号量可以方便地实现互斥临界区的管理要求。例如,令信号量mutex的初值为1,于是临界区就改写成下列形式的代码段。P(mutex);临界区V(mutex);由于mutex初值为1,P、V是原子操作,确实可以实现互斥。
(2)同步最简单的同步形式是:进程A在另一个进程B已到达点L2以前,不应前进到超过点L1。对此,可以令信号量proceed初值为0,实现这种同步的程序形式是: 进程A L1:P(proceed); … …进程B L2:V(proceed); … …更复杂一点的同步问题是单缓冲的生产者、消费者问题。
4.高级通信原语
P、V操作是用来协调进程间关系的,编程较困难而且没有信息交换,故常称为低级通信原语。此外,P、V操作必须有共享存储器,而高级通信原语则提供两种通信方式:有缓冲区的通信和无缓冲区的通信。
(1)有缓冲区的通信方式中,有原语:
Write(Buffer_Name,Variable) 等缓冲区空再存入
Read(Buffer_Name,Variable) 等缓冲区满再取出
(2)无缓冲区的通信,又称为消息传递,有原语:
Send(Who,Message) 发送消息给指定进程或一组进程
Receive(Who,Message) 从约定进程接收消息有的系统还提供带标记的发送,有Send(Who,Message,Tag)用Tag可指定发送进程是否要等待接收进程取到内容以后再继续运行。一般接收者总是要等待消息到达后才继续运行。
三、系统核心
操作系统核心位于计算机硬件之上,核心的目的是提供一种进程赖以生存的环境,其主要任务是接收中断并作基本处理,在进程之间切换处理器,处理进程之间通信。
1.基本硬件机构
(1)中断机构
为了使输入输出活动与处理器活动并行进行,当一台外部设备的传输操作结束时,应能中断正在运行的进程,由中断处理程序处理。
(2)特权指令为使各并发进程不相互干扰,系统的部分指令集应保留仅供操作系统使用,这些指令称为特权指令,如允许与禁止中断,执行输入输出操作等。为了区分什么时候可以使用特权指令,什么时候不可以使用,系统至少具有两种工作状态,它们分别称为系统态和用户态,又称为管态和目态。特权指令只能在管态中运行。
(3)主存保护多道程序系统中,必须对各进程使用的主存加以保护,以防止其他进程进行未经许可的操作。保护机制应包含在主存寻址硬件中。
(4)时钟硬件的时钟以固定的时间间隔产生中断信号,这对于实现处理器的调度以及实现与时间有关的任务是不可缺少的。
2.进程
(1)进程进程是一个程序关于某个数据集的一次运行。也就是说,进程是运行中的程序,是程序的一次运行活动。相对于程序,进程是一个动态的概念,而程序是静态的概念,是指令的集合。因此,进程具有动态性和并发性。在操作系统中进程是进行系统资源分配、调度和管理的最小单位,注意,现代操作系统中还引入了线程,它是处理器分配的最小单位。
(2)进程的状态及其转换多道系统中,进程的运行是走走停停的,它在处理器上交替运行,使它的运行状态不断变化,最基本的状态有3种:运行、就绪和阻塞。•运行(running):正占用处理器。•就绪(ready):只要获得处理器即可运行。•阻塞(blocked):正等待某个事件(I/O完成)的发生。
(3)进程控制块进程是一个动态的概念,如何表示一个进程?在操作系统中,引入数据结构———进程控制块(简记为PCB)标记进程。PCB是进程存在的惟一标志,PCB描述了进程的基本情况。从静态的观点看,进程由程序、数据和进程控制块组成;从动态的观点看,是计算机状态的一个有序集合。程序是进程运行所对应的运行代码,一个进程对应于一个程序;有的程序可以同时对应于多个进程,这个程序的代码在运行过程中不会被改变,常称为纯码程序或可重入程序,他们是可共享的程序。进程控制块保存进程状态、进程性质(如优先程序)、与进程有关的控制信息(如参数、信号量、消息等)、相应队列和现场保护区域等。进程控制块随着进程的建立而产生,随着进程的完成而撤消。PCB是操作系统核心中最主要的数据结构之一,它既是进程存在的标志和调度的依据,又是进程可以被打断并能恢复运行的基础。核心通过PCB管理进程,一般PCB是常驻内存的,尤其是调度信息必须常驻内存。
3.进程管理
在操作系统中有许多进程,它们对应着不同的或相同的程序,竞争地使用着系统的资源。进程管理涉及到进程控制、队列管理、进程调度等。
(1)进程控制
进程的生命过程是从它被创建开始,直到任务终止而撤消,其间会经历各种状态的转换,它们都是在操作系统控制下完成的,为此,操作系统提供了对进程的基本操作,也称为原语。这些原语包括:创建原语(create),阻塞原语(block),终止原语(terminal),优先级原语(chang_prioriˉty),调度原语(schedule)。它们可以被系统本身调用,有的也以软中断形式(系统调用)供用户进程调用。他们都涉及现场队列管理等。当一个进程创建一个新的进程时,创建者称为父进程,被创建者称为子进程。通常操作系统中设置一个运行队列,一个就绪队列和若干个阻塞队列。在单处理器系统中运行队列只有一个成员。一般阻塞队列的个数取决于等待事件(原因)的个数。调度原语是按照确定的算法,从就绪队列中选择一个就绪进程,将处理器分配给它,修改这个进程的PCB内容。在操作系统中进程生命的简单活动是这样的:一个进程可以由系统创建(如用户运行一程序),也可以由用户进程用创建原语建立。新建立的进程开始时处于就绪状态。该进程的运行也会因等待某个事件(如I/O完成)的发生而处于阻塞状态,转入相应的阻塞队列。一旦相应事件发生后,将被唤醒原语叫醒而回到就绪队列。重复上述过程直至运行完毕。经终止原语作一些记录工作并撤消这个进程。
(2)进程调度
进程调度即处理器调度,它的主要功能是确定在什么时候分派处理器,并确定分给哪一个进程。在分时系统中,一般有一个确定的时间单位(称为时间片),当一进程用完一个时间单位时,就发生进程调度(又称上下文转换),即让正在运行的进程改变状态并转入就绪队列尾,再由调度原语将就绪队列的首进程取出,投入运行。进程调度的方法基本上分为两类:剥夺调度与非剥夺调度。所谓非剥夺调度是指一旦某个作业或进程占有了处理器,这个进程就占用处理器直到主动放弃处理器为止,相反,如果其他进程可获得处理器的使用权则是剥夺调度。在有些进程(如高优先级进程)需要快速服务的系统中,剥夺调度是非常有用的。例如,在实时系统中丢失一个中断的后果将是灾难性的。交互式系统中,为保证用户可接受的响应时间,剥夺调度也十分重要。在非剥夺系统中,短的作业常常等待长的作业,但所有进程受到的服务是公平的,响应时间是可以预测的。对就绪队列的处理体现了调度策略,常用的是按优先级处理。有两种确定优先级的方法,即静态优先级和动态优先级。静态是指进程的优先级在进程开始运行前确定,运行过程中不变,而动态优先则可以在进程运行过程中改变。进程调度的算法是服务于系统目标的策略,对于不同的系统与系统目标,常采用不同的调度算法,如:•先来先服务(FCFS):又称先进先出(FIFO),就绪队列按先来后到原则排队。•优先数调度:优先数反映了进程优先级,就绪队列按优先数排队。•轮转法(round robin):就绪队列按FCFS方式排队。每个运行进程一次占有处理器时间都不超过规定的时间单位(时间片)。若超过,即调用调度原语而形成就绪进程轮流使用服务器。
关员范

ZxID:235013

等级: 牛刀小试
举报 只看该作者 5楼  发表于: 2011-05-15 0
死锁问题
进程管理是操作系统的核心,在进程管理的实现中,如果设计不当,会出现一种尴尬的局面———死锁。如果一个进程正在等待一个不可能发生的事件,则称该进程处于死锁状态。在系统发生死锁时,一个或多个进程处于死锁状态。
(1)死锁条件产生死锁的主要原因是供共享的系统资源不足、资源分配策略和进程的推进顺序不当。系统资源既可能是可重用的永久性资源,也可能是消耗性的临时资源。可重用资源产生死锁存在4个必要条件,它们是:互斥条件,保持和等待条件,不剥夺条件,环路等待条件。
(2)对待死锁的策略显然,人们不希望发生死锁。处于死锁状态的进程不能继续运行,但仍占有系统资源,从而会阻碍其他作业的运行。对待死锁的策略,一般有下列4个策略:死锁的预防,死锁的避免,死锁的检测和死锁的解除。
关员范

ZxID:235013

等级: 牛刀小试
举报 只看该作者 4楼  发表于: 2011-05-15 0
文件管理
计算机系统中还有另一类资源是软资源。软资源包括各种系统程序、各种实用程序、各种应用程序、各种应用领域的程序,也包括大量的文档材料。每一种资源本身都是具有一定逻辑意义的、相关信息的集合。在操作系统中它们以文件形式存储。大多数应用中,文件是最重要的元素,每个应用总要使用和产生数据。一般从文件中输入数据,其产生的数据也存入文件而长期储存,供以后使用。系统的重要作用之一是能快速处理大量信息,因此数据的组织、存取和保护是操作系统必须提供的一个重要的功能。文件系统是操作系统中组织、存取和保护数据的一个重要部分。
(1)文件的概念文件是信息的一种组织形式,是存储在辅助存储器上的具有标识名的一组信息集合。它可以是有格式的,也可以是无格式的。与文件相关的概念有:数据项、记录、文件和数据库。数据项是数据的基本单位,一个数据项有一个值,数据项可能是定长的也可能是可变长度的。记录是相关数据项的集合,与数据项类似,记录的长度可能是定长的,也可能是可变长度的。文件是记录的集合,文件是一个实体,被用户或应用程序按名字访问,为了安全,每一文件都有访问控制约束。数据库是相关数据的集合,数据元素之间有直接的联系,这些联系是在设计时为若干个不同的应用而设计的。数据库本身可由若干文件组成。
(2)文件系统操作系统的文件系统包括两个方面:一方面包括负责管理文件的一组系统软件,另一方面包括被管理的对象———文件。文件系统的主要目标是提高存储器的利用率,接受用户的委托实施对文件的操作。为此要解决的主要问题是:管理辅助存储器,实现文件从名字空间到辅存地址空间的转换,决定文件信息的存放位置、存放形式和存取权限,实现文件和目录的操作,提供文件共享能力和安全设施,提供友好的用户接口。
(3)文件类型文件有多种分类方法,这是根据文件的性质和用途区分的。①按文件的用途可以分为系统文件、库文件和用户文件等。②按文件的信息流向可以分为输入文件、输出文件和输入输出文件等。③按文件的组织形式可以分为普通文件、目录文件和特殊文件等。特殊文件是UNIX系统采用的技术,是把所有的输入输出设备都视作文件(特殊文件)。特殊文件的使用形式是与普通文件相似的。④按文件的安全属性可分为只读文件、读写文件、可执行文件和不保护文件等。
2.文件的结构和组织
文件的结构是指文件的组织形式,从用户观点所看到的文件组织形式,称为文件的逻辑结构;从实现观点考察文件在辅助存储器上的存放方式,常称为文件的物理结构。
(1)文件的逻辑结构文件的逻辑组织是为了方便用户的使用,一般文件的逻辑结构可以分为两种:无结构的字符流文件和有结构的记录文件,后者也称为有格式文件。记录文件由记录组成,即文件内的信息划分成多个记录,以记录为单位组织和使用信息。记录文件有顺序文件、索引顺序文件、索引文件和直接文件。
①顺序文件:许多文件是顺序文件。顺序文件的记录定长,记录中的数据项的类型长度与次序固定,一般还有一个可以惟一标识记录的数据项,称为键(key),记录是按键值的约定次序组织。顺序文件常用于批处理应用,对于查询或更新某个记录的请求的处理性能不佳。
②索引顺序文件:索引顺序文件是基于键的约定次序组织的,而且维护键的索引和溢出区域。键的索引也可以是多级索引。索引顺序文件既适用于交互方式应用,也适用于批处理的方式应用。
③索引文件:索引顺序文件是基于记录的一个键数据项组织的,而许多应用需按照别的数据项访问文件,为此,常采用索引文件方法,即对主文件中的记录按需要的数据项(一个或几个)建索引,索引文件本身是顺序文件组织。
④直接文件:直接文件又称哈希(Hash)文件,记录以它们在直接访问存储设备(DASD)上的物理地址直接(随机)访问。直接文件常用于需要高速访问文件而且每次访问一条记录的应用中。
(2)文件的物理结构文件的物理结构侧重于提高存储器的利用效率和降低存取时间。文件的存储设备通常划分为大小相同的物理块,物理块是分配和传输信息的基本单位。文件的物理结构是指文件在存储设备上的存储方法。文件的物理结构涉及文件存储设备的组块策略和文件分配策略,决定文件信息在存储设备上的存储位置,常用的文件分配策略有:
①顺序分配(连续分配)。这是最简单的分配方法,在文件建立时预先分配一个连续的物理块集,然后,按照逻辑文件中的信息(或记录)顺序,依次把信息(或记录)顺序存储到物理块中。这样,只需知道文件在文件存储设备上的起始位置和文件长度,就能进行存取,这种分配方法适合于顺序存取,在连续存取相邻信息时,存取速度快。其缺点是在文件建立时必须指定文件的信息长度,以后不能动态增长,一般不宜用于需要经常修改的文件。
②链接分配(串联分配)。这是按单个物理块逐个进行的。每个物理块中(一般是最后一个单元)设有一个指针,指向下一个物理块的地址,这样,所有的物理块都被链接起来,形成一个链接队列。在建立链接文件时,不须指定文件的长度,在文件的说明信息中,只需指出该文件的第一个物理块块号,链接文件的文件长度可以动态的增长,只需调整物理块间的指针就可以插入或删除一个信息块。链接分配的优点是可以解决存储器的碎片问题,提高存储空间利用率。由于链接文件只能按照队列中的链接指针顺序查找,因此,搜索效率低,一般只适用于顺序访问,不适用于随机存取。
③索引分配。这是另一种对文件存储不连续分配的方法。采用索引分配方法的系统,系统为每个文件建立一张索引表,索引表中每一表项指出文件信息所在的逻辑块号和与之对应的物理块号。索引分配既可以满足文件动态增长的要求,又可以方便而迅速地实现随机存取。这是因为索引表中含有全部逻辑块号和物理块号之间的对应关系。对一些大的文件,索引表的大小会超过一个物理块,就会发生索引表的分配问题。一般采用多级(间接索引)技术,这时在由索引表指出的物理块中存放的不是文件信息,而是存放文件信息的物理块地址。这样,如果一个物理块能存储n个物理块地址,则一次间接索引,可寻址的文件长度将变成n×n块,对于更大的文件可以采用二级间接索引,甚至三级间接索引技术(如UNIX系统)。索引分配既适用于顺序存取,也适用于随机存取。索引分配的缺点是索引表增加了存储空间的开销。另外,在存取文件时需要访问存储设备两次,一次是访问索引表,另一次是根据索引表提供的物理块号访问文件信息,为了提高效率,一种改进的方法是,在对某个文件进行操作之前,预先把索引表调入主存(如Open命令),这样,文件的存取就能直接从在主存的索引表中确定相应的物理块号,从而只需要访问一次磁盘
3.文件访问方法
用户通过对文件的访问(读写)来完成对文件的查找、修改、删除和添加等操作。常用的访问方法有两种,顺序访问和随机访问。
(1)顺序访问顺序访问是按照文件的逻辑地址顺序访问。对无结构的字符流文件,顺序访问反映当前读写指针的变化,在访问完一段信息之后,读写指针自动加上这段信息的长度。
(2)随机访问随机访问方法又分成两种:①一是根据记录的编号访问文件中的记录,或者根据读写命令把读写指针移到所需要的信息段开始处。②另一种是按键访问文件中的记录。文件的访问依赖于存放文件的存储设备的特性,也依赖于文件的分配策略。例如,磁带是典型的顺序访问设备,磁盘则是典型的随机访问设备。
4.文件存储设备管理
文件存储设备管理也就是操作系统的辅存管理,是要有效的进行存储空间的管理。由于文件存储设备是分成许多大小相同的物理块,并以块为单位交换信息,因此,文件存储设备的管理实质上是对空闲块的组织和管理问题。有3种不同的空闲块管理方法,它们是位图法、链接法和索引法。
(1)位图法位图法使用一个向量描述整个磁盘,向量的每一位表示一个物理块的状态,如0表示空闲块,而1表示该块已使用。位图法易于找到一个或连续几个空闲块,此法适合每一种文件分配方法,另外,位图法本身很小,易于全部放入主存。
(2)链接法链接法使用链表把空闲块组织在一起,当申请者需要空闲块时,分配程序从链首开始摘取所需的空闲块。反之,管理程序把回收的空闲块逐个的挂入队尾,这个方法适用于每一种文件分配方法。空闲块的链接方法可以是如上述的按释放的先后顺序链接,也可以是按空闲块区(连续n个空闲块)的大小顺序链接。后者有利于获得连续的空闲块的请求,但在分配请求和回收空闲块时系统开销多一点。
(3)索引法类似于文件分配方法,索引法把空闲块作为一个文件并采用索引技术。为了提高效率,索引可以基于空闲块区而不是仅仅基于单个物理块。这样,磁盘上每一个空闲块区都对应于索引表中一个条目,这个方法能有效地支持每一种文件分配方法。
5.文件控制块和文件目录
(1)文件控制块文件控制块是系统在管理文件时所必需的控制信息的数据结构,是文件存在的惟一标志,也称文件描述词,简记为FCB。FCB的内容包括相应文件的基本属性,大致可以分成4个部分:①基本信息:如文件名、文件类型、文件组织等;②保护信息:如口令、所有者名、保存期限、访问权限等;③位置信息:如存储位置、文件长度等;④使用信息:如时间信息、最迟使用者等。
(2)文件目录文件控制块的集合称为文件目录,文件目录也被组织成文件,常称为目录文件。文件目录结构形式有一级目录结构、二级目录结构和多级目录结构。
①一级目录结构:文件系统中只有一个目录文件的目录结构称为一级目录结构。其中,每一表项是一个文件控制块,对应于一个文件。一级目录结构易于实现,管理简单。但当系统中文件数增多时,查找时间较长,也会发生文件名重复(重名)的问题。
②二级目录结构:文件系统将目录分为两级,就形成了二级目录结构。这时,第一级目录称为主目录,主目录表项记录用户名及相应用户目录的存储位置。第二级是用户目录,以顺序表形式存放该用户文件的文件控制块。二级目录虽然都组织成顺序表,由于都不会很长,查找时间快,而且各个用户只要保证自己的文件名称不重复就不会发生重名问题。对文件的共享和文件的保护也比一级目录结构好。
③多级目录结构:如果将二级目录的级数增加,就形成了多级目录。也称为树型目录结构。在多级目录结构中,常常将第一级目录作为系统目录,称为根目录(树的根节点)。目录树中的非叶节点指出目录文件,非目录文件一定由叶节点指出。叶节点也可能指出目录文件,即空目录。在多级目录结构中,从根出发到任何一个叶节点有且只有一条路径,该路径的全部节点名构成一个全部路径名,又称绝对路径名。为查找一个非目录文件就使用它的全路径名,多级目录结构更加完善了文件结构的查找范围,更好地解决了文件的重名问题,增强了文件的共享和保护措施。
6.文件的使用
(1)工作目录也称当前目录。在多级目录结构的文件系统中,文件的全路径名可能较长,也会涉及多次磁盘访问,为了提高效率,操作系统提供设置工作目录的机制,每个用户都有自己的工作目录,任一目录节点都可以被设置为工作目录。一旦某个目录节点被设置成工作目录,相应的目录文件有关内容就会被调入主存,这样,对以工作目录为根的子树内任一文件的查找时间会缩短,从工作目录出发的文件路径名称为文件的相对路径名。文件系统允许用户随时改变自己的工作目录(如命令CD)。
(2)文件的使用一般文件系统提供一组专门用于文件、目录的管理。如目录管理、文件控制和文件存取等命令。①目录管理命令:如建立目录、显示工作目录、改变目录、删除目录(一般只可删除空目录);②文件控制命令:如建立文件、删险文件、打开文件、关闭文件、改文件名、改变文件属性;③文件存取命令:如读写文件、显示文件内容、复制文件等。
(3)文件共享和安全文件的共享是指不同的用户使用同一文件。文件的安全是指文件的保密和保护,即限制未授权用户使用或破坏文件。文件的共享可以采用文件的绝对路径名(或相对路径名)共享同一文件。一般的文件系统,要求用户先打开文件,再对文件进行读写,不再使用时关闭文件。若两个用户可以同时打开文件,对文件进行存取,这称为动态文件共享。文件的安全管理措施常常在系统级、用户级、目录级和文件级上实施。①系统级:用户需注册登记、并配有口令,每次使用系统时,都需要进行登录(login),然后输入用户口令(password),方能进入系统;②用户级:系统对用户分类并限定各类用户对目录和文件的访问权限;③目录级:系统对目录的操作权限作限定,如读(R)、写(W)、查找(X)等;④文件级:系统设置文件属性来控制用户对文件的访问,如只读(RO)、执行(X)、读写(RW)、共享(Sha)、隐式(H)等。对目录和文件的访问权限可以由建立者设置。除了限定访问权限,还可以通过加密等方式进行保护。
七、作业管理和用户界面
1. 引言
作业(job)是系统为完成一个用户的计算任务(或一次事务处理)所做的工作总和。例如,对于用户编制的源程序,需经过对源程序的编译、连接编辑或连接装入以及运行产生计算结果。这其中的每一个步骤,常称为作业步,作业步的顺序执行即完成了一个作业。操作系统中用来控制作业的进入、执行和撤消的一组程序称为作业管理程序,这些控制功能也能通过把作业步细化,通过进程的执行来实现。用户的作业可以通过直接的方式,由用户自己按照作业步顺序操作,也可以通过间接的方式,由用户事先编写的作业步依次执行的说明,一次交给操作系统,由系统按照说明依次处理。前者称为联机方式,后者称为脱机方式。
2.用户作业管理
(1)作业控制①联机作业方式:联机作业方式是通过直接输入作业控制命令,提交用户作业,运行用户作业。用户作业的提交是通过终端依次键入操作命令或可执行程序名提出运行请求,系统做出相应的处理,直至完成一个作业的计算要求。命令的输入有两种方式。一种是顺序键入,用户每打入一条命令,操作系统接收命令,解释执行然后等待用户打入下一条命令,直到作业完成为止。另一种是连续键入,用户打入一条命令,不等这条命令执行完成(让这条命令在后台运行),用户又可键入下一条命令,而连续键入若干命令形成了命令串,由操作系统自动地对这些命令逐个取出并解释执行,最后给出计算结果。②脱机作业方式:脱机作业方式是通过作业控制语言(JCL,也称为作业控制命令),编写用户作业说明书。这种方式中,用户不直接干预作业的运行,而是把作业与作业说明书一起交给系统(称为提交),当系统调度到这个作业时,根据作业说明书,由操作系统对其中的作业控制语言和命令逐条解释执行,直至完成。早期的脱机作业方式是操作员接收用户的请求再交给系统的,现代操作系统提供了让用户经终端把作业和作业说明书直接提交给系统的能力。
(2)作业状态及其转换用户程序、数据(及有关控制说明)是由用户或系统操作员使用各种终端、输入设备送
入系统的辅助存储设备中,这个过程称为作业的提交。处于提交状态的作业,其信息尚未全部进入系统。当作业的全部信息进入系统(如spooling系统中的输入井)时,该作业处于后备状态(又称收容状态),操作系统为其建立作业控制块(JCB),JCB中包含了作业的主要信息。作业调度程序从后备状态的作业中选取一个或若干个作业调入主存,建立进程并分配必需的资源,此时,这个(些)作业处于运行状态。当作业运行完成,该作业处于完成状态,系统将把该作业的结果输出,回收该作业占用的资源。作业的运行状态是由进程的状态描述的。
3.作业调度
作业调度主要是从后备状态的作业中挑选一个(或一些)作业投入运行。如何选择呢?根据不同的调度目标,有不同的算法。
(1)调度目标调度目标主要有以下5点:①响应时间快;②周转时间或加权周转时间短;③均衡的资源利用率;④吞吐量大;⑤系统反应时间短。这些目标是从不同的观点提出的,相互有冲突。通常,响应时间用于交互系统(如分时、实时系统);周转时间或加权周转时间用于批处理系统,周转时间是指作业从提交到完成的时间间隔,加权周转时间是作业的周转时间与作业运行时间之比;系统反应时间是指作业从提交到获得处理器首次服务之间的时间间隔。
(2)调度算法作业调度算法有许多种,它们与进程调度相似,有的适宜于单道系统,有的适宜于多道系统。它们是:①先来先服务(FCFS):按作业到达的先后次序调度,它不利于短作业;②短作业优先(SJF):按作业的估计运行时间调度,估计运行时间短的作业优先调度,它不利于长作业,可能会使一个估计运行时间长的作业迟迟得不到服务;③响应比高者优先(HRN):综合上述两者,既考虑作业估计运行时间,又考虑作业等待时间,响应比是 HRN=(估计运行时间+等待时间)/估计运行时间④优先级调度:根据作业的优先级别,优先级高者首先调度。
4.用户界面
用户界面也称为用户接口,其含义有两种,一种是指用户与操作系统交互的途径和通道,即操作系统的接口,另一种是指这种交互环境的控制方式,即操作环境。
(1)操作系统的接口操作系统的接口又可分成命令接口和程序接口。①命令接口:命令接口包含键盘命令和作业控制命令;②程序接口:程序接口又称为编程接口或系统调用,程序经编程接口请求系统服务,即通过系统调用,程序与操作系统通信。(2)操作环境操作环境支持命令接口和程序接口,提供友好的、易用的操作平台。操作系统的交互界面已经从早期的命令驱动方式,发展到菜单驱动方式、图符驱动方式和视窗操作环境。
关员范

ZxID:235013

等级: 牛刀小试
举报 只看该作者 地板   发表于: 2011-05-15 0
设备管理
在计算机系统中,除了处理器和主存之外,其他的大部分硬设备种类繁多,特性各异,操作方式的差异很大,从而使操作系统的设备管理变得十分繁杂。
(1)设备的类型20世纪80年代以来,由于个人计算机、网络的发展,外部设备更趋多样化、复杂化和智能化。例如网卡、仿真终端、虚拟终端、Windows终端和X-Windows终端。为简化设备管理程序,常对设备进行分类:①按数据组织方式:字符设备(常对应于慢速设备)和块设备(常对应于快速设备)。②按资源性能性质:独占设备(如终端、打印机),共享设备(如磁盘),虚拟设备(采用某种技术,将高速设备如磁盘虚拟化为多个“高速”读卡机和打印机,以提高系统效率,这也称为spoolˉing(假脱机)技术。
(2)设备管理的功能设备管理是对计算机输入/输出系统的管理,其主要任务是:实现对外部设备的分配和回收;启动外部设备;控制输入/输出设备与处理器或主存之间交换数据;实现对磁盘的调度;处理设备的中断,实现虚拟设备等。
(3)数据传输控制方式外部设备和主存之间常用的传输控制方式有4种:
①程序控制方式。处理器启动数据传输,然后等设备完成。程序控制方式不能实现并发。
②中断方式。中断方式的数据传输过程是这样的,进程启动数据传输(如读)后,该进程放弃处理器,当数据传输完成,设备控制器产生中断请求,中断处理程序对数据传输工作处理以后,让相应进程成为就绪状态。以后,该进程就可以得到所需要的数据。
③直接存储访问(DMA)方式。其基本思想是外部设备和主存之间开辟直接的数据交换通路。除了控制状态寄存器和数据缓冲寄存器之外,DMA控制器中还包括传输字节计数器、主存地址寄存器等。DMA方式采用窃取(或挪用)处理器的工作周期和控制总线而实现辅助存储器和主存之间的数据交换。有的DMA方式也采用总线浮起方式传输大批量数据。
④设备连接现代计算机系统,系统对外部设备的控制常分为3个层次,即通道、控制器和设备。控制设备的软件分为与设备有关的和与设备无关的两大类。前者与具体的设备类型有关,设备驱动程序就是与设备有关的;与设备无关的软件主要用于在用户一级提供统一的接口,包括处理控制器的公共部分。需要处理的内容包括:为设备驱动程序提供统一的接口、设备命名、设备分配与回收、错误报告、块设备空间管理、缓冲管理等等。
(4)组块与缓冲通常高速外设的输入输出操作是以块为单位的,如磁盘块的大小是固定的。所谓块,又称为物理记录,是实际从设备读取或写到设备上的信息单位。相应的逻辑记录是从用户观点考察的一个信息单位。为了提高辅助存储器尤其是磁带的利用率,一般由若干逻辑记录组成一个物理记录,这称为组块技术。缓冲是一种暂存技术。它利用某个存储设备,在数据的传输过程中进行暂时的存储。缓冲技术的引入,有效地改善了处理器与输入输出设备之间速度不匹配的情况,也减少了设备的中断请求次数。缓冲技术可以采用硬件缓冲和软件缓冲两种。硬件缓冲是利用专门的硬件寄存器作为缓冲区;软件缓冲是利用操作系统的管理,用主存中的一个或多个区域作为缓冲区,进而可以形成缓冲池。
(5)虚设备采用假脱机技术,可以将低速的独占设备改造成一种可共享的设备,而且一台物理设备可以对应若干台虚拟的同类设备。假脱机简称spooling,是利用多道程序技术,采用一组程序或进程模拟一台输入输出处理机,脱机输出是使用虚设备技术的典型例子。在现代计算机系统中,每个窗口可以用一台设备来模拟自身,如常见的多窗口技术,即在一个终端上开多个窗口,每个窗口可以独立地进行显示,以监视用户不同任务的执行情况,这是通过缩小显示区域、平铺或重叠显示来模拟多个显示器的。
2.设备的分配
设备分配的原则是按照设备特性和用户要求来决定的。设备分配的目的是既要充分发挥设备的使用效率,尽可能地让设备忙;又要避免形成死锁;另外,还要做到设备的独立性,即用户程序面对的是逻辑设备,分配程序将在系统中把逻辑设备转换成物理设备之后,再根据要求的物理设备状态进行分配。设备分配有两种方法,即静态分配方法和动态分配方法。静态分配方法是在用户作业开始执行之前,系统一次分配该作业所需求的全部设备、控制器和通道,一旦分配之后,这些设备、控制器和通道就一直为该作业所占有,直到该作业终止而撤消。显然,设备的使用效率低。动态分配在进程运行过程中根据运行的需要而进行。当进程需要设备时,通过系统调用命令申请设备,由系统按照设定的策略分配相应的设备、控制器和通道给进程,一旦用完以后,便立即释放。动态分配方法有利于提高设备的利用率,但如果分配算法选用不当,有可能产生死锁。
3.磁盘调度算法
设备的动态分配算法与进程调度相似,也是基于一定的分配策略的。常用的分配策略有先请求先分配、优先级高者先分配等策略。在多道程序系统中,低效率通常是由于磁盘类旋转设备使用不当造成的。操作系统中,对磁盘的访问要求来自多方面,常常需要排队。这时,对众多的访问要求按一定的次序响应,会直接影响磁盘的工作效率,进而影响系统的性能。访问磁盘的时间因子由3部分构成,它们是查找(查找磁道)时间、等待(旋转等待扇区)时间和数据传输时间,其中查找时间是决定因素。因此,磁盘调度算法先考虑优化查找策略,需要时再优化旋转等待策略。①先来先服务(FCFS)调度:按先来后到次序服务,未作优化。②最短查找时间优先(SSTF)调度:FCFS会引起读写头在盘面上的大范围移动,SSTF查找距离磁头最短(也就是查找时间最短)的请求作为下一次服务的对象。SSTF查找模式有高度局部化的倾向,会推迟一些请求的服务,甚至引起无限拖延(又称饥饿)。③SCAN调度:又称电梯算法,SCAN算法是磁头前进方向上的最短查找时间优先算法,它排除了磁头在盘面局部位置上的往复移动,SCAN算法在很大程度上消除了SSTF算法的不公平性,但仍有利于对中间磁道的请求。
关员范

ZxID:235013

等级: 牛刀小试
举报 只看该作者 板凳   发表于: 2011-05-15 0
存储管理
现代计算机系统中的存储系统常是多级存储体系,至少有主存(内存)和辅存(外存)两级。有的系统有更多级。主存是由系统实际提供的存储单元(常指字节)组成的一个连续地址空间,处理器可直接存取。辅存是指软盘、硬盘、光盘和磁带等一些外部存储部件,常用来存放暂不执行的程序和数据,处理器不能直接访问,需通过启动I/O设备,才能进行内存、外存交换。其访问速度慢,但价格便宜,常用作主存的后援设备。主存大小由系统硬件决定,是实实在在的存储,它的存储容量受到实际存储单元的限制。虚拟存储(简称虚存)不考虑实际主存的大小和数据存取的实际地址,只考虑相互有关的数据之间的相对位置,其容量由计算机的地址的位数决定。系统中主存的使用一般分成两部分,一部分为系统空间,存放操作系统本身及相关的系统数据,另一部分为用户空间,存放用户的程序和数据。
(1)地址重定位用户程序需调入主存运行,即从辅存把用户已经编译链接的目标程序(有时称为可执行程序)装入主存。由于用户作业的存储空间是运行时确定的,所以程序中的操作地址都采用相对地址(逻辑地址)的形式。把相对地址空间的程序转换成在绝对地址(物理地址)空间上能够执行的过程称为地址重定位,也称为地址映射或地址映像。地址重定位有两种:静态重定位和动态重定位。静态重定位是指在程序装入时完成,一般由软件实现;动态重定位是指在程序执行时实现地址转换,它通常由一个基本地址寄存器和一个加法器组成的动态重定位机制实现。
(2)存储管理的功能早期的单用户操作系统,一次只允许一个用户程序驻留,它拥有用户地址空间的全部访问权限,存储管理的任务是存储空间的分配与回收。在多道程序系统,多个程序同时驻留内存,如何有效地利用主存,如何让需要较大运行空间的作业运行,如何保护与共享主存等,都是存储管理应解决的问题。存储管理应提高存储资源的利用效率,又方便用户使用,存储管理的任务应具有如下功能:①分配与回收:主存分配方法有两种:静态分配与和动态分配。静态分配是指在目标模块装入主存时即取得所需空间,直至完成不再变动;动态分配则允许进程在运行过程中继续申请主存空间。采用动态分配方法的系统中,常配合使用合并自由区的方法,使一个连续的空区尽可能地大。②存储扩充:提供虚拟存储器,使计算机系统似乎有一个比实际主存储器容量大的主存空间。需考虑放置策略。③共享与保护:共享指共享在主存中的程序或数据,如多个用户共享编辑程序成编译程序等。由于多道程序共享主存,每个程序都应有它单独的主存区域,各自运行,互不干扰。
2.实存管理
(1)单一连续分配在单道程序系统中,主存区域的用户空间全部为一个作业或进程占用,单一连续分配方法主要用于早期单道批处理系统以及80年代个人计算机系统,单一连续分配方法主要采用静态分配方法,为降低成本和减少复杂度,常不对主存进行保护,会引起冲突而使系统瘫痪。
(2)固定分区分配固定分区分配法是把主存空间固定地划分为若干个大小不等的区域,划分的原则由系统决定。系统使用分区表描述分区情况。
(3)可变分区分配可变分区分配方法是将主存空间按用户要求动态地划分若干个分区。这样就消除了固定分区分配方法中的小作业占据大分区造成的浪费(这种浪费称为内碎片)。可变分区分配系统中初始时只有一个分区。随后,分配程序将这个区依次分给作业或进程。继续考察连续分配方案:一个作业必须占据相邻接的存储单元。在可变分区分配系统中,并不作出作业有多长的的假定(除了它们不能大于计算机内可利用主存的尺寸之外。当作业到达时,如果调度机构决定它们开始运行,它们就能获得必要的存储区,一点浪费也没有———存储区的分区与作业的长度相符。)但是,每种存储组织方案都包含一定程度的浪费。在可变分区分配系统中,主存中的作业在开始装入和归还自由区之前,主存浪费并不明显,这些自由区可以被其分作业使用。即使如此,剩余的自由区域可能变得很小。因此在可变分区分配系统中,确实会出现存储器浪费,这种现象称为外部碎片。①合并自由区在可变分区分配系统中,当一个作业完成时,能够检测到被释放的存储区是否与其他自由存储区域(自由区)相邻接。如果与其他自由存储区邻接,可以在自由存储区表记录上新增加一个自由区,或新的自由区与相邻接的现存自由区合并的单一自由区。合并相邻接的自由区以形成单个更大的自由区的过程叫做合并。用合并自由区的方法,我们重新获得最大可能连续的存储块。②存储拼接即使合并了自由区,经常发现分布在主存各处的破碎的自由区在主存中占据了相当数量的空间。有时,当一个作业申请一定数量的主存,而此时却没有单个的自由区大到足够装下这个作业,虽然自由区的总和大于新作业所要的存储区。存储拼接或存储紧凑也称碎片收集,移动存储器中所有被占用的区域到主存的某一端。这样留下单独的大的存储自由区,取代在可变分区多道程序设计中常见的许多小自由区。当所有可利用的自由存储区连续时,一个正等待着的作业能够调入运行,因为它的存储需求能被拼接形成的单个自由满足。③存储分配算法存储分配算法用来决定输入的程序和数据放到主存中的什么地方。
常用3种算法是:
•最佳适应算法:选择最小的足够装入的可利用的自由区。对许多人来说,最佳适应看起来是最直观的,吸引人的算法。
•首次适应算法:从主存低地址开始选择第一个足够装入的可利用的自由区。首次适应也具有直观吸引力,此算法可以快速做出分配决定。
•最差适应算法:最差适应说的是,总是将一个程序放入主存中最大的自由区。这种方法吸引人的原因很简单:在大自由区中放入程序后,剩下的自由区经常也很大,于是也能装下一个较大的新程序。
(4)交换上述3种方法都把用户作业完全地连续存放在一个存储区区域中,为了能在较小的主存空间中运行较大的作业,常采用交换技术。交换技术是指将作业不需要或暂时不需要的部分(进程)移到辅存,让出主存空间以调入需要的部分,交换到辅存的部分也可以再次被调入。实际上这是有辅存作缓冲,让用户程序在较小的存储空间中,通过不断地换出作业或进程而运行较大的作业。
3.虚存组织
虚拟存储通常涉及存储空间大于计算机系统主存中可利用存储空间时的寻址能力问题。虚拟存储系统的特点是运行程序访问的地址不是主存中可以获得的,即运行进程访问的地址与主存可用的地址相脱离。运行进程访问的地址称为虚地址,主存中使用的地址称为实地址。一个运行进程可以访问的虚地址范围称为进程的虚地址空间,相应的,可使用的实地址范围称为实地址空间。
(1)分段存储组织可变分区分配方案中,主存中放置的程序常采用首次适应、最佳适应或最差适应算法实现,但运行的程序需连续存放在一个分区中。一个作业是由若干个具有逻辑意义的段(如主程序、子程序、数据段等)组成。分段系统中,允许程序(作业)占据主存中若干分离的分区。每个分区存储一个程序分段。这样,每个作业需要几对界限地址,判定访问地址是否越界也困难了。在分段存储系统中常常利用存储保护健实现存储保护。分段系统中虚拟地址是一个有序对(段号,段内位移)。系统为每一个作业建立一个段表,其内容包括段号与主存起始地址的对应关系、段长和状态等。状态指出这个段是否已调入主存,即主存起始地址指出这个段,状态也指出这个段的访问权限。分段系统的动态地址转换是这样进行的:进程运行时,其段表的首地址已在基本地址寄存器中,执行的指令访问虚存(s,d)(取指令或取操作数)时,首先根据段号s查段表,若段已经调入主存,则得到该段的主存起始地址,然后与段内相对地址(段内偏移量)相加,得到实地址。如果该段尚未调入主存,则产生缺段中断,以装入所需要的段。
(2)页式存储组织页式存储组织与存储组织相似。但是,主存被分划成若干定长的页,页式系统中虚地址是一个有序对(页号,页内位移)。系统为每一个进程建立一个页表,其内容包括进程的逻辑页号与物理页号的对应关系、状态等。页式系统的动态地址转换是这样进行的,进程运行时,其页表的首地址已在系统的动态地址转换机构中的基本地址寄存器中,执行的指令访问虚存地址(p,d)时,首先根据页号p查页表,由状态可知,这个页是否已经调入主存。若已调入主存,则得到该页的主存位置,然后,与页内相对位移组合,得到实地址;如果该页尚未调入主存,则产生缺页中断,以装入所需的页。
(3)段页式存储组织段页式存储组织综合了段式组织与页式组织的特点,主存被分划成定长的页,段页式系统中虚地址形式是(段号、段内页号、页内位移)。系统为每个进程建立一个段表,为每个段建立一个页表。
4.虚存管理
实存管理中曾讨论过调入、放置(放入分区)和交换(swapping)等问题,虚拟存储系统同样存在这些问题。
(1)调入策略这涉及在什么时候一页或一段要从辅存调入主存,有两种算法:直到进程访问到某页或某段时,才把这个页或段调入主存,这称为请求调入方案;先行调入方案试图预测进程将要访问的是哪些页或段,则在访问以前先行调入这些页或段到主存。
(2)放置策略这涉及将调入的页或段放在主存的什么地方,页式系统可以放置在任一可利用的实页中,分段系统则类似于可变分区分配系统。
(3)置换策略这涉及到进程已用完了该进程的可用主存空间时,选择淘汰哪些页或段,腾出空间放置调入的页或段。在请求页式存储系统中,有若干淘汰算法(置换策略):①最优(OPT)算法:选择不再使用或最远的将来才被使用的页,这是理想的算法,但难以实现,常用于淘汰算法的比较。②随机(RAND)算法:随机地选择被淘汰的页,开销小,但可能选中立即就要访问的页。③先进先出(FIFO)算法:选择在主存驻留时间最长的页,似乎合理,但可能淘汰立即要使用的页。另外,使用FIFO算法时,在未给予进程分配足够的页面数时,有时会出现给予进程的页面数增多,缺页次数反而增加的异常现象。④最近最少使用(LRU)算法:选择离当前时间最近的一段时间内使用得最少的页,这个算法的主要出发点是,如果某个页被访问了,则它可能马上就要被访问;反之,如果某个页长时间未被访问,则它在最近一段时间也不会被访问。存储管理策略的基础是局部性原理———进程往往会不均匀地高度局部化地访问主存。局部性表现为时间局部性和空间局部性两类:时间局部性是指最近被访问的存储位置,很可能不久的将来还要访问,如循环、栈等;空间局部性是指存储访问有成组的倾向:当访问某个位置后,很可能也要访问其附近的位置,如访问数组,代码顺序执行等。存储访问局部性最有意义的结果是,只要进程所需要的页面子集驻留在主存中,进程就可以有效地运行,根据局部性访问特性,Denning阐述了程序性能的工作集理论。简言之,工作集是进程活跃地访问的页面的集合。工作集理论指出,为使进程有效地运行。它的页面工作集应驻留在主存中。否则,由于进程频繁地从辅存请求页面,而出现称为“颠簸”(又称抖动)的过度的页面调度活动。此时,处理页面调度上的时间超过了程序的执行时间。显然,此时CPU的有效利用率会急速下降。当一个进程陷入颠簸状态时,有的系统将采用全局页面调度方法以试图消除颠簸现象,即将其他进程拥有的主存页面调出主存供这个进程使用
关员范

ZxID:235013

等级: 牛刀小试
举报 只看该作者 沙发   发表于: 2011-05-15 0
软件工程
自从1968年首次提出软件工程一词以来,软件工程已成为计算机软件的一个重要分支和研究方向。软件工程是指应用计算机科学、数学及管理科学等原理,以工程化的原则和方法来解决软件问题的工程。其目的是提高软件生产率、提高软件质量、降低软件成本。
一、软件工程基本概念
早期的软件主要指程序。程序的开发采用个体工作方式,开发工作主要依赖于开发人员的个人技能和程序设计技巧。当时的软件通常缺少与程序有关的文档,软件开发的实际成本和进度往往与预计的相差甚远,软件的质量得不到保证,开发出来的软件常常不能使用户满意。随着计算机应用的需求不断增长,软件的规模也越来越大,然而软件开发的生产率远远跟不上计算机应用的迅速增长。此外,由于软件开发时缺少好的方法指导和工具辅助,同时又缺少有关的文档,使得大量已有的软件难以维护。上述这些问题严重地阻碍了软件的发展,20世纪60年代中期,人们把上述软件开发和维护中的各种问题称为“软件危机”。1968年在德国召开的NATO会议上,首次提出了“软件工程”一词,希望用工程化的原则和方法来克服软件危机。在此以后,人们开展了软件开发模型、开发方法、工具与环境的研究,提出了瀑布模型、演化模型、螺旋模型、喷泉模型等开发模型,出现了面向数据流方法、面向数据结构的方法、面向对象方法等开发方法,以及一批CASE(computer aided software engineering)工具和环境。
(一) 软件生存周期
如同人的一生要经历婴儿期、少年期、老年期直至死亡这样一个全过程一样,任何一个软件产品或软件系统也都要经历软件定义、软件开发、软件维护直至被淘汰这样一个全过程,我们把软件的这一全过程称为软件生存周期。软件定义、软件开发、软件维护等阶段还可分为若干个阶段,每个阶段相对独立又彼此有联系,上一阶段的工作结果是下一阶段工作的依据,下一阶段是上一阶段的进化,它更接近于问题的解。
1.软件定义
软件定义阶段主要解决的问题是待开发的软件要“做什么”,也就是要确定软件的处理对象,软件与外界的接口,软件的功能和性能,界面以及有关的约束和限制。软件定义阶段通常可分成系统分析、软件项目计划、需求分析等阶段。
(1)系统分析这里讲的系统是指计算机系统,包括计算机硬件、软件和使用计算机的人。系统分析的任务是确定待开发软件的总体要求和适用范围,以及与之有关的硬件、支撑软件的要求。系统分析阶段的参加人员有用户、项目负责人、系统分析员。该阶段产生的文档可合并在软件项目计划阶段的文档(项目计划书)中。
(2)软件项目计划软件项目计划的任务是确定待开发软件的目标,对其进行可行性分析,并对资源分配、进度安排等做出合理的计划。软件项目计划阶段的参加人员有用户、项目负责人、系统分析员。该阶段所产生的文档有可行性分析报告、项目计划书。
(3)需求分析需求分析的任务是确定待开发软件的功能、性能、数据、界面等要求,从而确定系统的逻辑模型。需求分析阶段的参加人员有用户、项目负责人系统分析员。该阶段产生的文档有需求规约(requirements specification),习惯上称它为需求规格说明书。
2.软件开发
软件开发阶段主要解决的问题是该软件“怎么做”,包括数据结构和软件结构的设计,算法设计,编写程序,测试,最后得到可交付使用的软件。软件开发阶段通常可分成软件设计、编码、软件测试等阶段。
(1)软件设计软件设计通常还可分成概要设计和详细设计。概要设计的任务是模块分解,确定软件的结构,模块的功能和模块间的接口,以及全局数据结构的设计。详细设计的任务是设计每个模块的实现细节和局部数据结构的设计。概要设计阶段的参加人员有系统分析员和高级程序员,详细设计阶段的参加人员有高级程序员和程序员。设计阶段产生的文档有设计规约(design specification),也称为设计说明书,它也可分为概要设计说明书和详细设计说明书。根据需要还可产生数据说明书和模块开发卷宗。
(2)编码编码的任务是用某种程序语言为每个模块编写程序。编码阶段的参加人员有高级程序员和程序员,产生的文档有程序清单。
(3)软件测试软件测试的任务是发现软件中的错误,并加以纠正。软件测试阶段的参加人员通常由另一部门(或单位)的高级程序员或系统分析员承担,该阶段产生的文档有软件测试计划和软件测试报告。
3.软件维护
软件开发阶段结束后,软件即可交付使用。软件的使用通常要持续几年甚至几十年,在整个使用期间,都可能因为某种原因而修改软件,这便是软件维护。引起修改软件的原因主要有三种:一是在软件运行过程中发现了软件中隐藏的错误而修改软件;二是为了适应变化了的环境而修改软件;三是为修改或扩充原有软件的功能而修改软件。因此软件维护的任务就是为使软件适应外界环境的变化、实现功能的扩充和质量的改善而修改软件。软件维护阶段的参加人员是维护人员,该阶段产生的文档有维护计划和维护报告。目前,软件生存周期各阶段的划分尚不统一,有的分得粗些,有的分得细些。许多场合软件开发阶段都是从需求分析阶段开始的。本书中,我们也将需求分析看作为软件开发的开始阶段。
(二) 软件开发模型
为了指导软件的开发,用不同的方式将软件生存周期中的所有开发活动组织起来,形成不同的软件开发模型。常见的软件开发模型有瀑布模型、演化模型、螺旋模型、喷泉模型等。瀑布模型如下图所示,它是1970年由W.Royce提出的。该模型给出了软件生存周期各阶段的固定顺序,上一阶段完成后才能进入到下一阶段,整个过程就像流水下泻,故称之为瀑布模型。图中的虚线部分表示在某一阶段发现错误时,其错误可能是由上一阶段造成的,因此开发过程可能要反馈到上一阶段。在瀑布模型中,各阶段结束后,都要进行严格的评审。
(三) 软件开发方法
软件开发过程模型规定软件开发活动的组合应用方式,要保证开发活动的高质量,还需要有相应的软件开发方法作为技术支持。近10年来,软件工作者研制出了许多工程化的软件开发方法,例如70年代初提出的用于编写程序的结构化程序设计方法,确实起到了提高效率,减少错误的效果。但是70年代中期,软件工作者认识到编写程序仅仅是软件开发的一个环节,而合理地建立系统结构比编定程序更为重要。所以研究的重点前移到设计阶段,出现了设计阶段的结构化设计(SD)方法和JACKSON等方法,到了70年代后期,人们又发现事先对用户的要求进行分析更为重要,故又把重点前移到分析阶段。出现了用于分析阶段的结构化分析(SA)方法、结构化分析与设计技术(SADT)等。随着计算机技术的迅速发展,在80年代初期的实时、并发和网络等软件的开发过程中,特别是在第五代计算机研究工作中,又提出了面向对象的设计方法。现在流行的方法有多种,它们的适用范围也各不相同。有的适用于一般的数据处理系统,如SA、SD(两者统称为结构化分析与设计方法,即Yourdon方法)、JACKSON方法;有的适用于大型的复杂系统,如SADT技术;有的适用于实时事务处理系统,如FSM方法;有的适用于并发软件系统,如PETRI网方法;作为90年代代表作的面向对象方法,其应用已几乎遍布各个领域。这些方法除了适用范围不同外,方法形成的基础、处理规则和对所开发软件风格的要求等都各有侧重。用什么方法来说明用户的要求、用什么方法来设计软件以及用什么方法对软件进行测试和维护,直接影响所开发软件的质量。
(四) 软件开发工具
早期的软件开发除了一般的程序设计语言外尚缺少工具的支持,致使编程工作量大,质量和进度却难以保证,导致人们将很多的精力和时间花费在程序的编制和调试上;相比之下,在更重要的软件的需求和设计上反而得不到必要的精力和时间投入。软件开发工具的发展促进了软件开发的高速度和高质量。工具的发展是从单项工具的开发逐步走向集成的工具发展的。同时,软件开发方法的有效应用也必须得到相应工具的支持,否则方法将难以有效的实施。工具的完善和发展将促进软件开发的进步和完善。原型化方法的实施基础就是得到了开发工具的支持。快速原型化之所以能够实现的基础就是原型化人员在快速建模时得到了工具的支持,否则原型化方法是无法实施的。
(五) 软件开发环境
软件工程环境或称软件开发环境是全面支持软件开发全过程的软件工具集合。这些软件工具按照一定的方法或模式组合起来,并能支持软件开发生命周期的各个阶段和各项任务的完成。CASE,即计算机辅助软件工程环境是当前软件开发环境中富于特色的研究工作和发展方向,它的成功将最大限度地降低软件工程的技术难度并使软件开发的质量得到保证。
二、结构化生命周期方法
结构化分析与设计方法在软件工程中应用已很普遍,并且越来越成熟。有许多大、中型项目都采用了这种方法进行开发并取得了显著的成果。按B.W.Boehm的描述,瀑布模型的的软件生命周期可划分七个阶段:系统需求分析、软件需求分析、概要分析、详细设计、编码、测试和运行维护。
(一) 系统需求
“系统需求”包括:问题定义、可行性研究及软件计划。
1.问题定义
软件开发的第一步就是进行问题定义。问题定义阶段必须回答的关键问题:“软件要解决的问题是什么?”如果不知道问题是什么就试图解决这个问题,显然是盲目的,只会白白浪费时间和金钱,最终得出的结果很可能是毫无意义的。尽管确切地定义问题的必要性是十分明显的,但是在实践中它却可能是最常被忽视的一个步骤。这里所说的问题,就是指用户的基本要求。说得通俗些,问题定义实际上就是了解用户到底要建立什么系统,并确定分析员下一步应该做什么。因此,问题定义的来源是用户。通过问题定义阶段的工作,系统分析员应该提出关于问题性质、工程目标和规模的书面报告。这一阶段的分析员应尽可能站在较高的角度去抽象、概括所要干的事情,不要拘泥于问题实现的细节。尽管用户可能总是习惯于这样做,但分析员在这一阶段必须超脱出来,居高临下鸟瞰系统的全貌。通过对系统的实际用户和使用部门负责人的访问调查,分析员扼要地写出他对问题的理解,并在使用部门负责人的会议上认真讨论这份书面报告,澄清含糊不清的地方,改正理解不正确的地方,最后得出一份双方都满意的文档。当用户的要求不是很多并且不太复杂时,一两个分析员用上一两天就可以完成这一工作了。但当系统比较大,且复杂时,恐怕就要组织一个问题定义小组,花上一两个星期,甚至数月来定义用户的问题。如果分析员和用户及使用部门的负责人对所要解决的问题取得完全一致的看法,而且使用部门的负责人同意开发工程继续进行下去,那么开发工程将转入生命周期的下一个阶段———可行性研究。
2.可行性研究
并不是所有问题都有简单明显的解决办法,事实上,许多问题不能在预定的系统规模之内解决。如果问题没有可行的解,那么花费在这项开发工程上的任何时间、资源、人力和经费和都是无谓的浪费。可行性研究的目的在于用最小的代价确定在问题定义阶段所确定的系统的目标和规模是否现实,所确定的问题是否可以解决,系统方案在经济上、技术上和操作上是否可以接受。可行性研究着重对如下具体方案考虑:
(1)经济可行性。估计开发费用以及新系统可能带来的收益,将两者进行权衡,看结果是否可以接受。
(2)技术可行性。对要求的功能、性能以及限制条件进行分析,是否能够做成一个可接受的系统。所考虑的因素通常还应包括开发的风险,是否能够得到需要的软件和硬件资源和一个熟练的有能力的开发队伍,与系统开发有关的技术是否足以支持系统的研制。技术可行性的估计,需要有经验的人员去完成。
(3)操作可行性。判断系统的操作方式在该用户组织内是否可行。分析、设计人员应以新系统的目标和作用范围为依据提出一种以上的设计方案,从技术可行性、经济可行性、操作可行性等方面进行比较,并选择出综合最优的方案。根据可行性研究结果要做出的决定是:是否继续按预定目标进行这项开发工程,可行性分析人员必须清楚地表明他对这个关键性决定的建议。如果认为值得继续进行这项开发工程,则应提供选择一种最好的解法并说明理由。可行性分析是在问题的目标和约束之间的一种权衡,还可能有的结果则是修改目标或放宽约束。
3.软件计划
分析人员应该为推荐的系统草拟一份软件计划,其中描述的是为了成功地进行一个软件项目,其所需要做的工作、需要的资源、需要的工作量和费用以及应遵循的进度安排。软件计划由两项任务组成:分析和估算。分析是对系统内各软件功能的界限的划定。估算是指根据已有的定性数据和已往的经验对系统开发的资源、费用和进度进行定量的估计。软件开发项目的进度安排可以从两种观点来考虑:一是项目的交付日期已定,负责开发工作的软件机构被限制在一个规定的时间范围内分配其工作量。二是项目最后的交付日期由软件机构自已确定,可以从最佳的利用各种资源的角度出发来分配工作量,项目最后的交付日期经过对软件各部分仔细分析后才确定。在多数项目中,遇到的往往是第一种情况。软件计划的阅读者可以包括软件主管部门、用户和技术人员。所确定的成本与进度可供主管部门复审。它同时也给出了整个软件生命周期的基本成本预算的进度安排。
(二) 软件需求分析
软件需求分析工作是软件生存期中重要的一步,也是决定性的一步。只有通过软件需求分析,才能把软件功能和性能的总体概念描述为具体的软件需求规格说明,从而奠定软件开发的基础。软件需求分析工作也是一个不断认识和逐步细化的过程。该过程将软件设计阶段所确定的软件范围(工作域)逐步细化到可详细定义的程度,并分析出各种不同的软件元素,然后为这些元素找到可行的解决方法。制定软件的需求规格说明不只是软件开发人员的事,用户也起着至关重要的作用。用户必须对软件功能和性能提出初步要求,并澄清一些模糊概念。而软件分析人员则要认真了解用户的要求,细致地进行调查分析,把用户“做什么”的要求最终转换成一个完全的、精细的软件逻辑模型并写出软件的需求规格说明,准确地表达用户的要求。
1.软件需求分析任务
需求分析所要做的工作是深入描述软件的功能和性能,确定软件设计的限制和软件同其他系统元素的接口细节。定义软件的其他有效性需求。分析员通过需求分析,逐步细化对软件的要求,描述软件要处理的数据域,并给软件开发提供一种可转化为数据设计、结构设计和过程设计的数据与功能表示。在软件完成后,制定的软件需求规格说明还要为评价软件质量提供依据。需求分析阶段研究的对象是软件项目的用户要求。需要注意的是,必须理解用户的各项要求,但又不能全盘接受所有的要求。因为并非所有用户要求都是合理的。对其中模糊的要求还需要澄清,然后才能决定是否可以采纳。对于那些无法实现的要求应向用户做充分的解释,以求得谅解。准确地表达所接受的用户要求,是需求分析的另一个重要方面。只有经过确切描述的软件需求才能成为软件设计基础。通常软件开发项目是要实现目标系统的物理模型,即确定待开发软件系统的系统元素,并将功能和数据结构分配到这些系统元素中。它是软件实现的基础。但是目标系统的具体物理模型是由它的逻辑模型经实例化,即具体到某个业务领域而得到的。与物理模型不同,逻辑模型忽视实现机制与细节,只描述系统要完成的功能和要处理的数据。作为目标系统的参考,需求分析的任务就是借助于当前系统的逻辑模型导出目标系统的逻辑模型,解决目标系统的“做什么”的问题。
(1)获得当前系统的物理模型。当前系统可能是需要改进的某个已在计算机运行的数据处理系统,也可能是一个人工的数据处理过程。在这一步首先分析、理解当前系统是如何运行的,了解当前系统的组织机构、输入输出、资源利用情况和日常数据处理过程,并用一个具体模型来反映自己对当前系统的理解。这一模型应客观地反映现实世界的实际情况。
(2)抽象出当前系统的逻辑模型。在理解当前系统“怎样做”的基础上,抽取其“做什么”的本质,从而从当前系统的物理模型抽象出当前系统的逻辑模型。在物理模型中有许多物理因素,随着分析工作的深入,有些非本质的物理因素就成为不必要的负担,因而需要对物理模型进行分析,区分出本质的和非本质的因素,去掉那些非本质的因素即可获得反映系统本质的逻辑模型。
(3)建立目标系统的逻辑模型。分析目标系统与当前系统逻辑上的差别,明确目标系统统到底要“做什么”,从当前系统的逻辑模型导出目标系统的逻辑模型。(4)为了对目标系统做完整的描述,还需要对得到的逻辑模型做一些补充。①说明目标系统的用户界面。根据目标系统所处的应用环境及它与外界环境的相互关系,研究所有可能与它发生联系和作用的部分,从而决定人机界面。②说明至今尚未详细考虑的细节。这些细节包括系统的启动和结束、出错处理、系统的输入输出和系统性能方面的需求。③其他。例如系统的其他必须满足的性能和限制等等。
2.需求分析的过程
需求分析阶段的工作,可以分成以下4个方面:对问题的识别、分析与综合、制定规格说明和评审。
(1)问题识别首先系统分析人员要研究计划阶段产生的可行性分析报告(如果有的话)和软件项目实施计划。主要是从系统的角度来理解软件并评审用于产生计划估算的软件范围是否恰当。确定对目标系统的综合要求,即软件的需求。并提出这些需求实现条件,以及需求应达到的标准。也就是要求所开发软件做什么,做到什么程度。这些需求包括:
•功能需求:列举出所开发软件在职能上应做什么。这是最主要的需求。
•性能需求:给出所开发软件的技术性能指标,包括存储容量限制、运行时间限制、安全保密性等。
•环境需求:这是对软件系统运行时所处环境的要求。例如在硬件方面,采用什么机型、有什么外部设备、数据通信接口等等。在软件方面,采用什么支持系统运行的系统软件(指操作系统、网络软件、数据库管理系统等)。在使用方面,需要使用部门在制度上、操作人员的技术水平上应具备什么样的条件等等。
•可靠性需求:各种软件在运行时,失效的影响各不相同。在需求分析时,应对所开发软件在投入运行后不发生故障的概率,按实际的运行环境提出要求,对于那些重要的软件,或是运行失效会造成严重后果的软件,应当提出较高的可靠性要求,以期在开发的过程中采取必要的措施,使软件能够高度可靠地稳定运行,避免因运行事故而带来的损失。
•安全保密要求:工作在不同环境的软件对其安全,保密的要求显然是不同的。应当把这方面的需求恰当地做出规定,以便对所开发的软件给予特殊的设计,使其在运行中其安全方面的性能得到必要的保证。
•用户界面需求:软件与用户界面的友好性是用户能够方便、有效、愉快地使用该软件的关键之一。从市场角度来看,具有友好用户界面的软件有很强的竞争力。因此,必须在需求分析时,为用户界面细致地规定达到的要求。
•资源使用需求:这是指所开发软件运行时所需的数据、软件、内存空间等各项资源外,软件开发时所需的人力、支撑软件、开发设备等则属于软件开发的资源,需要在需求分析时加以确定。
•软件成本消耗与开发进度需求:在软件项目立项后,要根据合同规定,对软件开发的进度和步骤的费用提出要求,作为开发管理的依据。
•预先估计以后系统可能达到的目标。这样,在开发过程中,可对系统将来可能扩驻与修改做准备。一旦需要时,就比较容易进行补充和修改。
•功能性需求是人们普遍关注的,但常常忽视对非功能性需求的分析。其实非功能性需求并不是无关紧要的,它们涉及到的方面多而广,因而容易被忽略。如果在进行需求分析之前没有做过可行性分析,那么补充完成这部分工作往往是必要的。从问题定义和调查研究入手,与用户密切联系,详细了解问题提出的背景,弄清要解决什么问题。然后从软件系统特性和用户目标出发,做市场调查和现场考察。仔细收集信息之后进行数据分析和功能分析,建立系统的高层逻辑模型,再进一步做成本/效益分析。最后提交一份可行性分析报告,从技术、经济、社会效应等方面论证可行性,以确认软件开发的目标是否可行。问题识别的另一项工作是建立分析所需要的通信途径,以保证能顺利地对问题进行分析。分析员必须与用户、软件开发机构的管理部门、软件开发组的人员建立联系。项目负责人在此过程中起协调人的作用。分析员通过这种通信途径与各方商讨,以便能满足用户的要求。
(2)分析与综合需求分析的第二步工作是问题分析和方案的综合。分析员需从数据流和数据结构出发,逐步细化所有的软件功能,找出系统各元素之间的联系、接口特性和设计上的限制,分析它们是否满足功能要求,是否合理。依据功能需求、性能需求、运行特性和设计上的限制分析它们是否满足功能要求,是否合理。依据功能需求、性能需求、运行环境需求等,剔除其不合理的部分,增加其需要的部分。最终综合成系统的解决方案,给出目标系统的详细逻辑模型。在这个步骤中,分析和综合工作反复地进行。在对现行问题和期望的信息(输入和输出)进行分析的基础上,分析员开始综合出一个或几个解决方案,然后检查这些方案是否符合软件计划中规定的范围等等,再进行修改。总之,对问题进行分析和综合的过程将一直持续到分析员与用户双方都感到有把握正确地制定该软件的规格说明为止。常用的分析方法有面向数据流的结构化分析方法(简称SA)、面向数据结构的Jackson方法(简称JSD)、面向对象的分析方法(简称OOA)等,以及用于建立动态、模型的状态迁移图或Petri网等。这些方法都采用图文结合的方式,可以直观地描述软件的逻辑模型。
(3)编制需求分析的文档已经确定的需求应当得到清晰准确的描述。通常把描述需求的文档叫做软件需求规格说明书。同时,为了确切表达用户对软件的输入输出要求,还需要制定数据要求说明书及编写初步的用户手册,着重反映被开发软件的用户界面和用户使用的具体要求。此外,依据在需求分析阶段对系统的进一步分析,从目标系统的精细模型出发,可以更确切地估计所开发项目的成本与进度,从而修改、完善与确定软件开发的实施计划。
(4)需求分析评审作为需求分析阶段工作的复查手段,在需求分析的最后一步,应该对功能的正确性、完整性和清晰性,以及其他需求给予评价。评审的主要内容是:
•系统定义的目标是否与用户的要求一致;
•系统需求分析阶段提供的文档资料是否齐全;
•文档中的所有描述是否完整、清晰、准确所反映用户要求;
•与所在其他系统成分的重要接口是否都已经描述;
•所开发项目的数据流与数据结构是否足够,确定;
•所有图表是否清楚,在不补充说明时能否理解;
•主要功能是否已包括在规定的软件范围之内,是否都已充分说明;
•设计的约束条件或限制条件是否符合实际;
•开发的技术风险是什么;
•是否考虑过软件需求的其他方案;
•是否考虑过将来可能会提出的软件需求;
•是否详细制定了检验标准,它们能否对系统定义是否成功进行确认;
•有没有遗漏、重复或不一致的地方;
•用户是否审查了初步的用户手册;
•软件开发计划中的估算是否受到了影响。为保证软件需求定义的质量,评审应以专门指定的人员负责,并按规程严格进行。评审结束应有评审负责人的结论意见及签字。除分析员之外,用户,开发部门的管理者,软件设计、实现、测试的人员都应当参加评审工作。通常,评审的结果都包括了一些修改意见,待修改完成后再经评审通过,才可进入设计阶段。
3.软件需求分析的原则
近年来已提出了许多软件分析与说明的方法,虽然各种分析方法都有其独特的描述方法,但总的看来,所有分析方法还是有它们共同适用的基本原则。
(1)必须能够表达和理解问题的数据域和功能域所有软件定义与开发工作最终是为了解决数据处理问题,就是将一种形式的数据转换成另一种形式的数据。其转换过程必定经历输入、加工数据和产生结果数据等步骤。对于计算机程序处理的数据,其数据域应包括数据流、数据内容和数据结构。数据流即数据通过一个系统时的数据存储(如磁盘文件或内存缓冲区)中引入附加数据。对数据进行转换是程序中应有的功能或子功能。两个转换功能之间的数据传递就确定了功能间的接口。数据内容即数据项。例如,学生名册包含了班级、人数、每个学生的学号、姓名、性别、各科成绩等。学生名册的内容由它所包含的项定义。为了理解对学生名册的处理,必须要理解它的数据内容。数据结构即各种数据项的逻辑组织。数据是组织成表格,还是组织成有层次的树型结构?在结构中数据项与其他哪些数据项相关?所有数据是在一个数据结构中,还是在几个数据结构中?一个结构中的数据与其他结构中的数据如何联系?这些问题都由数据结构分析来解决。
(2)必须按自项向下、逐层分解的方式对问题进行分解和不断细化如果将软件要处理的问题作为一个整体来看,显得太大太复杂很难理解。如果把问题以某种方式分解为几个较易理解的部分,并确定各部分间的接口,从而实现整体功能。在需求分析阶段,软件的功能域和信息域都能做进一步的分解。这种分解可以是同一层次上的,称为横向分解;也可以是多层次的纵向分解。例如,把一个功能分解成几个子功能,并确定这些子功能与父功能的接口,就属于横向分解。但如果继续分解,把某些子功能又分解为小的子功能,某个小的子功能又分解为更小的功能,这就属于纵向分解了。
(3)要给出系统的逻辑视图和物理视图给出系统的逻辑视图(逻辑模型)和物理视图(物理模型),这对系统满足处理需求所提出的逻辑限制条件和系统中其他成分提出的物理限制条件是必不可少的。软件需求的逻辑视图给出软件要达到的功能和要处理的数据之间的关系,而不是实现的细节。例如,一个商店的销售处理系统要从顾客那里获取订单,系统读取订单的功能并不关心订单数据的物理形式和用什么设计读入,也就是说无需关心输入的机制,只是读取顾客的订单而已。类似的,系统中检查库存的功能只关心库存文件的数据结构,而不关心在计算机中的具体存储方式。软件需求的逻辑描述是软件设计的基础。软件需求的物理视图给出处理功能和数据结构的实际表示形式,这往往是由设备决定的,如一些软件靠终端键盘输入数据,另一些软件靠模拟数据转换设备提供数据。分析员必须弄清系统元素对软件的限制并考虑功能和信息结构的物理表示。
发帖 回复