技术文章
默默努力的小熊
linux kernel存储技术
展开
-
Linux Memory Management Notes
Linux 内存基础地址类型linux内核中有许多种不同的地址类型用户虚拟地址 用户空间看到的常规地址,通过页表可以将虚拟地址和物理地址映射起来物理地址 用在cpu和内存之间的地址叫做物理地址总线地址 外围总线和内存之间的地址叫做总线地址。通常他们和物理地址相同内核逻辑地址 内核的常规地址空间,必定有对应的物理内存与之映射。kmalloc返回的就是内核逻辑地址内核虚拟地址转载 2013-05-21 16:15:09 · 899 阅读 · 0 评论 -
不易觉察的程序BUG
不易觉察的程序BUG今天调试过程中发现了一个BUG,因为这种BUG具有一定的普遍性,所以记录下来。代码如下:// 添加状态int CBuffManager::AddBuff(int iThingID){ int iSlot = GetEmptySlot(); if (iSlot < 0) { TRACESVR("Bug : buff re原创 2012-02-07 16:27:44 · 979 阅读 · 1 评论 -
游戏服务器结构探讨
原文地址:http://blogold.chinaunix.net/u/1129/showart_397768.htmlhttp://bbs.gameres.com/showthread.asp?threadid=93775 有关游戏开发:游戏开发始终是个小项目,另外由于开发时间的限制,软件工程的思想和方法在游戏开发领域并不怎么受欢迎。从游戏开发团队的规模也能看出,基本上只能算小开转载 2011-12-20 15:30:15 · 1434 阅读 · 0 评论 -
linux 进程监控和自动重启的简单实现
目的:linux 下服务器程序会因为各种原因dump掉,就会影响用户使用,这里提供一个简单的进程监控和重启功能。实现原理:由定时任务crontab调用脚本,脚本用ps检查进程是否存在,如果不存在则重启并写入日志。1、crontab修改chen@IED_40_125_sles10sp1:~/CandyAT/Bin> crontab -e*/1 * * * * /home/chen/原创 2011-12-19 16:27:41 · 13989 阅读 · 1 评论 -
重构代码 --- 计算长函数工具的实现(附源代码)
长函数代表着腐化的代码,难以修改和扩展。在网上搜了竞没找到相关工具,于是就自己手动写了一个。计算函数行数,找出长函数,这样就可以开始重构代码了。 工具:fl.py说明:计算函数长度,目前只支持.c文件和.cpp文件,支持其他文件类型,只需将代码中.cpp改为对应的文件类型即可环境要求:安装Python 2.7使用方法: ./fl.py max_lengthrelative_原创 2011-12-12 16:45:40 · 1330 阅读 · 1 评论 -
用alias简化linux下gdb 操作(实例)
经常需要调试应用程序,应用程序是特定的名字,每次都要gdb 然后一大堆参数,太麻烦了。本着微笑哥的名言:可以一次性搞定经常重复的事情,那就一次搞定。目标是使用debug命令就可以调试指定应用程序。步骤如下:1、到用户目录下cd2、编辑bashrc文件vi .bashrc3、添加debug命令 alias debug="gdb attach `ps fx | grep原创 2011-12-08 16:38:18 · 1035 阅读 · 0 评论 -
一键搞定windows和linux之间文件传输
一键搞定windows和linux之间文件传输问题:在windows IDE下编写的代码要上传到linux服务器上编译,每次要用ssh把改动的代码手工传上去。解决方案一:直接在linux服务器上编写。不方便的地方在于重构代码时,还是在IDE下比较方便快捷,VA提供的功能在linux下还没有这么方便。解决方案二:在windows用samba连接到服务器,直接在上面编辑。用si还不错,用V原创 2011-12-12 11:07:14 · 796 阅读 · 0 评论 -
一个游戏程序员的学习资料
想 起写这篇文章是在看侯杰先生的《深入浅出MFC》时,突然觉得自己在大学这几年关于游戏编程方面还算是有些心得,因此写出这篇小文,介绍我眼中的游戏程序 员的书单与源代码参考。一则是作为自己今后两年学习目标的备忘录,二来没准对别人也有点参考价值。我的原则是只写自己研究过或准备研究的资料,所以内容无 疑会带上强烈的个人喜好色彩,比如对网络,数据库等重要方面完全没有涉及。因为自己主要对三维图形引擎,人转载 2011-11-22 18:50:12 · 987 阅读 · 0 评论 -
大内高手—内存模型
大内高手—内存模型 了解linux的内存模型,或许不能让你大幅度提高编程能力,但是作为一个基本知识点应该熟悉。坐火车外出旅行时,即时你对沿途的地方一无所知,仍然可以到达目标地。但是你对整个路途都很比较清楚的话,每到一个站都知道自己在哪里,知道当地的风土人情,对比一下所见所想,旅程可能更有趣一些。 类似的,了解linux的内存模型,你知道每块内存,每个变量,在系统中处于什么样的位置。转载 2006-06-24 18:32:00 · 1107 阅读 · 0 评论 -
grub全面接触
1、grub是什么grub的全称是grand unified bootloader,它是一个将引导装载程序安装到主引导记录的程序,主引导记录是位于一个硬盘开始的扇区。它允许位于主引导记录区中特定的指令来装载一个GRUB菜单或是GRUB的命令环境。这使得用户能够开始操作系统的选择,在内核引导时传递特定指令给内核,或是在内核引导前确定一些系统参数(如可用的RAM大小)。2、引导过程这些最初转载 2006-06-19 10:25:00 · 1136 阅读 · 0 评论 -
linux环境下一个进程的栈大小限制
今天在CSDN里回了一个贴子,我按照理论上的栈大小可以有2G多的空间时,被另一个朋友指出我的错误,实际中栈只有2M,他指的是线程。可是在LINUX下进程和线程是没什么差别的。我就突然想起应该用一种什么方法来验证一下栈的大小,由GOOGLE帮忙,找到了后面的reference。写一个hello, world程序#include int main(int argc, char* argv[])转载 2006-06-07 16:42:00 · 4740 阅读 · 1 评论 -
NS2学习笔记
1. All of the simulator functions can be found in the file ns2/ns-2.27/tcl/lib/ns-lib.tcl2. We have serveral flows, we may wish to distinguish them so that we can identity them with different colo转载 2006-06-05 17:10:00 · 2007 阅读 · 1 评论 -
grub
Grub 源代码分析 http://www.linuxsir.org/bbs/showthread.php?t=170348grub三步通(转)################## # GRUB的优点 # ################## GRUB 是引导装入器(boot loader) -- 它负责装入内核并引导 Linux 系统。GRUB 还可以引导其它操作系统,如 FreeB转载 2006-05-31 14:49:00 · 1109 阅读 · 0 评论 -
awk手册
什么是awk? 你可能对UNIX比较熟悉,但你可能对awk很陌生,这一点也不奇怪,的确,与其优秀的功能相比,awk还远没达到它应有的知名度。awk是什么?与其它大多数UNIX命令不同的是,从名字上看,我们不可能知道awk的功能:它既不是具有独立意义的英文单词,也不是几个相关单词的缩写。事实上,awk是三个人名的缩写,他们是:Aho、(Peter)Weinberg和(Brain)Kernighan。转载 2006-05-29 22:15:00 · 836 阅读 · 0 评论 -
Linux操作系统内核实习(一)
Exercise OnePart A1. What is the cpu type and model?/proc/cpuinfo2. What version of the linux kernel is being used?/proc/version3. How long has it been since the system was last booted?/转载 2006-05-21 20:55:00 · 1371 阅读 · 0 评论 -
服务器系统性能瓶颈和优化
问题:服务器为何极限压力1、采用简单Server模型2、接收query->计算->应用cache(读写文件)->返回结果3、返回结果数据量50KB-200KBCPU是否为瓶颈?方法一:#vmstat 1 查看idle值,看CPU是否为瓶颈方法二:#mpstat -P ALL 1方法三:top查看iowait小结:CPU利用率一、总CPU利原创 2012-02-15 11:30:28 · 1230 阅读 · 0 评论 -
用Tcpdump定位服务器和客户端通信问题
注意:Tcpdump需要用root帐号登录一、应用场景1客户端发送过来的数据包,在服务器解开之后发现数据包不对?[root@IED_224_42_sles10_64]~>tcpdump -i eth1 port 8029 -Xtcpdump: verbose output suppressed, use -v or -vv for full protocol decodelis原创 2012-02-17 11:22:41 · 813 阅读 · 0 评论 -
linux gdb 跟踪代码错行问题的解决
今天突然出现的一个奇怪的问题,gdb跟踪的时候老是错位了几行,执行step命令的时候也无法进入,本着一次解决的决心,开始查找问题:1、先确认了是按最新文件编译的2、确认了编译后库文件有install的(因为错位的是so)3、在source insight和vi下面看确认了文件代码行是一样的@@,迷茫了一下,然后开始怀疑跟windows拷贝到linux编译有关,开始用vi看代码文件,原创 2013-04-17 14:03:00 · 3310 阅读 · 0 评论 -
linux mdadm raid阵列重建加速---bitmaps文件
原文地址:http://louwrentius.com/blog/2011/12/speeding-up-linux-mdadm-raid-array-rebuild-time-using-bitmaps/当一个磁盘fail或者从一个阵列中踢掉时,重建阵列需要花费相当的时间。在我的阵列上,重建一个磁盘就要5个小时。有没有办法减少重建的时间?甚至只用5秒钟?可以使用bitmaps文件,默翻译 2013-04-13 15:37:52 · 3002 阅读 · 0 评论 -
源代码license介绍
许多开发者和设计者希望把他们的作品作为开源项目共享,他们希望其他人能够利用和共享他们的代码。 而各种开源社区就是因为这个原因而充满活力。开源软件可以用于你能想象得到的任何应用程序,许多web设计人员使用开源软件作为开发基础(例如 WordPress,Drupal等等许多CMS系统都是开源的)。 但是许多开发者和设计者并没有对开源License有清楚的了解,不清楚当他们选择开发自己的转载 2013-03-21 13:24:19 · 2653 阅读 · 0 评论 -
linux内核之block层函数调用图
原创 2013-03-08 21:31:49 · 1662 阅读 · 0 评论 -
select VS epoll
Select、Poll与Epoll比较以下资料都是来自网上搜集整理。引用源详见文章末尾。 1 Select、Poll与Epoll简介Selectselect本质上是通过设置或者检查存放fd标志位的数据结构来进行下一步处理。这样所带来的缺点是:1 单个进程可监视的fd数量被限制 2 需要维护一个用来存放大量fd的数据结构,这样会使原创 2013-01-17 10:12:35 · 1070 阅读 · 0 评论 -
windows驱动学习笔记
零零散散花了一个月的时间初步学习了windows驱动编程,接着开始要制定2013年的学习计划,即将步入另外一个学习战场,于是就将最近学习记录下来,也好将来再返回学习时有点基础。一、windows驱动安装1、到官方下载DDK安装,ex : 3790.1830.DDK2、目录简介 示例代码: 安装目录/src/general/event/sys 编译:buil原创 2013-01-13 21:44:03 · 4352 阅读 · 0 评论 -
STL学习笔记
1. STL容器简介STL(Standard Template Library,标准模板库)从根本上说,是一些算法、容器的集合,STL可以让你重复运用既有的算法,而不必在环境类似的情况下再撰写相同的代码。STL算法是泛型的,不与任何特定数据结构或对象型别系缚在一起,但是却像为你量身定做的一样,有很高的效率。STL甚至是可扩充的,就像STL组件彼此之间可以相互配合运用一样,STL组件也可原创 2013-01-10 18:56:32 · 776 阅读 · 0 评论 -
自动动手写发包工具
自动动手写发包工具 为了测试服务器大量在线的性能,需要自己写机器人,模拟大量客户端在线的情况。第一步是创建帐号,第一个办法是直接在服务器后台用脚本创建帐号,另一个办法是模拟客户端发包。前者需要登录到服务器执行,后者可以在其他机器上执行,于是试着用后一种方法实现。 第一步,包含协议头文件,再用C++写一个简单的查询帐号封包。发包代码如下: struct tagMsg&原创 2012-12-26 15:02:18 · 7761 阅读 · 1 评论 -
性能杀手:”潜伏”的memset
【memset性能陷进】memset是大家常用的函数,而且一般的编程书籍都会谆谆告诫大家:申请内存后要初始化,防止使用未经初始化的内存导致不可预知的结果,所以我们一般都会按照如下方式编写代码:char* buffer = (char*)malloc(1024);memset(buffer, 0x00, 1024); 代码看起来很标准,也很美观,但这里却隐藏着一个陷进:memse转载 2012-12-24 10:20:08 · 1039 阅读 · 0 评论 -
函数hook注意事项
函数hook,简单地说就是把目标函数替换我们的函数,用比较技术的语言描述就是:“(1) Target函数:要拦截的函数,通常为Windows的API。(2) Trampoline函数:Target函数的复制品。因为Detours将会改写Target函数,所以先把Target函数复制保存好,一方面仍然保存Target函数的过程调用语义,另一方面便于以后的恢复。(3) Detour函数翻译 2012-12-04 15:57:29 · 1156 阅读 · 0 评论 -
多键比较函数的源码实现
在排序算法中,都会用到比较函数如下:template int Cmp(const void *a1, const void *a2){ T *t1 = (T*)a1; T *t2 = (T*)a2; return *t1 - *t2;}现在要求用对象中某个键值做比较,修改如下:template int CmpOneKey(const void *p1, const void *p2原创 2012-10-01 10:08:40 · 791 阅读 · 2 评论 -
类成员函数指针的定义和使用
普通函数指针的定义如下:typedef int (*Function)();今天应用需要写一个类成员函数的指针,类为CMonsterAI定义如下:typedef int (CMonsterAI::*Function_MoveType)();在类中保存函数指针数组class CMonsterAI{private: // 移动类型 int m_iMoveTyp原创 2012-08-31 13:19:37 · 821 阅读 · 0 评论 -
C#可以写驱动程序吗?
驱动是机器代码级的,不需解释的。C#编译后的代码是解释级的,根本不能在驱动级工作,除非微软愿意将解释器搞到驱动级。市面上有所谓的.Net驱动程序开发,但不过是个幌子,还是用C/C++开发的,能不能用某种语言编写,取决于ddk编译器是否支持。目前微软提供的DDK编译器只支持汇编/C/C++。另外C#是CLR格式的,驱动还是PE格式的。原创 2012-03-02 07:47:23 · 2805 阅读 · 0 评论 -
linux操作系统内核实习(二)
#include #include #include #define MAX_LINE 80struct command_struct{ int argc; char* name; char* argv[64];};void parse(char* line, char** argv){ while (*line != /0) { while转载 2006-05-23 21:38:00 · 1110 阅读 · 0 评论 -
Linux下汇编学习笔记之三--(Professional Assembly Language)
笔记之三主要介绍协处理器FPU以前每次碰到浮点指令的时候,头就大了。可这一次就不同了,越看越简单,哇,太开心了。。。1、FPU与标准处理器寄存器分离的一组寄存器处理浮点操作,即FPU与我们通常概念中的中央处理器是独立的。FPU包括8个80位数据寄存器和3个16位寄存器,称为控制、状态和标记寄存器。FPU的数据寄存器R0到R7构成循环堆栈。(第一次遇到循环堆栈这种数据结构)2、状态寄存器转载 2006-05-12 21:00:00 · 1247 阅读 · 0 评论 -
用bochs调试bootsect/setup/head
直接跳到 setup 直接跳到 head 这是对linux内核0.11版的bootsect部分代码的调试过程。理解内核的启功过程。 E:linux_bochlinux-0.11>"C:Program FilesBochs-2.2.pre4ochsdbg" -q -f bochsrc-hd.bxrc00000000000i[APIC?] local apic in initializin转载 2006-05-04 11:20:00 · 2291 阅读 · 0 评论 -
U盘上的LINUX
首先让我们先了解一下LINUX下USB设备, Linux USB 驱动程序有三种不同的 USB 主控制器选项,这是因为在主板和 PCI 卡上有三种不同类型的 USB 芯片。"EHCI"驱动程序设计成为实现新的高速 USB 2.0 协议的芯片提供支持。"OHCI"驱动程序用来为非 PC 系统上的(以及带有 SiS 和 ALi 芯片组的 PC 主板上的)USB 芯片提供支持。"UHCI"驱动程序用来为转载 2006-05-04 10:27:00 · 971 阅读 · 0 评论 -
动手制作自己的启动盘
创建:2005-10-26 13:56:21作者:Unlinux来自: http://www.Unlinux.com(文:西电)凡是接触计算机久的朋友肯定都使用过DOS启动软盘,至于启动软盘的重要性大家肯定也都 清楚。在Linux底下启动软盘同样重要,它不仅能测试新内核、恢复系统错误,而且能升级 重要的系统文件。但是在Linux下制做启动盘不象在DOS下那么容易,下面我就一步一步的 教大家制做自己转载 2006-05-04 09:57:00 · 1312 阅读 · 0 评论 -
制作自己的Floppy-Linux Step By Step
这是我自己看了一些网络上的文章以后,亲手制作的一个Floppy Linux,大家可以看看!1. 软盘上安装引导器(grub)一般制作软盘上跑的linux引导器都使用syslinux这个工具(这个工具不支持ext2分区格式,只能支持fat分区格式),因为我对grub比较熟悉,并且我在软盘上安装grub只用了132KB空间,不是很耗磁盘空间。具体操作如下:# mke2fs /dev/fd0创建了 ex转载 2006-05-04 09:56:00 · 2031 阅读 · 1 评论 -
面试常考struct中对齐的问题(liumangxiong于2006-05-03)
下面所讲的例子的调试环境是winXp+VC6.0int main(int argc, char* argv[]){ typedef struct{char a:7;char b:1;char c;} schar; typedef struct{char a:7;char b:1;short c;} sshort; typedef struct{char a:7;char b:1;long c;转载 2006-05-03 21:50:00 · 1189 阅读 · 0 评论 -
C语言测试:想成为嵌入式程序员应知道的0x10个基本问题
C语言测试是招聘嵌入式系统程序员过程中必须而且有效的方法。这些年,我既参加也组织了许多这种测试,在这过程中我意识到这些测试能为带面试者和被面试者提供许多有用信息,此外,撇开面试的压力不谈,这种测试也是相当有趣的。 从被面试者的角度来讲,你能了解许多关于出题者或监考者的情况。这个测试只是出题者为显示其对ANSI标准细节的知识而不是技术技巧而设计吗?这个愚蠢的问题吗?如要你答出某个字符的AS转载 2006-05-03 20:24:00 · 870 阅读 · 0 评论 -
介绍微软一个罕为人知的无敌命令
关掉一个用任务管理器关不了的进程 问:怎么才能关掉一个用任务管理器关不了的进程?我前段时间发现我的机子里多了一个进程,只要开机就在,我用任务管理器却怎么关也关不了 答1:杀进程很容易,随便找个工具都行。比如IceSword。关键是找到这个进程的启动方式,不然下次重启它又出来了。顺便教大家一招狠的。其实用Windows自带的工具就能杀大部分进程: c:>ntsd -c q -p PID转载 2006-05-03 20:14:00 · 768 阅读 · 0 评论 -
LINUX 常见问题1000个详细解答
一、 如何建立多用户 提醒大家一句,别一直使用root用户,因为root用户在系统中有着至高无上的权力,一不小心就可能破坏系统。比如我们想删除/temp目录下的文件却将命令不小心输成“rm /temp(在‘/’后多了一个空格)”,那么就极可能删去根目录下的所有文件。再者,“Linux是一个真正意义上的多任务、多用户系统”,不体会一下Linux的特色岂不可惜。为了方便自己和别人使用,就在Linux转载 2006-05-03 20:07:00 · 2524 阅读 · 1 评论