程序员为什么选择linux,UNIX/Linux 基本结构,而我们为什么选择Linux?

4bba0d77451db41018627e379d9bc3dc.png

cd2ed38f6089f7fc047d2631982b22a6.png...

UNIX/Linux 基本结构

图2-1绘出了UNIX 系统的高层次的体系结构。图中心的硬件部分向操作系统提供基本服务。操作系统直接与硬件交互,向程序提供公共服务,并使他们同硬件特性隔离。当我们把整个系统看成层的集合时,通常将操作系统成为系统内核,或简称内核,此时强调的是它同用户程序的隔离。

因为程序是不依赖于其下面的硬件的,所以,如果程序对硬件没做什么假定的话,就容易把它们在不同硬件上运行的UNIX 系统之间迁移。比如,那些假定了机器字长的程序比起没假定机器字长的程序来就较难于搬到其它机器上。

外层的程序,诸如shell 及编辑程序(vi),是通过引用一组明确定义的系统调用而与内核交互的。这些系统调用通知内核为调用程序做各种操作,并在内核与调用程序之间交换数据。图中出现的一些程序属于标准的系统配置,就是大家所知道的命令。

但是由名为a.out 的程序所指示的用户私用程序也可以存在于这一层。

此处的a.out 是被C 编译程序产生的可执行文件的标准名字。

其它应用程序能在较低的程序层次之上构筑而成,因此它们存在于本图的最外层。

比如,标准的C 编译程序cc 就处在本图的最外层;它引用C 预处理程序、两次编译程序、汇编程序及装入程序(称为连接—编译程序),这些都是彼此分开的底层程序。虽然该图对应用程序只描绘了两个级别的层次,但用户能够对层次进行扩充,直到级别的数目适合于自己的需要。确实,为UNIX 系统所偏爱的程序设计风格鼓励把现存程序组合起来去完成一个任务。

89e0230f5e47d49536056ca078dcfefb.png...

一大批提供了对系统的高层次看法的应用子程序及应用程序,诸如shell、编辑程序、SCCS(Source Code Control System)及文档准备程序包等,都逐渐变成了“UNIX 系统” 这一名称的同义语。然而,它们最终都使用由内核提供的底层服务,并通过系统调用(System Call)的集合利用这些服务。系统调用的集合及其实现系统调用的内部算法形成了内核的主体。

简言之,内核提供了UNIX/Linux 系统全部应用程序所依赖的服务,并且内核的定义了这些服务。下面我们将进一步介绍内核,对内核的体系结构提出一个总的看法,勾画出它的基本概念和结构,这将帮助读者更好的学习以后的内容。

ac4de8f3157b7b5e4e092b03011b67ff.png...

图2-2 给出了内核的框图,示出了各种模块及他们之间的相互关系,特别的,它示出了内核的两个主要成分:左边的文件子系统和右边的进程控制子系统。虽然,在实际上,由于某些模块同其它模块的内部操作进行交互而使内核偏离该模型,但该图仍可以作为观察内核的一个有用的逻辑观点。

在图2-2 中我们看到了三个层次:用户、内核及硬件。系统调用与库接口体现了图2-1 中描绘的用户程序与内核间的边界。系统调用看起来像C 程序中普通的函数调用,而库把这些函数调用映射成进入操作系统所需要的源语。然而,汇编语言程序可以不经过系统调用库而直接引用系统调用。程序常常使用像标准I/O 库这样一些其它的库程序以提供对系统调用的更高级的使用。由于在编译期间把这些库连接到程序上,因此,以这里的观点来说,这些库是用户程序的一部分。

图2-2 把系统调用的集合分成与文件子系统交互作用的部分及与进程控制子系统交互作用的部分。文件子系统管理文件,其中包括分配文件空间,管理空闲空间,控制对文件的存取,以及为用户检索数据。进程通过一个特定的系统调用集合,比如通过系统调用open,close,read,write,stat,chown 以及chmod 等与文件的系统交互。

