- 1、本文档共23页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
陈英 梁建武主编 中国水利水电出版社 Linux基础及应用 第10章 Linux内核机制 10.1 Linux内核简介 10.1.1 Linux内核的地位 Linux操作系统由4个主要的子系统所组成: 1)用户应用程序:在某个特定的Linux系统上运行的应用程序集合,它将随着该计算机系统的用途不同而有所变化,但一般会包括文字处理应用程序和Web浏览器。 2)O/S服务:这些服务一般认为是操作系统的一部分(命令外壳程序等)。 3)Linux内核:包括内核抽象和对硬件资源(如CPU)的间接访问。 4)硬件控制器: 10.1.2 系统初始化及运行 当PC启动时,Intel系列的CPU首先进入的是实模式,并开始执行位于地址0xFFFF0处的代码,也就是ROM - BIOS起始位置的代码。BIOS先进行一系列的系统自检,然后初始化位于地址0的中断向量表。最后BIOS将启动盘的第一个扇区装入到0x 7C00,并开始执行此处的代码。 10.1.3 内核提供的各种系统调用 1.系统的基本数据结构 进程控制表中的每一项都是一个task _ struct 结构,而task _ struct结构本身是在include /linux/sched . h中定义的。 进程控制表既是一个数组,又是一个双向链表,同时又是一个树。其物理实现是一个包括多个指针的静态数组。此数组的长度保存在include/linux/tasks.h 定义的常量NR_ TASKS中,其缺省值为128,数组中的结构则保存在系统预留的内存页中。链表是由next_task 和prev _ task两个指针实现的,而树的实现则比较复杂。 系统启动后,内核通常作为某一个进程的代表。一个指向task _ struct的全局指针变量current用来记录正在运行的进程。 某一个进程只能运行在用户方式(user mode)或内核方式(kernel mode)下。用户程序运行在用户方式下,而系统调用运行在内核方式下。 2.创建和撤消进程 1)申请一个空闲的页面来保存task _ struct。 2)查找一个空的进程槽(find _ empty _ process ())。 3)为kernel _ stack _ page申请另一个空闲的内存页作为堆栈。 4)将父进程的LDT表拷贝给子进程。 5)复制父进程的内存映射信息。 6)管理文件描述符和链接点。 10.1.4 存取文件系统 Linux在系统内核和文件系统之间提供了一种叫做VFS(virtual file system)的标准接口。这样,文件系统的代码就分成了两部分:上层用于处理系统内核的各种表格和数据结构;而下层用来实现文件系统本身的函数,并通过VFS来调用。 10.2 Linux内核源代码 10.2.1 了解Linux内核源码 Linux内核源码的版本号 Linux内核源码的版本号表示方法非常简单:所有偶数版(如2.0.30 )都是已发行的稳定版;所有奇数版(如2.1.42 )都是测试版。 显示内核版本号 显示内核版本号的方法如下: #ls /boot 对内核源码的修改 10.2.2 内核机制 1.Bottom Half处理 系统内核中可以有多达32个不同的bottom half 处理程序。bh _ base中保存着指向每一个bottom half处理程序的指针。 2.任务队列 任务队列是系统内核将任务推迟到以后再做的方法。Linux系统有一个机制可以把任务放入到队列中等待以后处理。 3.计时器 Linux有两种系统定时器,在某一系统时间同时被调用,但它们在实现上略有不同。第一种,即老的定时器机制,有一个包含32个指针的静态数据组和一个活跃定时器屏蔽码( timer _ active ),这些指针指向timer _ struct数据结构,定时器程序与定时器表的连接是静态定义的,大多数定时器程序入口是在系统初始化时加入到定时器表中的;第二种,即新的定时器机制,使用了一个链表,表中的timer _ list数据结构以递增的超时数排序。 4.等待队列 很多情况下处理器因等待某种系统资源而无法继续运行,例如:处理器需要一个描述目录的VFS索引节点,但该索引节点当前不在内存缓冲区中,这样处理器就必须先等到索引节点从磁盘中读到内存之后,才能继续运行。对于这种等待的处理,Linux内核使用了一种简单的数据结构—等待队列,其中包括一个指向task _ struct的指针和一个指向队列中下一元素的指针。 10.
您可能关注的文档
- Java程序设计教程 赵辉 第5章 Java基本类库新.ppt
- Java程序设计教程 赵辉 第7章 GUI设计基础新.ppt
- Java程序设计教程 赵辉 第8章 高级GUI设计 新.ppt
- Java程序设计教程 赵辉 第11章 数据库与JDBC新.ppt
- Java程序设计教程 赵辉 第12章 Java高级编程 新.ppt
- Java程序设计实例教程 毕广吉 第4章 面向对象的程序设计新.ppt
- Java程序设计实例教程 毕广吉 第6章 图形用户界面设计新.ppt
- Java程序设计实例教程 毕广吉 第8章 异常处理新.ppt
- Java程序设计实例教程 毕广吉 第9章 多线程机制与动画新.ppt
- Java程序设计实例教程 魏先民-课件和源代码 第1章新.ppt
文档评论(0)