自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(59)
  • 收藏
  • 关注

转载 详解硬盘的典型故障

硬盘做为计算机的外存储器,容量越做越大,但是其稳定性好像却是越来越不如以前。到现在还有三、四百MB的IDE接口老硬盘在二手市场上销售,并且用起来一点问题也没有,只是速度太慢。可新的大容量硬盘呢?速度是快了许多,就是三天两头的出毛病。   硬盘在使用过程中,由于硬盘的质量问题,供电不良,病毒破坏,高频干扰等情况会出现如下的故障现象:   1.硬盘偶尔丢失数据   按理论上说,正常情况下硬

2009-05-21 17:12:00 889

原创 嘿嘿,看看谁访问这里

2009-03-13 17:52:00 1020

转载 无锁(lock-free)数据结构

提到并行计算通常都会想到加锁,事实却并非如此,大多数并发是不需要加锁的。比如在不同电脑上运行的代码编辑器,两者并发运行不需要加锁。在一台电脑上同时运行的媒体播放放器和代码编辑器,两者并发运行不需要加锁(当然系统调用和进程调度是要加锁的)。在同一个进程中运行多个线程,如果各自处理独立的事情也不需要加锁(当然系统调用、进程调度和内存分配是要加锁的)。在以上这些情况里,各个并发实体之间没有共享数据,所以

2009-02-17 16:41:00 6464 1

转载 LINUX 下异常信号

我们介绍一些标准信号的名称以及它们代表的事件。每一个信号名称是一个代表正整数的宏,但是你不要试图去推测宏代表的具体数值,而是直接使用名称。这是因为这个数值会随不同的系统或同样系统的不同版本而不同,但是名称还算是标准化和统一的。   这些名称定义在signal.h中。   int NSIG是一个定义的宏,它描述了定义的信号的数量。由于信号的数值是从0开始连续分配的,所以,NSIG比系统中所定义的

2009-01-14 21:38:00 2454

原创 Using SRC Language

 <span style="font-size:9.0pt;font-family:宋体;mso-ascii-font-family:Calibri;mso-hansi-font-family:Calibri">更新至版本1.1<p class="MsoNormal" align="right" style="text-align:right;text-indent:18.0pt;

2008-12-31 15:00:00 1617

原创 SRC Language

<p class="MsoNormal" align="right" style="text-align:right;text-indent:18.0pt;mso-char-indent-count:2.0"><span style="font-size:9.0pt;font-family:宋体;mso-ascii-font-family:Calibri;mso-hansi-font-fa

2008-12-31 10:35:00 2433

原创 《蚂蚁塔防》Antbuster

