2011年4月26日总结

今天意外也是意料之中的没有收到腾讯的笔试通知,多少有些低落,想想这为了实习准备的一个多月,有辛酸有快乐,有激动有失望……由于种种原因,2011年上半年是不可能出去实习了,也就决定了我还将在实验室继续着我的奋斗之路。虽说这一个多月有些对不起老师,论文的事情是一拖再拖,老师您放心,我总结完这一个月的工作立刻就开始整理论文。

下面进入正题:

怎么说呢,去年看了linux内核的代码,看了几万行,觉得越看越累,索性不看了,又拿起了《深入理解linux内核》这本书开始看,果真从原理上明白内核,比从源码上要容易的多。看来以后要结合着看啊。下面说说最近看的这两章的心得总结:

一、绪论中让人大体了解了linux内核的基本结构,包括进程的切换、调度、通信、总之关于进程的一切一切,文件系统,虚拟存储,IO机制等等……

二、内存寻址,其实主要讲了分段和分页机制,分段机制虽然复杂,但是linux并没有采用教科书或者x86处理器提供的那么复杂的分段机制,linux基本上所有进程都是用一样的段描述符。linux基本只有四个常用的段:用户代码段和用户数据段,内核代码段和内核数据段,而且他们的base地址都是0x00000000,所以在linux中逻辑地址和线性地址是相同的。但是在linux的GDT(全局描述符表)中除了有他们四个段描述符外还有28个存储位置,linux只用了其中的18个,也就是说除了他们四个还有14个描述符:TSS(任务状态段)一个;缺省的LDT局部描述符表,这个一般是所有进程共享;三个TLS局部线程存储段,系统调用set_thread_area()和get_thread_area()分别为正在执行的进程创建和撤销一个TLS段;高级电源管理相关的段APMBIOS16-bitcode,APMBIOS32-bitcode,APMBIOSdata,主要和linux内核调用BIOS函数来获取APM设备信息的状态时,可以使用自定义的代码段;支持即插即用(PnP)功能的BIOS服务程序的相关的5个段,PNPBIOS32-bitcode,PNPBIOS16-bitcode,PNPBIOS16-bitdata,PNPBIOS16-bitdata,PNPBIOS16-bitdata;内核用于处理“双重错误“异常的特殊TSS段(即处理一个异常时发生了另一个异常)。对于LDT,linux程序大多数是不适用局部描述符表,内核只定义了一个缺省的LDT供进程共享。但是对于一些程序可以使用modify_ldt()系统调用修改创建自己的LDT。

分页机制:32位线性地址被分为3个域目录(10bit),页表(10bit),偏移量(12bit)。linux的分页机制,从2.6.10开始起,开始使用三级分页机制,2.6.11开始使用四级分页机制:页全局目录(PGD),页上级目录(PUD),页中间目录(PMD),页表(PT),对于没有启用物理地址扩展的32位系统,两极页表已经足够了。linux通过使PUD和PMD全为0取消了PUD和PMD字段,将四级目录机制转变为两极目录机制,这样之前的代码依然可以继续使用。当启用了物理地址扩展机制的linux使用的是三级页表,其中PGD对应的是PDPT,取消了PUD,PMD对应了页目录表,页表对应页表。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值