《Linux内核完全注释》笔记(1)

开始看《 Linux 内核完全注释》,不局限于此书,期望将以前不懂或不甚明白的地方弄通。不考虑时间,只培养自己的兴趣。能力有限,尽力而为
 
 
 感谢 赵炯老师公开这本书,另外对他的辛勤工作表示崇高的敬意!

 
内核版本:0.11(很老么?呵呵,书上有为什么用它的理由)
 
Linux 操作系统是UNIX 操作系统的一个克隆版本,作者Linus Torvalds(膜拜!),开发出FREAX(Linus最初这么叫Linux)时是赫尔辛基大学计算机科学系的二年级学生(我都22了,唉~)。当时GNU 计划 的操作系统HURD 一直在开发之中,而且看来不能在几年内完成。在通读了MINIX 操作系统后,Linus全力开发FREAX。到了1991 年的10 月5 日,Linus 在comp.os.minix 新闻组上发布消息,正式向外宣布Linux 内核系统的诞生。
 
第一章读完,感觉作者纯属在激发读者的斗志。所以只要你有足够的斗志:)看看我上面的简介就行了。
下面我们进入第二章。
 

 
 P15(这代表15页,貌似地球人都知道吧,汗,罗嗦了):
一个完整可用的操作系统主要由4 部分组成:硬件、操作系统内核、操作系统服务和用户应用程序。Linux 0.11 内核,采用的单内核模式。在单内核模式的系统中,操作系统所提供服务的流程为:应用主程序使用指定的参数值执行系统调用指令(int x80),使CPU 从用户态(User Mode)切换到核心态(Kernel Model),然后操作系统根据具体的参数值调用特定的系统调用服务程序,而这些服务程序则根据需要再底层的一些支持函数以完成特定的功能。在完成了应用程序所要求的服务后,操作系统又从核心态切换回用户态,返回到应用程序中继续执行后面的指令。
 
到这里就牵扯到一个用户态和核心态的问题。解释如下:
用户态和核心态
 
386及以上的CPU实现了4个特权级模式(WINDOWS只用到了其中两个),其中特权级0(Ring0)是留给操作系统代码,设备驱动程序代码使用的,它们工作于系统核心态;而特权极3(Ring3)则给普通的用户程序使用,它们工作在用户态。运行于处理器核心态的代码不受任何的限制,可以自由地访问任何有效地址,进行直接端口访问。而运行于用户态的代码则要受到处理器的诸多检查,它们只能访问映射其地址空间的页表项中规定的在用户态下可访问页面的虚拟地址,且只能对任务状态段(TSS)中I/O许可位图(I/O Permission Bitmap)中规定的可访问端口进行直接访问(此时处理器状态和控制标志寄存器EFLAGS中的IOPL通常为0,指明当前可以进行直接I/O的最低特权级别是Ring0)。以上的讨论只限于保护模式操作系统,象DOS这种实模式操作系统则没有这些概念,其中的所有代码都可被看作运行在核心态。既然运行在核心态有如此之多的优势,那么病毒当然没有理由不想得到Ring0。处理器模式从Ring3向Ring0的切换发生在控制权转移时,有以下两种情况:访问调用门的长转移指令CALL,访问中断门或陷阱门的INT指令。具体的转移细节由于涉及复杂的保护检查和堆栈切换,不再赘述,请参阅相关资料。现代的操作系统通常使用中断门来提供系统服务,通过执行一条陷入指令来完成模式切换,在INTEL X86上这条指令是INT,如在WIN9X下是INT30(保护模式回调),在LINUX下是INT80,在WINNT/2000下是INT2E。用户模式的服务程序(如系统DLL)通过执行一个INTXX来请求系统服务,然后处理器模式将切换到核心态,工作于核心态的相应的系统代码将服务于此次请求并将结果传给用户程序。
 
^_^上面的一大堆东西就牵扯出很多奇怪的名词,不管它,以后再一一解释,你只要大概明白前面三句就行了。
go on.
 
p16
Linux 内核主要由5 个模块构成,它们分别是:进程调度模块、内存管理模块、文件系统模块、进
程间通信模块和网络接口模块。
 p18
在PC/AT 系列兼容机中,使用了两片8259A芯片,共可管理15 级中断向量.
 
这里有讲到 8259A ,网上讲解摘抄如下:
 
8259A中断控制器
 
 
8259A 是一个中断控制器。

在一个 8259A 芯片有如下几个内部寄存器:

Interrupt Mask Register (IMR)

Interrupt Request Register (IRR)

In Sevice Register (ISR)

IMR
被用作过滤被屏蔽的中断; IRR 被用作暂时放置未被进一步处理的 Interrupt ;当一个 Interrupt 正在被 CPU 处理时,此中断被放置在 ISR 中。

除了这几个寄存器之外, 8259A 还有一个单元叫做 Priority Resolver ,当多个中断同时发生时, Priority Resolver 根据它们的优先级,将高优先级者优先传递给 CPU

