下一页
软件技术基础
主讲:刘志强
西安交通大学
计算机教学实验中心
第 10单元
典型 OS平台下
编程模式
下一页
上一页
停止放映
第 2 页
教学目标
? 了解在三种 OS平台上
– 软件编程模式
– 开发流程
– 开发工具的基本知识
下一页
上一页
停止放映
第 3 页
教学要求
? 通过本单元学习,了解,
– DOS OS编程模式
? DOS结构,DOS编程流程及开发工具、内存分
配,OS程序员接口
– UNIX OS编程模式
? UNIX 结构、编程流程几开发包、多进程编程
特点、常见进程通信方式、程序员接口
– Windwos编程模式
? Windows编程模式,WOSA及 WindoowsDNA、事
件几消息机制、多线程、编程流程及开发包、
程序员接口
下一页
上一页
停止放映
第 4 页
本单元涉及的内容
?第 5章
– 5.1 DOS操作系统编程模式
– 5.2 UNIX 操作系统编程模式
– 5.3 Windows操作系统编程模式
?P156~P183
下一页
上一页
停止放映
第 5 页
一,DOS OS编程模式
? DOS是微机系统配备的主流操作系统之一,是单
用户、单任务的磁盘操作系统。
DOS提供功能服务的两种方式:
I,键盘命令
II,程序执行方式
DOS的主要功能:
1) 管理各种设备
2) 管理 CPU
3) 管理各种文件
4) 管理内存
5) 支持用户的各种命令和程序
6) 支持 shell操作和 Windows
7) 支持网络环境
下一页
上一页
停止放映
第 6 页
⒈ DOS系统结构
? DOS由 4个模块构成:
– 引导模块 ( BOOT引导区 ) 用于启动 DOS时自动引
导, 装入 DOS系统到内存 。
– DOS内核模块 ( MSDOS.SYS)由两部分组成,内核初
始化程序 DOS-INIT和 DOS中断服务程序 。 前者仅
用于启动 DOS;后者则是真正 DOS的内核, 提供系
统的中断服务功能 。
– DOS I/O接口模块 ( IO.SYS)是 DOS的 I/O设备处
理程序,它与 ROM-BIOS一起组成 I/O处理的服务体
系,完成所有的 I/O操作,
– 命令管理模块 (Command.com)主要负责接受并处
理各种输入命令,它是直接面向用户操作的,
下一页
上一页
停止放映
第 7 页
DOS模块结构图
DOS


