- 1、本文档共36页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
操作系统10-1的
教材及参考文献
《Understanding the Linux Kernel second edition》Daniel P. BovetMarco Cesati,O’REILLY,2002
《深入理解Linux内核》第二版,陈莉君等译,中国电力出版社,2004
《Linux内核代码情景分析》上下册,胡希明 毛德操,浙江大学出版社,2001
《边学边干-Linux内核指导》李善平等,浙江大学出版社,2002
·源码阅读网站http://lxr.Linux.no/source
·源码网站:/pub/linux/kernel
;命令解释器;内核概貌
内核程序嵌在一个用户进程的上下文中运行(因系统调用,中断入核)也有部分程序是以几个独立的纯内核线程运行的。
进程运行在用户态时各进程空间分离(如果要共享需要shmget等系统调用支持),各进程运行核心程序时共享内核空间。 ;用户级程序;实验
增加系统调用实现内核参数读写。
利用建立proc文件系统的文件实现内核参数读写。
利用动态加载内核模块将特定功能函数插入open及close系统调用处理过程,以记录用户对资源的使用信息。
设计事件同步系统调用,当一个事件发生时,等事件的所有进程被就绪。
建立一个简单只有一级目录的内存文件系统。
设计一个内存设备驱动程序。
设计USB驱动程序
;第十章 Linux操作系统
本章内容:进程管理;存储管理;文件系统;设备管理;中断、异常及系统调用;进程通讯。
10.1??进程管理;10.1.1 进程与进程描述符
1 进程概念
LINUX进程与传统UNIX进程的概念没有多大区别
LINUX通过clone()系统调用支持轻权进程(相当于内核级线程)
LINUX还支持内核线程的概念,内核线程永远在核心态运行,没有用户空间
2 进程描述符(进程控制块)
由一个task_struct结构表示。task_struct结构是一个复杂的结构,占一千多字节,其各个成员用来准确描述进程在各方面的信息.主要有以下几个部分:;Evaluation only.
Created with Aspose.Slides for .NET 3.5 Client Profile .
Copyright 2004-2011 Aspose Pty Ltd.;(1) 进程标识
包括进程的标识号(pid)、进程的用户标识、进程的组标识等。每个进程的标识号是唯一的。
(2) 调度相关信息
这部分内容与进程调度有关,一部分信息见后面的第5节。进程描述符中还需要有结构保存当进程被剥夺处理机时???存器的状态,该进程恢复运行时便可从正确的状态继续运行。
(3) 进程虚拟空间信息
LINUX的进程都在自己的私有地址空间中运行,task_struct的成员mm指向一个mm_struct结构,该结构描述进程空间。
;(4) 信号处理信息
LINUX支持传统的UNIX信号语义。该部分记录了信号的处理函数及信号掩码等信息。
(5)文件相关信息
包含进程与文件系统交互的信息。主要分为两部分,一部分描述进程进行文件访问时用到的当前目录、根目录信息。另一部分描述被进程正在使用的文件信息,该部分主要有一个file结构数组,数组中的有效项指向某个文件对象。
(6)记帐信息及统计信息
资源是有限的,每个进程对每种资源的使用都有一个限值。另外,还有统计信息来记录系统需要的信息,如页面异常次数、CPU使用时间等。;(7) 描述进程间关系的指针
所有的进程通过一个双向链表链接在一起。通过宏for_each_task可以对每个进程操作。
指向其父进程、子进程、兄弟进程描述符的指针
需要根据pid号能够快速找到进程,系统以pid为关键字建立了一个哈希表, 哈希函数值相同的进程通过进程描述符的pidhash_next和pidhash_pprev成员链在一起。
;10.1.2 核心态与核心栈
LINUX的运行分为两种模式──核心态和用户态。内核总在核心态下运行,而普通进程通常在用户模式下运行,只有通过系统调用/中断才能切换到核心态运行。
进程拥有两个栈,用户模式栈与核心模式栈,分别在相应模式下使用。进程描述符和进程核心栈的空间分配在一起,内核为它们分配两个连续的物理页面。 ;因为进程描述符已经占用了1KB多的空间,所以核心栈的有效空间是6KB多一点,合理的设计使得这个容量已经足够了;10.1.3 进程状态及状态转换图
LINUX的进程状态有五种,它们分别是:
TASK_RUNNING:表示进程具备运行的资格,要么正在运行,要么就是等待被调度执行。进程描述符有一个run_list成员,所有处于TASK_RUNNING状态的进程都通过该成员链在一起,称之为可运行队列。
TASK_INTERRUP
文档评论(0)