随笔分类 -  linux内核完全注释

这本书个人觉得读起来很困难,所以做一个单独的分类,记录在阅读过程中的疑问
摘要:内核代码和数据的地址 对于linux 0.11内核代码和数据来说,在head.s程序的初始化操作中已经把内核代码段和数据段都设置成长度为16M的段。在线性地址空间中这两个段的范围重叠,都是从线性地址0开始到地址0XFFFFFF共16M地址范围。在该范围中含有内核所有的代码、内核段表(GDT,IDT,TSS)、页目录表和内核的二级页表、内核局部数据和内核临时堆栈(将被用作第一个任务即任务0的用户堆栈)。其页目录表和二级页表已设置成把0-16M的线性地址空间一一对应到物理地址上,占用了4个目录项即4个二级页表。因此对于内核代码和数据来说,我们可以直接把它看作是物理内存中的地址。如下图: 因此,.. 阅读全文
posted @ 2014-03-23 12:02 萧瑟秋风_cyz 阅读(921) 评论(0) 推荐(0)
摘要:第四章第9节 本节描述了一个简单多任务内核的设计和实现方法,这个内核包括两个特权级3的用户任务和一个系统调用中断过程。本节给出的内核实例由两个文件构成。一个是使用as86语言编制的引导启动程序boot.s,用于在计算机加电时从启动盘上把内核代码加载到内存中;另一个是使用GUN as汇编语言编制的内核程序head.s,其中实现了2个运行在特权级3上的任务在时钟中断控制下相互切换运行,并且还实现了在屏幕上显示字符的一个系统调用。我们把这两个任务分别称为任务A和任务B,它们会分别调用这个系统调用在屏幕上输出字符'A'和'B',直到每隔10毫秒切换至另一个任务,任务A连 阅读全文
posted @ 2014-03-15 10:48 萧瑟秋风_cyz 阅读(1071) 评论(0) 推荐(0)
摘要:保护机制概述 保护机制是可靠的多任务运行环境所必须的。它可用于保护各个任务免受相互之间的干扰。在软件开发的任何阶段都可以使用段级和页级保护来协助寻找和检测涉及问题和错误。当程序对错误内存空间执行一次非期望的引用,保护机制可以阻止这种操作并报告此类事件。 保护机制可以被用于分段和分页机制。处理器寄存器的2个比特位定义了当前执行程序的特权级,称为当前特权级CPL(Current Privilege Level)。在分段和分页地址转换过程中,处理器将对CPL进行验证。 通过设置控制寄存器CR0的PE标志(位0)可以让处理器工作在保护模式下,从而也就开启了分段保护机制。一旦进入保护模式,处理... 阅读全文
posted @ 2014-02-08 10:56 萧瑟秋风_cyz 阅读(323) 评论(0) 推荐(0)
摘要:在Linux0.11系统中,GNU gcc或gas编译输出的目标模块文件和链接程序生成的可执行文件都使用了UNIX传统的a.out格式。这是一种被称为汇编与链接输出(Assembly & linker editor output)的目标文件格式。对于具有内存分页机制的系统来说,这是一种简单有效的目标文件格式。a.out格式文件由一个文件头和随后的代码区(Text section,也称为正文段)、已初始化数据区(Data section,也称为数据段)、重定位信息区、符号表以及符号名字符串构成。 a.out格式7个区的基本定义和用途是:#执行头部分(exec header)。执行文件头部 阅读全文
posted @ 2014-01-21 17:44 萧瑟秋风_cyz 阅读(364) 评论(0) 推荐(0)
摘要:为了提高代码执行效率,内核源代码中有些地方直接使用了汇编语言编制。这就会涉及在两种语言编制的程序之间相互调用的问题。 函数调用包括从一块代码到另一块代码之间的双向数据传递和执行控制转移。数据传递通过函数参数和返回值来进行。另外,我们还需要在进入函数是为函数的局部变量分配空间,并在函数退出时回收者部分空间。Intel 8086 CPU为控制传递提供了简单的指令,而数据的传递和局部变量存储空间的分配与回收则通过栈操作来实现。 1.栈帧结构和控制转移权方式大多数CPU的程序实现使用栈来支持函数调用操作。栈被用来传递函数参数、存储返回信息、临时保存寄存器原有值和存储局部数据。单个函数调用操作所... 阅读全文
posted @ 2014-01-21 09:46 萧瑟秋风_cyz 阅读(263) 评论(0) 推荐(0)
摘要:内核C语言程序嵌入式汇编代码又叫内联汇编,具有输入和输出参数的嵌入汇编语句的基本格式为:**************************************************asm("汇编语句" : 输出寄存器 : 输入寄存器 : 会被修改的寄存器);**************************************************除第一行外,后面带冒号的行若不使用就可以省略。其中,"asm"是内联汇编语句关键词;"汇编语句"是写汇编指令的地方;“输出寄存器”表示当这段嵌入式汇编执行完成后,哪些寄存器用 阅读全文
posted @ 2014-01-16 11:56 萧瑟秋风_cyz 阅读(649) 评论(0) 推荐(0)
摘要:as86汇编仅仅用于编译内核中的boot/bootsect.s引导扇区程序和实模式下的设置程序boot/setup.s。内核中其余所有汇编语言程序(包括C语言产生的汇编程序)均使用gas来编译,并与C语言程序编译产生的模块链接。3.2.2 GUN汇编语法与INTEL汇编语法的主要区别: *AT&T语法(即GUN汇编语法)中立即操作数前面要加一个字符'$';寄存器操作数前面要加字符百分号'%';绝对跳转/调用(相对于与程序计数器有关的跳转/调用)操作数前面要加星号'*'。而intel汇编语法没有这些限制。 *AT&T语法与intel 阅读全文
posted @ 2014-01-14 11:20 萧瑟秋风_cyz 阅读(1773) 评论(0) 推荐(0)
摘要:在开始讲述as86汇编器前,这本书引用内核中bootsect.s框架程序汇编代码来解释,记录下这一小段代码中不理解的地方,下面是这段实例代码:.globl begtext, begdata, begbss, endtext, enddata, endbss .text !正文段 begtext: !标号 .data !数据段 begdata: !标号 .bss ... 阅读全文
posted @ 2014-01-11 16:41 萧瑟秋风_cyz 阅读(1163) 评论(0) 推荐(0)