BOOT模块
Command模块
MD-DOS模块
IO模块
Command常驻部分
Command暂驻部分
COM-INIT初始化
程序
内核初始化程序
DOS-INIT
DOS中断服务程序
IO初始化程序
SYS-INIT
标准设备驱动程序
下一页
上一页
停止放映
第 8 页
DOS的层次结构
ROM-BIOS
硬件系统
IO.SYS 设备驱动
MSDOS.SYS系统功能
Command.com
用户程序
键盘命令
用户的操作
下一页
上一页
停止放映
第 9 页
⒉ DOS编程流程
DOS编程流程:
确定程序目标
设计程序
编码
编译
运行
测试与调试
维护与修改
确定程序的目标,算法、语言、处理技巧等
系统设计;包括用户界面、数据结构等
系统编程;用指定程序设计语言编写源程序
编译产生可执行文件
运行可执行文件
对运行的程序进行正确性测试,修改错误
对程序不断进行建设性维护,使其完善
下一页
上一页
停止放映
第 10页
DOS编程开发工具
? DOS环境下的程序设计语言很多, 包括,Fortran、
BASIC,Pascal,C,C++,汇编语言等 。
? 不同的语言有其各自的适用领域和特点 。 如果是科
学计算应用, 选 Fortran语言比其它语言和合适 。
? C和 C++是比较流行的程序设计语言, 但它们也不是
万能的 。 在 C语言中做不到的, 在 C++语言中也做不
到 。 但用 C++编写程序, 比用 C写程序更容易阅读和
交流, 编程效率更高, 更好 。
? 汇编语言适合对硬件接口类快速响应的应用, 但汇
编语言编写, 调试, 维护很困难, 也不便于阅读 。
? 具体使用哪一种语言, 还是要具体情况具体分析,
根据实际情况和需要进行选用 。
下一页
上一页
停止放映
第 11 页
⒊ DOS内存分配图
? DOS内存可以划分为四种类型:
1) 基本内存:计算机主板上 640KB以下的存储空间 。 DOS
的系统程序和用户的应用程序都要使用这片空间 。
2) 扩展内存 ( Extended),计算机主板上 640KB以上的
存储空间 。 这部分空间 DOS不能直接管理, 而是要通
过扩展内存管理程序 HIMEM.SYS来使用这部分内存 。
3) 扩充内存 ( Expanded),插在计算机主板的扩充槽中
的内存扩充板上的那部分存储器, 它们是通过
EMS.SYS程序来管理的 。
4) 保留内存 ( Reserved),这是给计算机留做存储 I/O
系统数据及各种接口驱动程序使用的存储器, 也称适
配器内存 。
下一页
上一页
停止放映
第 12页
⒋ 操作系统程序员接口
? 在 DOS平台下,通过 DOS,BIOS和应用程序都可以
实现对计算机硬, 软件资源的操作 。
? BIOS提供的是最接近硬件的低层接口, 操作最直
接; DOS提供的是高层次的功能服务;而高级语
言则是通过对 DOS和 BIOS功能的调用来实现对计
算机硬件设备的操作 。 操作是间接的 。
? 高级语言具有编程效率高, 可移值性好, 便于交
流等优点 。 但也存在着执行效率较低 ( 不如 DOS、
BIOS功能 ), 不能直接对硬件进行操作的不足 。
? 在开发程序过程中, 使用什么语言, 采用何种编
程方式, 都要视具体情况和需要来选择 。 绝对的
,好, 是不存在的 。
下一页
上一页
停止放映
第 13页
二,UNIX OS编程模式
?UNIX 结构
?UNIX编程流程及开发包
? 多进程编程特点
? 常见进程通信方式
? 程序员接口
下一页
上一页
停止放映
第 14页
⒈ UNIX 结构
? UNIX系统分为三层:
– 内层:核心层, UNIX内核,是 OS管理和控
制中心,常驻内存。
– 中间层:系统调用 层,界于核心层和应用
层(外层)之间,是供程序员设计、开发
应用程序时调用的。 UNIX系统调用包括:
进程管理、文件管理、终端状态等。
– 外层:应用 层,包括各种开发工具、高级
语言编译器、网络通讯处理程序等。所有
应用层程序都是在 shell(命令语言解释程
序)的管理和控制下为用户服务的,是面
向用户操作的界面。
下一页
上一页
停止放映
第 15页
UNIX系统结构图
裸机
存储程序、进程管理、文件管理、
I/O设备管理
系统调用
应用程序、各种语言处理程序
Shell命令解释程序 系




