[文件系统] 一个简单文件系统的实现(12)
然后是gt_look_up(在namei.c中定义)staticstructdentry*gt_lookup(structinode*dir,structdentry*dentry,structnameidata*nd){structinode*inode=NULL;ino_tino=;dentry
[文件系统] 一个简单文件系统的实现(11)
下面我们来分析目录索引节点操作,这个应该是文件系统中最重要的地方了在namei.c中定义conststructinode_operationsgt_dir_inode_operations={.create=gt_create,.lookup=gt_lookup,.link=gt_link,.unl
[文件系统] 一个简单文件系统的实现(10)
因为地址空间操作的操作对象是内存,与磁盘的组织方式无关,所以这个我们可以直接使用VFS的地址空间操作,这样就简单多了gt_aops(在inode.c中定义)conststructaddress_space_operationsgt_aops={.readpage=gt_readpage,.write
[文件系统] 一个简单文件系统的实现(9)
然后就是目录操作(在dir.c中定义)conststructfile_operationsgt_dir_operations={.llseek=generic_file_llseek,.read=generic_read_dir,.readdir=gt_readdir,.fsync=gt_sync_
[文件系统] 一个简单文件系统的实现(8)
普通文件操作(在file.c中定义),只需要实现一个gt_sync_fileconststructfile_operationsgt_file_operations={.llseek=generic_file_llseek,.read=do_sync_read,.write=do_sync_writ
[文件系统] 一个简单文件系统的实现(7)
gt_put_super(定义在super.c中)staticvoidgt_put_super(structsuper_block*sb){structgt_sb_info*sbi=GT_SB(sb);brelse(sbi->s_sbh);sb->s_fs_info=NULL;kfree
[文件系统] 一个简单文件系统的实现(6)
接着写超级块操作接下来就是gt_write_super(定义在super.c中)staticintgt_write_super(structsuper_block*sb){structgt_super_block*gs;lock_kernel();gs=GT_SB(sb)->s_gs;gs-&
[文件系统] 一个简单文件系统的实现(5)
接下来是超级块操作(定义在super.c中)staticconststructsuper_operationsgt_sops={.alloc_inode=gt_alloc_inode,//分配一个GTFS的索引节点.destroy_inode=gt_destroy_inode,//销毁索引节点.wr
[文件系统] 一个简单文件系统的实现(4)
文件系统在kernel中被当作一个模块实现也有module_init和module_exit(定义在super.c)module_init(init_gt_fs)module_exit(exit_gt_fs)init_gt_fs(定义在super.c)staticint__initinit_gt_f
[文件系统] 一个简单文件系统的实现(3)
文件系统的实现还需要对超级块的操作,对文件的操作,索引节点操作等等我们就先从挂载一个文件系统开始挂载文件系统时候,VFS会通过mount命令中的文件系统类型或超级块魔数来寻找file_system_type结构下面就是GTFS的file_system_type结构(定义在super.c中)stati
[文件系统] 一个简单文件系统的实现(2)
因为GTFS只是用来学习而不是用于生产环境的,所以GTFS的设计很简单也很简陋。GTFS的主要数据结构和其他文件系统相似,主要的区别是组织块的方式下面是GTFS的主要数据结构gt_inode(索引节点,在gt_fs.h中定义)structgt_inode{__le16i_mode;__le16i_u
[文件系统] 一个简单文件系统的实现(1)
/*转载请注明作者authorgoteremailprowlman@gmail.com*/花了将进两个月的时候阅读完内核文件系统,对于文件系统是如何运行的还是有点模糊,所以想通过写一个简单的文件系统来使自己对文件系统有个深入的了解。经过拷贝抄袭ext2和minix文件系统后,写了一个简单的文件系统,
内核模块中对文件的读写
平时网络部分的东西碰的多些,这块一开始还真不知道怎么写,因为肯定和在用户空间下是不同的。google过后,得到以下答案。一般可以用两种方法:第一种是用系统调用。第二种方法是filp->open()等函数。下面分别来说下这两种方法。1利用系统调用:sys_open,sys_write,sys_r
关于LINUX在中断(硬软)中不能睡眠的真正原因
自陷就是TRAP,LINUX的EXCEPTION-异常,有进程上下文。TRAP,相当于一个软中断(INT1,INT3,断点,单步等),和软中断调用的系统调用(INT21,INT80)几乎一样,属于当前进程,进入内核使用进程的内核栈。唯一不同的是,系统调用的软中断在用户程序中的位置相对固定,而TRAP
《Interrupt in Linux(硬件篇)》
内容提要第一章:介绍了PIC和APIC系统的基本架构,提供了了解现代中断系统构成的基本知识。第二章:论述了Linux如何探测中断硬件,以及如何初始化它们。第三章:补充了一些中断系统的硬件知识,没有它们你也应该能读懂前两章的内容。文中用大量“题外话”介绍了中断相关的知识和原理,它们大部分是笔者感兴趣的
linux 2.4内核之信号(一)
linux2.4内核之信号(一)这两天看信号,略有所感.记下以示.限于规模.只是略讲以及自己困惑过的地方.由于描述能力和理解力错误的地方还请多谅解和指正begin:1.信号的许多基础问题我就不说了(当然是我认为的).这里主要讲下几个比较搞的概念信号屏蔽:主要区分好block和sa_mask就好,信号
[转贴]用户态和内核共享内存--最简单的例子
作者:wheelz来自:http://www.linuxforum.net/forum/gshowflat.php?Cat=&Board=linuxK&Number=587187&page=0&view=collapsed&sb=5&o=all&
Linux2.6内核进程创建过程分析
创建时间:2007-10-18文章属性:原创文章提交:pr0cess(pr0cess_at_cnbct.org)Linux2.6内核进程创建过程分析/*Kernelversion:linux-2.6.22.9*作者:旋木木*日期:2007/10/17*E-mail:xuanmumu@gmail.co
PAE机制分析
刚写的关于物理地址扩展的分析,基本是从ULK3rd和intelvolume3里总结出来的,不过还是希望对大家有用有错误的地方希望大家指正,谢谢!文章来源CU社区:PAE机制分析
写了一个内核模块 实现简单的类似ps命令.
内核模块创建在proc文件系统上建立_ps文件.遍例进程内核链表task_struct.将遍例结果存入缓冲区.影射到/proc/_ps文件中.用户态的程序去读取这个文件.打印显示当前进程的的pid,ppid和进程名.#include<linux/kernel.h>#include<