摘要: 函数的调用语法为:$(<function> <arguments> )或${<function> <arguments>}函数名与参数间以空格分隔,参数之间以逗号分隔。字符串处理的函数有:$(subst <from>,<to>,<text>)把<text>里的<from>替换为<to>,返回替换后的字符串。$(patsubst <pattern>,<replacement>,<text>)把<text>里匹配<patter 阅读全文
posted @ 2013-02-04 11:14 Mr.Shadow 阅读(331) 评论(0) 推荐(0) 编辑
摘要: make -f <filename>命令可以指定makefile的文件名,而不是默认的makefile、Makefile或GNUmakefile。makefile里的include <filename>指令可以引入别的文件。注意文件名不能用字符串包围,如:include header.mk可以引入当前路径下的header.mk,但是include "header.mk"会出现找不到文件的错误。include也可以同时引入多个文件,比如:include header.mk h2.mk *.mkVPATH变量可以指定源文件的目录。只需要两行:VPATH= 阅读全文
posted @ 2013-02-04 11:13 Mr.Shadow 阅读(760) 评论(0) 推荐(0) 编辑
摘要: 下面是所有的自动化变量及其说明:$@表示规则中的目标文件集。在模式规则中,如果有多个目标,那么,"$@"就是匹配于目标中模式定义的集合。$%仅当目标是函数库文件中,表示规则中的目标成员名。例如,如果一个目标是"foo.a(bar.o)",那么,"$%"就是"bar.o","$@"就是"foo.a"。如果目标不是函数库文件(Unix下是[.a],Windows 下是[.lib]),那么,其值为空。$<依赖目标中的第一个目标名字。如果依赖目标是以模式(即"%&qu 阅读全文
posted @ 2013-02-04 11:10 Mr.Shadow 阅读(736) 评论(0) 推荐(0) 编辑
摘要: ls -l i386.pdf | grep pdf | cut -c49-52 结果输出为i386 详见:man cuttmp.s: boot/bootsect.s tools/system (echo -n ''SYSSIZE = (''; ls -l tools/system | grep system | cut -c23-31 | tr \012'''; echo '' +15)/16 ") > tmp.s (解释详见linux内核完全注释) cat /boot/bootsect.s >> 阅读全文
posted @ 2013-02-04 10:28 Mr.Shadow 阅读(194) 评论(0) 推荐(0) 编辑
摘要: 在电脑的专用术语中,虚拟地址(Virtual Address)标识一个非物理的实体地址。这个术语常用在虚拟内存和虚拟网络地址当中。由于Windows程序时运行在386保护模式下,这样程序访问存储器所使用的逻辑地址称为虚拟地址,与实地址模式下的分段地址类似,虚拟地址也可以写为“段:偏移量”的形式,这里的段是指段选择器。Windows 2000 使用基于分页机制的虚拟内存。每个进程有4GB的虚拟地址空间。基于分页机制,这4GB地址空间的一些部分被映射了物理内存,一些部分映射硬盘上的交换文件,一些部分什么也没有映射。程序中使用的都是4GB地址空间中的虚拟地址。而访问物理内存,需要使用物理地址。下面我 阅读全文
posted @ 2013-02-03 22:57 Mr.Shadow 阅读(1008) 评论(0) 推荐(0) 编辑
摘要: gcc类型检查的问题,gcc或者说其他的C编译器对其build-in类型(如unsigned int)和自定义的结构的类型检查有什么不一样呢比如说如下两种定义:1. unsigned int i;2. struct sTmp {unsigned int i;};struct sTmp si;编译器对变量i和si(或者说是si.i)的类型检查有什么不同的地方呢因为据说第二种方式会有更严格的检查方式,但不明白细节~~C对类型检查有严格吗?这样做的原因是用来避免编译器的隐式类型转换 阅读全文
posted @ 2013-02-03 22:35 Mr.Shadow 阅读(551) 评论(0) 推荐(0) 编辑
摘要: 物理存储器:是指实际存在的具体的存储器芯片。如主板上装插的内存条和装载有系统BIOS的ROM芯片,显示卡上的显示RAM芯片和装载显示BIOS的ROM芯片,以及各种适配卡上的RAM芯片和ROM芯片等都是物理存储器。磁盘: 计算机的外部存储器中也采用了类似磁带的装置,比较常用的一种叫磁盘,将圆形的磁性盘片装在一个方的密封盒子里,这样做的目的是为了防止磁盘表面划伤,导致数据丢失。如目前的磁盘设备:磁盘设备应包括磁盘驱动器、适配器及盘片,它们既可以作为输入设备,也可作为输出设备或称载体。控制软盘读和写,即输入或输出是由磁盘驱动器及其适配器来完成的,从功能上来说,一台磁盘设备与一台录放机的作用是相同的, 阅读全文
posted @ 2013-02-03 21:19 Mr.Shadow 阅读(667) 评论(0) 推荐(0) 编辑
摘要: 段选择符用来表示指向哪个段描述符,即用来在段描述符中寻址,前13位是地址,能寻0到(2^13)-1,因此段描述符表的大小就是 8192,他还牵扯到一些特权级的限制,后三位;段描述符是用来表示这个段的一些性质的,比如段基址和段长之类的。我们在寻址的时候,一般是从段选择符找 到段描述符,然后从段描述符中取出段基址,加上偏移就形成了我们要访问的地址。8086中有4个16位的段寄存器:CS、DS、SS、ES,分别用于存放可执行代码的代码段、数据段、堆栈段和其他段的基地址。在 80386中,有6个16位的段寄存器,但是,这些段寄存器中存放的不再是某个段的基地址,而是某个段的选择符(Selector)。因 阅读全文
posted @ 2013-02-03 15:36 Mr.Shadow 阅读(6435) 评论(1) 推荐(0) 编辑
摘要: 硬件给内核提供一个系统定时器用以计算和管理时间,内核通过编程预设系统定时器的频率,即节拍率(tick rate),每一个周期称作一个tick(节拍)。Linux内核从2.5版内核开始把频率从100调高到1000(当然带来了很多优点,也有一些缺点). jiffies是内核中的一个全局变量,用来记录自系统启动一来产生的节拍数。譬如,如果计算系统运行了多长时间,可以用 jiffies/tick rate 来计算。jiffies定义在文件中: extern unsigned long volatile jiffies; 可以利用jiffies设置超时等,譬如: unsigned long ti... 阅读全文
posted @ 2013-02-03 10:11 Mr.Shadow 阅读(940) 评论(0) 推荐(0) 编辑
摘要: llinux进程描述符—task_struct结构 为了管理进程,操作系统必须对每个进程所做的事情进行清楚地描述,为此,操作系统使用数据结构来代表处理不同的实体,这个数据结构就是通常所说的进程描述符或进程控制块,在linux系统中,这就是task_struct结构,在include\linux\sched.h文件中定义。每个进程都会被分配一个task_struct结构,它包含了这个进程的所有信息,在任何时候操作系统都能跟踪这个结构的信息,这个结构是linux内核汇总最重要的数据结构,下面我们会详细的介绍。这个结构的源代码及其注释如下,之后对其进行了分类解释。//进程描述符task_struct 阅读全文
posted @ 2013-02-03 09:44 Mr.Shadow 阅读(321) 评论(0) 推荐(0) 编辑