第04章 计算机软件系统 - 信息技术导论

课程:北京大学苏清元《信息技术导论》第4章 格式:PowerPoint 97-2003 二进制 PPT,LibreOffice 转 PDF 后 pdftotext 全文提取 全文约 2.9 万字符,118 页幻灯片


本章概览

本章系统介绍计算机软件系统的全貌,从软件的本质定义出发,逐层深入操作系统、应用软件、程序设计语言和软件工程四大领域。全章分为五大节:

  1. 软件的性质及发展史 — 软件的本质、独特性质、技术进化史、分层结构
  2. 操作系统 — OS 的任务功能、引导过程、进程/线程、存储管理、设备/文件管理、分类
  3. 应用软件 — 五大类应用
  4. 程序设计语言与语言处理程序 — 语言演进、编译解释、可视化编程、.NET、OP→OO
  5. 软件工程及其标准 — 软件工程框架、四大原则、标准体系、CASE 技术

4.1 软件的性质及发展史

4.1.1 软件的定义

计算机软件 = 程序 + 数据 + 文档

  • 程序:按照事先设计的功能和性能要求执行的指令序列
  • 数据:程序能正常操纵信息的数据结构
  • 文档:与程序开发维护和使用有关的各种图文资料
    • 文档是软件的”质”的部分
    • 程序是文档代码化的表现形式

不装任何软件的计算机称为硬件计算机或”裸机”。

4.1.2 软件的四大独特性质

性质硬件软件
表现形式有形产品,可触摸抽象性,记录在介质上但无法看到本身形态,只能通过运行判断
生产方式工业化流水线制造依赖手工作坊式开发,可复制,但开发是高强度脑力劳动,成本高
维护方式容易磨损和老化需要随需求变化修改,但修改可能导入更多错误,甚至退化,最终被抛弃
复杂性与规模复杂度可控是复杂度最高的工业产品之一,代码膨胀(如 Windows 4000 多万行),涉及各行各业知识

核心洞见:硬件技术发展速度远远高于软件技术的发展——原因是人们很长时间内没有找到有效构建软件的方法。

4.1.3 软件技术进化史(四阶段)

第一阶段:初期(20世纪50年代—70年代)

  • 软件=程序,无文档,个人化开发
  • 20世纪60年代出现软件危机
  • Denis Ritchie & Ken Thompson 设计 C 语言 + UNIX 操作系统(1971年),获1983年图灵奖
  • 结构化软件技术出现:软件工程方法,软件生命周期概念
  • 软件=程序+分析+设计+实现+维护+文档,编程仅占工作量 20-30%

第二阶段:中期(20世纪80年代)

  • 面向对象技术兴起
  • Bill Gates 与微软崛起(1975年创建),“微软离破产永远只有18个月”
  • 个人计算机软件革命

第三阶段:网络计算时代(20世纪90年代至今)

  • UML 统一建模语言(1997年 OMG 发布)
    • 三大创始人:James Rumbaugh(OMT方法)+ Ivar Jacobson(OOSE/用例驱动)+ Grady Booch(Booch方法)
    • 语言与方法学分离,UML是”语言”不是”方法学”
    • 目标:为开发团队提供标准通用的设计语言
  • 软件构件技术(随需应变)
    • 凝练共性并复用,降低复杂度,提高效率和质量
    • 从手工作坊式 → 软件工业化生产
    • 用户无需掌握复杂编程语言,只需高层建模,自动生成代码

第四阶段:21世纪软件技术

  • 广义的冯·诺依曼计算机:在整个网络上实现将程序视为数据
  • 浏览器不区分本地和远程数据
  • 语义操作系统:不区分本地和远程的程序

4.1.4 软件系统的分层结构