文件子系统使用一个缓冲机制存取文件数据,缓冲机制调节在核心与二级存储设备之间的数据流。缓冲机制同块I/O 设备驱动程序交互作用,以便启动往核心去的数据传送及从核心的来的数据传送。设备驱动程序是用来控制外围设备操作的核心模块。块I/O 设备是随机存取存储设备,或者说,它们的设备驱动程序使得它们的设备驱动程序使得它们对于系统的其它部分来说好像是随机存取存储设备。

例如,一个磁带驱动程序可以允许核心把一个磁带装置作为一个随机存取存储设备看待。文件子系统和可以在没有缓冲机制干预的情况下直接与“原始”I/O 设备驱动程序交互作用。原始设备,有时也被成为字符设备,包括所有非块设备的设备。

进程控制子系统负责进程同步、进程间通讯,存储管理及进程调度。当要执行一个文件而把该文件装入存储器中时,文件子系统与进程控制子系统交互:进程子系统在执行可执行文件之前,把它们读到内存中。输入输出存储管理模块控制存储分配。在任何时刻,只要系统没有足够的物理存储供所有进程使用,核心就在内存与二级存储之间对进程进行交换,以便所有的进程都得到公平的执行机会。

调度程序模块把CPU 分配给进程。该模块调度各进程依次运行,直到它们因等待资源而自愿放弃CPU,或者知道它们最近一次的运行时间超出一个时间量,从而核心抢占它们。于是调度程序选择最高优先权的合格进程投入运行;当原来的进程成为最高优先权的合格进程时,还会再次投入运行。进程间通信有几种形式,从时间的异步软中断信号到进程间消息的同步传输,等等。本书中主要的讲的网络通信,也是进程间通信的一种。

最后,硬件控制负责处理中断及与及其与机器通信。像磁盘或终端这样的设备可以在一个进程正在执行时中断CPU。如果出现这种情况,在对中断服务完毕之后核心可以恢复被中断了的进程的执行。中断不是由特殊的进程服务的,而是由核心中的特殊函数服务的。这些特殊函数是在当前运行的进程上下文中被调用的。

为什么选择Linux ?

下面是一些选择Linux 的原因: Linux 是“免费”的,上面又有那么多“免费”的软件,为什么不用? 瘟都死实在太不稳定了,受不了,换个平台吧。 我想学习Unix,可是钱包里钞票不多,先从Linux 开始吧。 我想学习操作系统,哪里有开放原代码的OS?而且还要很活跃,有前途。 我对网络并行计算有兴趣,基于Linux 的并行计算不但费用低廉而且功能强大有潜力,重要的是有源码。 我是(或想成为)一名Hacker,Linux 当然是最好的工具之一。 Linux 这么热,潜在的商业价值不可限量,尽早转移以便在未来有较好的一席之地。 惊奇地发现Linux 性能相当的好,稳定性也很好,用它替换商业操作系统真是明智的选择。 Oracle,Infomix,Sysbase,IBM 都支持Linux 了,用它来做数据库平台也挺不错。 烦了一次又一次去买许可证(奸商经常设这样的陷阱),Linux 遵循公共版权许可证(GPL)正合我意。 Linux 太适合Internet/Intranet,它本身就是通过网络来协同开发的,网络时代为什么不用Linux? 采用Linux 可以极大地降低拥有者总成本(TCO)。 等待商业操作系统补丁的耐心是有限度的,更受不了总被商家牵着鼻子走,开放原代码的Linux 使我至少有一定的控制权。 开放原代码使我可以按照自己的需要添加或删除某些功能,用户可定制性真是太好了!! 利用开放原代码的Linux 还可以来开发路由器,嵌入式系统,网络计算机,个人 数字助理等等,GNU 真是巨大的知识宝库,何乐而不用?(中国的IT 业者真该仔细考虑这个问题) 我崇尚自由软件的精神,自由程序员是我的梦想,愿意为之贡献自己的力量!! 不为什么

大家呢?为什么选择Linux?

欢迎大家留言交流讨论。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值