这里列举几个典型的蓝屏故障的原因和解决办法。
一、0X0000000A
如果只是这个蓝屏代码一般和硬件无关,是驱动和软件有冲突造成的,最早发现这个代码是因为公司的DELL机器的USB键盘和QQ2007的键盘加密程序有冲突发现的这个问题。也在IBM T系列笔记本上装驱动失误产生过。
如果您的机器蓝屏了,而且每次都是这个代码请想一想最近是不是更新了什么软件或者什么驱动了,把它卸载再看一下。一般情况下就能够解决,如果实在想不起来,又非常频繁的话,那么没办法,重新做系统吧。
如果这个不只出这个代码,重启再蓝屏还会出现 8E、7E、50、D1、24等代码,那么首先要考虑内存损坏
二、0X0000007B
这个代码和硬盘有关系,不过不用害怕,不是有坏道了,是设置问题或者病毒造成的硬盘引导分区错误。
如果您在用原版系统盘安装系统的时候出这个问题,那说明您的机器配置还是比较新的,作为老的系统盘,不认这么新的硬盘接口,所以得进BIOS把硬盘模式改成IDE兼容模式。当然了,现在人们都用ghost版的操作系统,比较新的ghost盘是不存在这个问题的。关于人们找不到IDE这项的问题,因为很多主板标明这项的措辞不太一样 有些写着AHCI和Compatibility,这个AHCI就等于是SATA模式,Compatibility相当于IDE模式。
如果您的操作系统使用了一段时间了,突然有一天出现这个问题了,那么对不起,病毒造成的,开机按F8,选择最后一次正确的配置,恢复不到正常模式的话那么请重新做系统吧。
三、0X000000ED
这个故障和硬盘有关系,系统概率比较大,硬盘真坏的概率比较小。我弄过不下二十个这个代码的蓝屏机器了,其中只有一个是硬盘真的有坏道了。剩下的都是卷出了问题,修复即可,这也是为数不多的可以修复的蓝屏代码之一。
修复方法是找原版的系统安装盘(或者金手指V6那个pe启动界面里就带控制台修复)。这里说用系统盘的方法,把系统盘放入光驱,启动到安装界面,选择按R进入控制台修复,进入控制台后会出现提示符C:\ 大家在这里输入 chkdsk -r 然后它就会自动检测并修复问题了,修复完成之后重新启动计算机就可以进入系统了,进入系统之后最好先杀毒,然后再重新启动一下试一下,如果正常了那就没问题了,如果还出这个代码,那就说明硬盘有问题了,需要更换,或者把有问题的地方单独分区,做成隐藏分区,用后面的空间来装系统。
四、0X0000007E、0X0000008E
这俩代码多是病毒造成的,杀毒即可。正常模式进不去可以开机按F8进安全模式。当然也有可能是内存造成的,可以尝试重新插拔内存,一般这代码内存损坏概率不大。
五、0X00000050
硬件故障,硬盘的可能性很大。如果出现50重启之后还伴随着出现0A、7E、8E这样的代码,那十有八九就是内存坏了。如果每次都出这一个代码,首先换一块硬盘试一下机器能不能正常启动,如果测试硬盘没问题,再试内存,内存也试过的话,换CPU,总之这必是硬件故障。
六、0X000000D1
这个代码一般和显卡有关,有可能是显卡损坏,也可能是只是因为安装了不太兼容的显卡驱动造成的,建议有花屏现象的先找朋友借个显卡插上试一下,或者主机有集成显卡的,用集成显卡试一下。如果平时没有花屏现象,那就更换买机器的时候自带的显卡驱动试一下。
七、coooo21a
C开头的故障,它报的错很邪乎,报未知硬件故障,不过出这类C开头的代码多半与硬件无关。基本是与系统同时启动的一些驱动!或者服务的问题,举一个例子,一次我给一个笔记本的F盘改成了E盘,结果再启动就出这类C开头的代码,最后发现插上一个U盘就能正常启动,因为插上U盘系统里就有F盘了,然后我发现了隐藏的文件,是开机的时候系统写入的。我拔掉这个U盘这问题就又出现,后来把E盘改回F问题就没有了,想来是什么和系统一起启动的软件留在F盘一些文件,没有了它就会自己建,但是连F盘都没有了,也就只能报错了,所以看到这类蓝屏可以照比。
八、每次蓝屏的代码都不一样
这样的问题,基本上是硬件造成的,尤其以内存为第一个需要怀疑的对象,更换内存尝试,第二可能性是CPU虽然这东西不爱坏,可是从2006到现在我也遇到俩了,其他硬件基本上不会造成蓝屏代码随便变的情况。
九、偶尔蓝屏,而且代码一闪而过重新启动的问题
这个是有有两种可能
1、以XP为例,在我的电脑上点击鼠标右键选择属性,找到高级选项卡,找到下面的启动和故障修复项,点击设置。再弹出的窗口里找到中间‘系统失败’处有三个选项,第三项自动重新启动,把这项的勾选取消掉,以后再出问题蓝屏就会停住了。
2、已经做过上面的设置,但是还是会一闪而过重新启动的,那就是显卡或者CPU过热造成的,打开机箱查看散热风扇和散热器的状态吧。
另外开机就蓝屏看不见代码一闪而过然后自己重新启动的情况。这个时候已经不可能在系统里进行第一步的设置了,那么就要在机器启动的时候按F8,选择启动失败后禁用重新启动这项,选择之后启动失败了,系统就会停在蓝屏代码那里了,这样大家就可以照着蓝屏代码来查看问题了。
十、其他蓝屏代码
参考第七项,一般首先做系统确认是不是系统的问题,然后以以下顺序测试硬件,首先是内存可能性最大,然后是CPU,之后是硬盘,最后是显卡,主板基本不会蓝屏。
(1)Posix标准中有有名信号灯和无名信号灯之分,对于有名信号灯,可以用sem_open来创建,其prototype是:sem_t *sem_open(const char *name, int oflag)//打开已有的信号灯
sem_t *sem_open(const char *name, int oflag, mode_t mode, unsigned value)//一般是创建信号灯。
期中name是信号灯的名字, oflag是0, O_CREAT 或者 O_CREAT | O_EXCL, 如果指定O_CREAT, 那么mode和value对应创建该信号的模式和初始值。 如果指定了O_EXCL, 而且该信号灯已经在系统中存在,那调用会出错返回SEM_FAILED常量。 对于Linux内核来说,有名信号灯是很晚才加入内核中的,创建或是打开有名信号时候,应该指定”/semname“名字,对应的信号灯创建在/dev/shm目录下,名字是/dev/shm/sem.semname. BTW, 用gcc/g++编译实用信号灯功能的程序时候,应该引用librt库,(e.g., g++ -lrt sem.cpp). 关闭已打开的信号灯,用sem_close(sem_t *sem). 关闭信号灯并不意味着系统会删除它,要删除一个信号灯,需要调用sem_unlink(sem_t *sem)。 有名信号灯一般是为了进程之间同步实用的。 无名信号灯,一般是为一个进程内的不同线程之间同步使用的。 创建无名信号灯的方法如下:
sem_t sem
sem_init(&sem, int shared, unsigned int value)//初始化信号灯。
......
sem_destroy(&sem)//清除信号灯。
(2)信号灯的使用和状态。
信号灯一般用来描述不同线程所共享的公共资源的数量,每一个信号灯都有一个叫做信号量的非负整数与之相连;信号量一般代表公共资源的数目,比如空闲列表中的缓冲区数目,视频中读入帧的数目,等等。对于一个线程可以用sem_wait, sem_post函数来改变一个信号灯的信号量。
sem_wait(sem_t &sem)
sem_wait的语义如下:
{
while(信号量==0)
等待; //此处线程被挂起,等待其他线程调用sem_post唤醒之。
信号量减1;
}
注意:测试信号量是否为零,和减一的操作是原子的,也就是说期间不会发生线程切换。
与sem_wait对应的调用是sem_post,语义如下:
{
信号量加1;
唤醒等待该信号量的线程;//调用sem_wait并等待的线程。
}
该操作也是原子的。
信号灯的状态可以用sem_getvalue来查看。一般来说sem_wait和sem_post的调用不必在同一个线程内成对出现(象mutex那样,lock/unlock要配对出现)。 一般的情形是这样的,一个线程等待资源可用,调用sem_wait, 另外一个线程生成资源,然后调用sem_post,唤醒等待该资源的线程。因为信号灯所描述的是线程间公共资源,使用的时候一般和mutex一起使用,mutex保证访问公共资源的线程排他性,信号灯表示资源的可用性。
sem_wait() 减小(锁定)由sem指定的信号量的值.如果信号量的值比0大,那么进行减一的操作,函数立即返回.如果信号量当前为0值,那么调用就会一直阻塞直到或者是信号量变得可以进行减一的操作(例如,信号量的值比0大),或者是信号处理程序中断调用
sem_trywait() 和 sem_wait()是一样的,除了如果不能够对信号量立即进行减一,那么sem_trywait()就会返回一个错误(错误号是AGAIN)而不是锁定.sem_timedwait() 和 sem_wait()是一样的,除了如果减一操作不能立即执行的话,abs_timeout 指定了调用应该被阻塞的时间限制.abs_timeout 参数指向了一个结构体指定了由秒和纳秒组成的绝对的超时值:从1970-01-01 00:00:00 +0000纪元开始的UTC,结构体的定义如下:struct timespec {time_t tv_sec/* Seconds */long tv_nsec/* Nanoseconds [0 .. 999999999] */}如果超时值已经超过了调用规定的值,那么信号量不能被立即锁定,之后sem_timedwait() 为超时失败(error设置为ETIMEDOUT).
如果操作立即生效,那么sem_timedwait() 永远不会返回超时的错误,不管abs_timeout的值.更进一步的是,在这种情况下abs_timeout值的有效性都不会检查. EINTR The call was interrupted by a signal handlersee signal(7).//调用被信号处理中断
EINVAL sem is not a valid semaphore.//sem不是有效的信号量
The following additional error can occur for sem_trywait()://下面的错误是sem_trywait()可能发生的:
EAGAIN The operation could not be performed without blocking (i.e., thesemaphore currently has the value zero).//除了锁定无法进行别的操作(如信号量当前是0值).
The following additional errors can occur for sem_timedwait()://下面的错误是sem_timedwait()可能发生的:
EINVAL The value of abs_timeout.tv_nsecs is less than 0, or greater than orequal to 1000 million.//abs_timeout.tv_nsecs 的值比0小或者大于等于1000毫秒(译者注:纳秒的值不能比0小,不能比1秒大)
ETIMEDOUTThe call timed out before the semaphore could be locked.//在信号量锁定之前就超时了 对这些函数,信号处理程序总是会中断阻塞,不管是否使用了sigaction(2)的SA_RESTART标志位.
欢迎分享,转载请注明来源:夏雨云
评论列表(0条)