┌─────────────────────────────────────┐
│            应用系统/应用软件           │
├─────────────────────────────────────┤
│         软件框架 / 设计模式           │  ← 弥补应用与开发平台的距离
├─────────────────────────────────────┤
│      支持软件 / 中间件(J2EE/EJB     │  ← 屏蔽OS和编程语言异构
│      Web Services、.NET/COM 等)     │
├─────────────────────────────────────┤
│       操作系统(Windows/UNIX/Linux)  │  ← 屏蔽硬件异构
├─────────────────────────────────────┤
│              计算机硬件               │
└─────────────────────────────────────┘

实质上:解决概念和处理逻辑之间的映射问题

软件体系结构 vs 软件框架 vs 设计模式:

概念定义示例
软件体系结构系统的结构,包括软件组件、组件的外部可见属性、组件之间的关系C/S架构、B/S架构、三层架构
软件框架抽象出的通用功能,可选择性覆盖或特化.NET框架、EJB
设计模式常见设计问题的通用可复用解决方案(模板,非成品)面向对象设计模式、构件设计模式

4.2 操作系统

4.2.1 操作系统的任务及功能

操作系统:管理软硬件资源、控制程序执行、改善人机界面、合理组织计算机工作流程、为用户提供良好运行环境的系统软件。

两大任务:

  1. 管理资源:管理全部软硬件资源,提高利用率
  2. 用户接口:用户通过命令或菜单方便地使用计算机

五大功能(资源管理视角):

  • 处理机管理(CPU)
  • 存储管理(内存+外存)
  • I/O 设备管理
  • 文件系统
  • 用户接口

OS 引导过程(5 步)

步骤名称内容
STEP 1上电CPU 生产商决定初始状态。x86 CPU 上电后指令寄存器设为 0ffff:0000,从此处取第一条指令,通常是跳转至 BIOS 入口
STEP 2自检(POST)BIOS 自检计算机是否正常;第二项功能:加载引导扇区
STEP 3加载引导扇区(Boot Loader)软盘/硬盘第一个逻辑扇区(0头0道1扇)。硬盘有多个分区,主引导扇区先加载分区引导扇区,再由分区引导扇区加载 OS
STEP 4加载操作系统(OS Loader)引导程序通过绝对位置(扇区号)把 OS 从磁盘拷贝到内存(此时尚无文件系统)
STEP 5运行操作系统跳转到 OS 第一条指令,OS 开始运行

4.2.2 处理机(CPU)管理

中断处理

  • 中断:CPU 暂停正在执行的程序,保留现场,转去执行处理程序,处理完返回断点继续执行
  • 中断源:引起中断的事件
  • 中断请求:中断源向 CPU 提出的处理请求
  • 断点:被中断的暂停点

处理器调度

  • 单用户单任务:简单
  • 多道程序/多用户:需要解决处理器的调度、分配和回收
  • 调度以进程为单位,后引入线程概念

进程的三种基本状态

状态英文含义
运行态Running占有 CPU,正在 CPU 上运行
就绪态Ready已具备运行条件,但无 CPU 暂时不能运行;调度到 CPU 时立即运行
等待态Blocked因等待某事件而暂时不能运行;即使 CPU 空闲也不可运行(又称阻塞/挂起/睡眠)

四种状态转换:

  1. 就绪 → 运行:进程被调度程序选中
  2. 运行 → 就绪:时间片用完
  3. 运行 → 等待:等待某事件发生
  4. 等待 → 就绪:等待的事件已发生

进程控制块(PCB)

Process Control Block — 系统感知进程存在的唯一标志

  • 记录进程的外部特征,描述进程的运动变化过程
  • 进程与 PCB 一一对应
  • 进程 = 程序 + 数据 + PCB
    • 程序:描述要实现的功能
    • 数据:程序操作的对象
    • PCB:进程的”灵魂”,保存所有进程的地址信息

4.2.3 存储管理

四大功能:

  1. 存储分配:根据用户程序需要分配存储器资源
  2. 存储共享:多个用户程序共享存储资源,提高利用率
  3. 存储保护:用户程序相互隔离,不允许访问操作系统程序和数据
  4. 存储扩充:逻辑上扩充内存(虚拟存储器)

