皮皮网

【直播源码】【同城 源码】【apk源码】磁盘驱动程序源码分析_磁盘驱动器的驱动程序

来源:ep互联源码 时间:2024-11-23 03:49:21

1.[转载] 细说jbd (journal-block-device)& 源码分析
2.FREE SOLO - 自己动手实现Raft - 17 - leveldb源码分析与调试-3
3.linux设备驱动程序——i2c总线的磁盘程序磁盘程序添加与实现
4.xfs文件系统:layout与架构、源码分析
5.linux设备驱动程序——设备树(0)-dtb格式
6.0×000000D1,驱动驱动器的驱动0×00000008,0×00000002,0×0000000,0×F98F0C00

磁盘驱动程序源码分析_磁盘驱动器的驱动程序

[转载] 细说jbd (journal-block-device)& 源码分析

       jbd 要解决什么问题

       文件系统某些操作抽象成原子操作

       若干个原子操作组成一个事务

       在磁盘上单独划分一个日志空间

       将内存事务的数据写到日志中

       从日志恢复数据

       概念介绍

       buffer_head 元数据块

       handle transaction journal commit checkpoint revoke recover kjournald

       数据结构介绍

       handle_t 表示一个原子操作

       transaction_t 表示一个事务

       journal_t journal_superblock_t journal_head journal_head_t

       三种日志模式

       jbd基本操作

       journal_start journal_stop journal_get_create_access journal_get_write_access journal_get_undo_access

       journal_dirty_data journal_dirty_metadata journal_forget journal_revoke journal_extend

       元数据缓冲区处理流程

       数据缓冲区处理流程

       提交事务kjournald----- 时刻准备着

       fs/jbd/journal.c

       提交事务

       journal_commit_transaction __journal_clean_checkpoint_list journal_submit_data_buffers

       fs/jdb/commit.c

       journal_write_revoke_records journal_write_metadata_buffer journal_write_commit_record

       数据块缓冲区状态转移图

       元数据块缓冲区状态转移图

       日志恢复

       准备工作

       journal_recover 函数

       恢复步骤1: PASS_SCAN

       恢复步骤2:PASS_REVOKE

       恢复步骤3:PASS_REPLAY

       恢复后的设置工作

FREE SOLO - 自己动手实现Raft - - leveldb源码分析与调试-3

       leveldb的数据流动路径是单向的,从内存中的源码memtable流向不可变的memtable,最终写入到磁盘上的分析sorted table文件中。以下是磁盘程序磁盘程序几个关键状态的分析,来了解内存和磁盘上数据的驱动驱动器的驱动直播源码分布。

       以下是源码分析所涉及的状态:

       1. 数据全在内存中

       随机写入条数据,观察到数据全部存储在memtable中,分析此时还没有进行compaction操作。磁盘程序磁盘程序

       2. 数据全在磁盘中

       写入大量数据,驱动驱动器的驱动并等待数据完全落盘后重启leveldb。源码此时,分析数据全部存储在磁盘中,磁盘程序磁盘程序分布在不同的驱动驱动器的驱动level中。在每个level的源码sstable文件中,可以看到key的最大值与最小值。

       3. 数据部分在内存中,部分在磁盘中

       随机写入条数据,发现内存中的memtable已满,触发compaction操作,数据开始写入到sstable文件。同时,继续写入的数据由于还未达到memtable上限,仍然保存在内存中。

       4. 总结

       通过观察不同数据写入量导致的数据在内存与磁盘间的流动,我们可以看到leveldb内部状态的转换。

       下篇文章将分析LRUCache数据状态的变化。敬请期待!

