Windows 8的客户端及服务器版本有很多更新将带来兼容性方面的巨大挑战。这些新挑战中的一部分没法由管理员来解决,它们只能由应用的初始开发者处理。
大多数变更在称为“windows和windows server开发者预览兼容手册”的更新文档中都有解释,它对大多数程序兼容性问题都有详细说明,对当前版本存在的问题提供了解决方案。
以下是几个已知的程序兼容性故障报告。
系统版本数字。是的,老问题又以新的面貌出现了。因为windows采用特殊的版本号,一些老的应用程序可能会因此出现问题,Windows 8为自己定义的版本号是6.2。这些程序可以用当前windows提供的兼容模式来运行(例如,在程序快捷方式的兼容性页中),但是如果你是一个程序开发者,你就必须更加小心确认版本号码。微软建议小心使用‘检查版本信息’功能(用大于、不等于或者一个特殊的版本号)。
无头的服务器应用。这是最重要的几个变化之一,因为新版windows server(主要是server core)的设计不单运行无头程序,还要支持那些没有图形界面的程序。在性能较差的环境中图形界面可以卸载(例如,在资源被广泛分享的虚拟机中),或者出于其它原因,比如减少服务器被攻击可能性的考虑也可以进行类似 *** 作。
一些服务器程序,尽管它们可能并不在无图形界面环境中运行。任何命令行版本应用理论上都应该运行得很好,但是一旦它被用图形界面呈现给用户之后就可能无法很好地运行了。现在没有很好的办法来解决这个图形界面引起的问题,所以它在大多数时候仅能保持无图形界面版本的应用。
如果你准备在server core版本 *** 作系统上运行所有应用,那么你应当充分测试来确认它在无图形界面环境下能如期望般表现良好。如果结果相反,同时如果你对程序编写有一定了解,那么你需要将现有的代码迁移到server core平台下,并且重新确认那些WIN32 API和.NET CLR能被core系统所支持。
.NET框架。Windows 8将.NET 4.5框架放进它默认程序安装包中,但是并不包含.NET3.5。如果你有一些程序明确只支持3.5版本,不仅仅是独立的程序,还有那些基于该版本.NET的网站程序,这种情况下你需要手动地添加老版的.NET。幸运的是,这不会引起大的兼容性问题,因为不同版本的.NET可以并存独立运行。微软文档有一些说明,介绍了如何在不触动windows更新情况下手动地添加.NET 3.5框架。
因为.NET4.5已经是windows run time(WinRT)的一部分,Word允许开发者用“metro“视图创建应用,并可用沙漏程序模型迅速创建程序。如果你想要为windows 8更改或者升级服务器应用,并且你已经了解C#或者C++,那么这个任务并不困难,但是文档中还是有一些值得探索的东西。
4K磁盘扇区。这个说来更像是一个硬件问题,而不是程序问题,但是它仍然值得我们注意。目前市场上主流的新磁盘一般使用4K扇区替代旧的512字节扇区设计。4K扇区驱动器,也就是所谓“高级格式”磁盘,在为512字节扇区设计的程序上经常会出现一些奇怪的问题。它没有很好地考虑向前兼容的问题。Windows 8增加了一个新的API,用来查询文件扇区大小,然后用命令行工具支持脚本查询卷大小。
没有签名的内核驱动。如果你有一些程序,不管是第三方的或者是厂商自带的,使用到内核驱动,windows server出于安全考虑严格限制对内核驱动的使用,并将其视为流氓软件。对设备使用内核驱动最大的变化包括标准扩展固件接口(UEFI)安全启动功能,它用于保护机器免受流氓软件攻击。UEFI安全启动是服务器的可选项,不过建议启用它。如果你想在服务器上使用UEFI安全启动项,你最好用可信任的证书来为内核驱动做验证。否则,建议禁用安全启动项。
(转发MCSE技术论坛)
[什么?]
很多文章中把写一个引导程序称作是开发一个最简单的 *** 作系统,其实这是非常片面的,引导程序算不上 *** 作系统,虽然此程序可以运行在*机上。所谓引导程序,直观的说就是在系统加电启动时BIOS第一个执行的程序。
引导程序要想发挥作用,让机器识别,就必须安置在一个特别的位置,这个位置就是磁盘的第一个扇区(0面0磁道1扇区,备注:没有0扇区),而一个包含引导程序的扇区叫作引导扇区。
一个合法的引导扇区(1)通常包含512个字节(当然喽,一个扇区通常本来就是512个字节),(2)并且以0xAA55这样一个占用两个字节的数据结尾作为标志符。(备注:0x前缀说明这是一个十六进制数)。
也就是如果把引导扇区看成一个字符数组的BootSector[]话(因为一个字符,即char,刚好为一个字节),那么这个数组就拥有512个元素,如果用C语言申明的话即为
char BootSector[512]
接着,一个合法的引导扇区必须以0xAA55结束,即
BootSector[510] = 0x55
BootSector[511] = 0xAA
除了结束标志必须符合上面的要求之外,中间虽然还有510字节的空间,但执行代码可以少于510字节,用无意义字符(通常用0x0)填充剩余空间即可。
[过程]
PC是通过BIOS来启动机器的,当PC机加电之后BIOS启动相应的程序完成机器的自检,然后就寻找可以引导的驱动器,即大家通常所说的启动盘。在 BIOS中可以设置从哪个盘启动,但通常总要检查硬盘,所以当BIOS检查完前面的启动设备之后,如果没有发现任何引导程序,那么就会开始检查主硬盘,即 C盘。如果此时在C盘上找到了合法的引导扇区,那么就会将引导扇区的内容(共512字节)装载到内存0x0000:07C00处。此时BIOS把控制权限交给这段引导程序。
那么,接下来,引导程序通常会简单的执行一些指令,比如输出一段文字,显示一个启动界面等等,但最重要的,引导程序将会启动一个更大的程序,然后把权限交给他,这通常就是我们所说的 *** 作系统内核。额外补充一句,目前对 *** 作系统的定义有不少,但笔者比较赞成的观点如下:
从形式上看, *** 作系统是:从计算机启动到结束的过程中始终在运行的程序。而这通常就是我们所说的 *** 作系统内核。从功能上看, *** 作系统:管理和维护所有的硬件、软件、数据资源,并为上层应用或服务提供一个抽象的接口。从某种层面上看,第二中定义更接近于虚拟机。(闲话一段^_^)
[如何]
现在,已经了解了这些基本的概念,那么,如何动手制作这样的引导扇区呢?这个过程十分简单,
(1)首先按照要求写一个合法的引导程序(通常用汇编,机器码也可以,呵呵);
(2)然后将其通过汇编程序,如NASM汇编成二进制文件;
(3)最后,将这个二进制文件写入到目标盘的第一个扇区。
跟我做:-P]
上面说的很简单吧?那好,现在我们来写一个吧!
第一步:写代码
文件名:boot.asm
代码如下,注意,汇编中通常用“”来表示注释内容
此段代码参考《自己动手写 *** 作系统》(于渊)
初始化函数
org 07c00h告诉编译器将此段程序加载
到内存0x0000:07C00处
mov ax, cs
mov ds, ax
mov es, ax
call PrintStr 调用屏幕打印函数
jmp $ 无限循环
PrintStr: 屏幕打印函数
mov ax, HelloWorld将字符串拷贝到ax
mov bp, axes:bp = 串地址
mov cx, 24cx = 串长度
mov ax, 01301hah = 13, al = 01h
mov bx, 000ch 页号为0(bh = 0) 黑底红字(bl = 0ch,高亮)
mov dl, 0
int 10h 10h号中断
ret
HelloWorld: db "Welcome to Lee's OS *_*" 字符串负值
times 510-($-$$) db 0 用0x0填充剩余的空间使生成
的二进制代码刚好为512字节
dw 0xaa55 结束标志
整个程序结束!很短吧
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)