07 2012 档案

摘要:这个源文件是i386-pc-mingw32中的GCC 4.5.0下包含的。 1 * assert.h 2 3 * This file has no copyright assigned and is placed in the Public Domain. 4 5 * This file is a part of the mingw-runtime package. 6 7 * No warranty is given; refer to the file DISCLAIMER within the package. 8 9 *10 11 * Define the ... 阅读全文
posted @ 2012-07-30 14:10 软件小书童 阅读(1941) 评论(0) 推荐(0)
摘要:C语言中extern关键字详解内容清单:1. 用extern声明外部变量(1)在一个文件内声明的外部变量(2)在多个文件中声明外部变量(3)在多个文件中声明外部结构体变量2. 用extern声明外部函数3. 总结1. 用extern声明外部变量定义:外部变量是指在函数或者文件外部定义的全局变量。外部变量定义必须在所有的函数之外,且只能定义一次。(1) 在一个文件内声明的外部变量作用域:如果在变量定义之前要使用该变量,则在用之前加extern声明变量,作用域扩展到从声明开始,到本文件结束。例子:#include <stdio.h>int max(int x,int y); //函数提 阅读全文
posted @ 2012-07-26 13:50 软件小书童 阅读(249) 评论(0) 推荐(0)
摘要:Linux内核之红黑树作者:harveywang邮箱:harvey.perfect@gmail.com最近在学习linux内核的主要模块,遇到了红黑树数据结构,在经过了很长时间的一头雾水后,终于明白一点了。把自己的体会写下来和大家分享,同时欢迎指正。1、初识红黑树从网上搜索了许多红黑树的介绍,这些文章中主要介绍了红黑树的性质,然后就是红黑树的旋转如下示意图。左旋、右旋,旋转过程中爸爸变成了儿子,兄弟变成了孙子;红的变成黑的,黑的变成红的。经过一系列的旋转,就把我旋转的晕头转向了,脑子里搅成了一团浆糊。相信,没有学过二叉树的同学肯定会遇到和我一样窘况。2、曙光乍现一天,顶着一头圈圈的我(是头晕的 阅读全文
posted @ 2012-07-26 11:20 软件小书童 阅读(457) 评论(0) 推荐(0)
摘要:Linux内核之内存管理作者:harveywang邮箱:harvey.perfect@gmail.com把linux内存管理分为下面四个层面(一)硬件辅助的虚实地址转换(二)内核管理的内存相关(三)单个进程的内存管理(四)malloc软件(一)处理器硬件辅助的虚实地址转换(以x86为例)在x86中虚实地址转换分为段式转换和页转换。段转换过程是由逻辑地址(或称为虚拟地址)转换为线性地址;页转换过程则是将线性地址转换为物理地址。段转换示意图如下X86支持两种段,gdt和ldt(全局描述段表和局部描述符段表),在linux中只使用了4个全局描述符表,内核空间和用户空间分别两个gdt,分别对应各自的代 阅读全文
posted @ 2012-07-26 11:16 软件小书童 阅读(196) 评论(0) 推荐(0)
摘要:Linux内核之进程优先级作者:harveywang邮箱:harvey.perfect@gmail.com注:本文参考的内核代码版本为3.3.5在进程控制块定义中,如下,每个进程有4个优先级成员变量,往往给初学者造成一些困惑。下面分实时进程和普通进程看看他们都用了哪些优先级?struct task_struct{删除了无关的成员变量int prio, static_prio, normal_prio;unsigned int rt_priority;}实时进程的优先级在调用函数sched_setscheduler()设置实时进程优先级时,最终调用了下面的函数其中进程的rt_priority就等 阅读全文
posted @ 2012-07-26 11:06 软件小书童 阅读(343) 评论(0) 推荐(0)
摘要:Linux内核之CFS调度和组调度作者:harveywang邮箱:harvey.perfect@gmail.comLinux支持三种进程调度策略,分别是SCHED_FIFO、SCHED_RR和SCHED_NORMAL。Linux支持两种类型的进程,实时进程和普通进程。实时进程可以采用SCHED_FIFO和SCHED_RR调度策略;普通进程采用SCHED_NORMAL调度策略。本文主要讨论普通进程的调度算法,为了描述方便,后面章节中的“进程”指“普通进程”。从Linux2.6.23内核到目前最新的Linux3.3.5内核的普通进程(采用调度策略SCHED_NORMAL)采用了绝对公平调度算法,. 阅读全文
posted @ 2012-07-26 11:02 软件小书童 阅读(713) 评论(0) 推荐(0)
摘要:Linux内核之实时进程调度和组调度作者:harveywang邮箱:harvey.perfect@gmail.comLinux支持三种进程调度策略,分别是SCHED_FIFO、SCHED_RR和SCHED_NORMAL。Linux支持两种类型的进程,实时进程和普通进程。实时进程可以采用SCHED_FIFO和SCHED_RR调度策略;普通进程采用SCHED_NORMAL调度策略。Linux为实时进程划分了100个优先级,从0—99,0为最高优先级,99为最低实时优先级,请参考《linux内核之进程优先级》。为了实现O(1)调度算法,内核为每个优先级维护一个运行队列和一个DECLARE_BITMA 阅读全文
posted @ 2012-07-26 10:55 软件小书童 阅读(671) 评论(0) 推荐(0)
摘要:1、总体概述 我们都知道在PowerPC处理器e500系列内核MMU单元分为两级结构,L1和L2。L1包括I-L1VSP、I-L1TLB4K、D-L1VSP、D-L1TLB4K(前缀I指示指令,D指示数据。后缀VSP指示可以变大小页,TLB4K指示固定大小页,4Kbyte大小)。即在L1中指令和数据的页转换模块是独立的。L2中包括TLB1和TLB0,其中TLB1为可变大小的页,TLB0为固定大小的页(4Kbyte)。指令和数据共用L2的MMU模块。L1的页转换模块是L2页转换模块的cache。具体说L1的I-L1VSP和D-L1VSP是L2的TLB1的cache;L1的I-L1TLB4K和D. 阅读全文
posted @ 2012-07-26 10:51 软件小书童 阅读(383) 评论(0) 推荐(0)
摘要:1、kmalloc()/kfree()static __always_inline void *kmalloc(size_t size, gfp_t flags)内核空间申请指定大小的内存区域,返回内核空间虚拟地址。在函数实现中,如果申请的内存空间较大的话,会从buddy系统申请若干内存页面,如果申请的内存空间大小较小的话,会从slab系统中申请内存空间。有关buddy和slab,请参见《linux内核之内存管理.doc》gfp_t flags的选项较多。参考内核文件gfp.h。在函数kmalloc()实现中,如果申请的空间较小,会根据申请空间的大小从slab中获取;如果申请的空间较大,如超过 阅读全文
posted @ 2012-07-26 10:36 软件小书童 阅读(251) 评论(0) 推荐(0)
摘要:因网上已有很多介绍各种通信方式的示例代码,所以在本文中只是给出各种内核空间和用户空间通信方式的介绍说明。希望给像我一样的初学者提供一定的指导。因水平有限,欢迎各位批评指点。1概述Linux内核将这4G字节的空间分为两部分。将最高的1G字节(从虚拟地址0xC0000000到0xFFFFFFFF),供内核使用,称为“内核空间”。而将较低的3G字节(从虚拟地址0x00000000到0xBFFFFFFF),供各个进程使用,称为“用户空间“)。除了进程之间的通信外,在嵌入式设计中还经常需要进行内核空间和用户空间的信息交互。本文主要讨论内核空间和用户空间信息交互的方法。1.1处理器状态处理器总处于以下.. 阅读全文
posted @ 2012-07-26 10:31 软件小书童 阅读(328) 评论(0) 推荐(0)
摘要:本文主要是基于百度文库的《Linux2.4.30内核文件系统学习(多图).doc》和360doc的《Linux内核虚拟文件系统》修改而来,当然还参考了其他的一些文档,在此就不一一列出了。本来在看到这些文章后,都没有勇气再写点文件系统方面的东西了,这些文章实在太精彩了。最后还是鼓足勇气决定把整理的资料增加了一点自己的理解写下来,主要目的是让各位高手看看我的理解是否正确,另外就是备忘。1、如何描述一个文件我们先看看一个文件在内存和磁盘上是如何描述的。每个文件至少要有一个数据结构存放该文件的信息,包括uid、gid、flag、文件长度、文件内容存放位置的数据结构等。在Linux中这个数据结构被称为i 阅读全文
posted @ 2012-07-26 10:24 软件小书童 阅读(152) 评论(0) 推荐(0)
摘要:四、CFS。 CFS现在还是非常新的调度实现,并且本人水平也十分有限,有鉴于此,这里很可能存在不当的地方甚至错误,权当抛砖引玉,不妥之处还请诸位有识之士不吝指正。 在讨论CFS之前,我们先回顾一下现有的调度器实现:这是一个巧妙的双优先级数组方案。为了尽量避免出现“过期数组”中的任务出现饥饿现象,内核使用了一些启发式的方法判断是否出现了饥饿。在绝大多数情况下,这个实现给了我们非常好的交互性体验。不过,可惜在个别情况下仍会出现明显的饥饿现象,更致命的是,这个问题是完全可以重现的。躲躲闪闪修修补补终究不是解决问题之道。用Ingo的话说,问题的根源在于调度器没有一种机制可以跟踪使用者的“眼球”--从. 阅读全文
posted @ 2012-07-24 13:43 软件小书童 阅读(113) 评论(0) 推荐(0)
摘要:一、回顾。 上次鼠眼初看Linux调度器时已有一年有余的光景了。这一年多的时间里,Linux内核中许多地方发生了重要的变化,比如引进了KVM等。相对而言,任务调度这部分变动算是非常小了:其中比较显著的就是增加了优先级继承支持。但若仅有这些变动的话,从量上还不足以撑起这样一篇文章。 在LKML(Linux Kernel Mail List)上,前阵子有过几个回合关于任务调度的热烈讨论:CFS vs RSDL/SD。CFS,即“完全公平调度”,这种方法彻底以时间和系统负载作为参照,完全抛弃了原有调度方案中的双优先级数组、甚至时间片的概念。RSDL/SD是我们上次介绍的Staircase调度的演化. 阅读全文
posted @ 2012-07-24 13:41 软件小书童 阅读(155) 评论(0) 推荐(0)
摘要:一、耗子vs Linux ? “鼠目寸光”,应该是个暴光率挺高的成语了,常用来说某人看事情没有深度,看不透本质。毫无疑问,这是一个贬义100%的词。但不管是认识什么未知事物,都一定会有个“寸光”的过程,如果有进而持续不断地努力,才可能做到对之了如直掌。 Linux内核是个复杂的软件,作为一个成熟的操作系统核心部件,最可贵的就是它的开放源码。我想,有着“忧国忧民”抱负的程序员恐怕每天都会有“我要读懂它”的冲动。正是在这股“贼心”的驱使下,我开始了对Linux内核的学习。一路走来,我还远不能说是已经AtoZ了Linux内核,甚至不敢确定自己是不是已摆脱了“啮齿动物”的行列。但在领略其中的独特风.. 阅读全文
posted @ 2012-07-24 13:40 软件小书童 阅读(126) 评论(0) 推荐(0)
摘要:前言:在linux源代码中有个头文件为list.h.很多linux下的源代码都会使用这个头文件,它里面定义了一个结构,以及定义了和其相关的一组函数,这个结构是这样的: struct list_head{ struct list_head *next, *prev; }; 那么这个头文件又是有什么样的作用呢,这篇文章就是用来解释它的作用,虽然这是linux下的源代码,但对于学习C语言的人来说,这是算法和平台没有什么关系。 一、双向链表 学习计算机的人都会开一门课程《数据结构》,里面都会有讲解双向链表的内容。 什么是双向链表,它看起来是这样的: struct dlist { int no; voi 阅读全文
posted @ 2012-07-22 19:48 软件小书童 阅读(726) 评论(0) 推荐(0)
摘要:前台开发,很多人喜欢用JQuery,但是在做后台管理系统,特别是企业管理系统,例如WEB进销存系统等,很多人都会选择ExtJS,因为ExtJS提供了非常多的UI界面,并且非常友好。我要告诉大家,现在JQuery也有一个很好的UI插件了,几乎完全可以替代ExtJS,下面来看看对比:上图是ExtJS和E... 阅读全文
posted @ 2012-07-20 09:35 软件小书童 阅读(154) 评论(0) 推荐(0)