linux设备驱动程序——i2c总线的添加与实现

       一文看懂linux内核详解

       深入了解使用linux查看磁盘io使用情况

       在实际驱动开发过程中,i2c总线也是集成在系统中的,驱动开发者不需要关心i2c总线的初始化,只需要将相应的i2c_client和i2c_driver挂载在总线上进行匹配即可。

       那么,i2c总线在系统中是同城 源码如何初始化得来的呢?

       答案就在文件i2c-core-base.c中,它的过程是这样的:

       在i2c_init函数中,使用bus_register()将i2c总线注册到系统中,那么这个i2c_init()函数是在哪里被调用的呢?

       在内核启动的过程中,进入C语言环境的第一个入口函数是start_kernel(),但是i2c_init()并非由start_kernel()间接调用,而是借助于linux内核中的initcall机制被调用,简而言之,就是将这个函数地址在编译阶段放入特定的段中,在内核初始化时由某个启动函数将这些段中的函数一一取出并执行。

       i2c总线通过postcore_initcall()将init函数注册到系统中。

       当模块被加载进系统时,就会执行i2c_init函数来进行初始化。

       在i2c_bus_type结构体中,定义了match(),probe(),remove()和shutdown()函数,match()函数就是当有新的i2c_client或者i2c_driver添加进来时,试图寻找与新设备匹配的项,返回匹配的结果。

       remove()和shutdown(),顾名思义,这两个函数是管理的驱动移除行为的。

       对于probe函数,在之前的章节中提到:当相应的device和driver经由总线匹配上时,会调用driver部分提供的probe函数。

       那么:

       带着这两个疑问,我们接着往下看。

       在这里我们不免要回顾一下前面章节所说的,作为一个驱动开发者,如果我们要开发某些基于i2c的设备驱动,需要实现的框架流程是怎样的:

       但是问题是,为什么device和driver都注册进去之后,就会调用driver部分提供的probe函数呢?

       为了解决这些问题,最好的办法就是看源代码,假设我们是apk源码以设备树的方式进行匹配,device(即i2c_client)部分已经被注册到系统中,此时我们向系统中注册(insmod由driver部分程序编译的模块)相应的driver部分,接下来我们跟踪driver部分注册到i2c总线的流程,看看它是怎么实现的:

       跟踪i2c_add_driver:

       经过一系列的代码跟踪,找到了bus_add_driver(),根据名称可以知道,这个函数就是将当前i2c_driver添加到i2c_bus_type(即i2c总线)中。

       接着往下看:

       从第一部分可以看到,将当前drv链入到bus->p->klist_drivers链表中,那么可以猜到,在注册device部分的时候,就会将device链入到bus->p->klist_devices中。

       然后,再看driver_attach(drv):

       driver_attach调用bus_for_each_dev,传入当前驱动bus(即i2c_bus_type),当前驱动drv,以及一个函数__driver_attach。

       bus_for_each_dev对每个device部分调用__driver_attach。

       在__driver_attach中,对每个drv和dev调用driver_match_device(),并根据函数返回值决定是否继续执行调用driver_probe_device()。

       从函数名来看,这两个函数大概就是我们在前文中提到的match和probe函数了,我们不妨再跟踪看看,先看看driver_match_device()函数:

       果然不出所料,这个函数十分简单,如果当前驱动的所属的bus有相应的match函数,就调用match函数,否则返回1.

       当前driver所属的总线为i2c_bus_type,根据上文i2c总线的初始化部分可以知道,i2c总线在初始化时提供了相应的match函数,所以,总线的match函数被调用,并返回匹配的元源码结果。

       接下来我们再看看driver_probe_device()函数:

       在driver_probe_device中又调用了really_probe,在really_probe()中,先判断当前bus总线中是否注册probe()函数如果有注册,就调用总线probe函数,否则,就调用当前drv注册的probe()函数。

       到这里,我们解决了上一节中的一个疑问:总线和driver部分都有probe函数时,程序是怎么处理的?

       答案已经显而易见了:优先调用总线probe函数。

       而且我们理清了总线的match()函数和probe()函数是如何被调用的。

       那么,上一节中还有一个疑问没有解决:总线的match和probe函数执行了一些什么行为?

       对于总线probe函数,获取匹配成功的device,再由device获取driver,优先调用driver->probe_new,因为driver中没有设置,直接调用driver的probe函数。

       总线probe和driver的probe函数的关系就是:当match返回成功时,优先调用总线probe,总线probe完成一系列的初始化,再调用driver的probe函数,如果总线probe函数不存在,就直接调用driver的probe函数,所以当我们在系统中添加了相应的device和driver部分之后,driver的probe函数就会被调用。

       对于总线match函数,我们直接查看在i2c总线初始化时的函数定义:

       i2c_device_match就是i2c_driver与i2c_device匹配的部分,在i2c_device_match函数中,可以看到,match函数并不只是提供一种匹配方式:

       接下来再深入函数内部,查看匹配的细节部分:

       在i2c_of_match_device中,调用了of_match_device()和i2c_of_match_device_sysfs()两个函数,这两个函数代表了两种匹配方式,先来看看of_match_device:

       of_match_device调用of_match_node。源码超市

       of_match_node调用__of_match_node函数。

       如果你对设备树有一定的了解,就知道系统在初始化时会将所有设备树子节点转换成由struct device_node描述的节点。

       在被调用的__of_match_node函数中,对device_node中的compatible属性和driver部分的of_match_table中的compatible属性进行匹配,由于compatible属性可以设置多个,所以程序中会对其进行逐一匹配。

       我们再回头来看设备树匹配方式中的i2c_of_match_device_sysfs()匹配方式:

       由i2c_of_match_device_sysfs()的实现可以看出:当设备树中不存在设备节点时,driver部分的of_match_table中的compatible属性试图去匹配i2c_client(device部分)的.driver.name属性.

       因为设备树的默认规则,compatible属性一般形式为"vender_id,product_id",当compatible全字符串匹配不成功时,取product_id部分再进行匹配,这一部分主要是兼容之前的不支持设备树的版本。

       acpi匹配方式较为少用且较为复杂,这里暂且不做详细讨论

       id_table匹配方式中,这种匹配方式一目了然,就是对id_table(driver部分)中的.name属性和i2c_client(device部分)的.name属性进行匹配。那么i2c_client的.name是怎么来的呢?

       在非设备树的匹配方式中,i2c_client的.name属性由驱动开发者指定,而在设备树中,i2c_client由系统对设备树进行解析而来,i2c_client的name属性为设备树compatible属性"vender_id,product_id"中的"product_id",所以,在进行匹配时,默认情况下并不会严格地要求 of_match_table中的compatible属性和设备树中compatible属性完全匹配,driver中.drv.name属性和.id.name属性也可以与设备树中的"product_id"进行匹配。

       关于linux i2c总线的初始化以及运行机制的讨论就到此为止啦

xfs文件系统:layout与架构、源码分析

       本文由腾讯工程师aurelian撰写,深入解析Linux内核中xfs文件系统的layout与架构,结合源码剖析其工作原理。首先,xfs的layout包括超级块、AGF管理(空闲空间追踪)、AGI管理(inode管理)、AGFL(空闲链表)以及B+树结构等组成部分,每个部分都有其特定功能,如超级块用于存储关键信息,B+树用于快速查找空间。

       在文件操作方面,xfs支持iops、fops和aops三个操作集,分别负责inode元数据、内存级读写和磁盘级读写。创建文件时,会检查quota并预留空间,通过一系列函数如xfs_trans_reserve_quota和xfs_dir_ialloc进行操作。分配inode时,会依据agi信息和ag的空闲情况动态分配,并通过xfs_iget确保inode在核心内存中可用。

       磁盘级inode分配涉及agi信息的获取和B+树的查找,xfs_ialloc_ag_alloc会根据空闲inode情况完成连续或非连续的分配。写操作涉及内存和磁盘级别,buffer io通过page cache管理,直接io和DAX write则有特定的处理方式。xfs的映射关系和data区域树管理对于高效读写至关重要。

       工具方面,mkfs.xfs用于格式化,xfs_fsr、xfs_bmap、xfs_info等用于维护和监控文件系统,xfs_admin和xfs_copy用于系统参数调整和数据复制,xfs_db则是用于调试的工具。希望本文能帮助读者理解xfs的复杂性,如需了解更多详情,可关注鹅厂架构师公众号。

