linux内核完全剖析 学习笔记 打字太累 截图

  • 1. linux0.11开机时间

QQ截图20150514220020.png
#define MINUTE 60
#define HOUR (60*MINUTE)
#define DAY (24*HOUR)
#define YEAR (365*DAY)
 
/* interestingly, we assume leap-years */
static int month[12] = {
 0,
 DAY*(31),
 DAY*(31+29),
 DAY*(31+29+31),
 DAY*(31+29+31+30),
 DAY*(31+29+31+30+31),
 DAY*(31+29+31+30+31+30),
 DAY*(31+29+31+30+31+30+31),
 DAY*(31+29+31+30+31+30+31+31),
 DAY*(31+29+31+30+31+30+31+31+30),
 DAY*(31+29+31+30+31+30+31+31+30+31),
 DAY*(31+29+31+30+31+30+31+31+30+31+30)
};
 
QQ截图20150514220020.png
 
  • 2.结构体赋值

QQ截图20150516152150.png
  • 3. 关于do_signal *(&eip) = sa_handler

(1)
http://www.oldlinux.org/oldlinux/viewthread.php?tid=14839&extra=page%3D2
*(&eip) = sa_handler 与 eip = sa_handler 有什么不一样?
网上有说 是因为 两个的类型不一样 一个long 一个 unsigned long ,感觉这不是原因。
应该是另一种说法 eip = sa_handler 这条语句可能导致 编译器进行优化 而栈中的值没有改变  , 应该是这样。
(2)
QQ截图20150516152150.png
 
  • 4.任务切换

ljmp tss段选择符这样的语句会造成任务切换,cpu自动保存当前任务tss内容,并恢复需要切换到的任务的tss内容,造成任务切换。任务1和任务2的描述内容与任务0类似。
 
QQ图片20150714154151.png
QQ图片20150714154257.png
 QQ图片20150714154434.png
QQ图片20150714154529.png
QQ截图20150714154606.png
 
  • 5.写时复制

为了介于物理内存,在调用fork()生成新进程时,新进程与原进程会共享同一内存区。只有当其中一个进程进行写操作,系统才会为其另外分配内存页面。这就是写时复制的概念。
 QQ截图20150627203215.png
 
QQ截图20150627203557.png
 
 QQ图片20150713110612.png
 
  • 6.需求加载(load on demand)/需求分页(demand-paging)

QQ截图20150627203931.png
 
  • 7.指针的指针

QQ图片20150625083845.png
 QQ截图20150625083538.png
  • 8.   I/O端口和寻址

QQ图片20150710183220.png
SPARC为统一编址,ld,st指令访问
 
  • 9.  接口访问控制

QQ图片20150710183558.png
 
  • 10.  C程序编译和链接

QQ图片20150710191900.png
 
  • 11. volatile

QQ图片20150710193104.png
 
  • 12. 嵌入汇编

QQ图片20150710193428.png

这里不同处理器用到的寄存器名字应该不一样吧。。。目前看到的资料都是对应x86的eax,ebx啥的。。。然而我要做的事sparc

 
  • 13.  圆括号中的组合语句

QQ图片20150710193655.png
 
  • 14. 目标文件符号表和字符串部分

 
QQ图片20150710202243.png
 
  • 15. 连接程序预定义变量

QQ图片20150710203120.png
ARINC 653项目遇到过。。。自己有定义了个end变量,值总是不对。。。原来是链接程序预定义的
 
  • 16. 高尾端/低尾端

不过给我启发的是,在裘宗燕翻译的《程序设计实践》里,这对术语并没有翻译为“大端”和小端,而是“高尾端”“低尾端”,这就好理解了:如果把一个数看成一个字符串,比如11223344看成"11223344",末尾是个'\0','11'到'44'个占用一个存储单元,那么它的尾端(低字节)很显然是44,前面的高还是低就表示尾端放在高地址还是低地址,它在内存中的放法非常直观,如下图:

X86小端,SPARC大端

 
  • 内存地址空间

QQ图片20150711164000.png
QQ图片20150711164224.png
 
  • 17. 分段机制

QQ图片20150711095010.png
 
QQ图片20150711095121.png
 
QQ图片20150711094734.png
 
QQ图片20150711095236.png
 
QQ图片20150711095600.png
 
  • 18. 一致/非一致代码段

一致代码段:

    简单理解,就是操作系统拿出来被共享的代码段,可以被低特权级的用户直接调用访问的代码.

    通常这些共享代码,是"不访问"受保护的资源和某些类型异常处理。比如一些数学计算函数库,为纯粹的数学运算计算,被作为一致代码段.

一致代码段的限制作用

    1.特权级高的程序不允许访问特权级低的数据:核心态不允许调用用户态的数据.

    2.特权级低的程序可以访问到特权级高的数据.但是特权级不会改变:用户态还是用户态.

非一致代码段:

    为了避免低特权级的访问而被操作系统保护起来的系统代码.

非一致代码段的限制作用

    1.只允许同级间访问.

    2.绝对禁止不同级访问:核心态不用用户态.用户态也不使用核心态.

通常低特权代码必须通过"门"来实现对高特权代码的访问和调用.

不同级别代码段之间转移规则,是通过CPL/RPL/DPL来校验.

 
  • 19. sleep_on等待队列

