全方位剖析 Linux 操作系统,太全了

linux 简介UNIX 是一个交互式系统,用于同时处理多进程和多用户同时在线 。为什么要说 UNIX,那是因为 Linux 是由 UNIX 发展而来的,UNIX 是由程序员设计,它的主要服务对象也是程序员 。Linux 继承了 UNIX 的设计目标 。从智能手机到汽车,超级计算机和家用电器,从家用台式机到企业服务器,Linux 操作系统无处不在 。
大多数程序员都喜欢让系统尽量简单,优雅并具有一致性 。举个例子,从最底层的角度来讲,一个文件应该只是一个字节集合 。为了实现顺序存取、随机存取、按键存取、远程存取只能是妨碍你的工作 。相同的,如果命令
ls A*意味着只列出以 A 为开头的所有文件,那么命令
rm A*应该会移除所有以 A 为开头的文件而不是只删除文件名是 A* 的文件 。这个特性也是最小吃惊原则(principle of least surprise)

最小吃惊原则一半常用于用户界面和软件设计 。它的原型是:该功能或者特征应该符合用户的预期,不应该使用户感到惊讶和震惊 。
一些有经验的程序员通常希望系统具有较强的功能性和灵活性 。设计 Linux 的一个基本目标是每个应用程序只做一件事情并把他做好 。所以编译器只负责编译的工作,编译器不会产生列表,因为有其他应用比编译器做的更好 。
很多人都不喜欢冗余,为什么在 cp 就能描述清楚你想干什么时候还使用 copy?这完全是在浪费宝贵的 hacking time 。为了从文件中提取所有包含字符串 ard 的行,Linux 程序员应该输入
grep ard fLinux 接口Linux 系统是一种金字塔模型的系统,如下所示
全方位剖析 Linux 操作系统,太全了

文章插图
 
应用程序发起系统调用把参数放在寄存器中(有时候放在栈中),并发出 trap 系统陷入指令切换用户态至内核态 。因为不能直接在 C 中编写 trap 指令,因此 C 提供了一个库,库中的函数对应着系统调用 。有些函数是使用汇编编写的,但是能够从 C 中调用 。每个函数首先把参数放在合适的位置然后执行系统调用指令 。因此如果你想要执行 read 系统调用的话,C 程序会调用 read 函数库来执行 。这里顺便提一下,是由 POSIX 指定的库接口而不是系统调用接口 。也就是说,POSIX 会告诉一个标准系统应该提供哪些库过程,它们的参数是什么,它们必须做什么以及它们必须返回什么结果 。
除了操作系统和系统调用库外,Linux 操作系统还要提供一些标准程序,比如文本编辑器、编译器、文件操作工具等 。直接和用户打交道的是上面这些应用程序 。因此我们可以说 Linux 具有三种不同的接口:系统调用接口、库函数接口和应用程序接口
Linux 中的 GUI(Graphical User Interface) 和 UNIX 中的非常相似,这种 GUI 创建一个桌面环境,包括窗口、目标和文件夹、工具栏和文件拖拽功能 。一个完整的 GUI 还包括窗口管理器以及各种应用程序 。
全方位剖析 Linux 操作系统,太全了

文章插图
 
Linux 上的 GUI 由 X 窗口支持,主要组成部分是 X 服务器、控制键盘、鼠标、显示器等 。当在 Linux 上使用图形界面时,用户可以通过鼠标点击运行程序或者打开文件,通过拖拽将文件进行复制等 。
Linux 组成部分事实上,Linux 操作系统可以由下面这几部分构成