有些驱动程序需要延迟比较长的时间,即长于一个时钟滴答; 如果想把执行延迟若干个时钟滴答,或者对延迟的精度要求不高,最简单的实现方法就是一个监视jiffies计数器的循环;这种忙等待的实现方法通常具有下面形式,其中j1是延迟终止的jiffies值: 对cpu_relax的调用将以架构相关的方式执行,其 ...
分类:
系统相关 时间:
2019-10-29 19:51:47
阅读次数:
90
kmalloc的原型如下: 1 void *kmalloc(size_t size, gfp_t flags) 第一个参数是要分配的块的大小,第二个参数是分片标志; flags标志 最常用的标志是GFP_KERNEL,表示内存分配(最终总是调用get_free_page来实现实际的分配,这就是GFP ...
分类:
系统相关 时间:
2019-10-29 19:51:31
阅读次数:
122
尽管大多数时候阻塞型和非阻塞型操作的组合以及select方法可以有效的查询设备,但是某些时候用这种技术处理就效率不搞了; 例如:一个进程在低优先级执行长的循环计算,但又需要尽可能快的处理输入数据,如果该进程正在响应来自数据收集外设新观测的数据,则应该在新数据可用时理解知晓并处理;我们可以使用poll ...
分类:
系统相关 时间:
2019-10-29 19:51:17
阅读次数:
106
当共享资源是一个简单的整数值时,可以使用内核提供的一种原子的整数类型,称为atomic_t,定义在<linux/types.h>中,操作定义在<linux/atomic.h>中; 内核提供了一组针对原子位进行操作的函数,它们与体系结构相关,定义在文件<asm/bitops.h>;即使是在SMP计算机 ...
分类:
系统相关 时间:
2019-10-29 19:48:41
阅读次数:
97
除了读取和写入设备之外,大部分驱动程序还需要另外一种能力,即通过设备驱动程序执行各种类型的硬件控制,通常这种需求使用ioctl方法支持,该方法实现了同名的系统调用; 在用户空间,ioctl系统调用的原型如下: 原型中的可变参数不是数目不定的一串参数,而只是一个可选参数;可选参数的具体格式依赖于控制命 ...
分类:
系统相关 时间:
2019-10-29 19:38:48
阅读次数:
120
内核通过定时器中断来跟踪事件流; 时钟中断由系统定时硬件以及周期性的间隔产生,这个间隔由内核根据HZ的值设定,HZ是一个细节结构有关的常数;作为一般性规则,即使知道对应平台上的确切HZ值,也不应该在编程时依赖该HZ值; 如果想改变系统时钟中断发生的频率,可以通过修改HZ值来进行,但是,如果修改了头文 ...
分类:
系统相关 时间:
2019-10-29 19:35:24
阅读次数:
119
如果需要在将来的某个时间点调度执行某个动作,同时在该时间点到达之前不会阻塞当前进程,则可以使用内核定时器; 内核定时器是一个数据结构,它告诉内核在用户定义的时间点使用用户定义的参数来执行一个用户定义的函数; 被调度运行的函数几乎肯定不会再注册这些函数的进程正在执行时运行,相反,这些函数会异步的运行; ...
分类:
系统相关 时间:
2019-10-29 19:31:14
阅读次数:
100
一个信号量本质是一个整数值,它和一堆函数联合使用,这一对函数通常称为P和V;希望进入临界区的进程将在相关信号量上调用P;如果信号量的值大于零,则该值会减少1,进程可以继续执行;相反,如果信号量的值为0或者更小,则进程必须等待知道其他人释放该信号量;对信号量的解锁通过调用V完成;该函数增加信号量的值, ...
分类:
系统相关 时间:
2019-10-29 17:09:33
阅读次数:
96
块设备和前面的字符设备驱动主体框架和编程思想上基本相同,但是在操作的时候就不一样了。 框架: app: open,read,write "1.txt" 文件的读写文件系统: vfat, ext2, ext3, yaffs2, jffs2 (把文件的读写转换为扇区的读写) ll_rw_block 扇区 ...
分类:
其他好文 时间:
2019-10-29 15:23:52
阅读次数:
92
CLR - I/O限制的异步操作 windows是如何执行I/O操作的?计算机的每个模块都有自己的微型处理器,当写文件到磁盘中时,操作系统将写文件的任务交给磁盘的处理单元就可以做其他的了。还有需要TCP/IP 与另一台电脑通信时,系统只要将发送的数据写入TCP的缓存区就可以做其他的了,发送数据由网卡 ...
分类:
其他好文 时间:
2019-10-26 20:56:58
阅读次数:
138