系统接口的比较和再认识
install, config, register, init, open, write, ioctr
在软件世界、程序开发领域,甚至整个工业圈和生活圈充斥这样的一些动词术语:安装、配置、注册、初始化和打开等,这些术语都是奔向一个共同的目标——让所需的功能可用。每一个动词都描述了一个【系统的逻辑接口】,并且这些接口的操作的内容对应着【作业人员】的一项工作。而在具体的情景内,一个作业人员可能身兼多项工作,这样会混淆这些术语的逻辑本质,看不清它们之间的细微差别。本文细究一下这些术语的差别,并以我个人的专业——程序开发领域为例子作一些说明。
安装(install)
安装是一种从无功能到有功能的过程,安装的概念是很通用的,它适用于整体系统——【安装系统】,也适用于系统的一部分——为系统安装XX,甚至更细微的操作也可称为安装。
配置(config)
配置是在已经安装好的系统上作细微的功能调整。在程序开发领域,程序配置有三种:
- 编译时配置,像linux世界大部分的开源包都可以编译时配置;
- 运行时初始化配置,常见的是通过命令行传递配置信息;
- 运行中配置。
注册(register)
注册只适用于提供了【注册接口】的系统。系统实现注册接口是为灵活地为系统添加新的【功能实例】,所以被注册的都是系统的一个部分,系统的子系统,它为用户提供的功能必须依赖【父系统】协助才能完成。在Linux系统中的很多子系统都实现注册接口,这里列举一些:
- 内核模块,在行话里,内核模块是被安装进内核的,使用的安装命令也叫insmod,但这更确切的是一个注册过程;
- VFS子系统,新文件系统的注册在行话叫挂接——mount,但更确切的也是一个注册过程;
- tty 子系统,这是IO子系统里特殊的逻辑的驱动的子系统,它注册的是tty driver。
初始化(init)
初始化是指对系统的【一项功能】的实现【所需的约定状态】的搭建过程。初始化也是一个通用的过程概念,安装有初始化,注册也要初始化。不过,安装注册与初始化在【过程粒度】有区别。初始化相对描述的是【小一级的粒度】。例如,安装和注册则依赖于元对象操作,例如管理员,是一种自然语言级别操作;而像在Linux的注册模块的时候,注册会触发初始化过程,初始化过程是注册的实现,属于人工语言级别操作。自然语言的抽象粒度大于人工语言。
打开(open)
前面的四种操作可称为系统的【功能准备】,而打开则是为系统【功能的一次使用】作准备,因为同一功能可以被多个用户同时使用。一次打开就是一次会话的准备,系统也会要求用户作一必须的使用准备。比如打开一个文件,一个文件可以被多进程打开,但只能被一个进程读写使用。“打开”的概念是打开文件的情景引申过来的,在一对一的系统使用情景中可能不需要“打开”步骤,直接使用。
读写(read write)
功能的使用。