摘要:
Typedef声明有助于创建平台无关类型,甚至能隐藏复杂和难以理解的语法。不管怎样,使用typedef能为代码带来意想不到的好处,通过本文你可以学习用typedef避免缺欠,从而使代码更健壮。 typedef声明,简称typedef,为现有类型创建一个新的名字。比如人们常常使用typedef来编写更美观和可读的代码。所谓美观,意指typedef能隐藏笨拙的语法构造以及平台相关的数据类型,从而增强可移植性和以及未来的可维护性。本文下面将竭尽全力来揭示typedef强大功能以及如何避免一些常见的陷阱。 如何创建平台无关的数据类型,隐藏笨拙且难以理解的语法? 使用typedefs为现有类型创建同义字 阅读全文
摘要:
先引用一篇博文,再总结一下相关问题。所谓上下文切换,实质就是寄存器堆的切换过程。这其中一部分需要硬件来切换,一部分需要软件来处理。当在用户空间发生中断时,首先由 x86 CPU 从硬件角度进行处理,然后才是 linux 内核的处理。当中断处理完毕,返回到用户空间时,最后的步骤也是交给 CPU 硬件来处理的。1、 X86 CPU 对中断的硬件支持CPU 从中断控制器取得中断向量根据中断向量从 IDT 中找到对应的中断门根据中断门,找到中断处理程序在进入中断处理程序前,需要将堆栈切换到内核堆栈。也就是将 TSS 中的 SS0、ESP0装入SS、ESP然后将原来的用户空间堆栈(SS, ESP)、EF 阅读全文
摘要:
一、基本概念中断分为同步中断和异步中断。同步中断是由CPU控制单元产生的,“同步”是指只有在一条指令执行完毕后,CPU才会发出中断,而不是发生在代码指令执行期间,比如系统调用。而异步中断是由其他硬件设备依照CPU时钟信号产生的,即意味着中断能够在指令之间发生,例如键盘中断。按照Intel的微处理器手册,同步中断和异步中断也分别称为异常(或者软件中断)和中断。中断大家都比较熟悉,是由硬件设备产生的。异常的产生源有两种:一种是由程序的错误产生的,内核通过发送一个Unix程序员都熟悉的信号来处理异常;第二种时内核必须处理的异常条件产生的,此时内核执行恢复异常需要的所有步骤,例如缺页,或对内核服务的一 阅读全文
摘要:
进程上下文和中断上下文是操作系统中很重要的两个概念,这两个概念在操作系统课程中不断被提及,是最经常接触、看上去很懂但又说不清楚到底怎么回事。造成这种局面的原因,可能是原来接触到的操作系统课程的教学总停留在一种浅层次的理论层面上,没有深入去研究。处理器总处于以下状态中的一种:1、内核态,运行于进程上下文,内核代表进程运行于内核空间;2、内核态,运行于中断上下文,内核代表硬件运行于内核空间;3、用户态,运行于用户空间。用户空间的应用程序,通过系统调用,进入内核空间。这个时候用户空间的进程要传递很多变量、参数的值给内核,内核态运行的时候也要保存用户进程的一些寄存器值、变量等。所谓的“进程上下文”,可 阅读全文
摘要:
volatile 影响编译器编译的结果,指出,volatile 变量是随时可能发生变化的,与volatile变量有关的运算,不要进行编译优化,以免出错,(VC++ 在产生release版可执行码时会进行编译优化,加volatile关键字的变量有关的运算,将不进行编译优化。)。 例如: volatile int i=10; int j = i; ... int k = i; volatile 告诉编译器i是随时可能发生变化的,每次使用它的时候必须从i的地址中读取,因而编译器生成的可执行码会重新从i的地址读取数据放在k中。 ... 阅读全文
摘要:
1、gcc-Wallhello.c-ohello//编译源文件,显示警告信息2、./a.out//运行程序3、gcc-Wallcalc.c/usr/lib/libm.a-ocalc//绝对路径包含库4、gcc-Wallcalc.c-lm-ocalc//使用参数包含库5、Gcc默认搜索库文件的目录:/usr/local/lib/;/usr/lib/6、Gcc默认搜索头文件的目录:/usr/local/include/;/usr/include/7、Gcc-I与-L参数:前者将路径加到搜索包含头文件的搜索路径列表;后者将路径加到搜索包含库文件的搜索路径列表。8、C_INCLUDE_PATH添加c语 阅读全文
摘要:
C程序员经常被问及的一道面试题是:什么是大端/小端,怎么样判断是大端/小端?大端小端问题对于嵌入式程序员绝对不会陌生(否则,别告诉我你是搞嵌入式的),它与CPU体系结构有关。比如常见的X86处理器是小端模式;ARM处理器默认是小端模式,当然也可以通过配置,改为大端模式;Moto的68000、DEC的SPARC是大端模式。 1.什么是大小端? 定义:一个内存对象由多个字节组成;同时,内存存放... 阅读全文
摘要:
我于2007年来到北京,在北京工作这些年,先后在NEC、风行、百度几家公司担任软件工程师的职务。NEC是一家具有百年历史的传统日企,在知春路的分公司叫日电电子,我们部门主要从事机顶盒、数字电视上嵌入式软件的研发。风行是一家成立于2005年的在线视频公司,主要做P2P视频点播的业务,而我主要从事P2P后台服务器的开发。百度是一家在纳斯达克上市的互联网公司,我主要在客户端部门的百度影音项目组从事P2... 阅读全文
摘要:
如何在涉世之初少走弯路,有一个好的开端,开始一番成功的事业?以下是一些先行者积累的10条有益的涉世忠告。好好地遵循、把握这些忠告和建议吧,比起所学的课堂课程来,它毫不逊色! 1. 买个闹钟,以便按时叫醒你。 贪睡和不守时,都将成为你工作和事业上的绊脚石,任何时候都一样。不仅要学会准时,更要学会提前。就如你坐车去某地,沿途的风景很美,你忍不住下车看一看,后来虽然你还是赶到了某地,却不是准时到达。... 阅读全文
摘要:
1.Linux网络栈下两层实现 1.1简介 VLAN是网络栈的一个附加功能,且位于下两层。首先来学习Linux中网络栈下两层的实现,再去看如何把VLAN这个功能附加上去。下两层涉及到具体的硬件设备,日趋完善的Linux内核已经做到了很好的代码隔离,对网络设备驱动也是如此,如下图所示: 这里要注意的是,Linux下的网络设备net_dev并不一定都对应实际的硬件设备,只要注册一个s... 阅读全文