UNIX或Linux系统如何工作?[关闭]


37

我想知道操作系统是如何工作的,简而言之

  • 它所基于的基本组件
  • 这些组件如何协同工作
  • 是什么使UNIX UNIX
  • 是什么让它与Windows等其他操作系统如此不同

3
哇,这个问题要花很长时间才能全面回答...就像几本书一样。不是Unix的操作系统(很少有嵌入式空间,而Windows是最明显的例外)。
xenoterracide 2010年

2
不确定是要哭还是要笑
zvolkov 2010年

27
UNIX或Linux系统如何工作?很好,谢谢 :-)。
加拉夫

3
喜欢这个问题。这种方式可以使经验丰富的用户说出他们自己的理解,并使我们所有人都有机会了解unix和linux的领域。
SteinÅsmul2011年

5
好吧,实际上,您拥有一个shell,而在其之下则拥有一个内核。Unix也是如此。
汤姆·齐奇

Answers:


74

UNIX系统由几个部分或层组成,我想称之为它们。

要启动系统,称为引导加载程序的程序位于硬盘分区的第一扇区。它由系统启动,然后找到操作系统内核并进行加载。

分层

  1. 内核。这是由引导加载程序启动的中央程序。它执行系统的基本硬件交互(磁盘,内存,视频,声音),并提供一个可以启动程序的虚拟环境。内核还附带了处理硬件设备之间所有微小差异的所有驱动程序。对于外部世界(较高层),每类设备似乎都以相同的一致方式运行-进而可以在程序上进行构建。

  2. 后台子系统。只有常规程序,这些程序不会影响您。他们处理诸如远程登录之类的事情,提供中央消息总线,并根据硬件/网络事件进行操作。例如,蓝牙发现,WiFi管理等。任何网络服务(文件服务器,打印服务器,Web服务器)也都处于此级别。在UNIX系统中,这些都是普通程序。

  3. 命令行工具。这些都是小程序,可以启动它们来执行诸如文本编辑,下载文件或管理系统之类的任务。此时,UNIX系统对于系统管理员来说是完全可用的。在Windows中,该层不再存在。

  4. 图形用户界面。这些也是程序,唯一的区别是它们在屏幕上绘制窗口而不是编写文本。这使得该系统更易于普通用户使用。

任何服务或事件都将自下而上。

图书馆-通用平台

程序执行许多常见的操作,例如显示窗口,在屏幕上绘制内容或下载文件。这些内容对于多个程序是相同的,因此代码被放在单独的“库”文件中(.so文件-表示共享对象)。该库可以在所有程序之间共享。

对于每一个可以想象的东西,都有一个图书馆。有一个用于读取/写入PNG文件的文件。有一个用于JPEG文件,用于读取XML,用于加密,用于视频播放等。

在Linux上,应用程序开发人员常用的库是Qt和Gtk。这些库在内部使用低级库来满足其特定需求,同时以一种一致而简洁的方式公开其功能,以使应用程序开发人员可以更快地创建应用程序。

库提供了应用程序平台,程序员可以在该平台上为操作系统构建最终用户应用程序。系统提供的库越多,编写精美程序所需要编写的代码就越少。

有些库可用于不同的操作系统(例如Qt),而某些库实际上是专门绑定到一个操作系统中的。这将限制您的程序只能在该平台上运行。

进程间通讯

操作系统的第三个角落是程序之间的通信方式。这些是进程间通信(IPC)机制。它们以几种形式存在,例如一块共享内存,或者在两个程序之间建立了一个小通道来交换数据。还有一个中央消息总线,每个程序都可以在其上发布消息并接收响应。这用于全局通信,不知道哪个程序可以响应。

从库到操作系统

有了库,IPC和内核,程序员就可以构建用于系统服务,用户管理,配置,管理,办公室工作,娱乐等的各种应用程序。这形成了一套完整的套件,新手用户将其视为“操作系统”。 ”。

在UNIX / Linux系统中,所有服务都只是程序。所有系统管理工具都只是程序。他们都在做自己的工作,而且可以将他们联系在一起。我在http://codingdomain.com/linux/sysadmin/上总结了很多主要程序。


Windows的可区分部分

UNIX主要是程序,文件和受限权限的系统。避免了很多复杂性,使它成为功能强大的系统,同时看起来很容易做到。

