上一页 1 2 3 4 5 6 7 8 9 10 ··· 12 下一页
摘要: 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) 编辑
摘要: 1.高速缓冲区位置:内核代码和主内存之间作用:解决I/O操作与CPU处理之间的速度不匹配大小:被划分成与磁盘数据块大小相等的缓冲块管理方式:hash表(设备号^逻辑块号) + 双向链表(所有的buffer_head)2.高速缓冲的划分:3.管理方式:注意,并不是一个散列队列组成双向链表,而是所有的缓冲块,顺序是最近最少使用(LRU)4.bread() ----- 从设备上读取数据块(1)获取缓冲区getblk()(2)判断缓冲区数据是否有效,若有效,则返回缓冲区指针。(有效:数据已从设备读入到缓冲区,因为程序是异步执行的)(3)向块设备驱动程序申请,同时让进程进入睡眠ll_rw_block() 阅读全文
posted @ 2012-04-22 22:25 windmissing 阅读(313) 评论(0) 推荐(0) 编辑
摘要: 文件系统的组成:1.高速缓冲区的管理程序2.文件系统的低层通用函数3.对文件中数据进行读写操作4.系统调用接口的实现MINIX文件系统的结构:1.引导块:存放的是计算机加电启动时同BIOS自动读入的执行代码和数据2.超级块:存放文件系统的结构信息3.i结点位图:i结点是否被使用4.逻辑结构位图:数据区第i个块是否被使用。最多8个,可表示64MB5.i结点:存放文件或目录的索引结点6.数据区:i_zone[0] - i_zone[6]:直接块,7KB i_zone[7]:一次间接块,512KB i_zone[8]:二次间接块,512*512KB 设备文件不战胜数据盘块,只占用i结点对于文件目录, 阅读全文
posted @ 2012-04-22 21:40 windmissing 阅读(251) 评论(0) 推荐(0) 编辑
摘要: 一,线性映射与非线性映射1.内存管理物理内存管理:Linux内存最小管理单位为页(page),通常一页为4K。初始化时,linux会为每个物理内存也建立一个page的管理结构,操作物理内存时实际上就是操作page页。某些设备会映射在物理内存地址外,这些地址会在使用时建立page结构。进程内存管理:Linux进程通过vma进行管理,每个进程都有一个task_struct结构体进行维护,其中的mm_struct结构体管理这进程的所有内存。Mm_struct中维护者一个vma链表,其中的每一个vma节点对应着一段连续的进程内存。这里的连续是指在进程空间中连续,物理空间中不一定连续。如果使用mallo 阅读全文
posted @ 2012-04-22 14:39 windmissing 阅读(616) 评论(0) 推荐(0) 编辑
摘要: 一、什么是内核抢占1.如果一个进程正在内核态执行时,允许发生内核切换,这就是内核抢占。如果一个进程正在用户态运行,就无所谓内核抢占2.当满足以下任意一个条件时,不允许内核抢占(1)内核正在执行中断处理程序(2)内核正在执行软中断或tasklet(3)内核抢占被显式地禁止只有在执行异常处理程序,且内核抢占没有被显示禁止时,才允许内核抢占。note:内核抢占会导致进程切换,或进程从一个CPU移动另一个CPU,这个在(1)和(2)中是不允许的3.Linux内核是抢占式的,进程无论是处于内核态还是用户态,都可能被抢占4.被抢占的进程没有被挂起,因为它还处于TASK_RUNNING状态,只不过不再使用C 阅读全文
posted @ 2012-04-19 11:04 windmissing 阅读(186) 评论(0) 推荐(0) 编辑
摘要: 一、char str[] = "abcd"; cout<<sizeof(str)<<endl; //答案:5。因为有一个'\0' wchar_t wstr[] = "abcd"; cout<<sizeof(wstr)<<endl; //答案:10。因为在wchar_t中,'\0'也是两个字节。在linux的g++编译环境中不能使用wchar_t,原因未知 char *p = "abcd"; cout<<sizeof(p)<<endl 阅读全文
posted @ 2012-04-16 22:06 windmissing 阅读(187) 评论(0) 推荐(0) 编辑
摘要: 1.new a *.c file named drawing.c2.g++ `pkg-config opencv --libs --cflags opencv` drawing.c -o drawingnotice : the difference between' and` 阅读全文
posted @ 2012-04-15 16:03 windmissing 阅读(107) 评论(0) 推荐(0) 编辑
上一页 1 2 3 4 5 6 7 8 9 10 ··· 12 下一页