摘要:
转自 http://www.unixresources.net/linux/clf/linuxK/archive/00/00/47/91/479165.html首先,在arch/i386/kernel/vmlinux.lds中有/*will be free after init*/.=ALIGN(4096);__init_begin=.;/*省略*/.ALIGN(32);__per_cpu_start=.;.data.percpu:{*(.data.percpu)}__per_cpu_end=.;.=ALIGN(4096);__init_end=.;/*freed after init end 阅读全文
摘要:
linux2.6.11的内核中,为了方便管理linux的进程,主要建了5种linux链表。每个链表节点之间的互联有两种方式,一种是hash节点之间的互联,通过hlist_node的数据结构来实现;另一种就是list_head类型的数据结构来互联。看linux内核的人对这两种类型的数据结构肯定是不会陌生的,因为它们在linux内核中无处不在。1 进程直接的互连 通过任务描述符结构task_struct结构中的tasks成员来实现各个节点之间的互连,它是list_head类型。这个链表是一个循环的双向链表,开始的时候只有init_task这一个进程,它是内核的第一个进程,它的初始化是通过静态... 阅读全文
摘要:
1 连连看游戏 今天同学给我做了道编程题目,貌似是华为的,题目描述大概是这样的: 给定一个连连看棋盘,棋盘上每个点都有各种图案(用非0数字表示),输入棋盘上的任意两个左标,判断这两个坐标对应的图案是否可以消除,消除的条件是图案相同且图案间连线的转角数不得超过2。例如有下面一个棋盘: 1 3 3 4 0 6 0 0 4 0 2 1 6 0 4 2在棋盘中,(0,1)和(0,2)中的图案没有转角可以消除,(1,1)和(3,0)中的6有一个转角可以可以消除,(2,0)和(3,2)中的4有两个转角可以消除,而(0,0)和(2,3)中的1不能消去。 输入数据为连续的整数,第一个数为棋盘的行... 阅读全文
摘要:
1 什么是MapReduce? Map本意可以理解为地图,映射(面向对象语言都有Map集合),这里我们可以理解为从现实世界获得或产生映射。Reduce本意是减少的意思,这里我们可以理解为归并前面Map产生的映射。2 MapReduce的编程模型 按照google的MapReduce论文所说的,MapReduce的编程模型的原理是:利用一个输入key/value对集合来产生一个输出的key/value对集合。MapReduce库的用户用两个函数表达这个计算:Map和Reduce。用户自定义的Map函数接受一个输入的key/value对值,然后产生一个中间key/value对值的集合。MapR.. 阅读全文
摘要:
以下只是个人看了《linux内核完全注释》的一点理解,如果有错误,欢迎指正!1 eip中保存的地址是逻辑地址、线性地址还是物理地址? 这个应该要分情况。eip保存的是下一条要执行的指令地址,也就是说cpu是根据eip到内存中去寻找指定的内容。如果cpu工作在实模式,那么eip保存的就是物理地址;如果cpu工作在保护模式下,那么cpu在去内存寻找指定的内容之前要先将eip加上当前程序代码段的基址(通过当前cs所指向的代码段描述符获得),即获得当前程序的线性地址,如果cpu没有开启分页机制,那么这个线性地址就是实际的物理地址了;如果cpu开启了分页机制,那么就要通过线性地址查找页目录表和页表... 阅读全文
摘要:
1 题目描述: 被给一系列的正整数x1,x2,x3...xn和两个非负整数a和b,通过下面两步操作将a转化为b: 1.对当前的a减1。 2.对当前a减去a % xi (i=1,2...n)。 计算a转化到b最小需要的最短步数。2 输入 第一行包含简单的整数n(1 ≤ n ≤ 10^5),第二行包含n个用空格分开的整数x1,x2,x3...xn(2 ≤ xi ≤ 10^9),第三行包含两个整数a和b(0 ≤ b ≤ a ≤ 10^9,a - b ≤ 10^6)。3 输出 输出一个整数,a转化为b的最小步数。4 思路 假设dp[k]表示从k+b转化到b所需要的最小步数,然后可... 阅读全文
摘要:
一 问题定义 给定母串S和子串T,定义n为母串S的长度,m为子串T的长度,suffix[i]为第i个字符开始的母串S的后缀子串,extend[i]为suffix[i]与字串T的最长公共前缀长度。求出所有的extend[1..n]。容易发现,如果存在某个i,使得extend[i] = m,这便是经典的KMP算法要解决的问题。二 扩展KMP算法思想 和KMP算法的是想类似,充分利用已经比较字符性质来减少冗余的字符比较次数。KMP的思想是充分的利用模式串中所有前缀字串(以模式串为开头的字串)的真前缀和真后缀(指子串的开始字符与子串的最后字符相等的个数)来减少不必要的字符比较,真前缀和真后缀相等的.. 阅读全文
摘要:
一 前言 看了csapp2e第二章,感觉讲的很透彻,理解了一些以前学组成原理没有学懂的东西。这章最让我感觉深刻的还是计算机是怎么实现c语言中的基本数据类型的表示和操作的,这对程序员理解程序无疑是帮助巨大的。也正如这本书的题目--以编程人的视角来理解计算机系统(自己这么翻译的,呵呵!)。第二章的homework很多,很多题目都是和位打交道,并且有些题目还只能使用位操作符,不允许使用循环,比较运算符,这让平时很少使用位操作的我来说确实很捉急啊!不过这也正是锻炼自己位操作的大好机会嘛!下面选了几道我认为还是挺不错的题目拿来分享下,由于homework是没有答案的,所以下面解答只是个人的见解。二 h. 阅读全文
摘要:
1 fg切换前后台作业 将后台作业转换为前台作业,”fg %作业号“ 2 stty改变和打印终端行设置 tostop 阻止后台作业写终端,stty -a显示终端的所有选项 3 uname查看机子信息 uname -a 查看全部信息 4 查看程序依赖的动态链接库 ldd 程序名 5 gcc命令行 参考 阅读全文
摘要:
1 背景 后缀数组是处理字符串问题的有效算法,如最长公共字串,最长回文字串,重复次数最多的字串等等。所以学好它,对于以后处理处理字符串是很有帮助的。在网上找了下,发现对后缀数组讲的比较容易理解和清楚的是罗穗骞写的关于“后缀数组——处理字符串的有力工具”的论文,这篇文章主要总结下该论文中的主要内容。2 定义 后缀:后缀是指从某个位置 i 开始到整个串末尾结束的一个特殊子串。字符串r 的从第 i 个字符开始的后缀表示为Suffix(i) , 也 就 是Suffix(i)=r[i..len(r)]。 后缀数组:后缀数组 SA 是一个一维数组,它保存 1..n 的某个排列 SA[1],SA[2]... 阅读全文