一种大型开放式软件系统的设计方法
什么是开放式软件系统
本文试图提出一种模型和规则,使得采用这种模型规则的软件开发者,能够更轻松地组织起大规模软件系统的设计和开发实现。
角色
开放式软件系统首先是一个软件系统,也需要根据需求来设计。而需求的抽象层次有高有低,根据满足的需求层次高低来划分,开放式软件系统有三个主要角色:
系统设计者:提供软件系统基础功能设计,例如,操作系统中的文件系统,IPC 机制,硬件抽象,等等的工作,并将这些功能开放授予不特定的大量其他群体使用 。
功能实现者:利用系统设计者提供的功能,面向软件用户实现特定需求的软件设计者。可以认为,这是系统设计者连接最终软件用户的桥梁。
最终软件用户:不直接参与软件开发全部生命周期,通常只直接使用软件满足自身的需求。
例如,微软是 Windows 系统的设计者;Adobe Photoshop 是功能实现者;平面设计师师最终软件用户。这三者构成了开放式软件系统。
又例如,Google是chrome 浏览器的设计者;Adblock 是功能实现者。库和SDK的作者是系统设计者;使用库或者SDK进行软件开发的,是功能实现者;
特征
开放式软件系统具有以下和一般应用软件不同的特征:
对需求和实现的开放特征
系统管理者并不试图直接满足最终软件用户的需求,而是依靠功能实现者满足具体的需求。因此要求系统设计者保留系统的扩展性并提供开放的机制,允许功能实现者使用某些系统所管理的资源对资源的调度、保护和隔离
系统管理者拥有资源的管理能力和权限,而多个功能实现者可能同时需要这些资源。因此系统设计者应该提供一种机制,同时满足多个功能实现者对资源的正常请求;同时要避免资源竞争导致具有恶意的功能实现者干扰其他功能的运行。例如:现代操作系统普遍才用分时机制调度和保护CPU计算资源;才用虚拟内存地址保护计算机内存。
元素
开放式的软件系统的模型,并不局限于操作系统设计。任何支持插件功能的软件应用,也可以应用此模型进行分析。然而无论是操作系统设计抑或是具有插件系统的软件设计,我们的讨论离不开以下的基本概念:
内核:系统设计者实现资源调度和管理的主体,内核天然地与功能实现者具有交互媒介。
进程:内核对功能实现者实现资源管理和调度功能的载体,拥有自己的内存地址空间和至少一个线程。
线程:计算资源的实际载体。
协议:进程和内核、进程和进程之间的交互机制的描述。在软件开发中通常表现为 SDK 或 API。
开放式软件系统的设计原则
对资源的定义
所有进程可以接触的都是资源,包括进程自身的计算能力,也是一种资源。
另外,用户界面也应被视为一种具有复杂协议的资源。
功能实现者与系统管理者的交互
每一个进程在一个内存地址空间中独立运行,可以运行若干个用户线程。
内核被视为一个天然的共享内存空间的另一个线程或进程,但不受功能实现者进程管理。
功能实现者对资源的访问及其协议
进程必须向内核发送请求,才能实现显示用户界面、获取输入、访问文件系统、向其它进程发送消息等目的。
所有的资源都被视作在另外一个或多个资源管理进程(并不是内核)中运行,进程只能通过内核和使用既定的协议向这个进程发送消息来操纵资源。
任何可以被某个进程访问的资源,至少有一个路径可以与之对应。路径概念与 URL 相似,但并不必然代表于数据存储相关的文件系统概念。
功能实现者自身功能的扩展和对资源的复用
不需要通过内核就可以建立自己的协程,本质上协程是进程对已有的计算资源的复用。
可以通过与文件系统或存储系统的协作,实现动态新增和加载功能,例如新增线程、子进程等。
关键字:操作系统, 实现者, 软件, 进程
版权声明
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处。如若内容有涉嫌抄袭侵权/违法违规/事实不符,请点击 举报 进行投诉反馈!