摘要: 在前一章也提到过,之所以中断会分成上下两部分,是由于中断对时限的要求非常高,需要尽快的响应硬件。主要内容:中断下半部处理实现中断下半部的机制总结中断下半部的实现中断实现示例1. 中断下半部处理那么对于一个中断,如何划分上下两部分呢?哪些处理放在上半部,哪些处理放在下半部?这里有一些经验可供借鉴:如果一个任务对时间十分敏感,将其放在上半部如果一个任务和硬件有关,将其放在上半部如果一个任务要保证不被其他中断打断,将其放在上半部其他所有任务,考虑放在下半部2. 实现中断下半部的机制实现下半部的方法很多,随着内核的发展,产生了一些新的方法,也淘汰了一些旧方法。目前使用最多的是以下3中方法2.1 软中断 阅读全文
posted @ 2013-04-25 17:54 Marineking 阅读(246) 评论(0) 推荐(0) 编辑
摘要: 中断处理一般不是纯软件来实现的,需要硬件的支持。通过对中断的学习有助于更深入的了解系统的一些底层原理,特别是驱动程序的开发。主要内容:什么是中断中断类型中断相关函数中断处理机制中断控制方法总结1. 什么是中断为了提高CPU和外围硬件(硬盘,键盘,鼠标等等)之间协同工作的性能,引入了中断的机制。没有中断的话,CPU和外围设备之间协同工作可能只有轮询这个方法:CPU定期检查硬件状态,需要处理时就处理,否则就跳过。当硬件忙碌的时候,CPU很可能会做许多无用功(每次轮询都是跳过不处理)。中断机制是硬件在需要的时候向CPU发出信号,CPU暂时停止正在进行的工作,来处理硬件请求的一种机制。2. 中断类型中 阅读全文
posted @ 2013-04-25 17:53 Marineking 阅读(194) 评论(0) 推荐(0) 编辑
摘要: 内核数据结构贯穿于整个内核代码中,这里介绍4个基本的内核数据结构。利用这4个基本的数据结构,可以在编写内核代码时节约大量时间。主要内容:链表队列映射红黑树1. 链表链表是linux内核中最简单,同时也是应用最广泛的数据结构。内核中定义的是双向链表。1.1 头文件简介内核中关于链表定义的代码位于: include/linux/list.hlist.h文件中对每个函数都有注释,这里就不详细说了。其实刚开始只要先了解一个常用的链表操作(追加,删除,遍历)的实现方法,其他方法基本都是基于这些常用操作的。1.2 链表代码的注意点在阅读list.h文件之前,有一点必须注意:linux内核中的链表使用方法和 阅读全文
posted @ 2013-04-25 17:52 Marineking 阅读(264) 评论(0) 推荐(0) 编辑
摘要: 主要内容:什么是系统调用Linux上的系统调用实现原理一个简单的系统调用的实现1. 什么是系统调用简单来说,系统调用就是用户程序和硬件设备之间的桥梁。用户程序在需要的时候,通过系统调用来使用硬件设备。系统调用的存在,有以下重要的意义:1)用户程序通过系统调用来使用硬件,而不用关心具体的硬件设备,这样大大简化了用户程序的开发。 比如:用户程序通过write()系统调用就可以将数据写入文件,而不必关心文件是在磁盘上还是软盘上,或者其他存储上。2)系统调用使得用户程序有更好的可移植性。 只要操作系统提供的系统调用接口相同,用户程序就可在不用修改的情况下,从一个系统迁移到另一个操作系统。3)系统调用使 阅读全文
posted @ 2013-04-25 17:51 Marineking 阅读(259) 评论(0) 推荐(0) 编辑
摘要: 主要内容:什么是调度调度实现原理Linux上调度实现的方法调度相关的系统调用1. 什么是调度现在的操作系统都是多任务的,为了能让更多的任务能同时在系统上更好的运行,需要一个管理程序来管理计算机上同时运行的各个任务(也就是进程)。这个管理程序就是调度程序,它的功能说起来很简单:决定哪些进程运行,哪些进程等待决定每个进程运行多长时间此外,为了获得更好的用户体验,运行中的进程还可以立即被其他更紧急的进程打断。总之,调度是一个平衡的过程。一方面,它要保证各个运行的进程能够最大限度的使用CPU(即尽量少的切换进程,进程切换过多,CPU的时间会浪费在切换上);另一方面,保证各个进程能公平的使用CPU(即防 阅读全文
posted @ 2013-04-25 17:45 Marineking 阅读(285) 评论(0) 推荐(0) 编辑
摘要: 进程是所有操作系统的核心概念,同样在linux上也不例外。主要内容:进程和线程进程的生命周期进程的创建进程的终止1. 进程和线程进程和线程是程序运行时状态,是动态变化的,进程和线程的管理操作(比如,创建,销毁等)都是有内核来实现的。Linux中的进程于Windows相比是很轻量级的,而且不严格区分进程和线程,线程不过是一种特殊的进程。所以下面只讨论进程,只有当线程与进程存在不一样的地方时才提一下线程。进程提供2种虚拟机制:虚拟处理器和虚拟内存每个进程有独立的虚拟处理器和虚拟内存,每个线程有独立的虚拟处理器,同一个进程内的线程有可能会共享虚拟内存。内核中进程的信息主要保存在task_struct 阅读全文
posted @ 2013-04-25 17:44 Marineking 阅读(297) 评论(0) 推荐(0) 编辑
摘要: 在尝试内核开发之前,需要对内核有个整体的了解。主要内容:获取内核源码内核源码的结构编译内核的方法内核开发的特点1. 获取内核源码内核是开源的,所有获取源码特别方便,参照以下的网址,可以通过git或者直接下载压缩好的源码包。http://www.kernel.org2. 内核源码的结构目录说明arch特定体系结构的代码block块设备I/O层crypo加密APIDocumentation内核源码文档drivers设备驱动程序firmware使用某些驱动程序而需要的设备固件fsVFS和各种文件系统include内核头文件init内核引导和初始化ipc进程间通信代码kernel像调度程序这样的核心子 阅读全文
posted @ 2013-04-25 17:44 Marineking 阅读(248) 评论(0) 推荐(0) 编辑
摘要: 本篇简单介绍内核相关的基本概念。主要内容:单内核和微内核内核版本号1. 单内核和微内核原理优势劣势单内核整个内核都在一个大内核地址空间上运行。1. 简单。2. 高效:所有内核都在一个大的地址空间上,所以内核各个功能之间的调用和调用函数类似,几乎没有性能开销。一个功能的崩溃会导致整个内核无法使用。微内核内核按功能被划分成各个独立的过程。每个过程独立的运行在自己的地址空间上。1. 安全:内核的各种服务独立运行,一种服务挂了不会影响其他服务。内核各个服务之间的调用涉及进程间的通信,比较复杂且效率低。Linux的内核虽然是基于单内核的,但是经过这么多年的发展,也具备微内核的一些特征。(体现了Linux 阅读全文
posted @ 2013-04-25 17:42 Marineking 阅读(184) 评论(0) 推荐(0) 编辑
摘要: 教你透彻了解红黑树作者July2010年12月29日------------------本文参考:Google、算法导论、STL源码剖析、计算机程序设计艺术。本人声明:个人原创,转载请注明出处。更多请参考:http://blog.csdn.net/v_JULY_v/archive/2010/12/29/6105630.aspx详情,参见MyBLog:http://blog.csdn.net/v_JULY_v一、红黑树的介绍先来看下算法导论对R-BTree的介绍:红黑树,一种二叉查找树,但在每个结点上增加一个存储位表示结点的颜色,可以是Red或Black。通过对任何一条从根到叶子的路径上各个结点 阅读全文
posted @ 2013-04-25 16:35 Marineking 阅读(223) 评论(0) 推荐(0) 编辑
摘要: 转自:http://www.doc88.com/p-388777975014.html 阅读全文
posted @ 2013-04-25 16:32 Marineking 阅读(146) 评论(0) 推荐(0) 编辑