高速缓冲区是文件系统访问块设备中数据的必经要道,为了访问文件系统等块设备上的数据,内核可以每次都访问块设备,进行读写操作. 为了提高系统性能,内核在内存中开辟一个高速数据缓冲区.在Linux内核中,高速缓冲区位于内核代码和主内存之间. 当需要从块设备中读取数据时,先到高速缓冲区中寻找,若找不到,就发出读块设备命令,块设备将数据写入高速缓冲区中. 高速缓冲区划分为块,每块的大小恰好和硬盘中的存储单元相同. Linux中,高速缓冲区的实际组织形式较为复杂. 首先看它的结构体: 56 struct b…
78 static struct buffer_head * find_entry(struct m_inode * dir, 79 const char * name, int namelen, struct dir_entry ** res_dir) find_entry是linux文件系统中一个较为费解的函数.下面我们来分析一番. 它的第一个参数是 m_inode型,它指示了函数操作的所在根目录的inode节点.即相对路径的起始节点. name自然是想要查找的目录路径,namelen是该目…
当系统申请一个新的inode时.系统并不会对磁盘进行读写.它会在存储在内存的inode表(inode_table)中寻找一个空闲的位置. 如果找到了,直接返回该inode.否则要等待一个空闲的位置. 得到一个空闲的位置后,检查dirty位,如果dirty,那么需要写回磁盘. 但是注意,系统并不会直接对磁盘进行操作.而是申请一个高速缓冲块,对该高速缓冲块进行操作. ps:为了弥补cpu与磁盘之间巨大的速度差距.系统所有的对磁盘的读写操作都不会直接操作磁盘,而是操作高速缓冲区. 高速缓冲区再和磁盘进…
上一篇文章说到linux文件系统中分为超级块,inode块,block块.inode块给出文件的权限,修改时间,大小等信息. 但是实际上,文件的数据是存储在block块中的.而inode块中给出了存储文件数据的block的编号.每个inode和block都有编号.文件系统一开始就将inode与block规划好了 block块,inode块,超级块在物理上并无区别.大小一致. 在linux上新建一个目录的过程: 当我们在ext2文件系统上新建一个目录时,ext2会分配一个inode与至少一块blo…
linux文件系统:   操作系统的文件数据除了文件实际内容外,还有非常多的属性,如文件权限(rwx)与文件属性(所有者.群组.时间参数等).   文件系统通常将这两部分数据存放在不同的块.权限属性放到 inode 中,实际数据放到 data block 中. 还有一个超级块(super block)会记录文件系统的整体信息,包括 inode 与block 的数量.使用量等.     inode:记录文件属性,一个文件占用一个inode,同时记录此文件的数据所在的block号码:   block…
/* 77 * This function frees a continuos block of page tables, as needed 78 * by 'exit()'. As does copy_page_tables(), this handles only 4Mb blocks. 79 */ int free_page_tables(unsigned long from,unsigned long size)//size以B为单位而不是以页表为单位 { unsigned long…
/* 34 * Get physical address of first (actually last :-) free page, and mark it 35 * used. If no free pages left, return 0. 36 */ unsigned long get_free_page(void) { register unsigned long __res asm("ax"); __asm__("std ; repne ; scasw\n\t&q…
1. man exec就可以知到: The exec() family of functions replaces the current process image with a new process image exec是没有创建新进程的,而是把当前进程对应的应用换成新的应用.因此,它里头当前不会去fork了. 2. 这个进程就是执行exec的进程,举个例,如果PID=1000的进程A, 执行ecec B, 那就PID=1000的进程就会变为B,A的资源会被系统回收.对Exec函数来说,没…
c语言中,众所周知,以0x开头的数是16进制数.例如 0x8FFF 然而较少使用的是八进制数.它以0开头.例如 01234…
从本篇開始.将深入CI框架的内部.一步步去探索这个框架的实现.结构和设计. Common.php文件定义了一系列的全局函数(一般来说.全局函数具有最高的载入优先权.因此大多数的框架中BootStrap引导文件都会最先引入全局函数,以便于之后的处理工作). 打开Common.php中,第一行代码就很诡异: if ( ! defined('BASEPATH')) exit('No direct script access allowed'); 上一篇(CI框架源代码阅读笔记2 一切的入口 index…