详细地讲,这些原则可以在UNIX / Linux系统中找到:

  • 有访问信息的统一方法。(“一切都只是文件”)。您可以打开文件,网络套接字,IPC通道,内核参数和块设备作为文件。因此,虚拟文件​​系统出现在/ dev,/ sys和/ proc中。你唯一需要的API是openreadclose

  • 底层系统是透明的。每个程序都按照相同的规则运行。与Windows不同,“控制台程序”,“ gui程序”或“后台服务”之间没有人为的区别。它们都是程序,碰巧会做不同的事情。它们也都可以以相同的方式进行观察,分析和调试。

  • 设置是可读的,可编辑的,并且可以用注释注释。它们通常具有INI样式的格式,但可以根据该应用程序的需要使用自定义格式。因为它们只是文件,所以可以将它们复制到其他系统,进行归档或使用标准工具进行备份。

  • 没有大型的“一次完成所有操作”的应用程序。口头禅是“做一件事,做好事”。命令行工具可以链接在一起,并且功能强大。单独的服务(例如SMTP,IMAP和POP,以及登录)是单独的子程序,避免了复杂的代码纠缠和安全问题。复杂的桌面环境将辛苦的工作委托给各个程序。

  • fork()。新程序通过克隆现有程序来启动。克隆将设置所有内容(例如文件句柄),并有选择地将其替换为新的程序代码。这使得将相同的安全设置和限制应用于新程序,共享内存或设置IPC机制确实非常容易。启动过程的成本也非常低。

  • 文件系统是一棵树,可以在其中挂载其他磁盘分区和网络共享。再有,一种通用的访问数据的方式。常见的系统位置(例如,/usr可以轻松地作为网络共享安装。

  • 该系统是为低用户权限而构建的。登录后,每个用户(root用户除外)仅限于自己的资源,仅运行应用程序和文件。网络服务会尽快降低其特权。有一种明确的方法来获取更多特权,或要求某人代表他们执行特权作业。其他每个调用都受到程序的限制和限制。

  • 每个程序都将设置存储在用户主目录的隐藏文件/文件夹中。任何程序都不会尝试写入全局设置文件。

  • 与秘密机制或特定的一对一机制相比,倾向于公开描述的通信机制。鼓励其他供应商和软件开发人员遵循相同的规范,以便可以轻松连接,交换并保持松散耦合。


1
答案很可爱,我知道简而言之真的很难解释!谢谢!;-)
Sander Versluys 2010年

1
是的,先生,这个答案做得很好。
Stefan 2010年

14
+10按钮在哪里???
EricSchaefer,2010年

1
谢谢大家的评论和投票!很高兴知道答案很好!
vdboor 2011年

1
@faif,这是相当标准的(即使Microsoft操作系统也有),而我猜是情人眼中的美丽。关键是,所有内容都是文件,甚至是特殊文件也是如此。
psusi 2011年

11

UNIX是一个强大的操作系统,建立在经过40多年成功证明(在计算机科学中几乎是永恒的)的可靠设计的基础上。核心技术基于C语言和众多小型程序:UNIX命令。麦克罗伊(McIlroy)总结了基本哲学:

编写可以做一件事并且做得很好的程序。编写程序以协同工作。编写程序来处理文本流,因为这是一个通用接口。

有关UNIX哲学的更多信息,请参见ESRaymond“ UNIX编程的艺术”。


2
+1为“ UNIX编程的艺术”。但是,虽然API是在C周围定义的,但是在Haskell中实现整个系统(带有一些汇编;))或类似的东西并没有技术问题。
Maciej Piechotka 2010年

3
汇编语言也可以用Haskell编写。看看潜力
Phil Miller

10

这里有一些很好的答案。但是,我认为遗漏的一件事是* nix与其他操作系统(尤其是Microsoft Windows)有何不同。

上面已经介绍过的“做一件事情,做好事”的基本概念对于* nix操作系统至关重要,因此有时可能会被忽略。正是这种设计理念使Linux如此灵活和强大。

例如,MS Windows的图形用户界面(GUI)与OS交织在一起。如果没有GUI,则几乎不可能安装MS操作系统。在Linux中,您可以轻松启动根本没有图形组件的服务器或嵌入式系统。它可以完全由命令行驱动,并且仍然是功能齐全的服务器。

Linux的模块化设计还允许系统管理员关闭服务,对其进行升级并重新启动该服务,而无需重新启动操作系统。实际上,只有在内核本身被修改或升级时,您才必须重新引导Linux操作系统。

例如,您可以在Linux上安装新的Windows管理器(gnome,kde,以任何一种方式),并且当前登录到系统的用户可能永远不会意识到。

在Windows上,通常最简单的系统更改需要重新启动,尽管有时这是安全问题,而不是实际的技术要求。我认为这是MS操作系统的基本缺陷之一。在Linux上,您可以升级许多驱动程序模块,而对用户的影响很小或没有。在Windows上,如果您仅安装新应用程序,则可能需要重新引导整个设备。

这种模块化设计还为Linux提供了非凡的灵活性。每个Linux系统都可以针对您需要完成的特定任务进行量身定制,并尽可能减少资源开销。在Windows中,您无法关闭GUI界面来运行简单的HTTP服务器。Windows假定存在一个内存占用量,它会创建一个障碍,您的硬件无法进入该障碍。这是Linux成为许多移动和嵌入式应用程序首选操作系统的主要原因。

我可以继续讲下去,但是我希望这些例子能帮助解释为什么Linux如此流行,以及它与其他OS的真正区别。



2

我建议阅读Unix环境2e中的Advanced Programming,以学习有关Single Unix Standard(SUS)API和POSIX的很多知识,这将使您了解什么使Unix Unix以及组件如何工作以及如何协同工作。

但是,这是一本非常C的书,更多的是参考手册。如果您有失眠的问题,那就随便睡觉吧。除此之外,如果您是Unix C程序员,则必须拥有它。


2

本着前两本书的建议,我也建议

LINUX编程接口,作者:M。Kerrisk

尽管以UNIX / Linux系统编程为主题,但它从程序员/用户的角度揭示了大量有关Linux以及更广泛的UNIX系统如何工作的详细信息。它详尽地研究了vdboor答案中提到的大多数项目符号,并以一种易于理解和可读的方式揭示了足够的细节,以使您对UNIX的基本概念及其基础有所了解。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.