高速缓存 Cache:解决 CPU 速度与内存速度不匹配的矛盾

虚拟存储器(Virtual Memory):

  • 不是物理上扩大内存,而是逻辑上扩充容量
  • 内存和外存结合使用,硬件支持下软硬件协作
  • 示例:Pentium 处理器物理内存最大 4GB,虚拟存储量可达 64TB

4.2.4 设备管理(略)

4.2.5 文件管理

  • 文件:逻辑上具有完整意义并赋有名称的信息集合体
  • 文件系统:负责操纵和管理文件的一整套设施
    • 实现文件的建立、读写、修改、共享和保护
    • 按名存取和存取控制

4.2.6 操作系统的三大主要特性

  1. 并发性(Concurrence):两个或多个运行程序在同一时间间隔段内同时执行
  2. 共享性:资源(硬件+信息)可被多个并发进程使用
  3. 异步性:多道程序下进程”走走停停”,执行顺序和速度不可预测

4.2.7 操作系统分类(9 类)

  1. 单用户操作系统
  2. 批处理操作系统
  3. 分时操作系统
  4. 实时操作系统
  5. 网络操作系统
  6. 分布式操作系统
  7. 个人计算机操作系统
  8. 嵌入式操作系统
  9. 并行操作系统

扩展:Web OS

  • Web-based Operating System,基于浏览器的虚拟操作系统
  • 用户通过浏览器访问基于 Web 的在线应用
  • 技术:Ajax / Flash,B/S 结构,数据存 Server 端
  • 代表:ICUBE、eXo Enterprise WebOS、Zimdesk、YouOS、千脑等

4.3 应用软件

五大类:

  1. 科学和工程计算软件 — MATLAB 等
  2. 字表处理软件 — Word、Excel 等
  3. 图形图像处理软件 — Photoshop 等
  4. 网络应用软件 — Internet Explorer 等
  5. 应用数据库软件 — Oracle、MySQL 等

4.4 程序设计语言与语言处理程序

4.4.1 程序设计语言三阶段

低级语言:

  • 机器语言:二进制代码组成,面向机器的指令序列
  • 汇编语言:符号化了的机器语言(如 ADD AL, 2)

高级程序设计语言(接近自然语言、面向问题):

  • FORTRAN(1956年):第一个被广泛使用的高级语言
  • BASIC(1964年):较早出现且至今仍有较大影响
  • COBOL(1960年):面向行业的管理软件开发
  • Pascal(1970年):第一个系统地体现结构化程序设计思想的语言
  • C 语言(1972年):UNIX 系统语言工具,至今广泛使用

4.4.2 语言处理程序

将用程序设计语言编写的源程序转换成机器语言形式

三类:

  1. 汇编程序(汇编 → 机器)
  2. 编译程序(高级语言 → 机器,整体翻译后执行)
  3. 解释程序(高级语言 → 机器,逐条解释执行)

4.4.3 可视化编程语言

  1. Visual Basic:易学,开发效率高,不跨平台
  2. Visual C++:基于 MFC 类库,功能强大但难学
  3. Delphi:面向对象,适合数据库、网络应用
  4. C++Builder:继承 Delphi 特点 + C++ 语言优点
  5. PowerBuilder:适合管理系统和跨平台数据库,真正的 4GL 语言
  6. Java:“一次编码,多次运行”,面向对象全面,跨平台好

4.4.4 .NET

  • 微软推出的用于快速创建和集成 XML Web 服务和应用程序的综合工具
  • 核心技术:Web Services
  • Web 是用户与应用交互的途径,XML 是程序间通讯的途径,Web Services 是计算机间通用的数据传输格式

4.4.5 从面向过程(OP)到面向对象(OO)

