03 2015 档案

摘要:当系统申请一个新的inode时。系统并不会对磁盘进行读写。它会在存储在内存的inode表(inode_table)中寻找一个空闲的位置。如果找到了,直接返回该inode。否则要等待一个空闲的位置。得到一个空闲的位置后,检查dirty位,如果dirty,那么需要写回磁盘。但是注意,系统并不会直接对磁盘... 阅读全文
posted @ 2015-03-31 15:53 ElNinoT 阅读(223) 评论(0) 推荐(0)
摘要:上一篇文章说到linux文件系统中分为超级块,inode块,block块。inode块给出文件的权限,修改时间,大小等信息。但是实际上,文件的数据是存储在block块中的。而inode块中给出了存储文件数据的block的编号。每个inode和block都有编号。文件系统一开始就将inode与bloc... 阅读全文
posted @ 2015-03-31 14:50 ElNinoT 阅读(269) 评论(0) 推荐(0)
摘要:linux文件系统: 操作系统的文件数据除了文件实际内容外,还有非常多的属性,如文件权限(rwx)与文件属性(所有者、群组、时间参数等)。 文件系统通常将这两部分数据存放在不同的块。权限属性放到 inode 中,实际数据放到 data block 中。还有一个超级块(super block)会记录文... 阅读全文
posted @ 2015-03-30 13:59 ElNinoT 阅读(1070) 评论(0) 推荐(0)
摘要:高速缓冲区是文件系统访问块设备中数据的必经要道,为了访问文件系统等块设备上的数据,内核可以每次都访问块设备,进行读写操作。为了提高系统性能,内核在内存中开辟一个高速数据缓冲区。在Linux内核中,高速缓冲区位于内核代码和主内存之间。当需要从块设备中读取数据时,先到高速缓冲区中寻找,若找不到,就发出读... 阅读全文
posted @ 2015-03-26 16:48 ElNinoT 阅读(570) 评论(0) 推荐(0)
摘要:1. 开机使用serial connect,完成boot后使用TCP/IP协议与主机通信2.TagList,是一个活跃标签的列表,这里活跃的含义是在一个间隔里被监听到。如果一个标签之前没有被监听到,而在当前的 间隔里被监听到了,那么就将这个标签加入list中。反之,如果有一个标签长时间没有被监听到... 阅读全文
posted @ 2015-03-26 15:06 ElNinoT 阅读(1110) 评论(0) 推荐(0)
摘要:c语言中,众所周知,以0x开头的数是16进制数。例如0x8FFF然而较少使用的是八进制数。它以0开头。例如01234 阅读全文
posted @ 2015-03-23 16:40 ElNinoT 阅读(207) 评论(0) 推荐(0)
摘要:在阅读源码的过程中,发现找不到fork函数的定义。后来在linux/init/main.c中找到了这样一条语句static inline _syscall0(int,fork)原来这里就是fork函数的定义。系统在linux/include/unistd.h有一个宏定义。#define _sysca... 阅读全文
posted @ 2015-03-17 12:41 ElNinoT 阅读(698) 评论(0) 推荐(0)
摘要:最近看linux0.11源码时,看到任务切换函数switch_to,感觉很晦涩,于是在网上查了一些资料,现在终于有些眉目,特记录于此,以方便大家参考,有什么错误或不足之处,还请大家指出~switch_to源码/** switch_to(n) should switch tasks to task ... 阅读全文
posted @ 2015-03-16 19:35 ElNinoT 阅读(2401) 评论(0) 推荐(0)
摘要:在linux 0.11版本源代码中,在文件linux/include/asm/system.h中有一个宏定义 move_to_user_mode() 1 #define move_to_user_mode() \ 2 __asm__ ("movl %%esp,%%eax\n\t" \ 3 ... 阅读全文
posted @ 2015-03-16 18:15 ElNinoT 阅读(1971) 评论(0) 推荐(1)
摘要:在阅读linux源码的过程中遇到了下面的略显奇怪的结构体数组定义。static struct hd_struct{ long start_sect; long nr_sects;}hd[10]={{0,0},};经测试,猜测应该是只对该数组的第一个元素进行初始化为{0,0},而其... 阅读全文
posted @ 2015-03-16 16:39 ElNinoT 阅读(193) 评论(0) 推荐(0)
摘要:void 指针的步长为1,而其他类型的指针的步长与其所定义的数据结构有关。example: 1 #include 2 main() 3 { 4 int a[10]; 5 int *m=a; 6 void *n=(void *)a; 7 ... 阅读全文
posted @ 2015-03-13 15:15 ElNinoT 阅读(308) 评论(0) 推荐(0)
摘要:jmpi是段间跳转指令,用于x86实模式下, 如:BOOTSEG = 0x0c70 jmpi 4, #BOOTSEG 假如当前段CS==00h,那么执行此指令后将跳转到段CS==0x0c70,当然段cs的值也变为0x0c70,接下来将执行指令0x0c70:0004处的指令。 实模式下寻址是为了兼容8... 阅读全文
posted @ 2015-03-10 12:31 ElNinoT 阅读(1858) 评论(0) 推荐(0)
摘要:在linux源码中经常遇到__asm__函数。它其实是函数asm的宏定义#define __asm__ asm,asm函数让系统执行汇编语句。__asm__常常与__volatile__一起出现。__volatile__限制编译器不能对下面的汇编语句进行优化处理。分析下面语句__asm__("mov... 阅读全文
posted @ 2015-03-04 14:53 ElNinoT 阅读(6626) 评论(0) 推荐(0)
摘要:#define 语句用于宏定义,在c中,我们可以用其实现函数的功能。如下语句#define test(a,b) a>b?a:b很显然,这是一个比较大小的语句。这里a,b相当于函数中的参数。but,如果我们想写一些复杂的语句怎么办。有办法,如下。#define test(a,b) ({\ ... 阅读全文
posted @ 2015-03-03 16:42 ElNinoT 阅读(267) 评论(0) 推荐(0)