linux设备驱动程序——设备树(0)-dtb格式

       设备树的一般操作方式是:开发人员根据开发需求编写dts文件,然后使用dtc将dts编译成dtb文件。

       dts文件是文本格式的文件,而dtb是二进制文件,在linux启动时被加载到内存中,接下来我们需要来分析设备树dtb文件的格式。

       为什么要了解设备树dtb文件的格式

       dtb作为二进制文件被加载到内存中,然后由内核读取并进行解析,如果对dtb文件的格式不了解,那么在看设备树解析相关的内核代码时将会寸步难行,而阅读源代码才是了解设备树最好的方式,所以,如果需要更透彻的了解设备树解析的细节,第一步就是需要了解设备树的格式。

       dtb格式总览

       dtb的格式是这样的:

       dtb header

       但凡涉及到数据的记录,就一定会有一个总的描述部分,就像磁盘的超级块,书的目录,dtb当然也不例外,这个描述头部就是dtb的header部分,通过这个header部分,用户可以快速地了解到整个dtb的大致信息。

       header可以用这么一个结构体来描述:

       magic

       设备树的魔数,魔数其实就是一个用于识别的数字,表示设备树的开始,linux dtb的魔数为 0xddfeed.

       totalsize

       这个设备树的size,也可以理解为所占用的实际内存空间。

       off_dt_struct

       offset to dt_struct,表示整个dtb中structure部分所在内存相对头部的偏移地址

       off_dt_strings

       offset to dt_string,表示整个dtb中string部分所在内存相对头部的偏移地址

       off_mem_rsvmap

       offset to memory reserve map,dtb中memory reserve map所在内存相对头部的偏移地址,

       version

       设备树的版本,截至目前的最新版本为.

       last_comp_version

       最新的兼容版本

       boot_cpuid_phys

       这部分仅在版本2中存在,后续版本不再使用。

       size_dt_strings

       表示整个dtb中string部分的大小

       size_dt_struct

       表示整个dtb中struct部分的大小

       alignment gap

       中间的alignment gap部分表示对齐间隙,它并非是必须的,它是否被提供以及大小由具体的平台对数据对齐和的要求以及数据是否已经对齐来决定。

       memory reserve map

       memory reserve map:描述保留的内存部分,这个map的数据结构是这样的:

       这部分存储了此结构的列表,整个部分的结尾由一个数据为0的结构来表示(即physical_address和size都为0,总共字节)。

       这一部分的数据并非是节点中的memory子节点,而是在设备开始之前(也就是第一个花括号之前)定义的,例如:

       这一部分的作用是告诉内核哪一些内存空间需要被保留而不应该被系统覆盖使用,因为在内核启动时常常需要动态申请大量的内存空间,只有提前进行注册,用户需要使用的内存才不会被系统征用而造成数据覆盖。

       值得一提的是,对于设备树而言,即使不指定保留内存,系统也会默认为设备树保留相应的内存空间。

       同时,这一部分需要位(8字节)对齐。

       device-tree structure

       device-tree structure:每个节点都会被描述为一个struct,节点之间可以嵌套,因此也会有嵌套的struct。

       structure的的结构是这样的:

       device-tree strings

       device-tree strings:在dtb中有大量的重复字符串,比如"model","compatile"等等,为了节省空间,将这些字符串统一放在某个地址,需要使用的时候直接使用索引来查看。

       需要注意的是,属性部分格式为key = value,key部分被放置在strings部分,而value部分的字符串并不会放在这一部分,而是直接放在structure中。

       dtb文件解析示例

       光说不练假把式,下面我就使用一个简单的示例来剖析dtb的文件格式。

       下述示例仅仅是一个演示demo,不针对任何平台,为了演示方便,编写了一个非常简单的dts文件。 /dts-v1/; / {

       编译当前dts文件,获取对应的dtb文件。

       鉴于dtb文件为二进制文件,普通编辑器打开显示乱码,我们使用ultraEdit查看,它将数据以进制形式显示:

       整个dtb文件还是比较简单的,图中的红色框出的部分为header部分的数据,可以看到:

       整个头部为字节,进制为0x,从头部信息中off_mem_rsvmap部分可以得到,reserve memory起始地址为0x,上文中提到,这一部分使用一个字节的struct来描述,以一个全为0的struct结尾。

       后字节全为0,可以看出,这里并没有设置reserve memory。

       structure 部分

       上文回顾:每一个属性都是以 key = value的形式来描述,value部分可选。

       偏移地址来到0x(0x+0x),接下来8个字节为,根据上述structure中的描述,这是OF_DT_PROP,即标示属性的开始。

       接下来4字节为,表明该属性的value部分size为字节。

       接下来4字节是当前属性的key在string 部分的偏移地址,这里是,由头部信息中off_dt_strings可以得到,string部分的开始为,偏移地址为0,所以对应字符串为"compatible".

       之后就是value部分,这部分的数据是字符串,可以直接从右侧栏看出,总共字节的字符串"hd,test_dts", "hd,test_xxx",因为字符串之间以0结尾,所以程序可以识别出这是两个字符串。

       可以看出,到这里,compatible = "hd,test_dts", "hd,test_xxx";这个属性就被描述完了,对于属性的描述还是非常简单的。

       按照固有的规律,接下来就是对#address-cells = <0x1>的解析,然后是#size-cells = <0x1>...

       然后就是递归的子节点chosen,memory@等等都是按照上文中提到的structure解析规则来进行解析,最后以结尾。

       与根节点不同的是,子节点有一个unit name,即chosen,memory@这些名称,并非节点中的.name属性。

       而整个结构的结束由来描述。

       一般而言,在位系统中,dtc在编译dts文件时会自动考虑对齐问题,所以对于设备树的对齐字节,我们只需要有所了解即可,并不会常接触到。

       好了,关于linux设备树dtb文件格式的讨论就到此为止啦。

0×D1,0×,0×,0×,0×FF0C

       è“å±"的硬件原因及解决

       "蓝屏"现象多和内存大小、CPU频率、光驱、硬盘碎片等等关系密切......在计算机的使用过程中,经常会遇到蓝屏的情况。对于初学者来讲,好象就是一场电脑灾难一样,不知所措。其实只要了解了原因之后就不用怕了。造成计算机蓝屏的原因有很多种,硬件方面的原因总体可以概括为以下几种:

       ä¸€ã€å±å¹•æ˜¾ç¤ºç³»ç»Ÿå¿™ï¼Œè¯·æŒ‰ä»»æ„é”®ç»§ç»­â€¦â€¦

       1、虚拟内存不足造成系统多任务运算错误

       è™šæ‹Ÿå†…存是WINDOWS系统所特有的一种解决系统资源不足的方法,其一般要求主引导区的硬盘剩余空间是其物理内存的2-3倍。而一些发烧友为了充分利用空间,将自己的硬盘塞到满满的,忙记了WINDOWS这个苛刻的要求。结果导致虚拟内存因硬盘空间不足而出现运算错误,所以就出现蓝屏。要解决这个问题好简单,尽量不要把硬盘塞得满满的,要经常删除一些系统产生的临时文件、交换文件,从而可以释放空间。或可以手动配置虚拟内存,选择高级,把虚拟内存的默认地址,转到其他的逻辑盘下。这样就可以避免了因虚拟内存不足而引起的蓝屏。

       2、CPU超频导致运算错误

       è¶…频对于发烧友来说是常事,所以由超频所引起的各种故障也就在所难免了。超频,就本身而言就是在原有的基础上完成更高的性能,但由于进行了超载运算,造成其内部运算过多,使CPU过热,从而导致系统运算错误。有些CPU的超频性能比较好,如INTEL的赛扬处理器和AMD-K6-2处理器还算较好的,但有时也会出现一些莫名其妙的错误。(例如:我曾试过将INTEL赛扬A,在超频到时,软驱在没有接受命令时,进行读盘操作)。INTEL的低于的CPU以及AMD-K5的超频能力就不是那么好。建议高档的CPU要超频时,那么散热工作一定要做好,最好装一个大的风扇,再加上一些硅胶之类的散热材料。至于一些低档的CPU我建议你就最好不要超频了,免得超频达不到预想的效果反而经常出现蓝屏影响计算机的正常速度。

       äºŒã€å†…存条的互不兼容或损坏引起运算错误

       è¿™æ—¶ä¸ªæœ€ç›´è§‚的现象,因为这个现象往往在一开机的时候就可以见到,根本启动不了计算机,画面提示出内存有问题,问你是否要继续。造成这种错误是物理上的损坏内存或者内存与其它硬件不兼容所致。这时候只有换过另外的内存了。

       ä¸‰ã€å…‰é©±åœ¨è¯»ç›˜æ—¶è¢«éžæ­£å¸¸æ‰“开所至

       è¿™ä¸ªçŽ°è±¡æ˜¯åœ¨å…‰é©±æ­£åœ¨è¯»å–数据时,由于被误操作打开而导致出现蓝屏。这个问题不影响系统正常动作,只要再弹入光盘或按ESC键就可以。

       ä»¥ä¸Šæ˜¯æˆ‘在维护计算机中碰到导致蓝屏的几种原因,或许还会有其他一些莫名其妙的问题导致计算机出现蓝屏。不管怎样,遇到这类问题后,应先仔细分析问题发生的原因,然后再着手解决。

       å››ã€ç¡¬ä»¶å‰©ä½™ç©ºé—´å¤ªå°æˆ–碎片太多

       ç”±äºŽWin9X运行时需要用硬盘作虚拟内存,这就要求硬盘必须保留一定的自由空间以保证程序的正常运行。一般而言,最低应保证MB以上的空间,否则出现“蓝屏”很可能与硬盘剩余空间太小有关。另外,硬盘的碎片太多,也容易导致“蓝屏”的出现。因此,每隔一段时间进行一次碎片整理是必要的。

       äº”、系统硬件冲突

       è¿™ç§çŽ°è±¡å¯¼è‡´â€œè“å±â€ä¹Ÿæ¯”较常见。实践中经常遇到的是声卡或显示卡的设置冲突。在“控制面板”→“系统”→“设备管理”中检查是否存在带有黄色问号或感叹号的设备,如存在可试着先将其删除,并重新启动电脑,由Win9X自动调整,一般可以解决问题。若还不行,可手工进行调整或升级相应的驱动程序。

       "蓝屏"的软件原因及解决

       ä¸Žç¡¬ä»¶å¯†åˆ‡è”系的是软件,有时软件在"蓝屏"现象中也"功不可没",加载了过多的程序、注册表有问题、软硬不兼容、驱动程序有问题,相对于硬件原因来说要不易察觉些,可要多加注意.........

       ä¸€ã€å¯åŠ¨æ—¶åŠ è½½ç¨‹åºè¿‡å¤š

       ä¸è¦åœ¨å¯åŠ¨æ—¶åŠ è½½è¿‡å¤šçš„应用程序(尤其是你的内存小于MB),以免使系统资源消耗殆尽。正常情况下,Win9X启动后系统资源应不低于%。最好维持在%以上,若启动后未运行任何程序就低于%,就需要卸掉一部分应用程序,否则就可能出现“蓝屏”。

       äºŒã€åº”用程序存在着BUG

       æœ‰äº›åº”用程序设计上存在着缺陷或错误,运行时有可能与Win9X发生冲突或争夺资源,造成Win9X无法为其分配内存地址或遇到其保护性错误。这种BUG可能是无法预知的,免费软件最为常见。另外,由于一些用户还在使用盗版软件(包括盗版Win9X),这些盗版软件在解密过程中会破坏和丢失部分源代码,使软件十分不稳定,不可靠,也常常导致“蓝屏”。

       ä¸‰ã€é­åˆ°ä¸æ˜Žçš„程序或病毒攻击所至

       è¿™ä¸ªçŽ°è±¡åªè¦æ˜¯å¹³æ—¶æˆ‘们在上网的时候遇到的,当我们在冲浪的时候,特别是进到一些BBS站时,可能暴露了自己的IP,被"黑客"用一些软件攻击所至。对互这种情况最好就是在自己的计算机上安装一些防御软件。再有就是登录BBS要进行安全设置,隐藏自己IP。

       å››ã€ç‰ˆæœ¬å†²çª

       æœ‰äº›åº”用程序需调用特定版本的动态链接库DLL,如果在安装软件时,旧版本的DLL覆盖了新版本的DLL,或者删除应用程序时,误删了有用的DLL文件,就可能使上述调用失败,从而出现“蓝屏”。不妨重新安装试一试。

       äº”、注册表中存在错误或损坏

       å¾ˆå¤šæƒ…况下这是出现“蓝屏”的主要原因。注册表保存着Win9X的硬件配置、应用程序设置和用户资料等重要数据,如果注册表出现错误或被损坏,就很可能出现“蓝屏”。如果你的电脑经常出现“蓝屏”,你首先就应考虑是注册表出现了问题,应及时对其检测、修复,避免更大的损失。

       å…­ã€è½¯ç¡¬ä»¶ä¸å…¼å®¹

       æ–°æŠ€æœ¯ã€æ–°ç¡¬ä»¶çš„发展很快,如果安装了新的硬件常常出现“蓝屏”,那多半与主板的BIOS或驱动程序太旧有关,以致不能很好支持硬件。如果你的主板支持BIOS升级,应尽快升级到最新版本或安装最新的设备驱动程序。

       Windows "蓝屏"分析与解决篇

       Win也许可以说得上是一个划时代的操作系统,但是它仍然不能够避免蓝屏死机(Blue Screen of Death)问题,Win的"蓝屏"(BSOD)和NT4以前的"蓝屏"消息是完全不同的。最大的不同就是NT中的BSOD只包含一个通用的停止消息类型(就是实际的出错代码), 但是Win的BSOD包含有两种消息类型:停止消息和硬件消息。停止消息是指,当win的内核发现一个它不能够恢复的软件错误时候产生的错误消息,它分为:常规停止消息、安装停止消息、可执行程序安装停止消息、软件陷阱停止消息四种类型......针对Windows的蓝屏,在上述概括的现象与对策基础上,我们分两方面来分析:

       Windows 中蓝屏死机之停止信息分析

       ç®€ä»‹ï¼šä»€ä¹ˆæ˜¯è“å±æ­»æœºï¼ˆBSOD)问题?

       BSOD就是显示在蓝色屏幕背景下的出错信息。一般这种出错信息严重到你的整个操作系统当机,你只有重新冷启动的选择。

       åˆ¨æžBSOD

       BSOD可以分成独立的几部分,每部分包含有有价值的错误处理信息。这几部分包括:

       1、bug检查部分:这是BSOD中包含实际出错消息的位置。在这部分中,你应该注意的是出错代码(就是在单词“Stop”后面的十六进制数字)和错误符号(就是紧跟在出错代码后的单词)

       2、推荐用户采取行动部分:这部分经常包含一些一般的指导你如何纠正错误的步骤的消息。

       3、调试端口信息部分:这部分包含有你应该如何设置你的内核调试器的信息。内核调试器是让你可以通过手工连接到计算机并对进程进行调试的工具。

       ä¸‹é¢æ˜¯ä¸€ä¸ªå…·ä½“çš„BSOD例子:

       *** Stop: 0xE (0xFAA, 0X, 0X)

       KMODE_EXCEPTION_NOT_HANDLED

       *** Address FAA base at fA, DateStamp ef8d - wdmaud.sys

       If this is the first time you've seen this Stop error screen, restart your computer.

       If this screen appears again, follow these steps:

       Check to be sure you have adequate disk space. If a driver is identified in the

       Stop message, disable the driver or check with the manufacturer for driver updates.

       Try changing video adapters.

       Check with your hardware vendor for any BIOS updates. Disable BIOS memory options

       such as caching or shadowing. If you need to use Safe Mode to remove or disable

       components, restart your computer, press F8 to select Advanced Startup Options,

       and then select Safe Mode.

       Refer to your Getting Started manual for more information on troubleshooting Stop errors.

       Kernel Debugger Using: COM2 (Port 0x2f8, Baud Rate )

       Beginning dump of physical memory

       Physical memory dump complete. Contact your system administrator or technical support group.

       æ ¹æ®è¿™ä¸ªå…·ä½“的例子,按照上面刨析的BSOD四个部分,下面一一介绍:

       bug检查部分:

       è¿™æ˜¯BSOD中包含实际出错消息的位置。它看上去就是下面的代码:

       *** Stop: 0xE (0xFAA, 0X, 0X)

       KMODE_EXCEPTION_NOT_HANDLED *** Address FAA base at fA, DateStamp ef8d - wdmaud.sys

       å…¶ä¸­é”™è¯¯ä»£ç æ˜¯ä¸€ä¸ªç´§è·Ÿåœ¨Stop后面的十六进制数,在这里面它由其它四个数字组成。

       è€Œé”™è¯¯ç¬¦å·æ˜¯æŒ‡ç´§éšå…¶åŽçš„KMODE_EXCEPTION_NOT_HANDLED.

       åœ¨ä¸€äº›BSOD出错信息中,一个内存位置和文件名出现在错误符号的后面。这个信息告诉了当错误发生的时候在内存中的位置和哪个文件导致了错误的发生。当然你是否能够看到该信息是由哪种停止消息类型来决定的。在一些实际运用中,你只能够看到上面的第一行。而这里通常是表示由显示服务中导致的问题。 推荐用户采取行动部分:

       åœ¨ä¸Šé¢çš„例子中推荐用户采取行动部分如下:

       If this is the first time you've seen this Stop error screen, restart your computer. If this screen appears again, follow these steps:

       Check to be sure you have adequate disk space. If a driver is identified in the Stop message, disable the driver or check with the manufacturer for driver updates. Try changing video adapters.

       Check with your hardware vendor for any BIOS updates. Disable BIOS memory options such as caching or shadowing. If you need to use Safe Mode to remove or disable components, restart your computer, press F8 to select Advanced Startup Options, and then select Safe Mode.

       Refer to your Getting Started manual for more information on troubleshooting Stop errors.

       æŽ¨èç”¨æˆ·é‡‡å–行动部分通常是推荐用户在遇到了出错信息后应该采取的解决步骤。在消息中可以看到,解决一个BSOD也许只要重新启动或则整理出足够大的剩余空间就能够解决了。尽管这样的方法偶尔会起到作用,但是实际上要解决BSOD经常要远远复杂得多。

       è°ƒè¯•ç«¯å£ä¿¡æ¯éƒ¨åˆ†ï¼š

       è¿™éƒ¨åˆ†åŒ…含有你应该如何设置你的内核调试器的信息。我会在以后的网站里面详细介绍什么是的内核调试器。在上面的例子中,这部分内容是:

       Kernel Debugger Using: COM2 (Port 0x2f8, Baud Rate )

       Beginning dump of physical memory Physical memory dump complete. Contact your system administrator or technical support group.

       åœæ­¢ä¿¡æ¯çš„四种类型

       å½“程序或则驱动程序发生了一个不能够控制的错误消息或则试图执行一个非法指令时,系统就会发生停止出错信息。而这种信息通常由四种类型组成。

       1、常规停止消息:在正常的使用win时发生的停止消息

       å¸¸è§„停止消息通常是最难解决的出错信息,因为有可能有无数的原因能够导致错误的发生。

       2、安装停止消息:在安装win过程中的停止消息,通常由你的系统中存在和不兼容的硬件设备引起的。

       è§£å†³åŠžæ³•æ˜¯ä½ æŸ¥çœ‹ç³»ç»Ÿä¸­çš„硬件设备,找到没有列出在兼容列表中的设备。然后和你的硬件设备厂商联系看他们是否能够给你提供该设备的驱动程序。如果他们不能,那你只好从你的系统中删除该设备,并用其它的可以兼容的设备替换掉。

       å¦‚果你的所有硬件都是兼容的,你也许是存在有两个互相冲突的硬件设备。要解决这个问题,先移走任何不是必要的硬件设备,然后重新装载,一旦装载成功后,把所有移走的设备全部重新加入到系统中。这样做,通常能够解决这个问题,至少能够告诉你哪些硬件是有冲突的。

       3、可执行程序安装停止消息:表示发生在安装过程中第4个阶段(执行程序部分)的停止消息。

       å®‰è£…在可执行程序的安装过程中有两个阶段。第一个阶段是禁止硬件中断同时装载一些基本的组件,例如硬件提取层。第二个阶段是初始化你系统中所有的硬件。如果你在安装程序到了这个阶段的时候收到了停止消息错误。需要再次运行诊断程序,来判断你的硬件是否都工作正常。然后重新安装。如果你仍然遇到这个出错消息,那么就需要和微软技术支持部打交道了。

       4、软件陷阱停止消息:由于软件中的错误陷阱并且当程序试图执行一个非法指令的时候发生的停止消息。

       ç”±äºŽè½¯ä»¶ä¸­çš„错误陷阱并且当程序试图执行一个非法指令的时候发生的停止消息。例如,程序试图向一个本来是保存数字的变量写字符串的时候,这个错误就有可能发生。如果你遇到了这种类型的错误,需要记下出错信息,是什么软件导致了错误,一般这些软件都有新的版本来纠正这些错误的。

       å½“你遇到了停止消息时候可能需要的解决问题的步骤:

       é¦–先判断你最近是不是在系统中有任何的变动。如果你有,那么这些变动经常是问题产生的根源。试图删除或者移走新的硬件或软件,看是否能够解决问题。检查系统中的硬件,最好如果有硬件检测程序的话,可以运行该程序进行检测,同时重新插放你的内存卡和扩展卡。

       å¦‚果你的停止信息是发生在启动中或刚启动的过程中,那么这有可能是你的某个服务或则设备驱动程序中的问题。可以尝试将机器启动到安全模式。如果你的系统能够启动成功安全模式,那么表示你的猜测是正确的。

       åŒæ—¶è¦ç¡®ä¿ä½ çš„防病毒程序是设计成和win兼容的,并且随时保持更新。如果错误仍然发生,那么进入你的CMOS设置,禁止掉BIOS中的象缓存或则shadow之类的选项,然后重新启动。

       Windows 蓝屏死机之STOP对"症"下药

       ä»Žç†è®ºä¸Šè®²ï¼Œçº¯ä½çš„Windows 是不会出现死机的,但是这仅仅是理论上。病毒或硬件和硬件驱动程序不匹配等原因将造成Windows的崩溃,当Windows 出现死机时,显示器屏幕将变为蓝色,然后出现STOP故障提示信息。下面我们分别介绍通用的STOP故障处理方法和特殊的STOP故障排除。

       é€šç”¨STOP故障处理

       1.首先使用新版杀毒软件检查计算机上是否有病毒。

       2.如果Windows 可以启动,请检查“事件查看器”中的信息,以确定导致故障的设备或驱动程序。启动“事件查看器”的方法是:“开始”\“设置”\“控制面板”\“管理工具”\“事件查看器”\“系统日志”。

       3.如果不能启动计算机,试着用“安全模式”或“最后一次正确的配置”启动计算机,然后删除或禁用新安装的附加程序或驱动程序。如果用“安全模式”启动不了计算机,可使用修复控制台。修复控制台可以禁用一些服务、重新命名设备驱动程序、检修引导扇区或主引导记录。

       4.拆下新安装的硬件设备(RAM、适配卡、硬盘、调制解调器等等)。

       5.确保已经更新了硬件设备的驱动程序,以及系统有最新的BIOS。

       6.运行由计算机制造商提供的系统诊断工具,尤其是内存检查。

       7.检查Microsoft兼容硬件列表(HCL),确保所有的硬件和驱动程序都与Windows兼容。Hcl.txt在Windows CD-ROM的\Support文件夹中。

       8.在BIOS中禁用内存缓存功能。

       9.重新启动计算机,在启动屏幕处,按F8进入“高级启动选项”,然后选择“最后一次正确的配置”。(注:使用“最后一次正确的配置”的方式启动计算机,计算机的所有设置被重置为最后一次成功启动时的配置。)

       .如果能够访问Web,请进入/ntserver/,单击“Support”/“Search Knowledge Base”,在“Type your keywords here”处,输入“stop”和相应的号码(如出现STOP消息“stop:0xA”,可在此输入“stop0xA”),按Enter键,就可以找出所出现的STOP问题的解决方法。(E文)

       éƒ¨åˆ†STOP代码

       STOP消息 0xA故障(刚加入新设备时)

       é€šå¸¸åŽŸå›  驱动程序使用了不正常的内存地址。

       1.在安装过程中,屏幕上提示“安装程序正在检查计算机硬件配置”时,按F5,根据提示选择合适的计算机类型。例如,如果计算机是单处理器,请选择“标准PC”。

       2.在BIOS中禁用内存缓存功能。

       3.拆下所有适配卡,并断开所有不是启动计算机所必需的硬件设备,再重新安装Windows。

       4.如果系统配有SCSI适配卡,请向适配卡销售商索取最新的Windows驱动程序,禁用同步协商功能,检查终结头和设备的SCSI ID号。

       5.如果系统配有IDE设备,设IDE端口为Primary。检查IDE设备的Master/Slave/Only设置。除了硬盘,拆下其它所有的IDE设备。

       6.运行由计算机制造商提供的系统诊断工具,尤其是内存检查。

       7.检查Microsoft兼容硬件列表(HCL),确保所有的硬件和驱动程序都与Windows兼容。

       8.重新启动计算机。在启动屏幕处,按F8进入“高级启动选项”,然后选择“最后一次正确的配置”。

       STOP消息 0xE故障

       1.检查是否有充分的磁盘空间,尤其是新安装。

       2.禁用STOP消息中显示的驱动程序和所有新安装的驱动程序。

       3.如果所使用的视频驱动程序不是Microsoft提供的,试着切换到标准VGA驱动程序或者由Win支持的合适的驱动程序。

       4.确保系统有最新的BIOS。

       5.重新启动计算机。在启动屏幕处,按F8进入“高级启动选项”,然后选择“最后一次正确的配置”。

       STOP消息 0x和0x故障

       é€šå¸¸åŽŸå›  严重的驱动器碎片、超载的文件I/O、第三方的驱动器镜像软件或者一些防病毒软件出错。

       1.禁用一些防病毒软件或者备份程序,禁用所有碎片整理应用程序。

       2.运行CHKDSK /f 检修硬盘驱动器,然后重新启动计算机。

       3.重新启动计算机。在启动屏幕处,按F8进入“高级启动选项”,然后选择“最后一次正确的配置”。

       STOP消息 0xE故障

       é€šå¸¸åŽŸå›  系统内存中的奇偶校验错误。

       1.运行由计算机制造商提供的系统诊断工具,尤其是内存检查。

       2.在BIOS中禁用内存缓存功能。

       3.试着用“安全模式”启动。如果“安全模式”可启动计算机,试着更改为标准VGA驱动程序。如果这不能解决问题,可能须要用另外的视频适配卡。“兼容硬件列表”中列出了兼容的视频适配卡。

       4.确保已经更新了硬件设备的驱动程序,以及系统有最新的BIOS。

       5.拆下一些新安装的硬件(RAM、适配器、硬盘、调制解调器等等)。

       6.重新启动计算机。在启动屏幕处,按F8进入“高级启动选项”,然后选择“最后一次正确的配置”。

       STOP消息 0xF故障

       é€šå¸¸åŽŸå›  驱动程序没有被完全清除。

       åˆ é™¤ä¸€äº›æ–°å®‰è£…的软件,包括备份工具或磁盘工具,例如碎片整理和防病毒软件。

       STOP消息 0x故障

       é€šå¸¸åŽŸå›  在容错集的主驱动器中发生错误。

       1.用Windows 引导软盘,从镜像(第二个)系统驱动器启动计算机。

       2.重新启动计算机。在启动屏幕处,按F8进入“高级启动选项”,然后选择“最后一次正确的配置”。

       STOP消息 0xB故障

       é€šå¸¸åŽŸå›  在I/O系统的初始化过程中出现问题(通常是引导驱动器或文件系统)。

       1.检查计算机上是否有病毒。这个STOP消息通常在引导扇区有病毒时出现。

       2.使用“修复控制台”来修复驱动器。

       3.拆下新安装的硬盘驱动器或控制卡。

       4.如果系统配有SCSI适配卡,请向适配卡销售商索取最新的Windows驱动程序,禁用同步协商功能,检查终结头和设备的SCSI ID号。

       5.如果系统配有IDE设备,设IDE端口为Primary。检查IDE设备的Master/Slave/Only设置。除了硬盘,拆下其它所有的IDE设备。

       6.运行CHKDSK。如果Windows 不能启动CHKDSK,则必须把硬盘拆下并连接到另一个Windows系统上,然后用CHKDSK命令检查该硬盘。

       7.重新启动计算机。在启动屏幕处,按F8进入“高级启动选项”,然后选择“最后一次正确的配置”。

       STOP消息 0xF故障

       é€šå¸¸åŽŸå›  硬件或软件问题;常见的原因是硬件失效。

       1.运行由计算机制造商提供的系统诊断工具,尤其是内存检查。这个STOP消息经常出现在错误或误配内存的情况下。

       2.在BIOS中禁用内存缓存功能。

       3.试着拆下或替换硬件:RAM、控制器、适配器、调制解调器和其它外围设备。

       4.检查Microsoft兼容硬件列表(HCL),确保所有的硬件和驱动程序都与Windows兼容。这个问题可能是由于不兼容的主板引起的。

       5.重新启动计算机。在启动屏幕处,按F8进入“高级启动选项”,然后选择“最后一次正确的配置”。

       è§£å†³è“å±ä¹‹å·¥å…·ç¯‡:

       "两手抓,两手都要硬",针对 "蓝屏"现象除了在硬件方面改善你的系统硬件环境外,"软环境"的建设也不可忽视,就我们所知道的一些工具介绍给你,当然,可能还有更多的好工具,不妨平时多留意!

       RAM Idle--让蓝屏消失

       ä¸ç®¡æ˜¯æ›¾ç»è¿œåŽ»çš„DOS时代,还是如日中天的Windows时代,作为系统资源中最重要的一项——内存资源,一直都是电脑爱好者们最为头疼的事情。虽然现在主板上的内存插槽越来越多,内存的价钱也越来越低,但无论怎样,还是有很多朋友的内存资源时常不够用,以至于系统性能无法正常发挥。究其原因,主要是由于Windows操作系统不能有效地对内存资源进行管理,导致大量内存资源被白白占用,从而使系统性能大幅度降低,造成程序锁死、系统挂起等烦人的问题。因此,不少专门用来对内存资源进行管理的工具软件也就应运而生,而今天要介绍的RAM Idle则是这类软件中的佼佼者。

       ä¸€ã€å®‰è£…

       é¦–先用Winzip等软件将下载得到的压缩包解压,然后点击Setup.exe文件,在弹出的对话框中选择【是】即可开始安装RAM Idle(如图1)。和大多数Windows应用程序一样,RAM Idle的安装过程很简单,只需要一路点击【Next】即可完成。

       äºŒã€ 使用

       RAM Idle的主要功能是在系统空闲的时候按照用户设置自动释放回收一定数量的内存,从而避免因Windows系统不足而造成的内存资源枯竭问题,并大幅提高系统性能与稳定性。

       ä¿—话说:工欲善其事,必先利其器,使用RAM Idle也是一样,只有设置合理,它才能更好的对内存资源进行管理。下面就请大家点击【开始】-【程序】-【RAM Idle】-【Configuration】打开RAM Idle设置界面(如图2)和我一起认识下RAM Idle的设置选项

       1. 【Main】选项卡:为软件的主要设置部分,包括以下几个内容:

       Â·Target Free RAM:设置到达最小剩余内存时,RAM Idle所要尝试恢复的内存数量。

       Â·Minimum Free RAM:设置最小剩余内存数量,当达到这个数值的时候,RAM Idle将会自动恢复内存资源。

       Â·Disable the CPU usage detection:选中此项后,RAM Idle恢复内存的时候将不再检测CPU占用率,不过只是在你的CPU占用率总是显示%的时候才需要选中。一般情况下我们不用选中该项,【Recover RAM if only……】中可以设置恢复内存时的最高CPU占用率,也就是说只有CPU占用率低于设定数值时,RAM Idle才可以恢复内存,否则,不予恢复。

       Â·Free up……if free RAM below %:设置剩余内存少于总内存%的时候,每隔多少时间恢复多少数量的内存。

       Â·Pop up menu free……:设置弹出菜单中手动恢复内存部分的三个恢复数值。

       2. 【Options】选项卡:主要包括总在最前面、随Windows启动而启动、隐藏系统托盘图标等一些常规设置。

       3. 【Gator】选项卡:一个填表软件的简要介绍和下载链接。

       4. 【About】选项卡:显示当前系统的内存资源信息(如图3)

       RAM Idle释放内存共有两种方法,一种是当剩余内存少于总内存%的时候,按照设置每隔一段时间自动释放一定数量的内存(设置方法见上);一种是在系统托盘的RAM Idle图标上点击鼠标右键,使用弹出菜单(如图4)中的三个选项快速手动释放一定数量的内存(设置方法见上)。

       ä¸‰ã€ 小结

       ä¸ŽåŒç±»è½¯ä»¶ç›¸æ¯”,RAM Idle基本综合了该类软件的所有精华,具有无可比拟的强大内存管理能力。首先RAM Idle可以自动释放内存资源,并且优化时间快,效率高。其次RAM Idle设置方便,功能齐备,并且占用系统资源少,可在系统较为空闲的时候运行。另外,该软件还具有多种方便且实用的小功能,如重新启动,关机,挂起等。

       è™½ç„¶MemMAX、FREERAM、RAMFIX等软件也各有特色,但由于这样或者那样的缺点,比如不能自动优化、占用系统资源太高、优化效率低下、使用繁琐等,使得它们很难超越RAM Idle。

       å¦‚果你正在为你的内存资源的管理而发愁的话,那么我建议你一定要试试RAM Idle,以它的实力相信一定不会让你失望!

       æ‰“赢一场蓝屏歼灭战

       è“å±åˆ°åº•æ˜¯æ€Žä¹ˆäº§ç”Ÿçš„呢?我们可以从软、硬两方面来解释蓝屏现象产生的原因。从硬件方面来说,超频过度是导致蓝屏的一个主