QQ图片20150713095424.jpg
 
QQ图片20150713095854.png
 
  • 20.定时器链表

QQ图片20150713101051.png
 
  • 21.信号

QQ图片20150713103959.png
QQ图片20150713104650.png
QQ图片20150713104734.jpg
 
QQ图片20150713104858.png
 
QQ图片20150713105004.pngQQ图片20150713105044.png
 
  • 22 . 块设备

QQ图片20150714111034.png
QQ图片20150714103046.png
 
QQ图片20150714103507.png
QQ图片20150714103402.png
QQ图片20150714103843.png
 QQ图片20150714110341.png
QQ图片20150714110716.png
 
  • 23. extern inline

QQ图片20150714113317.png

-----------------------------------------------------------------------------------------------------2015-07-16---------------------------------------------------------------------------------------------------------------

24.硬盘读写

QQ截图20150714163035.png
QQ截图20150714163139.png
QQ截图20150714163229.png

温彻斯特硬盘

    1973年,IBM研制成功了一种新型的硬盘IBM3340。这种硬盘拥有几个同轴的金属盘片,盘片上涂着磁性材料。它们和可以移动的磁头共同密封在一个盒子里面,磁头能从旋转的盘片上读出磁信号的变化--这就是我们今天使用的硬盘的祖先,IBM把它叫做温彻斯特硬盘。
    个人电脑上的硬盘今年30岁了。当然,没有一块硬盘能如此长寿。早在1956年,国际商用机器公司(IBM)发明了世界上第一个磁盘存储系统 IBM 305 RAMAC,这个只有5MB的存储设备却拥有50个24英寸的盘片。在那个时代,RAMAC是令人吃惊的计算机设备——就其笨拙程度而言,在今天毫无疑问也是令人吃惊的。
1973年,IBM研制成功了一种新型的硬盘IBM3340。这种硬盘拥有几个同轴的金属盘片,盘片上涂着磁性材料。它们和可以移动的磁头共同密封在一个盒子里面,磁头能从旋转的盘片上读出磁信号的变化--这就是我们今天是用的硬盘的祖先——IBM把它叫做温彻斯特(Winchester)硬盘,也称温盘。
    “温彻斯特”这个名字还有个小小的来历;IBM3340拥有两个30MB的存储单元,而当时一种很有名的“温彻斯特来复枪”的口径和装药也恰好包含了两个数字“30”;于是这种硬盘的内部代号就被定为“温彻斯特”。eaf81a4c510fd9f9fc9e434a252dd42a2834a403.jpg
    温彻斯特硬盘采用了一个了不起的技术:它的磁头并不与盘片接触;可以想象,如果要提高存取数据的速度,硬盘的盘片就应该越转越快。但是如果磁头与盘片接触,那么无论采用什么材料都不可能胜任这种工作。技术人员想到让磁头在盘片上方“飞行”,与盘片保持一个非常近的距离。这个想法是可行的,因为盘片高速旋转会产生流动的风,只要磁头的形状合适,它就能像飞机一样飞行。这样,盘片就能旋转的很快而不必担心摩擦造成的灾难。磁头被固定在一个能沿盘片径向运动的臂上。由于磁头相对盘片高速运动,并且二者距离很近,哪怕是一丁点灰尘也会造成磁盘的损坏。所以,盘片、磁头和驱动机构被密封在了一个盒子里。
QQ截图20150714165632.png
 

25. 字符设备 (内容挺多,大量截图)

QQ截图20150714180315.png
QQ截图20150714180345.png

规范模式/非规范模式

QQ截图20150714181440.pngQQ截图20150714181555.png
 
QQ截图20150714182012.png

控制台驱动程序

QQ截图20150714182051.png
 
QQ截图20150714182209.png
 
QQ截图20150714184342.png

UART

 
QQ截图20150714194107.png
 
QQ截图20150714194514.pngQQ截图20150714194546.png
 

26.  MINIX文件系统 (内容好多,但是都有必要看一下。。。)

QQ截图20150715102900.png
 
QQ截图20150715103042.png
 
QQ截图20150715103128.png
 
QQ截图20150715103242.png
 
QQ截图20150715103432.png
 
QQ截图20150715103458.png
 
QQ截图20150715103518.png
 
QQ截图20150715103708.png
 
QQ截图20150715104227.png
 
QQ截图20150715104408.png
 
QQ截图20150715104612.png
 
QQ截图20150715104738.png
 
QQ截图20150715104758.png
 
QQ截图20150715105206.png
 
QQ截图20150715105221.png
 
QQ截图20150715105232.png
 

 高速缓冲区

QQ截图20150715105459.png
 
QQ截图20150715105658.png
 
QQ截图20150715105922.png
 
QQ截图20150715110005.png
 

buffer.c

QQ截图20150716144506.pngQQ截图20150716144746.pngQQ截图20150716144905.pngQQ截图20150716145144.pngQQ截图20150716145223.pngQQ截图20150716145349.pngQQ截图20150716145623.pngQQ截图20150716150305.pngQQ截图20150716150819.pngQQ截图20150716151541.png
QQ截图20150716151639.pngQQ截图20150716151648.pngQQ截图20150716151739.pngQQ截图20150716151804.pngQQ截图20150716151838.png
 

 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章