`
fixopen
  • 浏览: 84120 次
文章分类
社区版块
存档分类
最新评论

操作系统,loader以及应用服务器

阅读更多
这是该系列的第二部分。

上次说道,OS主要分成计算的管理,存储的管理和IO的管理,其中,计算的管理从OS的角度来看是最重要最根本的。

注:我们暂时不考虑并发。
我们现在要从一个动态的角度看问题了。基于程序存储+图灵机这个基本思想,我们构建了现在形形色色的计算机系统。既然程序是被存储的,那么它一定被放在存储系统里面,而对于运算,实际上是一系列的指令来控制计算的进行。这里面就涉及到存放在存储系统里的静态的程序怎么幻化成可以操纵计算的动态的操作者。

这个过程叫做loader。loader就是把程序从静态的存储状态转换为动态的进程状态,然后这个动态的程序就可以控制计算过程了。

说到这儿,不得不先明确几个基本概念了。

进程:运行着的程序。

程序:有运行潜力的,包含控制运算的指令集合的文件。

文件:存储系统管理的基本单位,每种文件都可以有自己特定的内部结构。但是对于操作系统来说,这些结构大都是不可见的。操作系统一般把文件看成简单的字节序列。
每一个文件都需要有一个或者多个自己的解析器,这些解析器可以解释文件形成特定的意义。

loader:装载器,程序文件的解析器,它负责解释程序文件,形成进程。请注意,它本身也是一个运行着的程序,也就是进程。这里似乎是一个无法解开的死结,其实不然,想想计算机的启动过程就明白了。

装载器的职责包括解释可执行文件,为它们准备好执行环境,也就是执行开始或者过程中可能会需要的各种资源,所依赖的各种库,以及需要的场地。狭义一点,整个操作系统都可以看成是为各种应用提供运行环境的一个系统。看到这儿想起什么了?——应用服务器。对,就是应用服务器。不过应用服务器一般还提供负载均衡、应用分区、应用池及重新回收和利用等等高端的特性。不过,Windows2003自己也提供了这些特性,所以难怪Windows会号称自己就是应用服务器了。

先说一些外围技术,前面提到的可执行文件,其实就是程序文件,它们会被装载器解释,现在的问题是:我随便给一个文件,让装载器解释执行,会有什么问题?答案,没有什么问题。原因:所有的文件的内容都是数据。可是这……,这不可能,也不应该啊。对,是不应该。所以我们需要一些约定。比如:Windows的约定是文件扩展名。文件扩展名是文件名最后一个点以后的部分。对于某些特定文件扩展名(确切地说是:com exe cmd bat msc scr cpl等等),Windows的装载器就会认为它是可执行的,进而试图执行之。

而UNIX类的操作系统,不是通过文件名约定的,而是通过文件系统中的文件属性来约定的,那种属性中包括x(可执行)的文件就是可执行文件。

其实,上面的描述还隐藏了一些细节,我通过原生的和次生的这两个概念来把隐藏的揭露出来:)

不过,我首先还要描述一个叫做魔术字的概念。

魔术字就是某个字,它一般是2的某个幂(这个幂可能是0 1 2 3,再多了就比较少见了)长,当然,也不一定。它会被放在某些需要做标记的文件开头,一个特定的魔术字就代表一个特定的文件类型。这个约定跟前面两种形式的约定相比,有很多比较明显的优势和劣势,一般都会双管齐下,互为备份的。

现在开始我们原生和次生:)。

所谓原生,就是由装载器直接装载运行的那种可执行文件。所谓次生,是由装载器装载入另一个解释器,由这个解释器去装载运行这个可执行文件的。呵呵,差别似乎不是很大,但是由于增加了一个间接层,我们有了很多腾挪的余地。比如:Windows平台的JS文件,UNIX平台的perl文件,再一次的,UNIX 在这些文件上提供了方便于Windows的特性,它们(脚本文件们)一般都有一个叫做dingbang(或许我写错了……)的首行,用来指定自己的解释器。

现在我得解释一下在装载器看来可执行文件的格式(我现在只关注原生的可执行文件)。

对于任何文件,如果相对复杂,一般都会有一个头部,记录相关的元数据。可执行文件也不例外。

对于可执行文件,历史上有过很多格式,其中最简单的那种甚至没有头部,就直接是指令集合。最经典的例子就是DOS下的com文件。当然还有很多别的格式, a.out格式是其中非常出名的一种格式,甚至前不久还在用。但若论影响力和持久性,最出名的可执行文件格式非COFF和ELF莫属。COFF和ELF似乎都是贝尔实验室整出来的格式(对于ELF我有点拿不准),ELF是COFF的继任者。Windows上的PE格式就是一种COFF格式。

……,时间有限,先到此为止!
分享到:
评论

相关推荐

    多个操作系统安装

    多系统安装是指在同一个服务器上安装多个操作系统的技术,能够满足不同的应用需求和环境要求。在本文中,我们将介绍如何在同一个服务器上安装多个Fedora操作系统。 多系统安装的优点 多系统安装可以为用户提供多种...

    swoole_loader 拓展包 支持win和linux

    Swoole_Loader的出现,极大地简化了在不同PHP版本和操作系统上的安装和配置过程。 这个资源包的特点在于其全面性,包含了针对多个PHP版本的适配,这意味着无论你正在使用的是PHP 5.x、7.x还是8.x,都能找到适合的...

    Swoole Loader扩展.7z

    2. Windows 64位(线程安全):这是为Windows操作系统准备的版本,由于Windows系统对线程支持良好,因此通常建议使用线程安全版本。线程安全意味着在多线程环境下,代码不会出现意外的错误或者数据冲突。 3. Linux ...

    swoole_loader19-21.zip

    4. **跨平台支持**:`swoole_loader19-21.zip` 提供了Linux和Windows两个主要操作系统的版本,这意味着开发者无论在哪个平台上工作,都可以方便地使用Swoole Loader。这增加了其在不同开发环境中的适应性,降低了...

    自制操作系统源码

    操作系统是计算机科学的基础组成部分,它管理着硬件资源并为应用程序提供服务。在“自制操作系统源码”项目中,我们看到作者于渊通过汇编语言和C语言深入学习和实践操作系统的构建过程。这个项目不仅是一个操作系统...

    php_swoole_loader_2.2_nzts_php7.4 linux版本

    与Swoole Loader结合,可以充分利用这些特性,构建出更高效、更健壮的服务器端应用。 在Linux环境中,Swoole Loader 2.2提供了以下关键功能: 1. **自动加载**:Swoole Loader能自动检测并加载Swoole扩展,简化了...

    开源测试工具curl-loader

    它采用C语言编写,确保了高效性和跨平台兼容性,可以在多种操作系统上运行,包括Linux、Windows和macOS等。curl-loader的独特之处在于其能够模拟大量并发的客户端请求,这些请求可以来自不同的IP地址,这在模拟真实...

    PHP swoole loader 扩展 for linux win系统、线程安全\非安全、PHP54-81 全集

    这意味着无论你是在哪种操作系统环境下,或使用哪个PHP版本,都可以找到适合的Swoole Loader实现。 **Linux环境下的安装与配置** 在Linux环境中,提供的`swoole-compiler-loader.sh`脚本通常用于编译和安装Swoole...

    swoole_loader扩展PHP.zip

    4. **TCP/UDP网络服务**:Swoole Loader扩展可以创建TCP和UDP服务器,处理网络通信,适用于构建高性能的Web服务、API接口或其他网络应用。 5. **WebSocket支持**:Swoole提供了WebSocket协议的支持,可以方便地构建...

    基于Linux的嵌入式Web服务器设计与应用.pdf

    本文主要探讨的是基于Linux操作系统的嵌入式Web服务器的设计与应用。 1. 硬件与软件体系结构 嵌入式Web服务器通常基于高效的处理器,例如文中提到的32位ARM处理器。在这种系统中,Linux操作系统被植入,因为Linux...

    前端开源库-buffer-loader

    总结来说,Buffer-loader是WebPack生态系统中一个实用的工具,它提高了前端应用处理二进制数据的能力,尤其在优化大型资源加载和提高用户体验方面发挥了重要作用。对于处理非文本资源的前端开发者,这是一个值得了解...

    Windows64位 Swoole Loader php73 扩展安装包-ts

    标题中的“Windows 64位 Swoole Loader php73 扩展安装包-ts”指的是一个专门为64位Windows操作系统设计的PHP扩展,用于加载Swoole库。Swoole是一个高性能、异步、并行的PHP扩展,它使得PHP开发者能够编写服务器端的...

    PHP环境安装swoole-loader扩展

    首先,Swoole支持多种操作系统,包括Windows和Linux。这意味着无论你的开发环境是哪个平台,都有相应的版本可供安装。在Windows系统中,你可以找到64位的线程安全版和非线程安全版Swoole扩展。线程安全(Thread Safe...

    swoole_loader73.so(含71,71_zts,72,72_zts,73,73_zts)

    - `swoole_loader71_zts.so`、`swoole_loader71.so`、`swoole_loader72_zts.so` 和 `swoole_loader72.so` 则是适用于Linux系统或其他非Windows系统的.so扩展文件。 安装Swoole扩展时,需要确保选择正确版本和体系...

    DSM6.2 Loader 1.03b

    DSM6.2 Loader 1.03b 是一个针对DS3615xs和DS3617xs型号NAS的启动加载器更新,用于在虚拟环境中运行DSM6.2操作系统。此版本的Loader优化了在VMware虚拟机上的兼容性和性能。 在虚拟机环境中部署DSM时,Loader扮演着...

    Win64位 Swoole Loader扩展安装包-ts-NTS

    标题中提到的"Win64位 Swoole Loader扩展安装包-ts-NTS",意味着这是针对64位Windows操作系统的Swoole Loader安装包。"ts"代表"Thread Safe"(线程安全),而"NTS"则代表"Not Thread Safe"(非线程安全)。这两种...

    php_swoole_loader_php73_nzts_x64

    最后,“x64”表示这是为64位操作系统编译的。64位系统能够处理更大的内存地址空间,允许应用程序使用超过4GB的内存,并且通常在性能上有优势。 总的来说,"php_swoole_loader_php73_nzts_x64.dll"是一个专为...

    flash_loader串口下载

    在ARM架构中,闪存通常用于存储操作系统、应用程序和其他持久性数据。Flash Loader通过串口与ARM设备交互,接收来自主机的二进制固件映像,并将其安全地写入到设备的闪存中。 **安装程序**:描述中提到“转载别人的...

    C8051FXX-boot-loader-.zip_boot loader

    引导加载程序(Boot Loader)是嵌入式系统中至关重要的组成部分,它负责初始化硬件设备,为操作系统或应用程序创建一个稳定的运行环境。对于C8051FXX系列单片机,其Boot Loader的设计和实现尤为关键,因为这些微控制...

Global site tag (gtag.js) - Google Analytics