上一页 1 ··· 4 5 6 7 8 9 10 11 12 13 下一页
摘要: 在GCC手册中对__builtin_expect()的描述是这样的:long __builtin_expect (long exp, long c) You may use __builtin_expect to provide the compiler with branch predictioninformation. In general, you should prefer to use actual profile feedback for this(‘-fprofile-arcs’), as programmers are notoriously bad at predicting 阅读全文
posted @ 2012-02-06 14:28 only_eVonne 阅读(2947) 评论(0) 推荐(1) 编辑
摘要: 前段买了本《C专家编程》确实不错,特别是对内存思考这一章节,(O(∩_∩)O~目前我也只看到这一章节),其中讲到了总线错误和段错误:bus error(core dumped) 总线错误(信息已经转储)segmetation fault(core dumped)段错误(信息已经转储)这种错误相信只要你在unix用c,c++这两种错误是常见又是很头疼的错误,目前我也遇到段错误的程序,至今未找到错误原因。来看看作者怎么解说的:产生原因: 当硬件告诉操作系统一个有问题的内存引用时,操作系统通过发送信号给有问题的进程进行交流。(信号是一种事件通知或一个软件中断)。普通进程一般对“总线错误”或“段错误” 阅读全文
posted @ 2012-01-31 20:24 only_eVonne 阅读(9159) 评论(0) 推荐(0) 编辑
摘要: 1.memmove函数原型:void *memmove(void *dest, const void *source, size_t count)返回值说明:返回指向dest的void *指针参数说明:dest,source分别为目标串和源串的首地址。count为要移动的字符的个数函数说明:memmove用于从source拷贝count个字符到dest,如果目标区域和源区域有重叠的话,memmove能够保证源串在被覆盖之前将重叠区域的字节拷贝到目标区域中。2.memcpy函数原型:void *memcpy(void *dest,const void *source,size_tcount);返 阅读全文
posted @ 2012-01-21 18:06 only_eVonne 阅读(323) 评论(0) 推荐(0) 编辑
摘要: 用途一: 定义一种类型的别名,而不只是简单的宏替换。可以用作同时声明指针型的多个对象。比如: char* pa, pb; // 这多数不符合我们的意图,它只声明了一个指向字符变量的指针, // 和一个字符变量; 以下则可行: typedef char* PCHAR; // 一般用大写 PCHAR pa, pb; // 可行,同时声明了两个指向字符变量的指针 虽然: char *pa, *pb; 也可行,但相对来说没有用typedef的形式直观,尤其在需要大量指针的地方,typedef的方式更省事。用途二: 用在旧的C代码中(具体多旧没有查),帮助struct.以前的代码中,... 阅读全文
posted @ 2012-01-12 23:22 only_eVonne 阅读(529) 评论(0) 推荐(1) 编辑
摘要: 软中断、tasklet和工作队列并不是Linux内核中一直存在的机制,而是由更早版本的内核中的“下半部”(bottom half)演变而来。下半部的机制实际上包括五种,但2.6版本的内核中,下半部和任务队列的函数都消失了,只剩下了前三者。本文重点在于介绍这三者之间的关系。(函数细节将不会在本文中出现,可以参考文献,点这里)(1)上半部和下半部的区别上半部指的是中断处理程序,下半部则指的是一些虽然与中断有相关性但是可以延后执行的任务。举个例子:在网络传输中,网卡接收到数据包这个事件不一定需要马上被处理,适合用下半部去实现;但是用户敲击键盘这样的事件就必须马上被响应,应该用中断实现。两者的主要区别 阅读全文
posted @ 2012-01-12 22:39 only_eVonne 阅读(11617) 评论(0) 推荐(1) 编辑
摘要: 一、中断处理为什么要下半部?Linux在中断处理中间中断处理分了上半部和下半部,目的就是提高系统的响应能力和并发能力。通俗一点来讲:当一个中断产生,调用该中断对应的处理程序(上半部)然后告诉系统,对应的后半部可以执行了。然后中断处理程序就返回,下半部会在合适的时机有系统调用。这样一来就大大的减少了中断处理所需要的时间。二、那些工作应该放在上半部,那些应该放在下半部?没有严格的规则,只有一些提示:1、对时间非常敏感,放在上半部。2、与硬件相关的,放在上半部。3、不能被其他中断打断的工作,放在上半部。以上三点之外的,考虑放在下半部。三、下半部机制在Linux中是怎么实现的?下半部在Linux中有以 阅读全文
posted @ 2012-01-12 22:23 only_eVonne 阅读(2466) 评论(0) 推荐(0) 编辑
摘要: Unix/Linux的接口设计有一句通用的格言“提供机制而不是策略”。区别对待机制(mechanism)和策略(policy)是Unix设计中的一大亮点。大部分的编程问题都可以被切割成两个部分:“需要提供什么功能”(机制)和“怎样实现这些功能”(策略)。如果由程序中的独立部分分别负责机制和策略的实现,那么开发软件就更容易,也更容易适应不同的需求。开源-展现在我们面前的是数以千计的代码,在那一行行的代码背后,到底蕴藏着怎样的设计思想,高手们曾怎样苦思冥想。在一堆堆的代码面前,有时候,我们很容易迷失曾经进来的入口,而掉入符号,变量以及函数堆积成的沼泽地。操作系统的本质是什么?管理者?亦或服务者?但 阅读全文
posted @ 2012-01-10 22:15 only_eVonne 阅读(444) 评论(0) 推荐(0) 编辑
摘要: 1 引言 Linux 中允许众多不同的文件系统共存,如 ext2, ext3, vfat 等。通过使用同一套文件 I/O 系统调用即可对 Linux 中的任意文件进行操作而无需考虑其所在的具体文件系统格式;更进一步,对文件的操作可以跨文件系统而执行。如图 1 所示,我们可以使用 cp 命令从 vfat 文件系统格式的硬盘拷贝数据到 ext3 文件系统格式的硬盘;而这样的操作涉及到两个不同的文件系统。图 1. 跨文件系统的文件操作“一切皆是文件”是 Unix/Linux 的基本哲学之一。不仅普通的文件,目录、字符设备、块设备、套接字等在 Unix/Linux 中都是以文件被对待;它们虽然类型不同 阅读全文
posted @ 2012-01-03 10:50 only_eVonne 阅读(487) 评论(0) 推荐(0) 编辑
摘要: 我这里说的ioctl函数是在驱动程序里的,因为我不知道还有没有别的场合用到了ioctl, 所以就规定了我们讨论的范围。为什么要写篇文章呢,是因为我前一阵子被ioctl给搞混 了,这几天才弄明白它,于是在这里清理一下头脑。 一、 什么是ioctl。 ioctl是设备驱动程序中对设备的I/O通道进行管理的函数。所谓对I/O通道进行管理,就 是对设备的一些特性进行控制,例如串口的传输波特率、马达的转速等等。它的调用个数 如下: int ioctl(int fd, ind cmd, …); 其中fd就是用户程序打开设备时使用open函数返回的文件标示符,cmd就是用户程... 阅读全文
posted @ 2011-12-22 13:04 only_eVonne 阅读(7018) 评论(0) 推荐(0) 编辑
摘要: 在驱动程序里, ioctl() 函数上传送的变量 cmd 是应用程序用于区别设备驱动程序请求处理内容的值。cmd除了可区别数字外,还包含有助于处理的几种相应信息。 cmd的大小为 32位,共分 4 个域: bit31~bit30 2位为 “区别读写” 区,作用是区分是读取命令还是写入命令。 bit29~bit15 14位为 "数据大小" 区,表示 ioctl() 中的 arg 变量传送的内存大小。 bit20~bit08 8位为 “魔数"(也称为"幻数")区,这个值用以与其它设备驱动程序的 ioctl 命令进行区别。 bit07~bit00 8 阅读全文
posted @ 2011-12-22 11:58 only_eVonne 阅读(6716) 评论(0) 推荐(0) 编辑
上一页 1 ··· 4 5 6 7 8 9 10 11 12 13 下一页