一. 什么是架构和架构本质
在软件行业,对于什么是架构,都有很多的争论,每个人都有自己的理解。 此君说的架构和彼君理解的架构未必是一回事。因此我们在讨论架构之前,我们先讨论架构的概念定义,概念是人认识这个世界的基础,并用来沟通的手段,如果对架构概念理解不一样,那沟通起来自然不顺畅。
Linux有架构,MySQL有架构,JVM也有架构,使用Java开发、MySQL存储、跑在Linux上的业务系统也有架构,应该关注哪一个清楚以上问题需要梳理几个有关系又相似的概念:系统与子系统、模块与组建、框架与架构
1 进程
进程与程序
操作系统之中最为通用的概念就是「进程」。与此相关的面试题以及各种技术优化策略也层出不穷,足以够证明它对于理解操作系统中举足轻重的地位。事实上,通过「进程」,程序员可以更为直观的理解自己所开发的软件,并且能够从中深刻的认识到操作系统在软件运行做了些什么。
简单来讲,进程就是正在执行的程序。每个进程都包含有属于自己的一段地址空间,可以看作是一部分内存空间。在这样的地址空间中,进程能够根据需要进行内存的读写。
地址空间里面一般包含可执行程序,以及对应程序的数据及其堆栈。与每个进程相关的还有一组资源,通常包括寄存器(包括程序计数器和堆栈指针)以及运行程序所需的所有其他信息。从这可以看出,程序本身只是指令、数据以及其组织形式的一种描述方式,而程序的实际的运行实例就是一个进程。
不过进程与程序也并不完全等同,他们不是简单的一一对应的关系,而是在不同层面的表现形式。他们的主要区别在于:
- 程序是进程的静态文本,而进程是执行程序的动态过程;
- 进程与程序不是一一对应,同一程序可在不同进程中运行,一个进程也可以执行多个程序;
- 程序是一种长期可保存的文本,进程是暂时的一次执行过程;
- 进程是操作系统分配调度的独立单位,而程序是操作系统层级之上的应用程序。
进程状态
从上面我们知道,进程可看作是程序运行的动态过程。那么为了更好的对进程进行描述,我们给运行中的进程定义了三种基本状态,包括就绪、执行和阻塞。
这就是所谓的三态模型,描述了进程在整个运行周期中状态变化。每个状态的转移过程可以通过下图来表示。
是指进程刚刚创建的状态,在这个状态下,需要等待操作系统完成创建和分配进程的各种所需信息,包括建立、加载程序并创建地址空间等。在完成这些准备工作后,该进程的状态就会转移为就绪状态并划分入就绪队列中。
PCB:进程控制块,用于存放进程的管理和控制信息的数据结构
创建状态看起来好像没什么太多用处,毕竟进程就绪的时候肯定完成了创建。但是之所以还是要引入,还是为了确保进程控制块的完整。只有在创建状态完成了进程完整的准备工作(生成创建及资源分配),才能进入就绪状态。
这样就保证了处于就绪状态进程的正确性,同时也提升了操作系统对进程的管理的灵活性。操作系统可以从一开始就对进程的创建和资源分配进行管理,更大程度上节省了系统资源的调控。
代表着进程的结束,当进程执行完成后,需要操作系统在终止状态对进程的运行结果进行善后处理。这样的善后处理包括对进程所使用的资源进行回收,并将其它进程所需要的信息传递出去。最后,操作系统还需要对终止的进程进行内存释放,将其中的内容清空,并将这部分内存返还给系统。
终止状态意味着进程的执行周期的结束,但却并不表示进程是正常结束的。当一个进程出现了无法预知的错误或者被操作系统或其它进程所终止时,它都会进入终止状态,进行各种资源的回收。
事实上即使是进程的五态模型也不足以用来描述进程复杂的运行过程。由于系统内部资源的限制,并不是为所有进程运行的要求都能够满足,因此在这个基础上,又引入了进程的挂起就绪状态以及对应的挂起阻塞状态。
目录层次结构中的每个文件都可以通过在目录层次结构的顶部(根目录)给出其路径名来指定。这样的绝对路径名包含必须从根目录遍历才能到达文件的目录列表,并用斜杠分隔各个组件。
D:/study/学习资源/个人/私は学ぶのが大好きです.mp4
每个进程都会有一个当前的工作目录,在该目录中查找不以斜杠开头的路径名。这就是所谓的相对路径。此外,进程可以通过发出指定新工作目录的系统调用来更改其工作目录。
需要注意的一点是,在读写文件之前,必须先打开该文件,然后再检查权限。如果允许访问,系统将返回一个称为文件描述符的小整数,以用于后续操作。如果禁止访问,则返回错误代码。
挂载
在操作系统的文件系统中,另一个重要概念就是挂载。大多数台式计算机都有一个或多个光盘驱动器,可以在其中插入,和光盘。(下面以系统为例进行介绍)
这些计算机以外的光盘驱动器实际上都可看作是一个文件系统,并且与计算机本身硬盘上的根文件系统是相互独立,彼此无关的。为了提供一种优雅的方式来处理这些可移动介质,操作系统允许将光盘上的文件系统附加到根文件系统的主树上,这就是挂载。
但是,由于无法在上指定路径名,因此无法使用该文件系统。不允许使用驱动器名称或数字作为路径名的前缀。这是操作系统应该消除的对于设备的依赖性。取而代之的是,系统调用允许上的文件系统附加到根文件系统。
在下图中,上的文件系统已安装在目录中,因此可以访问文件和。如果目录包含其它文件,则在安装时将无法访问它们,因为将引用的根目录。不过一般而言,文件系统几乎总是挂在空目录上。如果系统包含多个硬盘,它们也都可以挂载到单个树中。
专用文件
文件系统中的另一个重要概念是专用文件。提供专用文件的作用是为了使设备看起来像文件。这样,可以使用与读写文件相同的系统调用来读写它们。
存在两种专用文件:块特殊文件和字符特殊文件。块特殊文件用于对设备进行建模,这些设备由一组可随机寻址的块(例如磁盘)组成。通过打开一个块专用文件并读取进行,这样一来程序就可以直接访问设备上相应的块,而无需考虑其上包含的文件系统的结构。
同样,字符专用文件可用于对打印机,调制解调器和其他接受或输出字符流的设备进行建模。按照惯例,特殊文件保存在目录中。例如,可能是打印机(曾经称为行式打印机)。
除此之外,还有一个特殊的文件,就是管道。没错,就是用来进程间通信的那个。事实上,管道是一种伪文件,可用于连接两个进程。如果进程和希望使用管道进行通话,则必须提前进行设置。
助想进大厂的朋友,点击这里即可免费获取**
[外链图片转存中…(img-iScOvH8Z-1620449685776)]
[外链图片转存中…(img-u9OEbs0P-1620449685776)]
[外链图片转存中…(img-BlVxCqWj-1620449685777)]
文章知识点与官方知识档案匹配,可进一步学习相关知识Java技能树首页概览92784 人正在系统学习中
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!