操作系统与软件工程学习笔记-阿里云开发者社区

开发者社区> 开发与运维> 正文

操作系统与软件工程学习笔记

简介:

慢慢发现,根据需求完成任务代码其实并不是很难,遵循一些项目的规范,采用项目中统一的技术去实现对应的功能。东西都已经封装好了,你只需要使用一些工具或框架就可以轻易实现。

但是,你想要有质的提高,却抛不开基础知识,因为思维是最重要的。因此对一些基础知识进行回顾,以下是对操作系统回顾后的总结。

在回顾中,收获最大的是操作系统主要功能中的“内存扩充”,很值得借鉴学习的!

操作系统的基本特性

(1)并行性与并发性,并行性是指两个或多个事件在同一时刻发生;并发性是指两个或过个事件在同一时间间隔内发生;在多道程序环境下,并发性是指一段时间内宏观上有多个程序在同时运行,但是在但处理机系统中,每一刻却仅能有一道程序执行,故微观上这些程序只能分时地交替执行。对于多处理机。可以实现并行执行,多个程序同时运行。 
(2)引入进程,进程是指在系统中能独立运行并作为资源分配的基本单位。 
(3)引入线程,通常把进程作为分配资源的基本单位,而把线程作为独立运行的独立运行和独立调度的基本单位。 
(4)共享性,在操作系统环境下,所谓共享,是指系统中的资源可供内存中多个并发执行的进程(线程)共同使用。 
(5)互斥共享,仅当A进程访问完并释放该资源后,才允许另一进程对该资源访问。 
(6)同时访问,交替访问。 
(7)虚拟技术,操作系统中所谓的“虚拟”是指通过某种技术把一个物理实体变为若干个逻辑上的对应物。虚拟技术分为时分复用技术和空复用技术。 
(8)时分复用技术,人们利用时分复用技术,将一条物理信道虚拟为多条逻辑信道,将每条信道提供一对用户通话。为每道程序建立一个进程,让多道程序并发地执行。以此来分时使用一台处理机。 
(9)空分复用技术,通常一台机器上只配置一台硬盘,我们可以通过虚拟磁盘技术将一台硬盘虚拟为多台虚拟磁盘。 
(10)异步,如打印请求,而此时打印机正在为其他进程打印,由于打印机术语临界资源,因此正在执行的进程必须等待,且放弃处理机,知道打印机空闲,并在此把处理机分配该进程时,该进程方能继续执行。进程是以人们不可预知的速度向前推进,此即进程的异步性。

操作系统的主要功能

(1)进程控制,主要功能时为作业创建进程,撤销已结束的进程,以及控制进程在运行过程中的状态转换。 
(2)进程同步,进程同步的主要任务是为多个进程(含线程)的运行进行协调。 
(3)进程通信,进程通信的任务就是用来实现在相互合作的进程之间的信息交换。 
(4)调度,分为作业调度和进程调度。作业调度的基本任务是从后备队列中按照一定的算法,选择出若干个作业,为它们分配运行所需要的资源(首先分配内存);进程调度的任务是从进程的就绪队列中,按照一定的算法选出一个进程,把处理机分配给它。 
(5)内存分配,允许正在运行的程序申请附加的内存空间。 
(6)内存保护,确保每道用户程序都只在自己的内存空间内运行,彼此互不干扰。 
(7)在多道程序环境下,每道程序不可能都从“0”地址开始装入内存,这就致使地址空间内的逻辑地址和内存空间中的物理地址不相一致。为使程序正确运行,存储器管理必须提供地址映射功能。 
(8)内存扩充,用于实现请求调入功能和置换功能。请求调入功能允许在装入一部分用户程序和数据的情况下,便能启动该程序运行。在程序运行过程中,若若发现要继续运行时所需的程序和数据尚未装入内存,可向OS发出请求,有OS从磁盘中将所需部分调入内存。置换功能,若发现在内存中已无足够的空间来装入需要调入的程序和数据时,系统应能从内存中的一部分暂时不用的程序和数据调至盘上,以腾出内存空间。 
(9)缓冲管理,例如在I/O设备和CPU之间引入缓冲,可有效缓和两者速度不匹配的矛盾,提高CPU利用率。 
(10)设备分配,处理过程是:设备处理程序首先检查I/O请求的合法性,了解设备状态是否空闲的,了解有关的传递参数以及设置设备的工作方式,blabla….. 
(11)文件管理功能,分为文件存储空间管理、目录管理、文件读写/管理和保护 
(12)操作系统与用户之间的接口,分为用户接口和程序接口。用户接口是提供给用户使用的接口,用户通过该接口取得操作系统的服务;程序接口是提供给程序员在编程时使用的接口,是用户程序取得操作系统服务的唯一途径。


一、软件生命周期 
软件定义 
软件任务立项:名称、性质、目标、意义、规模 
项目可行性分析:技术、经济、操作可行性分析 
制定项目计划:人员、组织、进度资金、设备等多方面 
软件需求分析:功能、性能、数据、操作等方面 
软件开发期 
软件概要设计:软件构造、接口、全局数据和数据环境、模块结构、模块接口等 
软件详细设计:各个模块的程序算法和局部数据结构等细节 
编码和单元测试:程序员完成实现并单元测试 
系统集成测试:把测试过的各个模块使用如渐增集成策略组装起来 
系统确认验证:需要以用户为主体、以需求规格说明书对软件的定义为依据进行逐项确认。 
软件运行与维护

