自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

ars longa

vita brevis

  • 博客(17)
  • 收藏
  • 关注

原创 Linux内核中C和汇编使用技巧集锦 —— 持续更新

本文主要是用来存放Linux-3.1.1内核中有关C语言和汇编的使用技巧。在此所记录的一些技巧将会帮助有语言基础的童鞋写出更富艺术性和创造力的代码:-) 。需要注意的是,Linux内核采用GCC编译器进行编译并使用了GCC中的很多扩展特性,所以这些代码并不保证能在其他平台如VC++/DEV-C++中使用。C语言:Const.h:#define __AC(X,Y) (X##

2012-01-01 16:34:09 7114

转载 长度是怎样炼成的

全文共分如下四个部分:一、关于无穷(▼)二、测度的建立(▼)三、长度的意义(▼)四、若干注记(▼)以下为文章内容。文章中的有些观点博主持保留意见,但其中有一段对话特别有意思,文章总体来看还是非常不错的。应小乐之请写的一个东西,其目的是为了回答以下问题:点没有长度和面积,为什么由点组成的线和面会具有长度和面积?“长度”“面积”这些词汇究竟是在怎样的意义上被使用的?有的

2012-08-07 00:15:52 5327

原创 探本溯源——深入领略Linux内核绝美风光之系统启动篇(四)

在完成控制台初始化之后,可以看到在arch\x86\boot\Main.c文件的main主函数中接着执行if (cmdline_find_option_bool("debug")),这条if判断语句首先调用cmdline_find_option_bool函数在内核命令行中查找"debug"选项,该函数的实现和在系统启动篇(三)[上]一文中剖析过的cmdline_find_option函数非常相似,

2012-08-03 16:19:37 9197 7

原创 x86—EFLAGS寄存器详解

