摘要: do_execve() ----- 系统调用(int 0x80)功能号_NR_execve()调用的C处理函数1.确定原CS值是用户代码段。因为内核代码段不能被替换的2.初始化128KB的参数和环境空间3.取出执行文件的i结点4.计算命令行参数和环境字符串的个数:argc和argv5.计算当前进程的权限,判断当前进程是否有权限执行这个文件6.取出执行文件头部,并分析若执行文件是一个脚本文件,则:执行脚本文件的解释程序(1)取出解释程序的程序名和参数(2)把原命令行参数放入128KB空间中(3)把新参数和环境放入128KB空间中(4)获取解释程序的i结点,(5)go to step 5若执行文件 阅读全文
posted @ 2012-04-23 14:44 windmissing 阅读(203) 评论(0) 推荐(0) 编辑
摘要: 作用:主要用于进程之间按照先进先出的方式传数据,也可以用于进程间同步执行原理:管道只使用i节点的直接块。内核将i节点的直接块作为一个循环队列,通过修改读写指针来保证先进先出的顺序创建:申请一个管道i结点,分配一页缓冲区(4KB)初始化:i_size指向缓冲区,i_zone[0]指向数据头,i_zone[1]指向数据尾读操作:从尾读出数据,并修改尾指针写操作:从头写入数据,并修改头指针 阅读全文
posted @ 2012-04-23 10:50 windmissing 阅读(116) 评论(0) 推荐(0) 编辑
摘要: block_write() ----- 块设备文件数据的读操作1.把参数中文件指针pos位置映射成数据块号和块中偏移量2.将pos所在位置的数据读入到缓冲区的一个缓冲块bread()3.计算要写的长度4.从用户数据缓冲区将数据复制到当前缓冲块的位移位开始处(从第2次开始,偏移量都是0)5.如果还有数据,go to step 2图:见笔记用户读写操作过程,以读为例:再以块设备读函数为例:block_read() ---> bread() ---> ll_rw_block() 阅读全文
posted @ 2012-04-23 10:46 windmissing 阅读(125) 评论(0) 推荐(0) 编辑
摘要: iget() ----- 从设备dev上读取节点号为nr的i结点1.从i结点表申请一个临时i结点2.扫描i节点表,查找(设备号==dev&&i节点号==nr)的项若未找到,则:(1)用临时结点建立一个i节点(2)从设备dev读取该i节点的信息(3)返回该结点若找到,等待i节点解锁3.若(设备号!=dev||节点号!=nr),则go to step 24.i节点引用计数增15.判断i节点的类型若i节点是某个文件系统的安装点,则:(1)在超级块中搜寻安装在此i节点的超级块(2)将该i节点写盘(3)从(1)的超级块上取设备号(4)令i节点号为1(5)重新扫描整个i节点表,获取被安装文 阅读全文
posted @ 2012-04-23 09:49 windmissing 阅读(133) 评论(0) 推荐(0) 编辑