Pennant的日常
分享工作上的点点滴滴
上一页 1 2 3 4 5 6 ··· 8 下一页
摘要: 内核同步方法1.原子操作 原子操作可以保证指令以原子的方式执行——执行过程不被打断。内核提供了两组原子操作接口,一组针对整数进行操作,另一组针对单独的位进行操作。 针对整数的原子操作只能对 atomic_t 类型的数据进行处理。 除了原子整数操作外,内核还提供了一组针对位这一级数据进行操作的函数。位操作函数是对普通的内存地址进行操作的,它的参数是一个指针和一个位号,第0位是给定地址的最低有效位。 内核还提供了一组与上述操作对应的非原子位函数。非原子位函数与原子位函数的操作完全相同,但是前者不保证原子性,且其名字前缀多两个下划线。例如,与 set_bit 对应的非原子形式是 __se... 阅读全文
posted @ 2012-12-26 09:03 汝熹 阅读(336) 评论(0) 推荐(0) 编辑
摘要: 下半部和推后执行的工作4.tasklet tasklet是通过软中断实现的,它由两类软中断代表:HI_SOFTIRQ和TASKLET_SOFTIRQ。两者唯一区别在于前者优先于后者执行。 tasklet由tasklet_struct结构体表示,每个结构体代表一个tasklet,在<linux/interrupt.h>中定义:struct tasklet_struct { struct tasklet_struct *next; /* 链表中的下一个tasklet */ unsigned long state; /* tasklet的状态 ... 阅读全文
posted @ 2012-12-24 08:50 汝熹 阅读(412) 评论(0) 推荐(0) 编辑
摘要: 下半部和推后执行的工作1.下半部 下半部的任务就是执行与中断处理密切相关但中断处理程序本身不执行的工作,对于在上半部和下半部之间划分工作,尽管不存在某种严格的规则,但还是有一些提示可供借鉴: 1)如果一个任务对时间非常敏感,将其放在中断处理程序中执行。 2)如果一个任务和硬件相关,将其放在中断处理程序中执行。 3)如果一个任务要保证不被其他中断(特别是相同的中断)打断,将其放在中断处理程序中执行。 4)其他所有任务,考虑放置在下半部执行。 我们希望尽量减少中断处理程序中需要完成的工作量,因为在它运行的时候当前的中断线(或全局中断)都会被屏蔽,而缩短中断被屏蔽的时间对系统的响应能力和... 阅读全文
posted @ 2012-12-21 08:44 汝熹 阅读(352) 评论(0) 推荐(0) 编辑
摘要: 中断和中断处理程序1.中断 中断本质上是一种特殊的电信号,由硬件设备发向处理器。处理器接收到中断后,会马上向操作系统反映此信号的到来,然后由OS负责处理这些新到来的数据。硬件设备生成中断的时候并不考虑与处理器的时钟同步,内核随时可能因为新到来的中断而被打断。不同的设备对应的中断不同,都通过一个唯一的数字标识,称之为中断请求(IRQ)线。 在操作系统中,讨论中断就不得不提及异常。异常与中断不同,它在产生时必须考虑与处理器时钟同步。实际上,异常也常常称为同步中断。在处理器执行到由于编程失误而导致的错误指令的时候,或者是在执行期间出现特殊情况,必须靠内核来处理的时候,处理器就会产生一个异常。因为.. 阅读全文
posted @ 2012-12-19 08:55 汝熹 阅读(487) 评论(0) 推荐(0) 编辑
摘要: 进程调度1.策略 进程可以被划分为I/O消耗型和处理器消耗型。前者指进程的大部分时间用来提交I/O请求或是等待I/O请求,常处于可运行状态。后者把时间大多用在执行代码上,除非被抢占,否则一直不停地运行,调度器不应该经常让它们运行。 调度算法中最基本的一类就是基于优先级的调度。这是一种根据进程的价值和其对处理器时间的需求来对进程分级的想法。优先级高的进程先运行,低的后运行,相同优先级的进程按轮转方式进行调度。 Linux根据以上思想实现了一种基于动态优先级的调度方法。一开始,该方法先设置基本的优先级,然而它允许调度程度根据需要来加、减优先级。例如,如果一个进程在I/O等待上耗费的时间多于其运行时 阅读全文
posted @ 2012-12-17 08:51 汝熹 阅读(480) 评论(0) 推荐(0) 编辑
摘要: 进程管理1.进程描述符及任务结构 进程存放在叫做任务队列(task list)的双向循环链表中。链表中的每一项包含一个具体进程的所有信息,类型为task_struct,称为进程描述符(process descriptor),该结构定义在<linux/sched.h>文件中。 Linux通过slab分配器分配task_struct结构,这样能达到对象复用和缓存着色(cache coloring)的目的。另一方面,为了避免使用额外的寄存器存储专门记录,让像x86这样寄存器较少的硬件体系结构只要通过栈指针就能计算出task_struct的位置,该结构为thread_info,在文件< 阅读全文
posted @ 2012-12-15 08:58 汝熹 阅读(296) 评论(0) 推荐(0) 编辑
摘要: Linux内核开发的特点 相对于用户空间内的应用程序开发,内核开发存在很多的不同,最重要的差异包括以下几种: 1)内核编程时不能访问C库。 2)内核编程时必须使用GNU C。 3)内核编程时缺乏像用户空间那样的内存保护机制。 4)内核编程时浮点数很难使用。 5)内核只有一个很小的定长堆栈。 6)由于内核支持异步中断,抢占和SMP,因此必须时刻注意同步和并发。 7)要考虑可移植性的重要性。1.没有libc库 与用户空间的应用程序不同,内核不能链接使用标准C函数库(其他的那些库也不行)。最主要的原因在于速度和大小。虽然不能使用,但大部分常用的C库函数在内核中都已经得到实现。比如说操作字符串的函数组 阅读全文
posted @ 2012-12-13 09:16 汝熹 阅读(630) 评论(1) 推荐(0) 编辑
摘要: 四、WCF架构1. WCF架构的关键元素及其概念 Contracts and Description Contracts定义消息系统的各个方面,包括Data Contract,Message Contract,Service Contract。Data Contract是WCF中Service与Client之间用来交换的数据的格式定义,它采用Xml架构定义语言(XSD)来定义,使得Service和Client都能理解数据格式定义。消息协定能定义消息的特定部分,默认情况下,WCF的消息是固定格式的,但某些情况下,也可以使用Message Contract来自定义消息格式。 Service ... 阅读全文
posted @ 2012-11-09 08:43 汝熹 阅读(175) 评论(0) 推荐(0) 编辑
摘要: 一、契约 任何一个分布式应用程序,都会事先制定好数据交换规则,这个规则正是交换数据的双方(比如服务器端和客户端)能彼此理解对方的依据。在WCF中称之为契约(Contract)。1.契约的分类 1)用于定义服务操作的服务契约:Service Contract 这种级别的契约又包括两种:ServiceContract和OperationContract。 ServiceContract用于类或结构上,用于指示WCF此类或者结构能够被远程调用。 OperationContract用于类中的方法(Method)上,用于指示WCF该方法可被远程调用。[ServiceContrac... 阅读全文
posted @ 2012-11-06 08:57 汝熹 阅读(219) 评论(0) 推荐(1) 编辑
摘要: 1.1 Domain Model 创建一个模型来定义系统的业务职责及其变化范畴,模型元素是对应用领域的有用抽象,其角色和交互反映了该领域的工作流。 我们可以通过适当的方法来创建Domain Model,比如领域驱动设计和领域分析,还有一些专门表现领域变化的方法,如普遍性/多样性分析和特性建模等。领域相关的模式能进一步支持Domain Model的创建,它们可以提供该领域中公共抽象和工作重复采用的经典解决方案,包括这些解决方案可能的相应变体。1.2 Layers 不管软件系统不同部分之间有什么样的交互和耦合,我们都希望能对其进行独立的开发和改进,这可能跟系统的大小有关或者是上市时间方面的要求.. 阅读全文
posted @ 2012-10-30 08:48 汝熹 阅读(275) 评论(0) 推荐(0) 编辑
上一页 1 2 3 4 5 6 ··· 8 下一页