终端机
用户 n用户 n用户 n
应用层
系统调用层
内核层
下一页
上一页
停止放映
第 16页
⒉ UNIX编程流程及开发包
1) UNIX编程流程主要包含 4个过程:
1) 源代码编辑 。 UNIX的编辑器是 vi,ed。
2) 编译 。 对源程序文件进行编译, 产生目标程序 。 UNIC
的 C编译命令是 cc,创建类库的命令是 ar,编译大的
应用程序用 make命令 。
3) 调式 。 UNIX提供了三种调试工具:
Lint 用于检查源代码的错误, 包括数据类型不匹配,
语法问题;
Prof 分析程序运行花费的时间, 可用于优化代码;
Sdb 是符号诊错器, 也提供断点支持及编程环境中的
交互式的程序调用 。
4) 链接 。 将目标程序和库函数等链接, 装配成可直接执
行的程序 。
5) 执行程序 。 运行可执行程序 ( 将可执行程序名做为命
令执行 ) 。
下一页
上一页
停止放映
第 17页
创建可执行 C程序的操作步骤
1) 编译程序的预处理程序逐行读入源代码,
替换符号名( #define定义的),接受来
自用户源文件中的指令、用户程序中命名
文件的内容等。
2) 编译程序把用户源代码文件中的 c语言代
码翻译成汇编语言代码。
3) 汇编程序把汇编语言代码翻译为目标机器
的机器指令,并将这些指令保存在目标文
件中。
4) 链接编辑程序把目标文件、用户程序中调
用的库函数进行链接,生成可执行程序。
下一页
上一页
停止放映
第 18页
UNIX开发包
? 基于图形界面的 UNIX程序开发与 Windows32位程
序开发类似。
? MOTIF API是功能强大的提供一致性外观和用户
接口的窗口部件的集合的集合;
? TCL/TK是功能强大且简单易学的一种解释性语言,
也是一套 C的函数库,可提供基本的命令与控制结
构;而 TK是一个 X Window的工具包,是 TCL在 X
Window 系统的应用。
? GTK( GIMP ToolKit) 开发工具,基本是面向对
象的应用程序设计的一套 API,有些类似于
Microsoft的 MFC编程。
? UNIX下的开发语言包括,C,C++,Fortran、
Ada,Pascal,Lisp,Small Talk等。
下一页
上一页
停止放映
第 19页
⒊ 多进程编程特点
? UNIX操作系统是分时多用户系统 。 在处理过程中,
将 CPU时间片分配给每个进程 。 由于每个进程都有各
自的运行环境, 因此在进程状态转换控制过程中要
考虑处理不同的内容数据:
1) 用户数据保存,包括正文段 ( TEXT), 数据段, 堆栈段
( Stack) 和共享内存段;
2) 寄存器数据保存,包括 PC( 指向下一条要执行的地址 ),
PSW( 处理机状态 ), SP( 堆栈指针 ), PCBP( 进程控制
块指针 ), FP( 指向堆栈中一个函数的 Local变量的地
址 ), AP( 指向堆栈中函数调用的实参位置 ), ISP( 中断
堆栈指针 ) 及其他通用寄存器等 。
3) 系统层次保存,包括虚拟存储空间管理表格, 中断处理堆
栈 。
当该进程再得到 CPU时间片时, 能够从, 断点, 处开
始正常地运行处理 。
下一页
上一页
停止放映
第 20页
多进程程序的特点
1) 并行化 。 将一个大而复杂的问题, 划分为一系列
小而简单的问题进行处理 。 处理时, 各个小处理
可以同时进行, 而在一些关键点的处理时, 再采
用集中式 。
2) 简单有序 。 经并行化分解的程序是简单的, 可以
单独处理, 但相互之间通过通讯机制而有机地结
合成一个整体 。
3) 互不干扰 。 各个进程是独立的 。
4) 事物化 。 将程序设计成一个进程只进行一次处理,
相当于完成一个事物 。 进程处理完相当于一次事
物完成 。 这样的变成简单易行 。
下一页
上一页
停止放映
第 21页
⒋ 常见进程通信方式
? UNIX系统中的进程间的通讯有两层含义:
– 单一进程内部各个模块间的通讯
– 作为单独单位的各个不同进程间的通讯
? 前者沿袭了单任务操作系统中的模块通讯方
法;
? 后者必须保证各个进程在通讯过程中互不干
扰从而保持其通信的一致性 。
下一页
上一页
停止放映
第 22页
UNIX采用的进程通信方式
1) 文件和记录锁定 。 为避免两个进程间同时要求访问同一共享资源
而引起访问和操作的混乱, 在进程对共享资源进行访问前必须对
其进行锁定, 该进程访问完后再释放 。 这是 UNIX为共享资源提供
的互斥性保障 。
2) 管道 。 管道一般用于两个不同进程之间的通信 。 当一个进程创建
一个管道, 并调用 fork创建自己的一个子进程后, 父进程关闭读
管道端, 子进程关闭写管道端, 这样提供了两个进程之间数据流
动的一种方式 。
3) FIFO。 FIFO是一种先进先出的队列 。 它类似于一个管道, 只允许
数据的单向流动 。 每个 FIFO都有一个名字, 允许不相关的进程访
问同一个 FIFO。 因此也成为命名管道 。
4) 消息队列 。 UNIX下不同进程之间可实现共享资源的一种机制;
UNIX允许不同进程将格式化的数据流以消息形式发送给任意进程 。
对消息队列具有操作权限的进程都可以使用 msget完成对消息队
列的操作控制 。 通过使用消息类型, 进程可以按任何顺序读消息,
或为消息安排优先级顺序 。
5) 信号灯 。 作为进程间通讯的一种方法, 它不是用于交换大批数据,
而用于多进程之间的同步 ( 协调对共享存储段的存取 ) 。
6) 共享内存 。 通过信号灯实现存储共享 ( 类似, 红灯停, 绿灯行, )
下一页
上一页
停止放映
第 23页
⒌ 程序员接口
? UNIX提供了在 POSIX( 计算机环境的可移植操作系统
界面 ) 的 UNIX API,使其成为跨平台的编程接口 。
? UNIX 是一套类库中可调用的函数集, 它的主要函数
功能包括:标准 C类库的 I/O功能, 文件及目录操作,
进程的创建与终止, 通信设施, 设备驱动函数, 系
统数据库, 数据交换格式等 。
? 由于 UNIX API是直接与 OS及编程语言环境相关的,
程序员可根据具体产品查阅相关技术资料以更好地
掌握不同的 API接口 。
? 要想更好地掌握 UNIX环境下的应用程序开发, 象
UNIX系统的 Berkeley套接字, System V传送接口
( TLI), 其他多线程 API,X窗口的 MOTIF API等是
UNIX程序员必修的课程 。
下一页
上一页
停止放映
第 24页
三,Windwos编程模式
? Windows结构
? WOSA及 Windows DNA
? 事件及消息机制
? 多线程
? 编程流程几开发包
? 程序员接口
下一页
上一页
停止放映
第 25页基本系统
设备驱动程序
虚拟机管理程序子系统
操作系统服务
网络子系统
文件管理子系统
Windows
Kernel
Windows
GDI
Windows
User
Windows子系统Windows API 层
32位
Windows
应用程序
Windows
Kernel
外壳
16位
Windows
应用程序
⒈ Windows结构
系统虚拟机器 共享地址空间 MS-DOS
虚拟机
下一页
上一页
停止放映
第 26页
Windows结构(续)
? 系统虚拟机器 VM:是系统的环境名,在这种环境下,系统将
支持所有的 Windows应用程序和 Windows子系统组件。如图
形设备接口( GDI)等。
? 32位 Windows应用程序,是一种新的 Windows应用程序,是
Microsoft Win32应用程序编程接口 API的一个子集。
? 外壳,是一种 32位的 Windows应用程序,它为系统提供必须
的用户界面。
? 16位 Windows应用程序,是在 Windwos 3.x上使用的应用程
序。
? Windows内核,支持 Windows应用程序所要求的低级服务,
如动态内存分配。
? GDI:是 Windows图形功能的核心。
? User:是 Windows管理程序。
? MS-DOS虚拟机器,支持在 Windows下的 MS-DOS应用程序。
下一页
上一页
停止放映
第 27页
⒉ WOSA
? WOSA( Windows Open Service Architecture)
Windows开放服务 体系结构,是 Windows为实
现分布式计算而设计的一套 API。该结构模型可以
使不同的提供商提供访问多个后端的服务程序。
WOSA包括:
? MAPI:消息 API。在不同网络类型上,给
Windows程序提供不同类型的透明的消息服务。
? ODBC:开放数据库连接。 ODBC允许不同的
Windows应用程序访问任何企业网络上的、多种
类型数据库系统。
? RPC:远程方法调用。使 Windows应用程序可以
跨异质的网络去调用远程的方法或应用。
下一页
上一页
停止放映
第 28页
WOSA(续)
? Windows SoketS,Windows 套接字。
使网络上使用不同类型数据传输协议的程
序通过套接字进行透明的操作。
? License Services API:验证字服务 API。
这是一个软件验证字的编程接楼,可以实
行对不同公司产品的监控以及控制网络程
序的应用。
? TAPI:提供一个电话应用的 API接口。使
Windows应用程序可以对传统的电话网络
及设备进行透明存取。
下一页
上一页
停止放映
第 29页
⒊ Windows DNA
? Windows DNA( Windows Distibuted interNet Applications
Architecture)。 Windows分布式 Internet应用结构。其目的是
创建一个框架,用以建立基于微软 Windows平台的各种应用程序,
从而使 PC机和 Internet完美结合。
? Windwos DNA建立了一个计算模型,它实现了 Web和客户机 /服
务器计算的集成。
? 在最高层次上,Windows DNA融合 PC机和 Internet是通过两种
途径:一是使计算机之间通过协作望、公众网能很好地湖用和共
同运作;二是将应用的核心服务或“管道”服务更深地综合于操
作系统。
? 更重要的是 Windwos DNA 提供了一个基于开放式协议和公开界
面的互用性框架,这一框架能使用户以新功能( Web)扩展现有
系统。
? Windows DNA的核心是通过一个公共对象模型( COM)将 Web
和客户机 /服务器应用开发模式结合起来。 Windows DNA通过构
件对象模型使用一套通用的服务集,如构件,动态 HTML、网络
浏览器和服务器、脚本、事物处理、消息序列、安全性、目录、
DB和数据存取、系统管理以及用户界面。这些服务一统一的方式
公开于各个层面,供应用程序使用。
下一页
上一页
停止放映
第 30页
Windows DNA体系结构
1,Windows平台, WindowsOS,Win32技术
2,部件对象模型 COM,COM,DCOM及与之相关
的技术
3,Internet技术, MS-IE、动态 HTML( DHTML)、
IIS,MS-Site Server,JAVA
4,Windows DNA 服务,包括安全性、目录、事物
处理、消息队列,DB管理、数据存取,E-mail与
协作、脚本、系统管理等;
5,Windows DNA的工具,快速应用开发工具、组
件的创建、协同开发、内容的创建与发布,Web
网站的开发。
6、其他 Windows DNA 服务器的应用。 MS-
BackOffice等。
下一页
上一页
停止放映
第 31页
Windows DNA体系结构示意图
工具集
用户接口
及浏览
事务处理
集成化存储
分布式
操作系统
( DOE)
下一页
上一页
停止放映
第 32页
⒋ 事件及消息机制
? Windows是事件驱动(消息驱动)的 OS,也是基于消
息的 OS。
? Windows 应用程序中消息有两种送出途径;直接和排
队。 Windows或某些运行的应用程序可直接发布消息
给窗口过程,或者,消息可送到消息队列,在应用程序
执行期间应用程序对象连续不断轮询消息队列的消息。
凡是以排队方式送出的消息都被送到一个由操作系统提
供的消息队列的保留区。在 OS中当前执行的每个进程
都有各自的消息队列。
? 事件驱动程序不是由事件的顺序来控制,而是由事件的
发生来控制,而事件的发生是随机的、不确定的,这就
允许程序的用户用各种合理的顺序来安排程序的流程。
? 事件驱动围绕消息的产生与处理展开,它是靠消息循环
机制来实现的,消息是一种报告有关事件发生的通知。
下一页
上一页
停止放映
第 33页
Windows应用程序的消息来源
1) 输入消息,包括键盘和鼠标的输入。这类消息首
先放在系统消息队列中,然后由 Windows将它
们送到应用程序的消息队列中,由应用程序来处
理消息。
2) 控制信息,用来与 Windows的控制对象(列表
框、按钮等)进行双向通信。这类信息一般不经
过应用程序消息队列,而是直接发送到控制对象
上去。
3) 系统消息,对程序化的事件或系统时钟中断作出
反映。有些消息(动态数据交换消息 DDE)要通
过 Windows的系统消息队列,而有的则不通过
系统消息队列而直接送入应用程序的消息队列
(如创建窗口消息)。
4) 用户消息,这是程序员自己定义并在应用程序中
主动发出的消息,一般由应用程序的某一部分内
部处理。
下一页
上一页
停止放映
第 34页
⒌ 多线程
? 线程 ( Thread) 是 Win32分配 CPU的基本单位 。 线程
是代码执行的流程, 它可以执行应用程序代码的任
何部分 。
? 32位的 Windows应用程序可包含一个或多个进程,
每个进程由一个或多个线程构成 。
? 线程分为两种类型,worker和 user-interface;前
者不处理窗口信息, 用于在后台执行任务, Worker
线程是易用和常用的类型 。 后者用来处理用户输入
和相应由用户产生的事件和消息 。
? Windows的多任务是通过使用 Win32 API,从而允许
多进程与多线程同时执行 。 对于用户来说, 多任务
和多线程的应用程序更易于响应用户的需求 。 例如,
用户可同时打印一个文件和编辑另一个文件, 甚至
有可能是在欣赏着 VCD的同时, 做上述工作的 。
下一页
上一页
停止放映
第 35页
⒍ 编程流程及开发包
? 传统的 Windows3.X应用开发者必须使用 Windows软件开发包
SDK。
? Windows SDK主要包括:
– 描述 Windows函数, 消息, 结构, 宏及资料的大量书籍;
– 各种工具:对话编辑器, 图像编辑器;
– 联机帮助文件
– Windows库及头文件
– C语言编写的样本 Windows程序等 。
? Windows SDK程序开发中, 涉及 Windows SDK及 API;
事件驱动程序设计, 消息处理和消息循环;窗口类
和窗口样式; Winmain( ) 主函数;窗口过程 。
? C++是完全面向对象语言, 它简化了开发过程, 提
供代码重用, 开发效率高等优点 。
? Visual C++ 6.0 采用 Microsoft基本类 MFC库封装
SDK的结构, 功能及应用程序框架内部技术 。
下一页
上一页
停止放映
第 36页
用 VC++开发 Windows应用程序的流程
? 进入 VC++集成开发环境, 选定新建文件或
项目类型, 如创建项目可以是 Windows可
执行文件, Windows动态链接库, DOS字符
界面程序等类型 。
? 在集成开发环境的编辑器进行代码编辑 。
? 用资源编辑器编辑 Windows程序所需要的
资源文件, 包括对话框, 图标, 菜单等
? 用编译器进行编译, 生成可执行的程序机
器代码 。
? 调试并优化 。 利用 VC++的调试工具 spy++
进 行 程 序 调 试 与 优 化 。 生 成 最 终 的
Windows可执行应用程序 。
下一页
上一页
停止放映
第 37页
⒎ 程序员接口
? Windows API 有两种基本类型:
Win16 是 16位 Windwos的编程接口
Win32 是 32位 Windows家族 OS的编程接口
? Win32 API包含了 2000多个经实践检验过的函数和宏, 提供极丰
富的功能 。
? 在 Win32 API的核心中, 有三个主要组件提供了大部分 Windows
的功能 。 它们是:
– USER32.DLL 负责窗口管理,包括消息, 菜单, 通信, 等
– GDI32.DLL GDI组件是图形设备接口, 它管理用户界面和绘
图等
– KERNEL32.DLL 处理存储器低层功能, 资源管理等, 是
Windows的核心 。
– 其他还有一些控件是 API的组成部分, 包括公用对话框, 打
印, 文件压缩, 多媒体支持等 。
下一页
上一页
停止放映
第 38页
思考及作业
? 思考题,
1~5,11,13,15
? 作业题:
6~10,19