上一页 1 ··· 43 44 45 46 47 48 49 50 51 ··· 54 下一页
摘要: 系统中有很多与时间相关的程序(比如定期执行的任务,某一时间执行的任务,推迟一段时间执行的任务),因此,时间的管理对于linux来说非常重要。主要内容:系统时间定时器定时器相关概念定时器执行流程实现程序延迟的方法定时器和延迟的例子1. 系统时间系统中管理的时间有2种:实际时间和定时器。1.1 实际时间实际时间就是现实中钟表上显示的时间,其实内核中并不常用这个时间,主要是用户空间的程序有时需要获取当前时间,所以内核中也管理着这个时间。实际时间的获取是在开机后,内核初始化时从RTC读取的。内核读取这个时间后就将其放入内核中的 xtime 变量中,并且在系统的运行中不断更新这个值。注:RTC就是实时时 阅读全文
posted @ 2013-05-10 07:56 wang_yb 阅读(11801) 评论(1) 推荐(2) 编辑
摘要: 内核中提供了多种方法来防止竞争条件,理解了这些方法的使用场景有助于我们在编写内核代码时选用合适的同步方法,从而即可保证代码中临界区的安全,同时也让性能的损失降到最低。主要内容:原子操作自旋锁读写自旋锁信号量读写信号量互斥体完成变量大内核锁顺序锁禁止抢占顺序和屏障总结1. 原子操作原子操作是由编译器来保证的,保证一个线程对数据的操作不会被其他线程打断。原子操作有2类:原子整数操作,有32位和64位。头文件分别为和原子位操作。头文件 原子操作的api很简单,参见相应的头文件即可。原子操作头文件与具体的体系结构有关,比如x86架构的相关头文件在 arch/x86/include/asm/*.h2. 阅读全文
posted @ 2013-05-01 11:16 wang_yb 阅读(14421) 评论(9) 推荐(5) 编辑
摘要: 存在共享资源(共享一个文件,一块内存等等)的时候,为了防止并发访问时共享资源的数据不一致,引入了同步机制。主要内容:同步的概念同步的方法-加锁死锁锁的粒度1. 同步的概念了解同步之前,先了解另外2个概念:临界区 - 也称为临界段,就是访问和操作共享数据的代码段。竞争条件 - 2个或2个以上线程在临界区里同时执行的时候,就构成了竞争条件。所谓同步,其实防止在临界区中形成竞争条件。如果临界区里是原子操作(即整个操作完成前不会被打断),那么自然就不会出竞争条件。但在实际应用中,临界区中的代码往往不会那么简单,所以为了保持同步,引入了锁机制。2. 同步的方法-加锁为了给临界区加锁,保证临界区数据的同步 阅读全文
posted @ 2013-04-24 17:56 wang_yb 阅读(5351) 评论(5) 推荐(1) 编辑
摘要: 在前一章也提到过,之所以中断会分成上下两部分,是由于中断对时限的要求非常高,需要尽快的响应硬件。主要内容:中断下半部处理实现中断下半部的机制总结中断下半部的实现中断实现示例1. 中断下半部处理那么对于一个中断,如何划分上下两部分呢?哪些处理放在上半部,哪些处理放在下半部?这里有一些经验可供借鉴:如果一个任务对时间十分敏感,将其放在上半部如果一个任务和硬件有关,将其放在上半部如果一个任务要保证不被其他中断打断,将其放在上半部其他所有任务,考虑放在下半部2. 实现中断下半部的机制实现下半部的方法很多,随着内核的发展,产生了一些新的方法,也淘汰了一些旧方法。目前使用最多的是以下3中方法2.1 软中断 阅读全文
posted @ 2013-04-23 11:18 wang_yb 阅读(13772) 评论(3) 推荐(8) 编辑
摘要: 中断处理一般不是纯软件来实现的,需要硬件的支持。通过对中断的学习有助于更深入的了解系统的一些底层原理,特别是驱动程序的开发。主要内容:什么是中断中断类型中断相关函数中断处理机制中断控制方法总结1. 什么是中断为了提高CPU和外围硬件(硬盘,键盘,鼠标等等)之间协同工作的性能,引入了中断的机制。没有中断的话,CPU和外围设备之间协同工作可能只有轮询这个方法:CPU定期检查硬件状态,需要处理时就处理,否则就跳过。当硬件忙碌的时候,CPU很可能会做许多无用功(每次轮询都是跳过不处理)。中断机制是硬件在需要的时候向CPU发出信号,CPU暂时停止正在进行的工作,来处理硬件请求的一种机制。2. 中断类型中 阅读全文
posted @ 2013-04-19 11:38 wang_yb 阅读(10780) 评论(0) 推荐(5) 编辑
摘要: 委托是.net中实现回调机制的一种重要技术,尤其在编写服务端程序的时候,更是频繁使用委托。主要内容:委托本质委托链动态委托1. 委托本质委托本质其实就是一个类,基本上在可以定义类的地方都可以定义委托,C#中委托的写法其实只是C#的语法糖。如下定义个委托:using System;namespace delegate_test{ internal delegate int Sum(int a, int b);}用ILSpy可以发现对应的IL代码如下:.class private auto ansi sealed delegate_test.Sum extends [mscorlib]... 阅读全文
posted @ 2013-04-18 20:52 wang_yb 阅读(1234) 评论(2) 推荐(0) 编辑
摘要: 内核数据结构贯穿于整个内核代码中,这里介绍4个基本的内核数据结构。利用这4个基本的数据结构,可以在编写内核代码时节约大量时间。主要内容:链表队列映射红黑树1. 链表链表是linux内核中最简单,同时也是应用最广泛的数据结构。内核中定义的是双向链表。1.1 头文件简介内核中关于链表定义的代码位于: i... 阅读全文
posted @ 2013-04-16 13:21 wang_yb 阅读(22394) 评论(10) 推荐(6) 编辑
摘要: 主要内容:区别的介绍代码演示区别建议1. 区别的介绍我们在平时的编码中javascript中经常会用到[return false;]语句来阻止事件的向上传递,其实[return false;]语句包含了2层意思:阻止触发事件的元素的默认动作(比如说一个link(<a href="http://www/baidu.com"></a>),它的默认动作就是迁移到baidu首页)阻止触发事件的元素向上传递事件由于[return false;]包含了2个意思,所以在使用时首先要明确上面的2个阻止是否符合我们的预期。如果我们在只想阻止元素的默认动作或者只想阻止元 阅读全文
posted @ 2013-04-11 16:37 wang_yb 阅读(4682) 评论(0) 推荐(2) 编辑
摘要: 主要内容:什么是系统调用Linux上的系统调用实现原理一个简单的系统调用的实现1. 什么是系统调用简单来说,系统调用就是用户程序和硬件设备之间的桥梁。用户程序在需要的时候,通过系统调用来使用硬件设备。系统调用的存在,有以下重要的意义:1)用户程序通过系统调用来使用硬件,而不用关心具体的硬件设备,这样大大简化了用户程序的开发。 比如:用户程序通过write()系统调用就可以将数据写入文件,而不必关心文件是在磁盘上还是软盘上,或者其他存储上。2)系统调用使得用户程序有更好的可移植性。 只要操作系统提供的系统调用接口相同,用户程序就可在不用修改的情况下,从一个系统迁移到另一个操作系统。3)系统调用使 阅读全文
posted @ 2012-09-17 09:58 wang_yb 阅读(12962) 评论(0) 推荐(2) 编辑
摘要: 主要内容:什么是调度调度实现原理Linux上调度实现的方法调度相关的系统调用1. 什么是调度现在的操作系统都是多任务的,为了能让更多的任务能同时在系统上更好的运行,需要一个管理程序来管理计算机上同时运行的各个任务(也就是进程)。这个管理程序就是调度程序,它的功能说起来很简单:决定哪些进程运行,哪些进程等待决定每个进程运行多长时间此外,为了获得更好的用户体验,运行中的进程还可以立即被其他更紧急的进程打断。总之,调度是一个平衡的过程。一方面,它要保证各个运行的进程能够最大限度的使用CPU(即尽量少的切换进程,进程切换过多,CPU的时间会浪费在切换上);另一方面,保证各个进程能公平的使用CPU(即防 阅读全文
posted @ 2012-09-04 16:10 wang_yb 阅读(12708) 评论(0) 推荐(5) 编辑
上一页 1 ··· 43 44 45 46 47 48 49 50 51 ··· 54 下一页