和菜鸟一起学linux内核源码之基础准备篇.docxVIP

和菜鸟一起学linux内核源码之基础准备篇.docx

  1. 1、本文档共22页,可阅读全部内容。
  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内核源码之基础准备篇

?和菜鸟一起学linux内核源码之基础准备篇?断断续续地看着内核源码,发现很多知识点都不是很明白,特别是对于操作系统的一些基础。虽然看到了块设备了,但是发现也总结不出什么了,这篇好像好久前更新的,一直没有发表。最近还是比较忙碌,同事走了好多人,也有考虑过别的公司。但是正式工作未满1年,也不能随随便便地就离开。虽然很忙,但是还是学了很多东西。渐渐地接触了linux应用层。发现应用和驱动还是有很多区别的,各种需求,各种接口,各种设计,各种实现。嗯,慢慢来总会学好的。对于内核,慢慢看,看一遍不懂,那就第二遍,第三遍。相信总会看懂的。Fighting。。。。。。。。?????? 初始化init下只有一个main函数。?????? 首先利用setup.s程序取得的程序参数设置系统的根文件设备号以及一些内存全局变量。这些内存变量指明了主内存的开始地址、系统所拥有的内存变量和作为高速缓冲区内存的末端地址。如果还定义了虚拟盘(RAMDISK),则主内存将适当减少。?????? 然后,内核进行所有方面的硬件初始化工作。包括陷阱门、块设备、字符设备和tty包括人工创建第一个任务(task 0)。待所有初始化工作完成就设置中断允许标志,开启中断。?????? 在整个内核完成初始化后,内核将执行权切换到了用户模块,也即CPU从0特权级切换到了第3特权级。然后系统第一次调用创建进程函数fork(),创建出一个用于运行init()的子进程。?????? 在该进程中系统将运行控制台程序。如果控制台环境建立成功,则再生成一个子进程,用于运行shell程序/bin/sh。若该子进程退出,父进程返回,则父进程进入一个死循环内,继续生成子进程,并在此子进程中再次执行shell程序/bin/sh,而父进程则继续等待。?????? 对于linux来说,所有任务都是在用户模式执行的,包括很多系统应用程序,如shell程序、网络子系统程序等关于linux内核体系结构?????? 说到操作系统,我们都会知道windows操作系统,linux操作系统,苹果的iOS操作系统,以前很火的塞班操作系统,还有最近消费类电子很火的Android操作系统。一个完整的操作系统分为4个部分。? ? ? ?可以把这个理解为我们用的手机。其中的硬件系统就是我们看到的整个手机了,cpu啊,内存啊,这些不拆开来看不到的,和触摸屏啊,按键之类看以看到的。操作系统内核就是我们说的android了,不过他包括了linux的内核了。操作系统服务就是android的一套结构了,给我们直观的就是那个有点炫的界面了。我们可以通过点击来实现我们想要的功能。用户应用就是我们常玩的QQ啊,导航啊,当然少不了各种好玩的游戏了,愤怒的小鸟,涂鸦跳,水果忍者,是不是又想玩一把?唉,还是好好学习吧,虽然手机就在旁边。对于linux内核的单内核模式的系统,有可以把他分为如下:?????? Linux内核又可分为5个大的模块。其关系和主要功能可以见下图:关于linux内存物理内存可以分为下图所示:内核占用内存开始部分;接下来是共硬盘,软盘使用的高速缓冲区部分,其中扣除显存和bios的640k到1m;然后是虚拟盘;最后一部分是为所有程序可以使用的主内存区。Linux内存管理中,段变换:将一个由段选择符和段内偏移构成的逻辑地址转换为一个线性地址。页变换:将线性地址转换为对应的物理地址。具体可见下图所示:虚拟地址:指的是由程序产生的由段选择符和段内偏移地址两个部分组成的地址。为什么叫它是虚拟的地址呢?因为这两部分组成的地址并没有直接访问物理内存,而是要通过分段地址的变换机构处理或映射后才会对应到相应的物理内存地址。?????? 段描述符:向CPU提供了将逻辑地址映射为线性地址所必要的信息。描述符是由程序编译器、链接器、加载器或者操作系统创建的。?????? 描述符表:保存描述符在描述符表中的,有两类1、?全局描述符表(Global descriptor table---GDT)2、?局部描述符表(Local descriptor table---LDT)描述符表是由8字节构成的描述符项的内存中的一个数组。处理器是通过使用GDT和LDTR寄存器来定位GDT表和当前的LDT表。最多可以含有8192(2^13)个描述符。选择符:逻辑地址的选择部分,用于指定一描述符的,它是通过指定一描述符表并且索引其中的一个描述符项完成的。段寄存器:处理器将描述符中的信息保存在段寄存器中,因而可以避免在每次访问内存时查询描述符表。???线性地址:通过指定一个页表、页表中的某一页以及页中的偏移值,从而间接地指向对应的物理地址。页表:一个简单的32位页指示器的数组。页表本身也是一页内存,因此它含有4K字节的内存,可容纳1K个32位的项。?Offset = 2^12

文档评论(0)

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

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

版权声明书
用户编号:7042123103000003

1亿VIP精品文档

相关文档