GNU Linux构架.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
GNU Linux构架 总览 高层次构架 主要内核组件构架分解 介绍 ??GNU/Linux操作系统被组织分成几个层次。虽然理解内核中的内容不是应用程序开发的必要,但是知道操作系统是如何组织的是很重要的。在这一章中,我们将从一个高层次出发来察看GNU/Linux的构成,以我们的方式穿越所有层次。 高层次构架 ??让我们从高层次来看GNU/Linux构架。让我们在20,000步外看GNU/Linux操作系统的组成结构。在核心的是仲裁所有想获得底层硬件资源例如内存,CPU(通过调度程序)以及外围设备的使用的Linux内核。而Shell(有很多种)使得用户可以访问内核。Shell提供了命令解释器和载入用户应用程序的方法然后执行应用程序。最后我们将看到应用程序是GNU/Linux操作系统的主要组成部分。这些应用程序为操作系统带来了丰富多彩的功能,例如视窗系统,Web浏览器,电子邮件程序,语言解释器当然还有编程开发工具。 ?? ??在内核中我们同样放置了各种硬件驱动程序使得访问外围设备(例如配置CPU)变得简单。访问外围设备比如串行接口,监视器适配器以及网络适配器的驱动程序可以在这里找到。 ??这是一种简单的观点,但是接下来我们将更深入地去察看去理解Linux内核的组成。 Linux内核构架 ??GNU/Linux操作系统是一种层次构架。Linux内核是单一的和具有层次性的但是没有太多的限制(不毗邻的层次才可以存在依赖关系) ??注意:操作系统被分成两个部分的软件。在顶端的是用户空间(在这里我们可以看到应用程序和工具同时还有GNU C库)。在底部的是内核空间(在这里我们可以找到各种各样的内核组件)。这样的一种划分同时还代表着地址空间的不同-这也是非常值得我们去注意的。每一个在用户空间的进程都有一个不被他人所共享的独自享有的内存区域。内核在它所在的地址空间进行操作,但所有的内核元素共享同一地址空间。因此如果一个内核组件弄了一个糟糕的内存引用,整个内核将会崩溃(也被称为内核恐慌)。 最后,硬件在底层操作物理地址(在内核中被映射为虚拟地址)。 ??现在让我们看一看每一个Linux内核的元素来确认它们可以做什么还有对于作为应用程序开发者的我们来说它们为我们提供了什么样的功能。 ??注意:GNU/Linux根本上来说是一个单一模块的操作系统-内核是一个单一实体。这是和分开运行着小型内核和其它进程(在内核之外运行)提供着网络,文件系统,内存管理等功能的微核操作系统不同的地方。很多在今天还存在的微核操作系统包括CMU的Mach,Apple的Darwin,Minix,BeOS,Next,QNX/Neutrino等等。到底哪一种更好,还在被激烈讨论着,而微核构架展现了它良好的动态性和灵活性。实际上,GNU/Linux早已采用了一些类微核特征的功能比如可载入内核模块功能。 GNU系统程序库(glibc) ??Glibc是一个可移植程序库,它实现了标准C库函数还包括超过一半以上的系统调用。一个应用程序通过链接GNU C程序库来获得对一般函数甚至Linux内核内部的访问。Glibc实现了一些在头文件中说明了的接口。例如,stdio.h头文件定义了很多标准输入输出函数(比如fopen和printf)而且还有所用方法步骤(stdin,stdout,stderr)都已经提供了的标准流。 ??当生成应用程序时,GNU编译器将会自动将象征符号和GNU系统库相确定(可能的话)-运行时动态链接共享库文件。 ??注意:在嵌入式系统开发中,对于标准C库的使用有可能是有问题的。GCC编译器允许使用nostdlib来屏蔽掉象征符号和标准C库函数之间的链接确定。这样就使得开发者可以重写标准C库中的函数。 ??当一个系统调用发起时,将产生一系列特别的动作来在用户空间(应用程序运行的地方)和内核空间(系统调用实现的地方)之间转换控制权。 系统调用接口 ??当一个应用程序调用一个函数比如fopen,它是在调用一个具有特权的在内核里实现的系统函数。标准C函数库(glibc)提供了一个钩(hook)从用户空间到内核中提供所需函数的地方。这是非常有必要知道的,让我们更进一步的深入进去。 一个典型的系统调用将会导致宏调用在用户空间中产生。系统调用所需要的参数被载入寄存器后,一个系统中断将会产生。这个中断引起控制从用户空间到内核空间中实际系统调用发生的地方(控制转移通过一个叫做sys_call_table发生的)。 ??一旦调用在内核中发生,返回用户空间是通过一个叫做_ret_from_sys_call的函数进行。寄存器则被适当地载入用户空间中的栈帧。 ??在大量参数被使用的情况下(比如指向存储单元的指针),一份数据的拷贝将会从用户空间中传递到内核空间。 ??注意:系统调用的源代码可以在./linu

文档评论(0)

hong333666 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档