|
发表于 2024-10-31 10:29:22
|
显示全部楼层
本帖最后由 MF35_ 于 2024-10-31 10:30 编辑
是的,这跟宏内核还是微内核没关系,宏还是微只是技术路线不同,没有优劣之分。
Win98之所以问题很多,其实不是技术问题,而是为了兼容性。Win95年代的PC,依然需要兼容很多的DOS程序,虽然处理器可以用VM86模式运行DOS程序(Win95下的DOS程序也确实是这么运行的),但当DOS程序使用DOS系统调用时(BIOS INT和DOS INT),内核必须为其提供完全的VM86模式驱动,要在VM86模式完全兼容DOS接口,这简直是不可能完成的任务。
所以微软只能在Win95内核中保留DOS内核,当运行于VM86模式下的DOS程序进行系统调用时,Win32位内核会捕获这个行为,然后内核短时间切换到16位实模式去执行DOS代码,执行完后再转会保护模式,并把执行结果反馈给VM86模式下的DOS程序,让DOS程序看起来就像“真的”访问了DOS一样。
这种方法和纯32位内核有什么区别?很简单,看看比Win98甚至Win95更早的NT内核,它是纯32的内核,明显的区别是它无法运行任何带有低级硬件访问的DOS程序,而Win95和Win98可以运行大多数带有低级硬件访问的DOS程序(有一些设计的比较奇葩的不行)
而既然保留了DOS内核,那么DOS内核和Win32内核对硬件的访问是必须要同步的(比如DOS程序和Win32程序同时访问文件系统),这又是一个神坑,既然如此,Win32内核的一些硬件访问,也通过DOS内核来完成不就解决了?当32程序调用某个系统调用,比如读写文件时,内核同样转到16位实模式由DOS的文件服务来完成,然后再把结果反馈回32位程序的接口,于是奇葩的Win95内核诞生了 ,而Win98本质是Win95的延续,而这种方式实现的内核,稳定性很差,而且漏洞多的都不用找。
所以Win98稀烂,是因为它源自更稀烂的Win95,而Win95稀烂,是为了照顾DOS程序,这是由Win95的定位决定的,也是时代的局限性。微软能不能开发一个可以兼容DOS程序的纯32位内核呢?理论上是可以的,就是我前面说的“由32位内核为VN86模式虚拟一个完整的DOS环境”,但实际上如果对PC操作系统内核开发有所涉猎,就很容易明白为x86处理器的VM86模式开发完整的DOS内核驱动是不现实的,因为x86的VM86模式本身都无法实现实模式的全部功能,为其开发完整的DOS内核驱动就是一个笑话。
所以为了兼容DOS程序,微软在Win95内核设计上的选择,就基本是必然了,Win95的绝大多数问题,也都是由这个设计导致的,抛开这个设计带来的不稳定性,Win95显然是个划时代的产品。而当时微软并非做不出稳定的产品,比如同时代的NT,它没有使用Win95的设计,自然就没有Win95的问题。 |
|