当一个中断请求从 IR0 IR7 中的某根线到达 IMR 时, IMR 首先判断此 IR 是否被屏蔽,如果被屏蔽,则此中断请求被丢弃;否则,则将其放入 IRR 中。

在此中断请求不能进行下一步处理之前,它一直被放在 IRR 中。一旦发现处理中断的时机已到, Priority Resolver 将从所有被放置于 IRR 中的中断中挑选出一个优先级最高的中断,将其传递给 CPU 去处理。 IR 号越低的中断优先级别越高,比如 IR0 的优先级别是最高的。

8259A
通过发送一个 INTR(Interrupt Request) 信号给 CPU ,通知 CPU 有一个中断到达。 CPU 收到这个信号后,会暂停执行下一条指令,然后发送一个 INTA(Interrupt Acknowledge) 信号给 8259A 8259A 收到这个信号之后,马上将 ISR 中对应此中断请求的 Bit 设置,同时 IRR 中相应的 bit 会被 reset 。比如,如果当前的中断请求是 IR3 的话,那么 ISR 中的 bit-3 就会被设置, IRR IR3 对应的 bit 就会被 reset 。这表示此中断请求正在被 CPU 处理,而不是正在等待 CPU 处理。

随后, CPU 会再次发送一个 INTA 信号给 8259A ,要求它告诉 CPU 此中断请求的中断向量是什么,这是一个从 0 255 的一个数。 8259A 根据被设置的起始向量号(起始向量号通过中断控制字 ICW2 被初始化)加上中断请求号计算出中断向量号,并将其放置在 Data Bus 上。比如被初始化的起始向量号为 8 ,当前的中断请求为 IR3 ,则计算出的中断向量为 8+3=11

CPU
Data Bus 上得到这个中断向量之后,就去 IDT 中找到相应的中断服务程序 ISR ,并调用它。如果 8259A End of Interrupt (EOI) 通知被设定位人工模式,那么当 ISR 处理完该处理的事情之后,应该发送一个 EOI 8259A

8259A
得到 EOI 通知之后, ISR 寄存器中对应于此中断请求的 Bit 会被 Reset

如果 8259A End of Interrupt (EOI) 通知被设定位自动模式,那么在第 2 INTA 信号收到后, 8259A ISR 寄存器中对应于此中断请求的 Bit 就会被 Reset

在此期间,如果又有新的中断请求到达,并被放置于 IRR 中,如果这些新的中断请求中有比在 ISR 寄存中放置的所有中断优先级别还高的话,那么这些高优先级别的中断请求将会被马上按照上述过程进行处理;否则,这些中断将会被放在 IRR 中,直到 ISR 中高优先级别的中断被处理结束,也就是说知道 ISR 寄存器中高优先级别的 bit Reset 为止 .
 
p18 PC/AT
 
IBM PC/AT
  
IBM PC AT 是世界著名计算机公司美国国际商用机器公司 (IBM) 1984 年发布的个人电脑产品,正式名称是 IBM 5170 PC AT AT 是英文 先进技术 ”(Advanced Technology) 的缩写,这是由于它引入了标准的 16 ISA 总线以及采用了当时最新的英特尔 80286 处理器。 PC/AT IBM 公司自 PC 机发布后的第二代升级产品 ( 也有人认为在此之前发布的 PC/XT 是第二代产品 ) 。尽管早期的产品存在着磁盘存储部件相关的瑕疵,它最终还是迅速流行于商用及普通用户市场,成为了 PC 工业最持久的事实标准。至今,由于软件兼容性的原因,最新的 PC 系统都还支持 PC/AT 机的总线结构。
 
 
 
 

努力!
 
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
内核源代码为基础,介绍了完整的linux内核实现原理 ·选择早期linux内核进行介绍,排除了目前内核中复杂而庞大的实现细节 ·整个内核代码仅有14000行 ·提供可运行相关内核的完整实验系统 本书对早期的linux操作系统内核(v0.11)全部源代码文件进行了详细的注释和说明,旨在让读者能够在短时间内对linux工作机理获得全面而深刻的理解,为进一步学习和研究linux系统打下坚实的基础。书中首先介绍了linux系统的发展历史,着重说明了各个内核版本之间的重要区别,给出了选择0.11版作为研究对象的原因;然后依据内核源代码的组织结构对所有代码进行了详细注释。在注释的同时,还介绍了读者应该了解的相关知识,并给出了相关的硬件信息。本书还介绍了内核源代码的组织结构及相互关系。 本书适合作为计算机专业学生学习操作系统课程的实践教材和参考书,也适合linux操作系统爱好者自学,还可供具有一定基础的技术人员作为嵌入式开发应用的参考书。 *************************************************************** 请注意: 下载完,评论的同时,请点击评论框上方的五角星(共5个五角星),这样你的被扣的积分就可以返还了。 如果只评论,不点击小五角星,积分不会返还。 一定要先下载完,再评论。如果先评论后下载,或者在下载的过程中评论,积分同样不会返还。 *************************************************************** 更多linux、ARM和C语言资源请参考: http://blog.csdn.net/arkofnoach/archive/2010/10/23/5960560.aspx
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值