百科问答小站 logo
百科问答小站 font logo



为什么启用AHCI还要分装系统前和装系统后? 第1页

  

user avatar   bei-ji-85 网友的相关建议: 
      

这种问题只有在混合内核和微内核的系统上才比较明显,原因就是驱动和内核是分离的,内核文件本身不包含驱动。

在微内核(这里包括混合内核,下同)里,引导程序需要知道内核在什么位置(哪个物理设备,哪个分区),内核的启动参数是什么,以及支撑内核运行的基本驱动在哪(主要是IO相关的)。因为内核功能很弱,所以引导程序需要加载一些必要的驱动才行。

于是这里存在这一个难题:引导程序该做多大?(多复杂?)

理论上说引导程序的功能类似于一个简化版本的操作系统:有基本的IO、内存、设备管理,有基本的文件系统,以及一个加载器。其中的代码量最多的就是设备驱动。

Win2K-WinXP时代(一直延续到Win7)都支持使用NTLDR作为引导程序启动系统,但这个东西非常小,只有几百KB大小,不可能集成很多功能。

那么引导程序能不能做大呢?答案是可以,但维护性会变得很差。

NTLDR是通过引导扇区加载的,引导扇区只有几百个字节的汇编指令,无法完成内存初始化等复杂的操作,所以NTLDR自己要实现从实模式到保护模式的转换,这种情况下,NTLDR的尺寸就限制在了640KB以下,实际上只有500多KB,所以NTLDR的功能就非常有限了。

有限的后果就是:NTLDR里无法集成磁盘设备驱动(因为种类太多了),于是AHCI这类驱动必须跟引导程序分离。

对于Windows来说,NTLDR选择的是用INT 13H中断来读磁盘,省去了自己实现硬盘驱动的工作量。

没有辅助的驱动,就意味着引导程序要去读内核配置(在注册表里),要知道内核运行时需要的基本设备驱动在哪,并且为内核准备好这些驱动。

我前面已经说过了,引导程序不能太复杂,有些只能用INT 13之类的BIOS中断,而一台电脑上可能存在着多个操作系统,引导程序需要知道自己要找的操作系统在哪。

因此引导程序需要有一张映射表,这张映射表能告诉引导程序:内核安装在分区X上,X分区对应的物理设备是Y,通过这种映射关系,引导程序才能正确地找到内核对应的设备(分区)并正确加载驱动。

那么,就会有题主遇到的问题,如果从IDE模式改成AHCI模式,那么这种映射表就会被破坏了,因为设备名变了。并且因为是用户在BIOS里改的,操作系统和引导程序是不知道这种变化的,所以一旦改变,就意味着要手动修改系统配置(注册表),操作系统和引导程序才能正确的加载。

这种情况在Linux一类的宏内核系统上并不常见,原因是内核里可以同时集成AHCI和IDE驱动,并且整个内核文件只有一个,只要这一个内核文件被加载到内存以后,关键的驱动已经被加载了,内核代码可以自己去probe设备,不存在找不到设备或者设备访问失败的情况下。

对于微内核的操作系统,要解决这个问题,只要把AHCI和IDE之类的驱动在引导程序阶段都加载到内存里即可。但这样就意味着引导程序要做很多事情,因为AHCI/IDE并非是两个驱动,AHCI的控制器种类很多,非标准设备也很多,都在引导程序阶段加载的话,驱动的“必要性”就不明显了,也不太符合微内核的设计思路,所以Windows最终也没采用这种方案。


user avatar   mikewolfwoo 网友的相关建议: 
      

和很多人想象的不同,这个问题十分常见,就算是Win10也是这样。不但是IDE模式变成AHCI模式会蓝屏,AHCI切到RAID也会蓝屏。有些同学原理在IDE模式的机械硬盘上装了操作系统,想不重装而用软件迁移到SSD的固态硬盘上,只要设置了AHCI模式,就会蓝屏。它的原因也很简单,也十分好解决,完全不要重装,我们今天来一起详细看一下。

蓝屏了!

作为BIOS工程师,在SATA硬盘刚刚流行的时候经常被测试人员骚扰:你的BIOS有bug,蓝屏了!

看到这个Stop code是7B的蓝屏,我就问他们:”你们是不是改磁盘控制器模式了?“

十有八九都会收到肯定或者模棱两可的”可能吧“这样的答案。我总是客气(没好气)地让他们安装用啥模式,启动就用啥模式。那么为什么这样呢?

Windows又偷懒了

原因很简单,Windows为了替大家”节省“硬盘空间,并没有把所有安装光盘带的驱动在安装时,都放到目标硬盘驱动列表中去。安装用IDE,就只有IDE的驱动在其中,安装用AHCI,就只有AHCI的驱动。换了硬盘控制器的模式,再次启动操作系统就找不到控制器的驱动程序了,这就是蓝屏的原因,找不到启动设备!这就是7B的意思:"STOP 0x0000007B INACCESSABLE_BOOT_DEVICE".

解决方法

当然再装一遍就行了,也有种改注册表的方式。我有个更简单的方法。

1. 先该回去,正常启动后。在run里面运行msconfig,在boot(启动)里面选择安全模式safe mode启动。

2. 重启。先进入BIOS,改mode。接着继续安全模式启动Win10。Win10会从它的”私密小金库“中找到驱动并装好。

3. 在安全模式中打开msconfig,关掉safe mode,并重启。

4. 正常启动。live happily ever after.

欢迎大家关注本专栏和用微信扫描下方二维码加入微信公众号"UEFIBlog",在那里有最新的文章。同时欢迎大家给本专栏和公众号投稿!




  

相关话题

  为什么有些人不建议 SSD 分区? 
  有哪些对用户造成物理攻击的软件BUG案例? 
  win10用什么压缩软件好? 
  为何 Linus 一个人就能写出这么强的系统,中国却做不出来? 
  Windows 10 Mobile正式版的体验将会怎样? 
  假如当年微软继续开发DOS,今天的DOS会是怎样? 
  为什么恢复硬盘的价格如此之高?或者说只是因为硬盘的私人数据如此重要导致价格居高不下? 
  如何看待 Apple Mac 将无法支持最新微软 Windows 11 操作系统? 
  如何评价Linux 内核核心成员Theodore Ts'o被 Sage Sharp 指控为强奸辩护者? 
  CPU是怎么改变频率的? 

前一个讨论
为什么上海到桐乡、桐乡到杭州高铁总票价低于上海到杭州直达票价?
下一个讨论
为什么显卡在内存中的映射是0b8000H?





© 2025-03-13 - tinynew.org. All Rights Reserved.
© 2025-03-13 - tinynew.org. 保留所有权利