- 博客(14)
- 资源 (6)
- 收藏
- 关注
原创 关于回溯算法的递归与非递归解法
<br />摘要:本文简要描述了回溯算法的基本思路,并给出了几个典型实例的源码<br />关键字:回溯,搜索,非递归,全排列,组合,N皇后,整数划分,0/1背包<br />回溯是按照某种条件在解空间中往前试探搜索,若前进中遭到失败,则回过头来另择通路继续搜索。<br />符号声明:<br />解空间:[a1,a2,a3,...,an];<br />x[k]为解空间元素的索引, 0 <= x[k] < n;k为数组x的索引;<br />a[x[0~n-1]]表示一组解。<br />//判断解空间中的a[x[k
2011-05-30 16:35:00 8236
转载 linux内存管理
关于页面的使用<br />在之前的一些文章中,我们了解到linux内核会在很多情况下分配页面。<br />1、内核代码可能调用alloc_pages之类的函数,从管理物理页面的伙伴系统(管理区zone上的free_area空闲链表)上直接分配页面(见《linux内核内存管理浅析》)。比如:驱动程序可能用这种方式来分配缓存;创建进程时,内核也是通过这种方式分配连续的两个页面,作为进程的thread_info结构和内核栈;等等。从伙伴系统分配页面是最基本的页面分配方式,其他的内存分配都是基于这种方式的;<br
2011-05-26 17:42:00 1095
转载 关于全排列组合算法
全排列是将一组数按一定顺序进行排列,如果这组数有n个,那么全排列数为n!个。现以{1, 2, 3, 4, 5}为例说明如何编写全排列的递归算法。1、首先看最后两个数4, 5。 它们的全排列为4 5和5 4, 即以4开头的5的全排列和以5开头的4的全排列。由于一个数的全排列就是其本身,从而得到以上结果。2、再看后三个数3, 4, 5。它们的全排列为3 4 5、3 5 4、 4 3 5、 4 5 3、 5 3 4、 5 4 3 六组数。即以3开头的和4,5的全排列的组合、以4开头的和3,5的全排列的组合和以5开
2011-05-25 11:22:00 1779
转载 KMP算法研究
KMP算法,网上有很多版本,我看了一些,大都不太满意。所以自己写了一个,跟网上的都不一样。但KMP算法的思路肯定是一样的(毕竟这算法是人家想出来的,我只是用了我个人的风格去实现,愿多提宝贵意见)。 其实KMP算法很简单,书上和网上的讲解大多都力求精细,我觉得这只能做个参考。初学者一般还是要有人来点拨和自己揣摩。现在,我搞懂了KMP算法,我就可以说出KMP算法的要害。好啦,废话少说,转入正题。 KMP算法的要害就是: GetNext()函数。它就是要获取下一个要比较的模式串中的位置。抓住这个要害不
2011-05-24 14:42:00 618
转载 关于Linux内存管理的一些资料
Linux常用内核态内存分配方式总结一、 alloc_pages类此类函数主要包括:struct page * alloc_page(unsigned int gfp_mask)——分配一页物理内存并返回该页物理内存的page结构指针。struct page * alloc_pages(unsigned int gfp_mask, unsigned int order)——分配 个连续的物理页并返回分配的第一个物理页的page结构指针。unsigned long get_free_p
2011-05-17 10:22:00 1983
原创 如何在linux中查看程序占用的内存
<br />用free查看到的是整个系统的,用top看到的是所有的程序.<br /> top -d 1<br />然后shift + m(按占用内存大小排序)
2011-05-16 17:19:00 5451
转载 Linux操作系统的内存使用方法详细解析
<br />我是一名程序员,那么我在这里以一个程序员的角度来讲解Linux内存的使用。 <br /><br /> 一提到内存管理,我们头脑中闪出的两个概念,就是虚拟内存,与物理内存。这两个概念主要来自于linux内核的支持。 <br /><br /> Linux在内存管理上份为两级,一级是线性区,类似于00c73000-00c88000,对应于虚拟内存,它实际上不占用实际物理内存;一级是具体的物理页面,它对应我们机器上的物理内存。 <br /><br /> 这里要提到一个很重要的概念,内存的延迟分配。
2011-05-16 17:15:00 1059 1
转载 南桥、北桥、FSB、PCI、AGP、PCIE
内容来自:百度百科 芯片组(Chipset)是主板的核心组成部分,联系CPU和其他周边设备的运作。如果说中央处理器(CPU)是整个电脑系统的心脏,那么芯片组将是整个身体的躯干。 在电脑界称设计芯片组的厂家为Core Logic,Core的中文意义是核心或中心,光从字面的意义就足以看出其重要性。对于主板而言,芯片组几乎决定了这块主板的功能,进而影响到整个电脑系统性能的发挥,芯片组是主板的灵魂。芯片组性能的优劣,决定了主板性能的好坏与级别的高低。这是因为目前CPU的型号与种类繁多、功能特点不一,如果芯片
2011-05-16 15:56:00 8422
转载 Linux设备驱动之pci设备的枚举
<br />一 前言 PCI,是Peripheral Component Interconnect的缩写,翻译成中文即为外部设备互联。与传统的总线相比,它的传输速率较高,能为用户提供动态查询pci deivce和局部总线信息的方法。此外,它还能自动为总线提供仲裁。在近几年的发展过程中,被广泛应用于多种平台。 PCI协议比较复杂,关于它的详细说明,请查阅有关PCI规范的资料,本文不会重复这些部份。 对于驱动工程师来说,PCI设备的枚举是PCI设备驱动编写最复杂的操作。分析和理解这部份,是进行深入分析PCI设备
2011-05-16 14:58:00 1722
转载 Linux内核访问外设I/O资源的方式
<br />我们知道默认外设I/O资源是不在Linux内核空间中的(如sram或硬件接口寄存器等),若需要访问该外设I/O资源,必须先将其地址映射到内核空间中来,然后才能在内核空间中访问它。 Linux内核访问外设I/O内存资源的方式有两种:动态映射(ioremap)和静态映射(map_desc)。 一、动态映射(ioremap)方式 动态映射方式是大家使用了比较多的,也比较简单。即直接通过内核提供的ioremap函数动态创建一段外设I/O内存资源到内核虚拟地址的映射表,从而可以在内核空间中访问这段I/O资
2011-05-16 13:18:00 514
原创 关于ioremap
void * __ioremap(unsigned long phys_addr, unsigned long size, unsigned long flags) <br />入口: phys_addr:要映射的起始的IO地址; <br /><br />size:要映射的空间的大小; <br /><br />flags:要映射的IO空间的和权限有关的标志; <br /><br />功能: 将一个IO地址空间映射到内核的虚拟地址空间上去,便于访问; <br /><br />实现:对要映射的IO地址空间进行判
2011-05-16 13:11:00 634
原创 IO端口与内存空间
<br />(1)关于IO与内存空间:<br /> 在X86处理器中存在着I/O空间的概念,I/O空间是相对于内存空间而言的,它通过特定的指令in、out来访问。端口号标识了外设的寄存器地址。Intel语法的in、out指令格式为:<br /> IN 累加器, {端口号│DX}<br /> OUT {端口号│DX},累加器<br /> 目前,大多数嵌入式微控制器如ARM、PowerPC等中并不提供I/O空间,而仅存在内存空间。内存空间可以直接通过地址、指针来访问,程序和程序运行中使用
2011-05-16 13:04:00 1404
转载 linux驱动开发常用函数及函数
Region的操作函数__XXX_region(),Linux在头文件include/linux/ioport.h中定义了三个对I/O内存资源进行操作的宏: ①request_mem_region()宏,请求分配指定的I/O内存资源。 ②check_ mem_region()宏,检查指定的I/O内存资源是否已被占用。 ③release_ mem_region()宏,释放指定的I/O内存资源。 这三个宏的定义如下: #define request_mem_region(start,n,name)
2011-05-16 10:04:00 1449
原创 module_param、 MODULE_PARM_DESC 、EXPORT_SYMBOL
<br />在用户态下编程可以通过main()的来传递命令行参数,而编写一个内核模块则通过module_param ()<br />module_param宏是Linux 2.6内核中新增的,该宏被定义在include/linux/moduleparam.h文件中,具体定义如下:<br />#define module_param(name, type, perm)<br />module_param_named(name, name, type, perm)<br /><br />其中使用了 3 个参数:
2011-05-13 15:48:00 12249
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人