最近对Antbuster游戏(http://www.rstein.org/antbuster/)有点兴趣,目前达到的最好成绩是91级,但是还没排上China的rank,于是利用周末好好研究了一下里面各个炮塔的参数与性能,发现网上搜到的很多资料都是粗略并且不准确的,所以觉得有必要发表出来。特别是以前自己看好的炮种,例如导弹和激光,经过实战测试,性能竟然只是中等;反而是以前觉得不实用的其他炮种,测

2008-12-15 09:47:00 5156

原创 多线程下的返回值优化陷阱

“函数的返回值优化”是我们对程序的一个常见优化手段。只要可能,我们都应该返回对象的有效引用,而不是重新生成一个临时对象。但是,也许这种想法在多线程里需要更仔细的斟酌一下。我从一个简单例子讲起:templateclass FdMap{    std::vector vec_;public:    void Set(int fd,const T & v){      

2008-10-10 19:39:00 1255 6

翻译 几种文件系统的介绍

  每个操作系统都有配套的文件系统,分别提供了不同的特性。本章简单的介绍一些的文件系统,比如具有很高历史地位的BSD FFS,传统而流行的Linux Ext2,Macintosh HFS,还有高级的Window NTFS和SGI Irix的XFS。从历史角度,文件系统就是一种管理持久存储介质的方法。大多数文件系统的基础都是简单的目录和文件多级结构。这种设计虽然简单,但是却可以有许多实现。可

2008-07-31 11:01:00 2530

原创 NTFS的目录和文件

  本文介绍NTFS的文件和目录。我将从目录在NTFS卷里的存储方式开始,然后介绍用户数据文件的细节,包括文件是怎样存储和命名的,以及文件的最大字节限制。接着我将描述文件的标准属性,最后是重解析点(reparse points),它是Windows 2000里NTFS 5.0引入的新特性。 NTFS的目录 从外部结构看,NTFS组织目录的方式和FAT一样(其他许多文件系统也是如

2008-07-24 18:19:00 9059 1

原创 NTFS体系结构

假定读者对NTFS(New Technology File System)已有基本的了解,不再赘述NTFS的特性。Microsoft发明了NTFS文件系统,为了能出色的完成使命,NTFS在设计上及其精细和完整。本文详细讨论NTFS卷(volumes)的体系结构,和构成NTFS分区(partition)的关键数据结构,解释NTFS如何使用重要的文件系统结构来储存信息,有时会与FAT文件系统进行比

2008-07-24 09:53:00 6569

翻译 Reiser文件系统结构(4)

日志(Journal)Reiser文件系统的日志是一些连续的磁盘块,记录了文件系统的所有事务。文件系统每次有修改时,都会把一系列操作(即为了维持文件系统的一致性,必须原子地完成的那些操作)组合成为事务,并首先记录到日志里。在迟一些的时候,这些事务被刷新,并标记为成功。日志的大小是固定的。在2.4.x版本Linux实现里,日志大小是8192个块,加一个日志头信息块。日志本身包括一个变长的事务

2008-07-12 11:34:00 1920

翻译 Reiser文件系统结构(3)

叶子节点(Leaf nodes)叶子节点处于S+树的最底层,除了间接项(indirect items),所有的数据都存储在叶子节点里。叶子节点由头信息,对象头信息和对象本身组成:  注意空闲区间是在块的中间,而且对象本身按反序排列,这样做的好处是加入新对象时不需要移动任何已有的对象。新对象的头信息加到头信息队列的后面,新对象本身加到对象队列的前面。同样注意对象本身可以是变长

2008-07-12 11:33:00 1051

翻译 Reiser文件系统结构(2)

文件系统的树(File System Tree)Reiser文件系统采用平衡树结构(B+树或叫S+树),由内部节点(internal nodes)和叶子节点(leaf nodes)组成,每个节点都是一个磁盘块。每个对象(item),比如文件,目录或状态项(stat items)都有一个唯一的key,通过比较key可以定位到一个inode节点。内部节点由key和指向子节点的指针组成。指针的数目比

2008-07-12 11:27:00 1144

翻译 Reiser文件系统结构(1)

Reiser文件系统由Hans Reiser发明,设计目标是在性能上超过ext2文件系统,提供更高的空间利用率,并且在处理大目录时能强过所有当时的文件系统。Reiser文件系统使用平衡树结构来存储文件和目录,并提供日志功能。本文描述Reiser文件系统3.6版本在磁盘上的结构。文本不解释文件系统的平衡树是怎样工作的,日志是怎样记录的,以及文件和目录是怎样实现的。块(Blocks)Rei

2008-07-12 11:22:00 1216

翻译 CppUnit 入门

简单测试用例(Simple Test Case)如果你想知道你的代码是否运行正确,你该怎么做?有很多方法。通过debugger单步调试或者给你的代码里面乱填一些输出流是两种最简单的方法,但是它们都有缺点。单步调试虽然好但不能自动完成,每当你的代码变化时都不得不重新来。输出文本的方法也好,但是它会把代码弄得很不好看,并且大多数情况下,产生比你需要多得多的信息。用CppUnit测试能够自动运行

2008-06-14 09:43:00 1809

原创 __mt_alloc源码分析(12)

__pool的销毁终于,我们来到了最后一站,本节完后,整个mt allocator源码分析也就结束了。和__pool一样,_M_destroy函数其实从未被调用过,但是为了保持设计的完整性,这个函数还是有意义的。 209    void210    __pool::_M_destroy() throw() _M_destroy函数原型。 211    {21

2008-05-27 13:03:00 894

原创 __mt_alloc源码分析(11)

__pool的内存释放多线程内存池__pool的内存释放工作主要由函数_M_reclaim_block完成。 250    void251    __pool::_M_reclaim_block(char* __p, size_t __bytes) 函数原型,参数__p为用户释放的内存块地址,__bytes为内存块字节大小。 252    {253     

2008-05-27 11:36:00 926

原创 __mt_alloc源码分析(10)

__pool::_M_reserve_block最后,当线程自己的空闲块没有的时候,__mt_alloc必须向内存池的全局空闲块链表求援,于是进入了_M_reserve_block函数。 312    char* 313    __pool::_M_reserve_block(size_t __bytes, const size_t __thread_id) _M_re

2008-05-26 10:37:00 821

原创 __mt_alloc源码分析(9)

__pool的内存分配虽然我在前面已经介绍过__mt_alloc::allocate函数,但是结合这里的多线程环境,我建议读者还是回顾一下它的代码。其实__mt_alloc::allocate函数并不关心内存池是多线程还是单线程的,它在2种环境下都采用统一的操作步骤,只是在单线程的时候其中有些步骤什么事情都不用做,于是我们前面就忽略了。而到了多线程下,每个步骤都变得有用和必需了。 __

2008-05-26 10:32:00 990

原创 __mt_alloc源码分析(8)

__gnu_cxx::lockOK,现在是时候研究lock了。它的定义在GCC源码的“libstdc++-v3/include/bits/concurrence.h”文件里,以下简称concurrence.h。 79     /// @brief  Scoped lock idiom.80     // Acquire the mutex here with a constru

2008-05-26 10:26:00 1028

原创 __mt_alloc源码分析(7)

__pool的初始化__pool的初始化工作同样包括2个部分,对象构造和初始化。 356        explicit __pool() 357        : _M_bin(NULL), _M_bin_size(1), _M_thread_freelist(NULL) 358        { }359  360        explicit __pool(co

2008-05-23 16:15:00 989

原创 __mt_alloc源码分析(6)

class __pool__pool是多线程下的内存池类型。在某些方面,它是__pool的扩展,但是在其他很多方面,它比__pool要复杂得多。__pool的基类也是__pool_base,所以它继承了__pool_base的所有成员变量,包括_M_options,_M_binmap和_M_init。同时__pool_base::_Tune和__pool_base::_Block_addres

2008-05-22 11:27:00 774

原创 __mt_alloc源码分析(5)

__pool的内存分配本节研究__pool在分配内存时做的事情。回忆一下__mt_alloc:: allocate函数的内容,一般情况下用户通过某个bin的_M_first[0]可以得到想要的内存,但是在_M_first[0]为0时,__mt_alloc:: allocate调用了: 701       // Null, reserve.702       __c = __pool

2008-05-21 18:08:00 723

原创 __mt_alloc源码分析(4)

class __pool终于,我们要开始研究mt allocator里最核心的东西了。__pool是实际上的内存池类,以前我们介绍的那么多类,都是在它的基础上建立起来的“上层建筑”。 188    template189      class __pool; 这是__pool的原型,模板参数_Thread表示是否支持多线程。接着分别对_Thread为false和true的情

2008-05-21 15:29:00 934

原创 __mt_alloc源码分析(3)

struct __common_pool__common_pool是__common_pool_base的基类,它作用就是定义pool_type和实现_S_get_pool函数。 382    template class _PoolTp, bool _Thread>383      struct __common_pool __common_pool的原型,模板参数_Po

2008-05-20 14:22:00 954

原创 __mt_alloc源码分析(2)

struct __per_type_pool_policy 在继续深入到__common_pool_base和其他pool类里面之前,我好奇的看了下__per_type_pool_policy的定义,发现一些事情,于是决定先说说它。 545    /// @brief  Policy for individual __pool objects.546    template cla

2008-05-19 21:16:00 2109

原创 __mt_alloc源码分析(1)

本文从源代码级别研究mt allocator的内部实现,使用GCC 4.1.2版本的源码,主要源文件为库文件和GCC源码中的“libstdc++-v3/src/ mt_allocator.cc”。假定读者对mt allocator的原理已有一定的了解。 class __mt_alloc为避免一开始就深入到复杂的内存分配机制里,我采用从上往下的研究方法。最顶层自然是提供给用户使用的_

2008-05-18 14:41:00 2993 1

翻译 多线程的内存分配器mt_alloc

A fixed-size, multi-thread optimized allocator原文URL:http://list.cs.brown.edu/people/jwicks/libstdc++/html/ext/mt_allocator.html简介mt allocator是一个固定大小(2的幂)内存的分配器,最初是为多线程应用程序(以下简称为MT程序)设计的。经过多年的改进,

2008-05-16 12:26:00 6922

翻译 Modern Core Wars

 Core Wars听起来像是10年轻美国的科幻小说,实际上它是现实中的一个游戏。Core Wars是计算机程序之间的战争游戏,放下你手中的玩具吧,现在汇编语言是你的武器,编程经验就是你的秘籍。Core Wars所使用的汇编语言与众不同,只有11个不同的 指令(move,jump,data,conditional jump)和4中寻址方式。指令中的所有地址都是相对于当前执行指令的相对地址,

2008-04-30 10:43:00 1038

翻译 Optimizing Code with GCC

现在的编译器越来越聪明,功能越来越强,从简单的函数内联,到复杂的寄存器分析,一系列代码革命使程序运行得越来越快。大多数时候,更快比更小重要,因为磁盘空间和内存都变得便宜了。但是在嵌入式系统里,更小和更快是一样重要的,所以把代码进行优化是非常有意义的工作。如果你已经知道了怎样用gcc编译你的代码,现在是时候让你的代码更快或者更小了,这也是本章的内容。如果学有所成的话,你甚至可以让你的下一个程序既

2008-03-15 14:42:00 5488 1

翻译 Using GCC’s C++ Compiler

  本文讨论GNU编译器集合(GCC)中的C++编译器(g++)的典型用法,主要是指命令行选项的构造。GCC的C++编译器正常安装后,可以使用g++或c++命令执行。GCC Option Refresher本节回顾GCC的C编译器的基本使用方法。g++编译器的选项可以是单字符,比如-o,也可以多字符,比如-ansi。所以你不可以把多个单字符选项合写到一起,这和许多其他GNU和UNI

2008-03-15 14:41:00 3284

原创 acovea安装完全指南

ACOVEA (Analysis of Compiler Options via Evolutionary Algorithm)是一个测试GCC的C和C++编译器最佳编译选项的程序。它的主页是http://www.coyotegulch.com/products/acovea/。本文主要是我安装ACOVEA的经验,因为也发现了一些问题,所以记下来。首先需要下载ACOVEA的安装库,当前最新

2008-02-24 14:52:00 1633 1

翻译 C-Store: A Column-oriented DBMS(1)

 1.介绍大部分的DBMS实现都采用面向记录(record-oriented)的存储方式,即把一条记录的所有属性(列)存储在一起。在这种行存储(row store)体系里,单次磁盘写操作就能把一条记录的所有列刷到磁盘里。这样能优化写操作,我们称这种存储体系为写优化(write-optimized)系统。与之相反的是,面向ad-hoc大数据量查询的系统应该是读优化(read-optimize

2008-02-24 14:50:00 5120 6

原创 DBMS一种设计方案(原)

文件存储方式一、 整体架构一个数据表格采用数据集、索引集分开的存储方式,分别为数据文件和索引文件,有可能还需要一个关键字文件。数据表格必须指定一个主关键字,主关键字在数据表内不允许重复。数据表格还可以有若干索引,索引可以重复。只有第一个索引(主索引)能影响数据文件内的数据分布,所有相同主索引的数据会存放于同一个数据文件中。如果相同主索引的数据太多,超过数据文件的大小限制,则也可

2008-02-24 14:47:00 2373

翻译 Hbase Architecture 译文

原文链接:http://wiki.apache.org/lucene-hadoop/Hbase/HbaseArchitecture引言本文介绍了HBase,它是Hadoop的一个简单数据库。它和Google的Bigtable非常相似,也有一些区别。如果你知道Bigtable,很好;如果你不知道,也不影响你理解本文。数据模型HBase使用了和Bigtable非常相似的数据模型。用户在

2008-02-24 14:45:00 4907 1

原创 升级RH9.0到2.6.x内核过程与问题解答(整理)

linux-2.6.x内核发布后,与2.6.x内核配套的系统程序并没有相应的来得及更新, 升级过程会碰到很多问题。虽然网上已有很多关于升级到2.6.x文章,但总是有些细节没有作很好的总结,因此撰写本文将我的经验与大家分享一下。我是在虚拟机上将Linux系统从Redhat9.0升级到2.6.5内核,虚拟机软件为:VMware Workstation 4.0.5 build-6030。       准

2008-02-24 14:41:00 1466

原创 大整数类的实现(6)(原创)

 2)——————————————————————————————————————————    templateclass __Alloc>        bool HugeNumberBase::EqualValue(unsigned long value) const{            if(data_[N-1]==value){                for(long

2008-02-24 14:39:00 1134

原创 大整数类的实现(7)(原创)

3)————————————————————————————————————————————————    templateclass __Alloc>        HugeNumberBase & HugeNumberBase::RightShift(){            for(long i=N-1;i>0;--i)                data_[i]=(data_

2008-02-24 14:39:00 790

原创 大整数类的实现(5)(原创)

5.HugeNumberBase.h————————————————————————————————————————/* * Copyright (c) 2005 by DoZerg.  ALL RIGHTS RESERVED.  * Consult your license regarding permissions and restrictions. *//**************

2008-02-24 14:38:00 817

空空如也

空空如也

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

TA关注的人

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