软件开发 = 将现实世界(问题域)映射到计算机世界的过程

  • 面向过程(PO):采用面向过程语言编程,实现软件设计流程图描述的信息处理过程
  • 面向对象(OO):基于面向对象模型,采用 OO 语言编程实现

4.5 软件工程及其标准

4.5.1 “软件之道”——软件工程之路

软件工程:将系统化的、规范的、可度量的方法应用于软件的开发、运行和维护的过程——即将工程化应用于软件中。

软件工程的交叉学科属性:

  • 计算机科学、数学 → 构造模型与算法
  • 工程科学 → 制定规范、设计范型、评估成本、确定权衡
  • 管理科学 → 计划、资源、质量、成本管理

软件工程框架

┌─────────────────────────────────────────────────┐
│                工程目标:正确 / 可用 / 合算         │
├─────────────────────────────────────────────────┤
│           软件开发活动(需求→设计→实现→验证→维护)  │
├─────────────────────────────────────────────────┤
│  工程原则:                                       │
│  ① 选取适宜的开发范型                             │
│  ② 采用好的设计方法                               │
│  ③ 提供高质量的工程支持(配置管理、质量保证等)     │
│  ④ 有效的软件工程管理                             │
└─────────────────────────────────────────────────┘

软件工程三目标:

  • 正确性:软件产品达到预期功能的程度
  • 可用性:基本结构、实现及文档为用户可用的程度
  • 开销合宜:开发、运行的整个开销满足用户要求的程度

五大基本开发活动:

活动内容产出
需求分析在抽象层上建立系统模型需求规约(开发人员和客户间契约的基础)
设计定义实现需求所需的结构(体系结构+算法)设计规约(软件解决方案)
实现由设计规约到代码的转换可执行代码
验证/确认动态(执行程序与预期比较)或静态(评审/走查/形式化验证)质量评估
维护软件发布后的开发或修改(纠错+适应环境变化)更新版本

软件工程四大原则

第一原则:选取适宜的开发范型

  • 权衡软件需求、硬件需求及其他因素的相互制约
  • 适应需求的易变性,保证可持续性

第二原则:采用好的设计方法

  • 考虑模块化、信息隐蔽、局部化、一致性、适应性
  • 采用合适的设计方法支持这些问题的解决

第三原则:提供高质量的工程支持

  • 配置管理、质量保证等
  • 按期交付高质量产品

第四原则:有效的软件工程管理

  • 影响资源有效利用和软件组织生产能力
  • 仅当软件过程实施有效管理时,才能实现有效的软件工程

4.5.2 软件工程标准

  • 我国在 ISO/IEC JTC1/SC7 框架基础上,结合国情建立软件工程标准体系框架
  • 面向管理人员、软件开发人员、软件质量保证人员

4.5.3 CASE 技术

CASE = Computer-Aided Software Engineering,计算机辅助软件工程

  • 借助计算机及软件工具,开发、维护、管理软件产品
  • 最终目标:软件自动化
  • 两大突出特点:
    1. 使开发支持工具与开发方法学统一结合
    2. 通过实现分析、设计、程序开发与维护的自动化,提高整个软件工程的效率
  • 代表工具:Rational Rose 2000、Power Designer

关键洞见与关联

  1. 软件的本质是抽象:与硬件形成鲜明对比,这是软件危机的根源,也是软件工程存在的理由
  2. 分层抽象是计算机科学的核心思想:从硬件→OS→中间件→框架→应用,每一层都屏蔽下层复杂性,提供更高级的抽象
  3. 从 OP 到 OO 是范式跃迁:不仅是语法变化,更是思考问题方式的根本转变
  4. 软件工程的四大原则具有普适性:选取适宜范型、好的设计方法、工程支持、有效管理——适用于任何工程项目
  5. 软件危机从未真正解决:从结构化→面向对象→构件→AI辅助开发,每一次技术革命都在缓解但未根除软件复杂性问题

关联笔记: