自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

深蓝的专栏

不积跬步无以至千里,不积小流无以成江海

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

原创 system strategies of Resources Deadlock

资源死锁一直是一个比较麻烦的问题,在以前的认知中最有效的且唯一的解决方法应该是程序设计者根据具体情况从程序逻辑上去解决。但最近突然惊奇的发现还可以从资源管理者的角度上去解决,可惜还不是十分有效。

2014-08-06 20:41:40 818

原创 The history of Graph Store(matrix, adjacency list, and orthogonal list)

在图论中涉及到了图存储相关的方案,但它们是怎么来的?按照自己的理解,尝试着分析了关于图存储的发展史。不一定完全正确,仅供参考。

2014-08-03 11:57:01 1469

原创 x86的ABI分析(函数实现原理)--part2

函数对于一种编程语言,就像细胞对于人一样重要。一个重要的问题是--在高级语言中的函数在底层机器语言上又是怎么实现的?(当然不同的处理器可能会有多种实现方式)在这篇文章中尝试着整理了一下在x86下函数这个概念在机器上的实现过程。主要包括传参,创建局部变量,函数调用等。(英文版)

2014-07-28 20:49:47 824

原创 x86的ABI分析(函数实现原理)--part1

函数对于一种编程语言,就像细胞对于人一样重要。一个重要的问题是--在高级语言中的函数在底层机器语言上又是怎么实现的?(当然不同的处理器可能会有多种实现方式)在这篇文章中尝试着整理了一下在x86下函数这个概念在机器上的实现过程。主要包括传参,创建局部变量,函数调用等。(英版)

2014-07-27 16:33:12 1976

原创 最短路径--Dijkstra算法原理分析

最近想要看一下图的Dijkstra算法,但很遗憾找到的文章都只是在介绍怎么使用,并没有给一种合适的证明。想了一下,那就自己来证明吧。在文章中将自己对该算法的疑问都列了出来,然后进行了解答。其中对Dijkstra算法的两个核心疑问的解答是工程量最大的,也许配合其中的动画链接效果会不错。在最后还制作了一个例子程序。(英文版)

2014-07-20 14:36:00 4706

原创 关于HuffmanCoding的简单分析

在这里,利用这篇文章将自己在学习Huffman编码过程中遇到的问题以及最后的解决方案都列了出来。可惜还没能解决所有的疑问,但还是被前辈们优美的设计思路所深深折服。文章前半部分是对自己一些疑问的解答,最后制作了一个简单的测试程序。(中式英文版)

2014-07-14 21:08:45 1168

原创 二叉树及其线索化分析

文章将自己在学习线索二叉树的过程中遇到过的疑问整理记录了下来,也都对最后的处理结论做了尽可能详细的描述。并对其中二叉树的两个重要性质做了详细的推导。虽然不能保证所有的推导都是正确的,但它们代表了自己目前的认知水平。另外在结尾还制作了一个简单的线索二叉树程序。

2014-07-12 15:34:45 834

原创 字符串查找算法-KMP

最近又重新学习了KMP算法,相比一般的暴力搜索,其对于“搜索陷阱”进行了优化处理。从而降低了时间复杂度。该算法最酷的地方在于准确找到了“搜索陷阱”的模板(or规律)。从而进行了特殊处理。

2014-07-07 12:54:26 838

原创 汉诺塔问题的递归求解

/*** Tower of Hanoi is a typical problem about dynamic programming. It resolve a big problem to a serices of smaller problem continuously, untill we get a set of basic operation.*/

2014-06-29 15:28:31 526

原创 表达式求解程序(CPP实现)

对于一个表达式如果只有四种基本运算符,那么是比较容易求解的,只需要简单的处理优先级关系就看可以了。但如果再加上括号运算符会不会使问题变的太复杂呢,毕竟括号的运算特性是修改其他运算符的优先级?在这里采用了一种取巧的方法,将括号运算模拟成一个阶梯,从而使问题又回到了简单的处理优先级关系的时代。

2014-06-28 13:25:50 851

原创 Merge-sort

#include #include #include #define MIN( x, y) ( (x)<(y)?(x):(y))typedef int INDEX;typedef class MergeSort { public: MergeSort( void); ~Merg

2014-06-24 21:32:25 515

原创 Quick-sort

#include #include #define ARR_LEN 15static int Arr[ ARR_LEN] = { 0,1,4,7,2,5,8,3,6,9, 7, 7, 8};static int Arr_back[ ARR_LEN];static int DF = 0;typedef int INDEX;sta

2014-06-24 21:26:40 420

原创 Heap-sort

#include #include using namespace std;typedef int INDEX;typedef class Node { public: INDEX GetParentInd( INDEX nInd); INDEX GetLChilInd( INDEX nInd); INDEX GetRChilInd( IND

2014-06-24 21:22:29 441

原创 常用排序算法时间复杂度和空间复杂度简析

前段时间将排序算法从新整理了一下,并对工作原理,时间复杂度,空间复杂度进行了一些简单分析。内容主要包括快速排序,堆排序,归并排序等三种常用排序算法。

2014-06-24 21:08:08 2159

原创 迷宫问题的C语言求解

在工作了一年以后,又拿起了久违的数据结构教材,将其中的迷宫问题重新求解了一遍。其实迷宫问题的算法早已经被介绍的太多了,所以就直接上源码了。在关键的地方加了一点自己的理解。(英文版)

2014-06-23 21:37:24 2097

原创 ELF解析(part one)

最近学习了ELF格式文件,在学习过程中产生过很多疑惑,也翻找了不少网上资源。期间经常会惊讶于设计者的思路。预计整个工程分成三个部分,这里是第一个部分,介绍了一些前期遇到的问题。因为这是这个月的最后一天,且特别想去赶5:50的“X战警-逆转未来”,所以就将未完品发了出来。

2014-05-31 17:01:15 1970

翻译 linux--函数劫持--基于LD_PRELOAD

最近在网上看到了一篇利用LD_PRELOAD实现函数拦截的文章,感觉受益匪浅(I'm new),就翻译了出来。里面除了介绍基础的使用方法外,还介绍了相关的使坏技术。

2014-05-31 13:01:47 10737

原创 linux驱动编程--RTC(part one)

最近制作了一个RTC驱动,按照面向对象的方式实现之后,有了一些收获就简单记录了下来以供参考

2014-05-06 21:07:05 842

原创 linux驱动编程--设备模型3--平台设备解析

按照前面理解的设备模型,今天又制作了一个。平台设备版本的 "hello world".

2014-04-17 20:29:25 944

原创 linux驱动编程--设备模型2

在前面学习了 kobject和 kset之后,就迫不及待的想开始“研究”设备模型了。它们的工作原理到底是什么,又是怎样组织自己的逻辑结构的?经过这几天的学习,感觉受益匪浅。所以就将自己的理解整理了下来

2014-04-15 21:56:49 800

原创 linux驱动编程--设备模型1

 最近学习设备模型的运行机制,进过书上和网上资料的训练,貌似已经修改出了自己的网络权值,所以写了下来并整理一下自己的思路。 之前的驱动程序由于硬件信息和逻辑操作是写在一起的,所以一个驱动只能适应一种平台。为了提高驱动程序的可移植性,就引出了设备模型。 那么现在面临的问题是:设备模型是怎么工作的?

2014-04-09 20:32:06 1029

翻译 有趣的小程序--统计系统中不同种类文件数量

在linux系统中有7中类型的文件:普通文件,目录,链接文件,字符设备文件,块设备文件,套接字文件,fifo文件。一般来说应该能猜到是普通文件和目录文件最多,但具体的数据又是多少?

2014-04-06 20:08:10 1352 1

原创 linux驱动编程--内存与I/O访问

(still a problem)

2014-03-25 21:48:07 965

原创 linux驱动编程--中断

处于改善中断处理效率,中断处理函数被分成了两部分:顶半部和底半部。底半部有三种实现方式:tasklet,工作队列和软中断。Tasklet        tasklet运行于软中断上下文,所以在其处理函数中不允许睡眠。其函数解析如下: /** 信息结构体*/ struct tasklet_struct { struct tasklet_struct *next; //信息

2014-03-22 15:47:22 814

原创 linux驱动例3--计时器,带阻塞功能,中断分段

在前面带阻塞功能计时器的基础上,再对中断进行分段处理。中断分段处理有两种常用的方式tasklet和工作队列。        之所以需要将一个中断处理过程分段是因为在处理普通中断时系统需要屏蔽其他中断(?否则可能可能产生混乱),这就导致了系统会对新到中断的响应有延迟。所以考虑了一种新的方式来处理这个问题:就是给中断挂一个可以允许新中断的尾巴;将必要的事在中断中处理,然后快速退出中断状态,把剩余的

2014-03-21 20:43:10 666

原创 linux驱动例1--计时器

1.制作一个定时器驱动#include #include #include #include #include #include #include #include #include #include #define DEV_NAME "new_timer"#define DEV_MAJOR 0#define DEV_MONITOR

2014-03-19 20:43:51 631

原创 linux驱动例2--带阻塞功能的计时器

在前面的基础上。希望添加一个等待队列,用于阻塞不能得到资源的进程们。在资源释放时,再从阻塞中恢复。#include #include #include #include #include #include #include #include #include #include #include #define DEV_NAME "new_tim

2014-03-19 20:42:10 737

原创 linux驱动编程--内核时钟浅析

模型:       为了能计时,且可以支持任意多个定时。内核需要使用定时器和中断资源,但内核采用了巧妙的结构,使得只用了一个定时器和中断就实现了上述需求。       内核将所有的定时需求做成哈希链表,然后计算两次定时需求之间的差值,根据定时之间的差值来设置底层定时器的计时时间。从而使得在只使用一个定时器的情况下可以同时满足大量的定时需求。 计时器向量表        在内核中为每

2014-03-14 20:28:10 610

原创 linux驱动编程--工作队列浅析

内核默认为每个cpu创建一个worker process,events/0;并在全局的工作队列上为其挂上了一个专属的链表()。工作会被挂到该链表上,由events/0取出来执行。centainly, except for this default worker process.User could create a new worker, too. and the kernel will help

2014-03-06 20:01:45 870

原创 linux驱动编程--异步通知与异步I/O

@signal for software is equal to @interrupt for hardware.(信号是软件上对于中断的模拟)

2014-03-02 16:47:39 794

原创 Linux驱动编程--阻塞控制

等待队列阻塞

2014-02-27 21:24:42 722

原创 linux驱动编程--等待队列浅析

之前查找等待队列资料的时候,对其工作原理一直不熟悉,今天再次查看源码时,收获颇丰。假设要制作一个fifo,用于不同进程间拷贝数据,如果该fifo提供阻塞功能,那么要考虑的下面一些情况:1).读操作时fifo里没有可读数据。2).写操作时fifo里已经写满了。下面是一个关于读的例子:void read(.......){ DECLARE_WAITQUEUE( wait, current)

2014-02-26 21:00:30 695

原创 linux驱动编程--几个重要函数及概念

cdev_initcdev_alloc register_chrdev_region()alloc_chrdev_region() cdev_addcdev_del cdev_delunregister_chrdev_region() /***/class_create()device_create()class_destroy()d

2014-02-11 21:29:38 709

原创 Linux驱动编程--字符设备文件注册

CreateClassDestroyClass

2014-02-07 20:12:23 808

原创 s3c2440简单驱动编程-led

OS      :linux        cpu     :s3c2440        开发板:TQ2440先制作一个驱动的基本构架:        找到外接硬件的对应管教:        现在开始根据手册查找开发板信息(这一步是开发板级信息),由于目标是控制led,故先去“TQ2440的底板原理图”查找管教信息。根据led的电路连接,查找到其对应的cpu管教为GPB5

2014-01-24 17:38:03 732

原创 linux2.6驱动编译-常见问题

1).建立了nfs挂载文件夹后,发现一从虚拟机下载资源,就会卡住。并提示 "nfs: server 200.200.200.153 not responding, still trying“。        可能是由于UDP服务在传输较大文件时不稳定造成,可以改用TCP服务        ifconfig eth0 200.200.200.149 up;        nfs -o n

2014-01-24 15:17:02 637

原创 Linux2.6驱动编译分析

驱动与内核相关,所以对驱动的编译来说,真正的编译者是内核的Makefile。可以从下面看到KERNELDIR ?= /linux-2.6.30.4# The current directory is passed to sub-makes as argumentPWD := $(shell pwd)CROSS_COMPILE = arm-linux-CC = $(CROSS_C

2014-01-21 19:29:15 516

空空如也

空空如也

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

TA关注的人

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