软件工程
一:软件过程
软件过程的概念;经典软件过程模型的特点(瀑布模型、增量模型、演化模型、统
一过程模型);过程评估与与CMM/CMMI的基本概念;敏捷宣言与敏捷过程的特点。
http://www.mamicode.com/info-detail-2009434.html
重点看这个博客
https://blog.csdn.net/u011275375/article/details/103336122?utm_medium=distribute.pc_relevant.none-task-blog-OPENSEARCH-1.control&depth_1-utm_source=distribute.pc_relevant.none-task-blog-OPENSEARCH-1.control
答:瀑布模型提出了一个系统的,顺序的软件开发放大,从用户需求规格说明开始,
通过计划,建模,构建和部署的过程,最后提供一个完整的软件并提供持续的技术支持,
形如瀑布流水,最终得到软件产品。
优点:
1)为项目提供了按阶段划分的检查点
2)当前一阶段完成后,您只需要去关注后续阶段
3)可在迭代模型中应用瀑布模型。增量迭代应用于瀑布模型。迭代1解决最大的问题。
每次迭代产生一个可运行的版本,同时增加更多的功能。每次迭代必须经过质量和集成测试。
4)它提供了一个模板,这个模板使得分析、设计、编码、测试和支持的方法可以在该模板下有一个共同的指导
缺点:
1)各个阶段的划分完全固定,阶段之间产生大量的文档,极大地增加了工作量。
2)由于开发模型是线性的,用户只有等到整个过程的末期才能见到开发成果,从而增加了开发风险。
3)通过过多的强制完成日期和里程碑来跟踪各个项目阶段。
4)瀑布模型的突出缺点是不适应用户需求的变化。
增量模型:
增量模型又称为渐增模型,也称为有计划的产品改进模型,它从一组给定的需求开始,通过构造一系列可执行中间版本来实施开发活动。
第一个版本纳入一部分需求,下一个版本纳入更多的需求,依此类推,直到系统完成。
每个中间版本都要执行必需的过程、活动和任务。
增量模型的最大特点就是将待开发的软件系统模块化和组件化。基于这个特点,增量模型具有以下优点。
1、将待开发的软件系统模块化,可以分批次地提交软件产品,使用户可以及时了解软件项目的进展。
2、以组件为单位进行开发降低了软件开发的风险。一个开发周期内的错误不会影响到整个软件系统。
3、开发顺序灵活。开发人员可以对组件的实现顺序进行优先级排序,先完成需求稳定的核心组件。当组件的优先级发生变化时,还能及时地对实现顺序进行调整。
增量模型的缺点是要求待开发的软件系统可以被模块化。如果待开发的软件系统很难被模块化,那么将会给增量开发带来很多麻烦。
演化模型:
根据用户的基本需求,通过快速分析构造出该软件的一个初始可运行版本,这个初始的软件通常称之为原型,
然后根据用户在使用原型的过程中提出的意见和建议对原型进行改进,获得原型的新版本。
重复这一过程,最终可得到令用户满意的软件产品。
优点:更好地适应产品需求/商业环境的变化,缓解商业压力&产品竞争压力
缺点:
1)如果所有的产品需求在一开始并不完全弄清楚的话,会给总体设计带来困难及削弱产品设计的完整性,并因而影响产品性能的优化及产品的可维护性。
2)如果缺乏严格的过程管理的话,这个生命周期模型很可能退化为一种原始的无计划的“试-错-改”模式。
3)心理上,可能产生一种影响尽最大努力的想法,认为虽然不能完成全部功能,但还是造出了一个有部分功能的产品。
4)如果不加控制地让用户接触开发中尚未测试稳定的功能,可能对开发人员及用户都产生负面的影响。
统一过程模型
是一个增量和迭代的过程框架,一次增量向系统中添加一部分功能,形成一个新的软件版本(这就是一次迭代)
整个过程分4个阶段:初始、细化、构造、移交;4个阶段对应4个里程碑
每个阶段包含1次或多次迭代,每个迭代包含6个核心过程工作流&3个核心支持工作流
特点:用况驱动;以构架为中心;迭代和增量
CMM是指“能力成熟度模型”,其英文全称为Capability Maturity Model for Software,英文缩写为SW-CMM,简称CMM。
它是对于软件组织在定义、实施、度量、控制和改善其软件过程的实践中各个发展阶段的描述。
CMM的核心是把软件开发视为一个过程,并根据这一原则对软件开发和维护进行过程监控和研究,以使其更加科学化、标准化、使企业能够更好地实现商业目标。
分5个等级:
1、初始级:软件过程的特征是无序的,有时甚至是混乱的
2、可重复级:软件机构建立了基本的项目管理过程(过程模型),可跟踪成本、进度、功能和质量
3、已定义级:软件机构已经定义了完整的软件过程(过程模型),软件过程已经文档化和标准化。所有的项目组都使用文档化的、经过批准的过程来开发和维护软件
4、已管理级:软件机构对软件过程(过程模型和过程实例)和软件产品都建立了定量的质量目标,所有项目的重要的过程活动都是可度量的
5、优化级:软件机构集中精力持续不断地改进软件过程。这一级的软件机构是一个以防止出现缺陷为目标的机构,它有能力识别软件过程要素的薄弱环节,并有足够的手段改进它们。
CMMI(能力成熟度模型集成)
概念:是若干过程模型的综合&改进,是支持多个工程学科&领域的系统一致的过程改进框架,能适应现代工程的特点和需要,提高过程的质量和工作效率
敏捷宣言,也叫做敏捷软件开发宣言,正式宣布了对四种核心价值和十二条原则,可以指导迭代的以人为中心的软件开发方法。
敏捷宣言强调的敏捷软件开发的四个核心价值是:
个体和互动高于流程和工具
工作的软件高于详尽的文档
客户合作高于合同谈判
响应变化高于遵循计划
敏捷选择提出的12条原则已经应用于管理大量的业务以及与IT相关项目中,包括商业智能(BI)。12原则包括:
1.通过早期和连续型的高价值工作交付满足“客户”。
2.大工作分成可以迅速完成的较小组成部门。
3.识别最好的工作是从自我组织的团队中出现的;
4.为积极员工提供他们需要的环境和支持,并相信他们可以完成工作;
5.创建可以改善可持续工作的流程;
6.维持完整工作的不变的步调。
7.欢迎改变的需求,即使是在项目后期。
8.在项目期间每天与项目团队和业务所有者开会。
9.在定期修正期,让团队反映如何能高效,然后进行相应地行为调整。
10.通过完成的工作量计量工作进度。
11.不断地追求完善。
12.利用调整获得竞争优势。
敏捷开发的高适应性,以人为本的特性,和轻量型的开发方法即以测试为驱动取代了以文档为驱动,
这三个主要的特点,也就是敏捷开发相对与传统开发方式的主要有点。因为它更加的灵活并且更加充分的利用了每个开发者的优势,调动了每个人的工作热情。
(1)敏捷开发的过程有着更强的适应性而不是预设性,从敏捷宣言的第四条响应变化高于预设计划便可以看出来。因为软件开发过程的本身的不可预见性,
很多用户在项目开始时不可能对于这个项目有着一个完整而明确的预期。很多对软件的预期都在后期的修改和完善过程中产生。因此高适应性显然更加符合软件工程开发的实际。
而敏捷开发实现其适应性的方式主要在于,第一,缩短把项目提交给用户的周期;第二,增加用户,业务人员,开发人员这三者之间的交流;第三,通过减少重构的成本以增加软件的适应性。
(2)敏捷开发的过程中,更加的注重人的因素。在传统软件工程中,个人的因素很少的被考虑到分工中,每个个体都是只是整个代码开发机器的一个小小的螺丝钉,
个人的意志和创造力很大程度上的被抹去为了更好的为集体服务。而在敏捷开发过程中,每个个人的潜力被充分的考虑,应用什么技术很大程度上直接由在第一线开发的技术人员决定;
每个人的特点和创造力都可以充分地发挥,这样开发出来的软件更加的具有生命力,因为他融入了开发者的心血和创意,开发者不再是进行机械的乏味的堆砌,而是创造属于自己的艺术品,这样的条件下产生的代码必然在质量上更占优势。
(3)在敏捷开发的过程中,整个项目是测试驱动的而不是文档驱动的。不仅每个模块有着自己的相应的测试单元,开发人员在开发自己的模块的过程中必须保证自己所开发的模块可以通过这一单元的测试,
并且集成测试贯穿了整个开发过程的始终。集成测试每天会进行十几次甚至几十次,而不是像传统方法一样只有当各个模块的编码都结束了之后再进行联合调试。
这样,在软件开发的进程中每一点改动所引起的问题都容嘉容易暴露出来,使得更加容易在错误刚刚产生的时候发现问题从而解决问题。这样就避免了在最后整个系统完成时错误隐藏的太深给调试造成极大的困难。
二、软件需求
软件需求的概念;需求工程的基本过程;分层数据流模型;用例和场景建模及其UML
表达(用例图、活动图、泳道图、顺序图);数据模型建模及其UML表达(类图);
行为模型建模及其UML表达(状态机图)。
软件需求是指用户对目标软件系统在功能、行为、性能、设计约束等方面的期望;是对软件产品和服务所需具备的外部属性的一种刻画,
这些属性应保证所提供的解决方案能满足用户所需要解决的现实世界问题的要求
都有哪些软件需求
功能需求:指定系统必须提供的服务
性能需求:指定系统必须满足的定时约束&容量约束,通常包括速度、信息量速率、主存容量、磁盘容量、安全性等需求
可靠性&可用性需求:可靠性需求定量地指定系统的可靠性,可用性量化了用户可以使用系统的程度
出错处理需求:说明系统对环境错误怎样响应
接口需求:描述应用系统与其环境的通信格式。常见的接口需求有:用户、硬件、软件、通信接口需求
约束:设计约束或实现约束描述在设计或实现应用系时应遵守的限制条件
逆向需求:说明软件系统不应做什么
将来可能的需求:应明确地列出那些虽不属于当前系统开发范畴,但据分析将来很可能会提出的要求
需求工程的基本过程(5个方面)
需求获取:识别需求来源,收集并获取初始的系统需求信息,建立对于待解决问题的基本认识,初步明确待开发系统的范围
需求分析:对收集的需求信息进行分析、整合,识别&解决其中隐含的冲突,从系统需求中导出细化的软件需求
文档化(系统建模,需求规约):对需求分析过程得到的软件需求进行规范化的描述&记录,形成需求文档&规格说明
需求确认(需求验证):验证需求文档&规格说明符合相关的格式规范,满足相关的质量属性(一致、完整、无歧义、可理解等);确认所得到的需求与所要解决的问题相符
需求管理:规划需求工程活动,保证相关活动有效开展,确保需求制品的完整性&可追踪性,对需求变更进行有效管理
.怎么获取软件需求(5种背3种左右就行)
市场搜索法:通过广泛搜集市场需求(包括通过互联网、向目标群体直接了解需求的方式),搜集产品需求。
项目提炼法:指从组织建设的若干用户的项目中,抽取出通用需求,形成产品需求的一种方式。
问卷调查法:在已经拥有比较完整的产品需求的基础之上,就一些细节需求、需要进一步明确的需求(或问题),通过采用向目标群体发送问卷调查表的方式,弄清产品需求的一种需求获取方法。
会议讨论法:指邀请相关专家、目标群体的代表,召开若干次需求讨论会议,挖掘出产品需求的一种需求获取方法。
原型法:指根据自己所了解的产品需求,开发出原型系统给目标群体试用,借助原型系统和目标群体进行交流和沟通,挖掘出产品需求的一种需求获取方法。
三、软件设计与构造
软件体系结构及体系结构风格的概念;设计模式的概念;模块化设计的基本思想及
概念(抽象、分解、模块化、封装、信息隐藏、功能独立);软件重构的概念;
软件体系结构的UML建模(包图、类图、构件图、顺序图、部署图);
接口的概念;
面向对象设计原则(开闭原则、Liskov替换原则、依赖转置原则、接口隔离原则);
内聚与耦合的概念、常见的内聚和耦合类型。
四、软件测试
软件测试及测试用例的概念;单元测试、集成测试、确认测试、系统测试、回归测
试的概念;调试的概念、调试与测试的关系;测试覆盖度的概念;白盒测试、黑盒测试
的概念;代码圈复杂度的计算方法;白盒测试中的基本路径测试方法;黑盒测试中的等
价类划分方法
用例图
https://www.cnblogs.com/gd-luojialin/p/10356704.html
类图
http://www.uml.org.cn/oobject/201211231.asp
活动
https://www.cnblogs.com/xiaolongbao-lzh/p/4591953.html
顺序
包 构建 部署
https://blog.csdn.net/wangdongyanglys/article/details/50357692
https://blog.csdn.net/wangmei4968/article/details/22601951
baihe
https://blog.csdn.net/lishanleilixin/article/details/89678178
哈弗满树
https://www.cnblogs.com/kubixuesheng/p/4397798.html
堆排序
https://www.cnblogs.com/jingmoxukong/p/4303826.html
平衡二叉树
https://www.cnblogs.com/zhangbaochong/p/5164994.html
一、处理器体系结构内容:
CPU中的时序电路、单周期处理器的设计、流水线处理器的基本原理、Data Hazard的处理、流水线设计中的其他问题
答案:通过RS触发器控制CPU的时序。
时序电路&组合电路
时序功能:由最基本的逻辑门电路+反馈逻辑回路或器件组成
数字电路根据逻辑功能的不同特点划分为时序&组合
时序电路的输出取决于当前的输入和电路原来的状态
而组合电路的输入只取决于该时刻的输入
that is,他俩的主要区别在于时序有存储记忆,组合没有
1)取指令(IF);2)指令译码(ID);3)指令执行(EXE);4)存储器访问(MEM);5)结果写回(WB);
单周期CPU就是在一个时钟周期里完成这五个阶段的操作。
流水线处理器将待执行的指令拆分成若干个阶段,每个阶段后添加寄存器,使每个阶段
可以在允许其独立使用的硬件电路上与其他阶段并行,以此提高系统的吞吐量
流水线技术是指程序在执行多条指令的时候重叠执行操作的一种准并行处理实现技术。
冒险&解决
1、结构冒险(争用硬件)
插入暂停周期(流水线气泡),设置相互独立的指令存储和数据存储
2、数据冒险(争用数据)
插入暂停周期,加载互锁,数据转发
3、控制冒险(运算结果依赖)
插入暂停周期,转移预测,延迟转移
局限性&解决
1、每阶段延迟不一致,系统吞吐量受最慢阶段速度限制
创建一组平衡的、具有相同延迟的不同阶段很困难,硬件设计者要做的是理解并
注重时序优化在实际系统设计中的重要性
2、流水线过深,由寄存器更新引起的延迟会降低收益
尽量降低每个阶段寄存器的延迟,同时保证时钟在整个芯片上同时改变
流水线设计中的其他问题:
1)每个阶段所用的硬件实际并不是相互独立的;增加的寄存器也会导致延迟增大;每阶段的周期划分也很难做到一致;
2)理想的流水线系统,每个阶段的时间都是相等的。实际上,各个阶段的时间是不等的。运行时钟是由最慢的阶段决定的;
3)另外流水线过深,寄存器的增加会造成延迟增大。当延迟增大到时钟周期的一定比例后,也会成为流水线吞吐量的一个制约因素。
二、优化程序性能内容:
优化程序性能、优化编译器的能力和局限性以及表示程序性能、特定体系结构或应用特性的性能优化、限制因素、确认和消除性能瓶颈
提高程序性能的方法(软件优化的方法)
循环展开
提高并行
减少过程调用
消除不必要的存储器引用
消除循环的低效率
指定编译器优化级别
优化程序性能:1)消除不必要的内容;2)利用处理器提供的指令级并行能力,同时执行多条指令;
3)使用代码分析工具分析代码执行效率,优化效率低的部分;4)Amdahl定律,它量化了优化系统中部分而给整体带来的效果。
Amdahl
当我们对系统某一部分加速的时候,该部分对系统整体性能的影响程度取决于该部分的
重要程度&加速程度
Tnew=[(1-a)+a/k]Told
优化编译器的局限性:
编译器必须很小心地只使用安全的优化
编译器必须假设不同的指针可能会指向内存中同一位置
大多数编译器不会试图判断一个函数是否有副作用,它会假设最糟糕的情况并保持所有函数调用不变
表示程序性能
度量标准:CPE–每个元素的周期数
帮助我们在更细节的级别上理解迭代程序的循环性能,指导我们优化代码,适用于执行重复计算的程序
用“每个元素”而不是“每次循环”的周期数作为度量标准,是因为像循环展开这样的技术使
得我们能用较少的循环次数完成计算,而我们最终关心的是,给定的向量长度下,程序
的运行速度如何。我们的精力主要在减少CPE上
制约程序实际性能的因素:
寄存器溢出
并行度超出可用的寄存器数量时,会将某些临时值存放到内存中,通常是在运行时堆栈上分配空间
解决:
足够多的寄存器
分支预测&预测错误处罚
分支预测逻辑不能正确预测分支是否要跳转,这时条件分支可能会招致很大的预测错误处罚
解决:
不过分关心可预测的分支
书写适合用条件传送实现的代码
确认和消除性能瓶颈:
1)程序剖析:包括运行程序的一个版本,其中插入可工具代码,以确定程序的各个部分需要多少时间;
2)使用Amdahl定律。
三、存储器结构及虚拟存储器内容:局部性、存储器层级结构、计算机高速缓存器原理、高速缓存对性能的影响、地址空间、
虚拟存储器、虚拟内存的管理、翻译和映射、TLB、动态存储器分配和垃圾收集
局部性:引用邻近于其他最近引用过的数据项的数据项,或者最近引用过的数据项本身。
这种倾向性,被称为局部性原理;分为时间局部性和空间局部性。
存储器层级结构:
寄存器
高速缓冲存储器(cache)
主存(ram跟rom)
辅助存(硬盘)
存储器分为多个层次,一般来说,从高层往低层走,存储设备逐渐从小而快变得更大、
更慢、更便宜,每层都会缓存来自较低一层的数据对象。被缓存的数据对象一般是处理
器近期可能会需要的信息,这样可以有效提高读/写效率
计算机高速缓存器原理cache
位于CPU和内存之间,是一个读写比内存更快,容量也更小的存储器
当cpu向内存写/读数据时,这些数据就会存入cache,下次cpu再需要的时候就会优先到cache中读取
虚拟内存
传统储存方式特征(作对比):
1)一次性
2)驻留性
3)许多在程序运行中不用或暂时不用的程序占据了大量内存空间,而一些需要运行的作业又无法装入运行,浪费了宝贵的内存资源
作用?虚拟内存如何提高性能的?
1)虚拟内存是进行缓存、内存管理、内存保护的工具
2)虚拟内存使得应用程序认为它有连续可用的内存,从而执行程序,或是当内存紧张时,通过虚拟内存技术来缓释
3)虚拟内存通过整理物理内存碎片,或者匀出一部分磁盘空间来充当内存使用,从而运行程序
特征(与传统存储器的区别?)
1)多次性
无需再作业运行时一次性地全部装入内存,而是允许被分成多次调入内存运行
2)对换性
无需再作业运行时常驻内存,而是允许作业运行过程中进行换进和换出
3)虚拟性
从逻辑上扩充内存的容量,使用户看到的内存容量远大于实际
虚拟内存技术实际上就是建立了“内存-外存”两级存储结构,利用局部性原理实现高速缓存
这种存储器实际上并不存在,只是由系统提供了部分撞入、请求调入、置换功能后,让用户以为存在一个比实际物理内存大得多的存储器
虚拟存储器大小由计算机地址结构决定
虚拟内存的管理
1)请求分页存储管理
目前最常用的一种虚拟存储器实现方式
请求分页系统建立在基本分页系统基础之上,增加了请求调页功能和页面置换功能用以支持虚拟存储器功能
请求分页系统中,只要求将当前需要的一部分页面装入内存便可以运行作业。作
业执行过程中,当所要访问的页面不在内存时再通过调页功能将其调入,同时还
可以通过置换功能将暂时不用的页面换出外存,以便腾出内存空间
2)请求分段存储管理
3)请求分段页式存储管理
4)虚拟内存管理/实现所需要的硬件支持
一定的内/外存
页表/段表机制
请求分页系统在一个作业运行之前不要求全部一次性调入内存,则作业运行
过程中必然出现要访问的页面不在内存的情况。利用页表机制可以快速查找并调入页面
组成
页号
物理块号
状态位P
用于指示该页面是否已调入内存,供程序访问时参考
访问字段A
用于记录本也在一段时间内被访问的次数,或记录本页最近已有多
长时间未被访问,供置换算法换出页面是参考
修改位M
标识该页在调入内存后是否被修改过
外寸地址
用于支出该页在外存上的地址,通常是物理块号,供调入该页时参考
中断机构
1)当用户程序要访问的部分尚未调入内存,则产生中断
2)此时应将缺页的进程阻塞(调页完成唤醒),如果内存有空闲块,则分配一
个块,将要调入的页装入该块,并修改页表中相应的页表项,若此时内存中
没有空闲块,则要淘汰某页(若被淘汰页在内存期间被修改过,则要将其写
回外存)。缺页中断作为中断同样要经历,诸如保护CPU环境、分析中断原
因、转入缺页中断处理程序、恢复CPU环境等几个步骤。但与一般的中断相
比,它有以下两个明显的区别:
》》在指令执行期间产生和处理中断信号,而非一条指令执行完后,属于内部中断。
》》一条指令在执行期间,可能产生多次缺页中断。
地址变换机构
逻辑地址到物理地址的变换
四、链接、进程及并发编程内容:静态链接、目标文件、符号和符号表、重定位和加载、动态链接库、异常和进程、
进程控制和信号、进程间的通信、进程间信号量的控制、信号量,各种并发编程模式,共享变量和线程同步,其他并行问题
并发编程
并发编程优缺点(为什么要使用并发编程?)
优点
充分利用多核CPU的计算能力
方便进行业务拆分,提升系统并发能力和性能
缺点
频繁的上下文切换
怎么减少上下文切换?
无锁并发编程
CAS算法
避免创建不必要的线程
协程
线程安全难以把控
分类
基于进程
1)每个逻辑流都是一个进程,由内核调动&维护。因为进程有独立的虚拟地址空
间,想要和其他流通信,控制流必须使用显式的进程间通信机制
2)优:进程不会不小心覆盖另一个进程的虚拟存储器
3)缺:独立的地址空间使进程难以共享状态信息。为了共享,必须使用显式的IPC(进程间通信)机制,而进程控制和IPC开销很高,影响速度
基于I/O多路复用
1)应用程序在进程上下文中调度自己的逻辑流。逻辑流模型化为状态机,数据达到
文件描述符后,主程序显式地从一个状态转化到另一个状态。所有流共享同一个地址空间
2)优:跟基于进程相比,给了程序员更多的对程序行为的控制;每个逻辑流都能访
问该进程的全部地质空间
3)缺:编码复杂
基于线程
线程是运行在进程上下文中的逻辑流,由内核调度,多个线程共享同一个虚拟地址空间
优:
程序响应时间更快
当前没有正处理的任务时可以将处理器时间让给其他任务
占用大量处理时间的任务可以定期将处理时间让给其他任务
可以随时停止任务
可以分别设置各个任务的优先级&优化功能
缺:
等待使用共享资源时运行缓慢
这些共享资源主要是独占性资源,如打印机
管理线程需要额外的CPU开销
因为线程的使用会给系统带来上下文切换的额外负担,这种负担超过一
定程度时,多线程的缺点显现出来,比如用独立的线程来更新组内每个元素
容易死锁
即较长时间的等待或资源竞争以及死锁等多线程症状
对公有变量同时读/写
当多个线程需要对共有变量进行写操作时,后一个线程往往会修改掉前
一个线程存放的数据,从而使前一个线程的参数被修改;另外,当公用
变量的读写操作是非原子性时,在不同的机器上,中断时间的不确定
性,会导致数据在一个县城内的操作产生错误,从而产生莫名其妙的错
误,而这种错误是程序员无法预知的
阻塞&非阻塞
区分重点在于进程/线程等待消息时是挂起还是非挂起状态
阻塞
调用在发出去后,在消息返回之前,当前进程/线程会被挂起,直到有消息返回才被激活
非阻塞
调用在发出去后,不会阻塞当前进/线程,而会立即返回。
同步与异步
同步:当一个同步调用发出去后,调用者要一直等待调用结果的返回后,才能进行后续的操作。
异步:当一个异步调用发出去后,调用者不用管被调用方法是否完成,都会继续执行后面的代码
异步调用,要想获得结果,一般有两种方式:
主动轮询异步调用的结果;
被调用方通过callback来通知调用方调用结果;
临界区
用来表示一种公共资源或者说是共享数据,可以被多个线程使用。但是每个线程
使用时,一旦临界区资源被一个线程占有,那么其他线程必须等待。
上下文切换
当前任务在执行完 CPU 时间片切换到另一个任务之前会先保存自己的状态,以
便下次再切换回这个任务时,可以再加载这个任务的状态。任务从保存到再加载
的过程就是一次上下文切换。
五、系统级I/O和网络编程内容:I/O相关概念、文件及文件操作、共享文件、网络编程、客户端-服务器模型,套接字接口、
HTTP请求,Web服务器