- 博客(94)
- 资源 (3)
- 收藏
- 关注
原创 代码规范总结
代码规范总结作者:bullbat 看了看博客里面上一篇原创文章的时间,甚是惭愧。这大半年时间里,都忙着七七八八的事情,技术上关心的渐少,但最近的几件事情让我对代码规范的重要性有了更深的体会,决定自己做些总结。 情景一:一个不大的项目,由几个人共同完成。某日,由于业务需求变更,需要改动我这边的部分逻辑,但当时我不在,项目组的成员决定由他们来改,但翻了我的代码,硬是
2013-07-07 21:18:06
13113
5
转载 linux下搭建SVN服务器完全手册
系统环境 RHEL5.4最小化安装(关iptables,关selinux) + ssh + yum一,安装必须的软件包. yum install subversion (SVN服务器) mysql-server (用于codestriker) httpd mod_dav_
2013-06-17 21:29:44
10444
转载 给Jquery动态添加的元素添加事件
我想很多人都会向我一样曾经 被新元素的事件绑定困惑很久也就是在页面加载完成后给元素绑定了事件,但又新增加的元素上却没有绑定任何事件。js的事件监听跟css不一样,css只要设定好了样式,不论是原来就有的还是新添加的,都有一样的表现。而事件监听不是,你必须给每一个元素单独绑定事件。常见的例子是处理表格的时候。每行行末有个删除按钮,点了这个能够删除这一行。table>
2013-05-26 22:21:11
57561
1
转载 对《移动互联网白皮书(2013年)》的几个解读
解读:1、开发自主操作系统的需求和环境日益成熟;2、HTML5未必会成为主流,但基于VM的Java等语言一定会成为主流;3、在移动应用日益广泛,逐渐替代浏览器的时代,电信运营商有更多的翻盘机会。工信部电信研究院最近发布的《移动互联网白皮书(2013年)》(下称“白皮书”)显示,与计算机产业的摩尔定律相比,移动互联网终端硬件、软件、应用、流量都6个月的短周期升级或增长
2013-03-10 20:50:42
7189
原创 Xen源代码分析(三)——x86_32.s
X86_32.s文件,32位下启动汇编程序的最后阶段,主要工作为装入堆栈指针, Xen会在栈顶分配一个cpu_info结构,这个结构包含很多重要的成员:1)客户系统的切换上下文2)当前运行的vcpu指针3)物理处理器编号1,IDT的处理,整个idt_table的向量入口都初始化ignore_int,这个中断处理函数打印"Unknown interrupt(cr2=XXXXXXXX)"信息后系统进入
2012-11-15 09:24:16
8657
原创 Xen源代码分析(二)——trampoline.s
汇编文件trampoline.s,主要工作为进入实模式,读取内存,磁盘,视频信息然后再次进入保护模式装入新的GDT(gdt_table),英文注释了很大部分,很容易理解。下面的代码注释中,从标号0开始运行,然后是标号1。 .code16/* NB. bootsym() is only usable in real mode, or via BOOT_PSEUDORM_DS. */
2012-11-15 09:18:46
9315
原创 Xen源代码分析(一)——head.s
启动汇编部分代码是xen的引导启动程序,位于./xen/arch/x86/boot目录下。代码描述了从xen加载到调用第一个C函数“__start_xen”之间的初始化系统环境过程。主要涉及的文件流程为head.S->trampoline.S->x86_32.s,其中head.s为冲GRUB进入XEN的入口文件,首先看看head.s部分都做了什么(只看32位体系)。/* 只能由 grub
2012-11-15 09:16:39
10774
转载 Xen分析
Xen分析余上2008-02-13内容目录第一章总体结构................................................................................................................................4第一节 主要对象.........................
2012-11-12 14:27:28
14947
转载 从三国的人物身上我们能学到些啥?
1. 刘备的经历告诉我们:集团总裁,完全可以从摆地摊做起。2. 诸葛亮的经历告诉我们:进私企,其实比进国企更有发展空间。3. 吕布的经历告诉我们:频繁的跳槽,直接导致没老板敢录用你。4. 庞统的经历告诉我们:长得太丑,可能会影响你的应聘效果。5. 马谡的经历告诉我们:专业课学得再牛B,工作时基本用不上。6. 杨修的经历告诉我们:在职场上,总搞得比领导高明,你会死得很惨。7.
2012-11-05 20:18:10
7639
转载 论函数调用约定
在C语言中,假设我们有这样的一个函数:int function(int a,int b)调用时只要用result = function(1,2)这样的方式就可以使用这个函数。但是,当高级语言被编译成计算机可以识别的机器码时,有一个问题就凸现出来:在CPU中,计算机没有办法知道一个函数调用需要多少个、什么样的参数,也没有硬件可以保存这些参数。也就是说,计算机不知道怎么给这个函数传递参数,传递
2012-10-28 11:13:26
6955
转载 C语言实现继承和多态
继承和多态是面向对象语言最强大的功能。有了继承和多态,我们可以完成代码重用。在C中有许多技巧可以实现多态。本文的目的就是演示一种简单和容易的技术,在C中应用继承和多态。通过创建一个VTable(virtual table)和在基类和派生类对象之间提供正确的访问,我们能在C中实现继承和多态。VTable能通过维护一张函数表指针表来实现。为了提供基类和派生类对象之间的访问,我们可以在基类中维护派生类的
2012-10-28 11:00:21
7390
原创 (98)Address already in use: make_sock: could not bind to address 0.0.0.0:80
Redhat64位服务器重启后出现该问题,研究了一下午,发现解决办法:问题说明80端口被占用,用netstat -nlp |grep :80命令看看有什么进程占用了80端口,发现是httpd进程。killall -9 httpd杀掉所有的httpd进程后,用service httpd start命令重启apache服务器,发现现在能够正常重启,不会出现上述问题,但是,服务器上的网站还是打不开。
2012-08-26 17:25:28
56910
2
原创 Linux信号机制概述
Linux信号机制概述作者:bullbat还是先看看Linux中用户空间怎么运用的,用户空间编程实例如下:#include#include#include/*下面为两个新的信号操作函数*/void handler(int sig){ printf("Receive signal :%u\n",sig);}void sigroutine(i
2012-08-07 19:15:54
9719
原创 Linux进程间通信之信号量
Linux进程间通信之信号量作者:bullbat Linux进程间通信包括管道、消息队列、System V等等,其中System V包括三种:信号量、消息队列、共享内存,这里只简单介绍信号量机制。在Linux编程中,要运用信号量实现互斥操作,用户空间需要调用几个系统调用,如下是一个用户空间例子。#include #include #include #incl
2012-07-24 16:46:31
9620
转载 idr机制--integer ID management(二)
这篇文章主要讲述如何给要管理的对象分配一个小数字作为id。 首先看知道obj的ID,如果查找obj,即指向obj的指针。也就是说先看我们想要达到的效果,在来分析如何实现给对象分配ID。 根据ID ,来查找obj。函数idr_find实现查找功能 假如下图中C的ary[2]指向一个管理的obj。我们来看下如何通过数字66来查找到obj。 我们以
2012-07-23 19:34:12
8045
转载 idr机制--integer ID management(一)
最近研究进程间通信,遇到了idr相关的函数,为了扫清障碍,先研究了linux的idr机制。 所谓IDR,其实就是和身份证的含义差不多,我们知道,每个人有一个身份证,身份证只是 一串数字,从数字,我们就能知道这个人的信息。同样道理,idr的要完成的任务是给要管理的对象分配一个数字,可以通过这个数字找到要管理的对象。 ID --------------------
2012-07-23 19:33:06
7336
原创 Linux网络协议栈之设备初始化
Linux网络协议栈之设备初始化作者:bullbat Linux网络协议栈的内核初始化工作大致分为设备链路层(e100_module_init、net_dev_init)、网络层(inet_init)、传输层(proto_init)、应用层(sock_init)初始化。由于物理层为具体的网络设备,所以内核对网络协议栈的实现以及网卡驱动实现等没有物理层(L1),驱动以及设备的初始
2012-06-13 19:23:48
9221
原创 Linux网络协议栈之驱动框架
Linux网络协议栈之驱动框架作者:bullbat 网卡驱动可以以模块的方式加载也可以内核初始化的时候加载,我们选定e100系列的网卡进行说明网卡驱动的一般框架。网卡设备通用数据结构:struct net_device{ /* * This is the first field of the "visible" par
2012-06-13 18:52:00
9936
原创 Linux网络协议栈之套接字缓冲区
作者:bullbat Linux网络协议栈是内核中最大的组件之一,由于网络部分应用的范围很广,也相对较热,该部分现有的资料很多,学起来也比较容易。首先,我们看看贯穿网络协议栈各层的一个最关键数据结构——套接字缓冲区(sk_buff结构)。 一个封包就存储在这个数据结构中。所有网络分层都会使用这个结构来存储其报头、有关数据的信息,以及用来协调工作的其他内部信息。在
2012-06-05 17:21:25
11239
转载 解决vs2010到word复制产生的中文乱码
上篇文章提到,我成功的用word解决了代码高亮与对齐的问题,现在新的问题出现了,如果程序中有中文,那么,从vs2010到word复制过程中,会产生乱码,如下所示:#include "stdio.h"int main(){ printf("新?浪¤?博?客¨ª你?让¨?我¨°情¨¦何?以°?堪¡ã\n"); return 0;}这又怎么
2012-06-05 13:56:42
10192
2
转载 解决linux自动挂载U盘/SD Card变成只读问题
忘了从什么时候开始我的那个512M的SD卡在ubuntu下一挂载就是只读的了,使用root帐户更改权限都不好使,尝试了好多办法也没解决,后来买了个U盘就不再用SD卡了,这件事也就忘记了。今天突然应急使用这个卡,使用读卡器挂载发现依旧是只读,换用本本内置的读卡器,也是一样。没办法了,google一通,看了看ubuntu的中文论坛,发现有人也遇到了同样的问题,但是没有人给出可行的解决方案。只好
2012-05-28 10:32:51
17255
转载 apache 启动httpd.exe 报错 Could not reliably determine the server's fully qualified
Apache 启动报错前言:apache虽然能运行,但是看见error.log中有httpd.exe: Could not reliably determine the server's fully qualified domain name, using 192.168. x. x for ServerName这个错误,想看看是否有其他占用了80端口开始--运行--cmd
2012-05-05 21:53:00
1243
原创 Linux内核实践之tasklet机制
作者:bullbat 源代码分析与原理部分参见前面的文章linux中断延迟之tasklet,这里我们看看他的使用,和前面介绍的工作队列、等待队列等相同,声明采用两种方法,我们在init函数中直接采用tasklet_schedule(&my_tasklet);调度,内核中的实现很简单:void __tasklet_schedule(struct tasklet_struct
2012-04-03 12:49:21
2264
1
原创 Linux内核实践之工作队列
工作队列(work queue)是另外一种将工作推后执行的形式,它和tasklet有所不同。工作队列可以把工作推后,交由一个内核线程去执行,也就是说,这个下半部分可以在进程上下文中执行。这样,通过工作队列执行的代码能占尽进程上下文的所有优势。最重要的就是工作队列允许被重新调度甚至是睡眠。 那么,什么情况下使用工作队列,什么情况下使用tasklet。如果推后执行的任务需
2012-03-30 11:25:53
7511
原创 Linux内核实践之序列文件
作者:bullbat seq_file机制提供了标准的例程,使得顺序文件的处理好不费力。小的文件系统中的文件,通常用户层是从头到尾读取的,其内容可能是遍历一些数据项创建的。Seq_file机制容许用最小代价实现此类文件,无论名称如何,但顺序文件是可以进行定为操作的,但其实现不怎么高效。顺序访问,即逐个访问读取数据项,显然是首选的访问模式。某个方面具有优势,通常会在
2012-03-29 15:29:00
4370
转载 the connection to the VMware USB Arbitration Service was unsuccessful.Please check the status of thi
利用虚拟机(版本7.1)插入优盘或者移动硬盘后在虚拟机中始终发现不了,而且还出现了下面的提示:the connection to the VMware USB Arbitration Service was unsuccessful.Please check the status of this service in the Microsogt Management Console原因是在
2012-03-29 10:13:53
1613
原创 Linux内核同步机制之completion
作者:bullbat 内核编程中常见的一种模式是,在当前线程之外初始化某个活动,然后等待该活动的结束。这个活动可能是,创建一个新的内核线程或者新的用户空间进程、对一个已有进程的某个请求,或者某种类型的硬件动作,等等。在这种情况下,我们可以使用信号量来同步这两个任务。然而,内核中提供了另外一种机制——completion接口。Completion是一种轻量级的机制,他允许
2012-03-28 10:09:09
17640
1
原创 Linux内核同步机制之信号量与锁
作者:bullbat Linux内核同步控制方法有很多,信号量、锁、原子量、RCU等等,不同的实现方法应用于不同的环境来提高操作系统效率。首先,看看我们最熟悉的两种机制——信号量、锁。 一、信号量 首先还是看看内核中是怎么实现的,内核中用struct semaphore数据结构表示信号量(中):struct semaphore { sp
2012-03-21 09:10:39
5057
转载 Grub error:Cannot mount selected partition启动错误的解决
转载自 wissly最终编辑 wissly下午在window下用pqmagic把移动硬盘重新分区后,重启选择进入ubuntu的时候出现启动错误:Grub Error17:Cannot mount selected partition......上网查询发现,对双系统,在window下pq调整分区大小很容易产生分区表重改等莫名其妙的问题。上述错误就是分区表
2012-03-16 13:52:53
10797
原创 Linux模块编程机制之hello kernel
作者:bullbat 看了那么多理论知识,可能还是一头雾水,是啊,纯理论分析本来就不好理解。为了更好的理解Linux内核各种内部机制以及其运用,在接下来的学习中将采用理论+实验+源码注释的方式进行。包括算法、原理的实验,内核的局部扩展与修改等。Linux内核编程有很多方法,最方便的方式是使用内核提供的模块编程机制,另一种方式是以补丁的方式,这种方式只需要编译一次内
2012-03-13 11:10:12
9628
8
原创 进程虚拟地址空间之数据分区存放
作者:bullbat 在前面的《对一个程序在内存中的分析 》中很好的描述了程序在内存中的布局,这里对这个结果做些总结和实验验证。下面以Linux为例(实验结果显示windows上的结果也一样)。 我们还是利用前面看到过的这个图,如下图:32位X86机器的内存布局图,内存主要分为栈、堆、BSS段、数据段、代码段5个段。 代码段:代
2012-03-04 17:05:33
4196
1
翻译 内核怎样管理你的内存
bullbat 译 在分析了进程的虚拟地址布局,我们转向内核以及他管理用户内存的机制。下图是gonzo的例子: Linux进程在内核中是由task_struct进程描述符实现的,task_struct的mm字段指向内存描述符mm_struct,他是进程的一个内存执行摘要。如上图所示,mm_struct存储了内存各个段的开始和结束地址、进程所使用的内存页面数(
2012-03-02 13:48:00
3821
1
原创 Linux内存管理之页面回收
请求调页机制,只要用户态进程继续执行,他们就能获得页框,然而,请求调页没有办法强制进程释放不再使用的页框。因此,迟早所有空闲内存将被分配给进程和高速缓存,Linux内核的页面回收算法(PFRA)采取从用户进程和内核高速缓存“窃取”页框的办法不从伙伴系统的空闲块列表。 实际上,在用完所有空闲内存之前,就必须执行页框回收算法。否则,内核很可能陷入一种内存请求的僵局中,并导致系统崩溃。也
2012-03-02 09:12:04
13597
3
原创 Linux缓存机制之块缓存
作者:bullbat 在Linux内核中,并非总使用基于页的方法来承担缓存的任务。内核的早期版本只包含了块缓存,来加速文件操作和提高系统性能。这是来自于其他具有相同结构的类UNIX操作系统的遗产。来自于底层块设备的块缓存在内存的缓冲区中,可以加速读写操作。 与内存页相比,块不仅比较小(大多数情况下),而且长度可变的,依赖于使用的块设备(或文件系统)。随着日渐倾向于使用
2012-02-29 15:19:11
8287
1
翻译 对一个程序在内存中的分析
bullbat 译 内存管理是操作系统的核心;它对于程序员和系统管理员都很关键。在接下来的几篇文章里面我将对内存的关键技术做谈论,但是不会远离其本质。然而概念很普通,例子多半来自32位X86系统的LINUX和Window操作系统。这第一篇文章谈论程序在内存中如何存放。 在多任务操作系统中的每一个进程运行在他自己的内存地址空间中。这个地址空间就是虚拟地
2012-02-29 08:23:13
7446
5
原创 Linux缓存机制之页缓存
作者:bullbat Linux运用一个功能广泛的缓冲和缓存框架来提高系统的速度。缓冲和缓存利用一部分系统物理内存,确保最重要、最常使用的块设备数据在操作时可直接从主内存获取,而无需从低速设备读取。物理内存还用于存储从快设备读取的数据,使得随后对该数据的访问可直接在物理内存进行,而无需从外部设备再次取用。考虑系统中多种因素然后延迟写回在总体上改进了系统的性能。前面分析的部分
2012-02-27 09:13:10
9657
原创 Linux设备驱动编程模型之设备篇
设备驱动程序模型建立在几个基本数据结构上,这些结构描述了总线、设备、设备驱动、属性以及他们之间的关系。我们首先认识一下这些数据结构。 一、数据结构设备表述符struct device { struct device *parent;/*指向父设备的指针*/ /*该字段用于管理device和其他device结构,一起device 与其他结构之间的关系*/ stru
2012-02-25 16:37:59
3189
转载 struts2与spring集成时,关于Action类中成员bean自动注入的问题
public class LoginAction extends ActionSupport{ private LoginService loginService; public void setLoginService(LoginService loginService) { System.out.println("init Service......"); t
2012-02-16 11:11:33
1438
转载 MySQL根用户root密码忘记后的处理方法
MySQL根用户root密码忘记后的处理方法: Windows平台下的步骤 1.以管理员的身份登录到windows系统 2.用windows服务管理工具或任务管理器来停止MySQL服务 3.建立一个单行的文本文件,保存为c:\mysql\pwdhf.txt, 内容是SET PASSWORD FOR 'root'@'localhost' = PASSWORD('MyNewPass
2012-02-15 19:10:25
1665
原创 Linux设备驱动编程模型之上层容器篇
2.6内核增加了一个引人注目的新特性——统一设备模型(device model)。设备模型提供了一个独立的机制专门来表示设备,并描述其在系统中的拓扑结构,从而使得系统具有以下优点:l 代码重复最小化。l 提供诸如引用计数这样的统一机制。l 可以列举系统中所有的设备,观察它们的状态,并且查看它们连接的总线。l 可以将系统中的全部
2012-02-14 20:30:44
3185
3
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人