二、软件开发六大模型 
(1)瀑布模型 
瀑布模型是一种基于里程碑的阶段过程模型,它所提供的里程碑式 的工作流程,为软件项 目按规程管理提供了便利,例如,按阶段制定项目计划,分阶段进行成本核算,进行阶段性评 审等;并对提高软件产品质量提供了有效保证。 
瀑布模型的作用还体现在文档上。每个阶段都必须完成规定的文档,并在每个阶段结束前 都要对所完成的文档进行评审。这种工作方式有利于软件错误的尽早发现和尽早解决,并为软 件系统今后的维护带来了很大的便利。 
瀑布模型是一种线性模型,要求项目严格按规程推进,必须等到所有开发工作全部作完以后才能获得可以交付的软件产品。应该讲,通过瀑布模型并不能对软件系统进行快速创建,对 于一些急于交付的软件系统的开发,瀑布模型有操作上的不便。 
瀑布模型主要适合于需求明确,且无大的需求变更的软件开发,例如,编译系统、操作系统等。但是,对于那些分析初期需求模糊的项目,例如那些需要用户共同参加需求定义的项目,瀑布模型也有使用上的不便。

(2)原型模型,分为快速原型方法、原型进化模型 
<1>快速原型方法 
快速原型方法是原型模型在软件分析、设计阶段的应用,用来解决用户对软件系统在需求 上的模糊认识,或用来试探某种设计是否能够获得预期结果。 
快速原型是用来获取用户需求的,或是用来试探设计是否有效的。一旦需求或设计确 定下来了,原型就将被抛弃。因此,快速原型要求快速构建、容易修改,以节约原型创建成本、 加快开发速度。快速原型往往采用一些快速生成工具创建,例如4GL 语言。目前,MicrosoftVisual Basic、Inprise Delphi 等基于组件的可视化开发工具,也被应用于原型创建之中,并 且都是非常有效的快速原型创建工具,而且还可用于原型进化。 
快速原型是暂时使用的,因此并不要求完整。它往往针对某个局部问题建立专门原型, 如界面原型、工作流原型、查询原型等。 
快速原型不能贯穿软件的整个生命周期,它需要和其他的过程模型相结合才能产生作 用。例如,在瀑布模型中应用快速原型,以解决瀑布模型在需求分析时期存在的不足。 
<2>原型进化模型 
原型进化对开发过程的考虑是,针对有待开发的软件系统,先开发一个原型系统给用户使 用,然后根据用户使用情况的意见反馈,对原型系统不断修改,使它逐步接近并最终到达开发目标。跟快速原型不同的是,快速原型在完成需求定义后将被抛弃,而原型进化所要创建的原型则是一个今后将要投入应用的系统,只是所创建的原型系统在功能、性能等方面还有许多不足,还没有达到最终开发目标,需要不断改进。

(3)增量模型 
增量模型是瀑布模型和原型进化模型的综合,它对软件过程的考虑是:在整体上按照瀑布 模型的流程实施项目开发,以方便对项目的管理;但在软件的实际创建中,则将软件系统按功 能分解为许多增量构件,并以构件为单位逐个地创建与交付,直到全部增量构件创建完毕,并 都被集成到系统之中交付用户使用。 
如同原型进化模型一样,增量模型逐步地向用户交付软件产品,但不同于原型进化模型的 是,增量模型在开发过程中所交付的不是完整的新版软件,而只是新增加的构件。

(4)螺旋模型 
螺旋模型即是一种引入了风险分析与规避机制的过程模型,是瀑布模型、快速原型方法和 风险分析方法的有机结合。 
螺旋模型基本方法是,在各个阶段创建原型进行项目试验,以降低各个阶段可能遇到的项 目风险。例如,为了降低用户对软件界面不满意的风险,可以在需求分析阶段建立“界面原型”;为了降低软件不能按设计要求实现的风险,可以在设计阶段针对所采用的技术建立“仿真试探原型”。

(5)喷泉模型 
喷泉模型的过程方法所考虑的是,基于面向对象方法所带来的便利,对软件的分析、设计和实现按照迭代的方式交替进行,并通过进化的方式,使软件分阶段逐渐完整、逐步求精。例如,第一阶段软件开发的目标可以是软件的基本功能;第二阶段可以是在第一阶段建立的软件的基础上,对软件进行进一步的完善,并实现软件的主要功能;第三阶段则是在第二阶段的基础上,对软件进行更加完整的开发,并以实现软件全部功能作为创建目标。

(6)组件复用模型 
自有软件开发以来,软件复用就一直存在,并产生了一些比较常用的软件复用方法。传统的软件复用方法是建立源程序函数库,可以把这些函数用在许多不同的软件上面。而在面向对 象技术中,软件复用则可以通过建立类模块来实现。由于大多数的类模块具有继承性,因此, 比起传统方法,基于类模块的复用效果要好一些。 
组件技术是基于面向对象技术发展起来的,可以把组件看作为一个盒子,它里面封装了许多个类模块。因此,组件比类更大、更 抽象,其中包含了更多的功能,更具有通用性,更加有利于复用。


版权声明:本文首发在云栖社区,遵循云栖社区版权声明:本文内容由互联网用户自发贡献,版权归用户作者所有,云栖社区不为本文内容承担相关法律责任。云栖社区已升级为阿里云开发者社区。如果您发现本文中有涉嫌抄袭的内容,欢迎发送邮件至:developer2020@service.aliyun.com 进行举报,并提供相关证据,一经查实,阿里云开发者社区将协助删除涉嫌侵权内容。

分享:
开发与运维
使用钉钉扫一扫加入圈子
+ 订阅

集结各类场景实战经验,助你开发运维畅行无忧

其他文章