linux内核的研究主线.docVIP

  1. 1、本文档共3页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
linux内核的研究主线.doc

第一部分,系统在被引导进内存之前,内存的使用状况。及其他情况。 内存的使用状况: 系统是由loader(本程序中时setup)引导进内存的。(0.12版本内核不超过512KB) 内存的使用情况, 【参照233P的图】 Head程序结束之后的内存镜像 【参照251P中的图】 其他情况: 中断:只是预留了位置。但是还并没有添加中断处理 Gdt表:只是设置了2个系统使用的代码段和数据段。 页表:启动了页表。但是页表中的值跟实际的内存是一一对应的,所以对于内核来说他的线性地址就是实际实际地址。 第二部分,内核的初始化部分。Main.c是内核初始化的主程序 操作系统是由loader引导进内存的,首先看内核被引导进内存后,最先被执行的部分,也就是系统的整个初始化的部分。。。 看完之后得知1,进程0以及进程1的作用, 2,系统是如何进入到用户态的..move_to_user_mode 3,为什么fork和pause要使用内联函数,是为了不破坏堆栈…. 一,内存的初始化 【这里参考笔记memory】 只是把初始化了一个数组用来表示当前主内存哪一个块可用。 二,陷阱门的初始化 只初始化了前48个。系统调用,8259a都没有设置。协处理器,串口在这里初始化。 三,块设备初始化(硬盘,软盘) 块设备有一张request请求表。初始化的时候只是把这张request表清0 四,字符设备初始化(键盘,显示器) 此函数为空,为了以后扩展 五,tty初始化 想要对tty有一定的了解就要从终端驱动程序的基本原理看起【第10章 449P】 键盘中断处理程序在这里被设置 第二部分,整个内核的中断(硬件中断以及系统调用.) 1,_syscall0, _syscall1, _syscall2是在unistd中定义的,0,1,2的区别是有相应的参数。用来定义系统调用的,内部都调用了0x80中断 2,中断总共有256个,前17个是intel的保留中断,kernel/asm.s是这17个中断的汇编实现函数。汇编实现函数中还会调用c语言的实现函数。C语言在kernel/traps中实现。。其他的硬件中断在其他的相应的硬件驱动中初始化。。。 3,在main函数的进程调度初始化的时候,把0x80中断进行了初始化,从此,可以使用系统调用。其中中断函数调用的是sysytem_call这个函数(在sys_call.s中定义),各个系统调用最后都是通过system_call来调用的。。。 把中断弄明白后就可以进行下一步的进展。。。时钟中断,也就是进程的切换。。在中断发生 的时候,cs就发生了改变。。也就是说。。代码又回到了内核。。。。。从线性地址0开始运行了。。。虽然此时使用的堆栈还是进程的堆栈,cs改变说明又使用gdt表。。进入内核的线性地址。 第三部分,进程的切换。。(在这部分中要理解进程的切换过程,包括堆栈的切换)(这个部分实际上是在第六部分看完之后才看的) 进程的结构 第四部分,进程的创建。其实主要就是fork的执行过程。。(主要在fork.c中实现) 第一步调用call _find_empty_process函数。到进程的pcb中寻找一个空闲项。 调用copy_process复制父进程。。 对这部分的详细了解可以参考fork的执行过程。。 核心—给pcb分配一页内存。 第五部分,内存的机制。 1,如何分配内存 2,页异常处理 内存的换入与换出(换出是由get_free_page调用的); 第六部分,块设备(为什么把它排在第六。是因为在研究内存的swap时候用到硬盘) 1,在块设备中我们首先研究ll_rw_blk。C这个文件,因为我们在研究swap的时候应用到了ll_rw_blk这个函数。所以我们按照事件驱动的形式。研究这个 2,ll_rw_blk之后我们就要研究hd.c还有floppy.c因为ll_rw_blk要调用do_hd_request等函数。。(目前我打算之研究hd.c的实现。因为floppy不经常使用,而且我们是要理解原理,hd.c与floppy的原理差不多) 我们从ll_rw_blk入手再到hd.c把块设备的基本原理了解清楚了。。 第七部分,文件系统。。 研究到这,我们还有3个部分没有看,就是文件系统,字符设备驱动程序还有数学协处理器。我选择先看文件系统。因为我们有了块设备的基础,研究文件系统更加容易。。 研究文件系统的步骤 从打开一个文件入手。。。open,在open结束之后又看了一下pipe的原理。大概了解了一下。 Open之后是write和read,在研究write的时候,就涉及到对4种设备的读写。块设备,管道设备。普通文件。字符文件。我们按顺序

文档评论(0)

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

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

1亿VIP精品文档

相关文档