2016年3月28日
摘要: 目录项对象 VFs把目录当做文件对待,所以在路径/bin/vi中,bin和vi都属于文件——bin是特殊的目录文件而vi是一个普通文件。路径中的每个组成部分都由一个索引节点对象表示。虽然它们可以统一由索引节点表示,但是VFS经常需要执行目录相关的操作,比如路径名查找等。路径名查找需要解析路径中的每一 阅读全文
posted @ 2016-03-28 17:21 画家丶 阅读(191) 评论(0) 推荐(0) 编辑
摘要: 虚拟文件系统(或称虚拟文件交换,更常见的简称VFS)作为内核子系统,为用户空间程序提供了文件系统相关的接口。系统中所有文件系统不但依赖VFS共存,而且也依靠VFS系统协同工作。通过虚拟文件系统,程序可以利用标准的UNIX文件系统调用对不同介质上的不同文件系统进行读写操作。模式图如下: 通用文件系统接 阅读全文
posted @ 2016-03-28 15:17 画家丶 阅读(247) 评论(0) 推荐(0) 编辑
  2016年3月25日
摘要: 在栈上的静态分配 在任意一个函数中,你都必须尽量节省栈资源。内核没有在管理内核栈上做足工作,因此,当栈溢出时,多出的数据就会直接溢出来,覆盖掉紧邻堆栈末端的东西。首先面临考验的就是thread_info结构。在堆栈外,任何内核数据都可能存在潜在的危险。当栈溢出时,最好的情况是机器宕机,最坏的情况是悄 阅读全文
posted @ 2016-03-25 15:50 画家丶 阅读(161) 评论(0) 推荐(0) 编辑
摘要: 页 内核把物理页作为内存管理的基本单位。尽管处理器的最小可寻址单位通常为字(甚至字节),但是,内存管理单元(MMU,管理内存并把虚地址转换为物理地址的硬件)通常以页为单位进行处理。正因如此,MMU以页大小为单位来管理系统中的页表(这也是页表名的由来)。从虚拟内存的角度来看,页就是最小单位。体系结构不 阅读全文
posted @ 2016-03-25 13:23 画家丶 阅读(241) 评论(0) 推荐(0) 编辑
  2016年3月24日
摘要: 相对于事件驱动而言,内核中有大量的函数都是基于时间驱动的。有些函数是周期执行的,有些操作是需要等待一个相对的时间后才运行。除了上述两类函数需要内核提供时间外,内核还必须管理系统的运行时间以及当前日期和时间。 其中相对时间和绝对时间是不同的,若某个事件在5秒后被调度执行,那么系统所需要的是——相对时间 阅读全文
posted @ 2016-03-24 15:32 画家丶 阅读(190) 评论(0) 推荐(0) 编辑
  2016年3月22日
摘要: 原子操作 原子操作可以保证指令以原子的方式执行——执行过程不会被打断。 内核提供了两组原子操作的接口——一组针对整数进行操作,另一组针对单独的位进行操作。在Linux支持的所有体系结构中都实现了这两组接口。 原子整数操作 针对整数的原子操作只能对atomic_t类型的数据进行处理。在这里之所以引入了 阅读全文
posted @ 2016-03-22 17:37 画家丶 阅读(196) 评论(0) 推荐(0) 编辑
  2016年3月21日
摘要: 共享内存的应用程序必须特别留意保护共享资源,防止共享资源被并发的访问。内核也不例外。共享资源之所以要防止并发访问,是因为如果多个执行线程同时访问和操作数据,就有可能发生各线程之间相互覆盖共享数据的情况,造成被访问数据处于不一致状态。并发访问共享数据是造成系统不稳定的一类隐患。 临界区和竞争条件 临界 阅读全文
posted @ 2016-03-21 15:19 画家丶 阅读(147) 评论(0) 推荐(0) 编辑
摘要: 工作队列是另外一种将工作推后执行的形式,通过交由一个内核线程去执行——这个下半部分总是在进程上下文中执行,所以工作队列允许重新调度甚至是睡眠。 工作队列的实现 工作队列子系统是一个用于创建内核线程的接口,通过它创建的进程负责执行由内核其他部分排到队列里的任务。这些内核线程被称为工作者线程。工作队列允 阅读全文
posted @ 2016-03-21 13:40 画家丶 阅读(247) 评论(0) 推荐(0) 编辑
  2016年3月18日
摘要: 中断处理程序是内核中很有用的——实际上也是必不可少的一部分。但是一些局限导致中断处理程序只能完成中断处理流程的上半部分。这些局限包括: 1.中断处理程序以异步的方式执行,并有可能打算其他重要代码(甚至是其他中断处理程序)的执行。因此,为了避免被打断的代码停止时间过长,中断处理程序应该执行的越快越好。 阅读全文
posted @ 2016-03-18 16:49 画家丶 阅读(252) 评论(0) 推荐(0) 编辑
  2016年3月17日
摘要: 当Gradle升级后,以前的项目可能会报错,如下图: Gradle DSL method not found:'android()',解决方法如下: 将build.gradle中的android{}删掉后RebuildProject。 阅读全文
posted @ 2016-03-17 17:35 画家丶 阅读(307) 评论(0) 推荐(0) 编辑