鉴于EFLAGS寄存器的重要性,所以将这一部分内容从处理器体系结构及寻址模式一文中单独抽出另成一文,这部分内容主要来自Intel Developer Mannual,在后续的内核系列中遇到的许多和EFLAGS寄存器有关的内容将直接从本文引用。众所周知,IA-32体系结构为通用系统(general system)提供了16个基本的程序执行寄存器:包含一些通用目的寄存器(General-purpo

2012-07-22 23:04:45 71906 7

原创 【连载】系统启动篇(三)[下]——控制台初始化续

接上文:系统启动篇(三)[上]在计算机中,用于数据传输的方式总共分为两种:①串行通信(Serial Communication),传输数据时只用一根线——按位发送和接受字节,速度慢但能够实现远距离通信,使用串行端口的设备有鼠标和USB等。②并行通信(Parallel Communication),使用多条线将每个数据的二进制位同时进行传输,传输速度较快但因为存在干扰而不能实现远距离通信

2012-06-22 23:51:28 11643 2

原创 系统启动篇(三)[上]

进入main函数后,Linux内核执行硬件检测及初始化工作,即便在此之前BIOS已经对大部分硬件设备进行了相应的初始化,然而Linux并不依赖于BIOS,而是以特定的方式重新初始化相关设备,这样做的目的是为了增强可移植性及健壮性。需要强调的一点是,此时C语言仍旧运行在实模式状态下。拷贝启动参数进入arch\x86\boot\Main.c文件的main函数后,做的第一件事就是将从Ke

2012-05-19 23:49:11 7669

原创 探本溯源——深入领略Linux内核绝美风光之系统启动篇(二)

在前文结尾处我们提到内核映像的加载是由专用的bootloader比如LILO或是GRUB来实现的,而在x86架构下Linux内核通常使用其中之一的GRUB,它通过执行initrd文件来识别内核映像所在的文件系统进而执行加载,然而有一个需要注意的问题是,并非所有的物理地址空间对内核而言都是可用的,比如其中的某个物理地址范围可能被映射为I/O设备的共享内存,也可能其中的一个物理页框存放着BIOS数据,

2012-04-21 01:43:20 14652 9

原创 探本溯源——深入领略Linux内核绝美风光之系统启动篇(一)

从拿到Linux3.1.1版内核源码并搭建好阅读环境开始,到现在大约已经徘徊了两个多月的时间,期间google了大大小小的文章,才刚刚理清了些许思路并找到了阅读的切入口。对于内核初学者来说一个好的指导比什么都重要,有关Linux内核学习的方法论可以参考fudan_abc写的Linux内核修炼之道,作者以其深厚的内核功底加上诙谐幽默的文字对读者娓娓道来,这样的感染力使得我几乎是一口气不断的看完了整个

2012-03-14 00:55:53 20168 4

原创 解构公共子串及K阶马尔可夫随机文本

搜索是一个常谈常新的话题,不仅有对数值型数据的搜索,更多的时候还有对字符类型的数据进行搜索的要求。比如常用的各大搜索引擎都是通过获取用户所输入的字符型数据,之后根据引擎自身所采用的算法将输入与网页数据库中存储的信息匹配,最后将这些信息对应的网页链接返回给用户,本文介绍内容之一的公共子串匹配算法就属于文本匹配算法之一。另外计算机科学在分子生物学中一个重要的应用领域即为比对(alignment),打个

2012-02-19 00:52:18 9336 5

原创 浅谈散列

通俗的说,程序是能够完成既定目标的具有特定逻辑组织形式的指令集序列。既然有现实的需求,那么我们知道外界环境必然会给予程序某些特定形式的“输入”,然而在机器的内部,这种“输入”将转换为数据的形式,继而这就要求我们为用以描述现实世界需求的数据建立一个结构化的模型,使其能够被机器指令高效的处理。通常,对于数据的处理无外乎以下几种:读取/更新/删除数据项,或者插入新项,其中除插入外其他几种操作均要求对集合

2012-01-26 22:09:19 13529 1

原创 排序大集锦(三):基于随机访问下标的排序

基于数组中元素之间的比较的排序算法被称为比较排序。其基本思想非常简单,假定在待排序数组a[0..n-1]中存在任意两个元素a[i]及a[j],若a[i]≥a[j],那么在最终的序列中a[i]必定在a[j]之后。对于这类算法,实际可以通过决策树来简单描述其工作过程,考虑一个具有三个元素的数组a[0..2],比较过程如下图所示:如上图所示,在由决策树所得到的解空间中总共有3!=6种结果

2012-01-06 18:32:18 4636

原创 深入详解保护模式下的内存分页机制

386及更高型号处理器使用内存分页机制,这使得同一个线性地址可以被映射为多个物理地址,这种映射是通过分页单元这一特殊的硬件电路实现的。通常程序中所使用的线性地址是由链接器帮我们产生的,而操作系统通过维护每个进程私有的页目录和页表实现线性地址与物理地址之间的转换,转换过程对于进程来说是透明的。此外正如保护模式下的段寄存器提供对整个段的访问控制一样,分页单元在更细粒度的页级层面上提供对整个页的保护机制

2011-12-30 17:13:58 19018 5

原创 初探处理器体系结构及寻址模式

由8086/8088、x86、Pentium发展到core系列短短40年间,处理器的时钟频率几乎已接近极限,尽管如此,自从86年Intel推出386至今除了增加一些有关流媒体的指令如mmx/sse之外,其他新增的大多数指令都可以从最初的指令集中组合实现同样的功能,整个编程模型维持了约有20多年。1、处理器体系结构下的编程模型首先概要的介绍下程序设计模型:图1-1

2011-12-17 20:22:01 8745

原创 排序大集锦(二):N叉堆排序及优先级队列

首先需要明白何谓“堆”。逻辑上它是一种特殊的树形结构,而其物理实现仅仅是一维数组,如下所示:上图中节点中的数表示元素的索引,将索引从1开始而不是0,可以使得整棵树从当前节点获得其孩子节点的操作对于根节点来说也是适用的,而额外“浪费”的这个空间可以用做哨兵使得比较操作的次数更少。可简单得出两点结论:①除顶层与底层之外,每一层的节点数与上层节点数的比值固定。②最底层的叶子节点尽可能

2011-12-08 22:33:32 5124

原创 排序大集锦(一):构建健壮的快速排序

文章标题虽然冠名为“构建健壮的快速排序”,但本文将由浅入深逐步介绍三种排序方法,分别为:插入排序、归并排序以及快速排序,最后我们将仔细分析各个排序的优缺点,汲取各种排序之精华,去其中之糟粕,构建出一个基于比较的健壮的快速排序,所构建出的算法若不考虑通用接口的设计,则将远远快于C中的qsort快排库函数。由于升序和降序的原理相同,故在整个排序系列中将按照升序的方式进行分析。在进入正文之前,首先需要解

2011-11-04 23:37:24 4980 1

原创 模式识别-查找向量中元素之和最大的连续子向量

Dennis Ritchie的主页:http://cm.bell-labs.com/who/dmr/index.html“他出生,他工作,他走了。” ——海德格尔10.9.他走了,在此缅怀一下,感谢他做出的杰出贡献。这个系列最初的几篇文章主要注重的是算法的复杂度分析和一些设计方面需要考虑的东西,问题本身不会太难,但随着复杂度分析的深入理解和掌握将逐渐面向高级数据结构(堆、树

2011-10-16 23:59:17 6327

原创 向量循环移位之高效实现

问题:n个元素的向量V循环移位(以左移为例)i个位置,例如12345循环移动2个位置得到34512.问题本身非常简单,以至于我们一看到问题就能想到对应的解决策略:申请i个字节的动态存储,将向量区间[0,i-1]的i个元素存储至临时存储器,之后将[i,n]的n-i+1个元素向左移动i个位置,并将临时存储器中的i个元素写回原向量区间中[n-i+1,n]。但如果我们强加一些限制:在现有可申请

2011-09-25 00:00:03 8897 2

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除