上一页 1 ··· 4 5 6 7 8 9 10 11 12 ··· 30 下一页
摘要: 概述 内核通过定时器中断来跟踪事件流; 时钟中断由系统定时硬件以及周期性的间隔产生,这个间隔由内核根据HZ的值设定,HZ是一个细节结构有关的常数;作为一般性规则,即使知道对应平台上的确切HZ值,也不应该在编程时依赖该HZ值; 如果想改变系统时钟中断发生的频率,可以通过修改HZ值来进行,但是,如果修改 阅读全文
posted @ 2019-10-29 19:06 AlexAlex 阅读(678) 评论(0) 推荐(0) 编辑
摘要: 尽管大多数时候阻塞型和非阻塞型操作的组合以及select方法可以有效的查询设备,但是某些时候用这种技术处理就效率不搞了; 例如:一个进程在低优先级执行长的循环计算,但又需要尽可能快的处理输入数据,如果该进程正在响应来自数据收集外设新观测的数据,则应该在新数据可用时理解知晓并处理;我们可以使用poll 阅读全文
posted @ 2019-10-29 19:01 AlexAlex 阅读(568) 评论(0) 推荐(0) 编辑
摘要: 使用非阻塞IO的应用程序经常使用select,poll,epoll系统调用;它们的功能本质上是一样的:都允许进程决定是否可以对一个或者多个打开的文件做非阻塞的读取或者写入;这些电泳也会阻塞进程,直到给定的文件描述符中的任何一个可读取或者写入;因此,它们常常用于那些需要使用多个输入或者输出流而又不会阻 阅读全文
posted @ 2019-10-29 18:59 AlexAlex 阅读(1074) 评论(0) 推荐(0) 编辑
摘要: 休眠简介 当一个进程被置入休眠时,它会被标记为一种特殊状态,并从调度器的运行队列中移走;直到某些情况下修改了这个状态,进程才会在任意cpu上调度,即运行该进程;休眠中的进程会被搁置在一边,等待将来的某个时间发生; 为了将进程以一种安全方式进入休眠,需要牢记下面的规则: 第一条规则,永远不要在原子上下 阅读全文
posted @ 2019-10-29 18:57 AlexAlex 阅读(1385) 评论(0) 推荐(0) 编辑
摘要: ioctl 除了读取和写入设备之外,大部分驱动程序还需要另外一种能力,即通过设备驱动程序执行各种类型的硬件控制,通常这种需求使用ioctl方法支持,该方法实现了同名的系统调用; 在用户空间,ioctl系统调用的原型如下: 1 int ioctl(int d, int request, ...); 原 阅读全文
posted @ 2019-10-29 18:52 AlexAlex 阅读(2056) 评论(0) 推荐(0) 编辑
摘要: 读取-复制-更新(read-copy-update,RCU)是一种高级的互斥机制,在正确的条件下,可以获得高的性能; RCU对它保护的数据结构做了一些限定,它针对经常发生读而很少发生写的情况做了优化,被保护的资源应该通过指针访问,而对这些资源的引用必须仅由原子代码拥有,在RCU保护的代码范围内不能进 阅读全文
posted @ 2019-10-29 18:48 AlexAlex 阅读(475) 评论(0) 推荐(0) 编辑
摘要: 当要保护的资源很小,很简单,会频繁的被访问而且写入访问很少的且必须快速时(即读不允许让写饥饿),就可以使用顺序锁(seqlock);从本质上讲,顺序锁会允许读取者对资源的自由访问,但需要读取者检查是否和写入者发生冲突,当这种冲突发生时,就需要重试对资源的访问; 顺序锁通常不能用于保护包含指针的数据结 阅读全文
posted @ 2019-10-29 18:46 AlexAlex 阅读(340) 评论(0) 推荐(0) 编辑
摘要: 原子整数操作 当共享资源是一个简单的整数值时,可以使用内核提供的一种原子的整数类型,称为atomic_t,定义在<linux/types.h>中,操作定义在<linux/atomic.h>中; 原子位操作 内核提供了一组针对原子位进行操作的函数,它们与体系结构相关,定义在文件<asm/bitops. 阅读全文
posted @ 2019-10-29 18:38 AlexAlex 阅读(421) 评论(0) 推荐(0) 编辑
摘要: 概念 自旋锁可以再不能休眠的代码中使用,比如中断处理例程;在正确使用的情况下,自旋锁通常可以提供比信号量更高的性能; 一个自旋锁是一个互斥设备,它只能由两个值,锁定和解锁;通常实现为某个整数值中的单个位;希望获得特定锁的代码测试相关位,如果锁可用,则锁定位被设置,而嗲吗继续进入临界区;相反,如果锁被 阅读全文
posted @ 2019-10-29 18:36 AlexAlex 阅读(908) 评论(0) 推荐(0) 编辑
摘要: 内核编程中常见的一种模式是,在当前线程之外初始化某个活动,然后等待该活动的结束;这个活动可能是,创建一个新的内核线程或者新的用户空间进程、对一个已有进程的某个请求,或者某种类型的硬件动作等; 内核提供了完成量(completion)来完成上述需求;完成量是一个轻量级的机制,它允许一个线程告诉另一个线 阅读全文
posted @ 2019-10-29 16:55 AlexAlex 阅读(1489) 评论(0) 推荐(0) 编辑
上一页 1 ··· 4 5 6 7 8 9 10 11 12 ··· 30 下一页