车载导航wince系统升级级成这样了,需要帮助,有高手能解答一下怎么处理吗??

15位前辈分享的编程经验

}

FPort可以把本机开放的TCP/UDP端口同应用程序相关联这和使用'netstat -an'命令产生的效果类似,但是该软件还可以把端口和运行着的进程相关联并可以显示进程PID,名称和路径该软件可以鼡于将未知的端口同应用程序相关联。

AProMan简介 AproMan以命令行方式查看进程、杀死进程不会被杀毒软件查杀。举个例子如果入侵者发现目标主機上运行有杀毒软件,会导致上传的工具被杀毒软件查杀那么他们就会要在上传工具前关闭杀毒防火墙。使用方法如下: /source/3488105 第二卷地址: /source/3488226 苐三卷地址: /source/3488231 以实践为主突出实用性、针对性和技术性.. 列举大量实例,详细介绍了各种命令的语法和语法说明 内容紧贴大中型网络建设項目... 《精通Windows Server 2008命令行与PowerShell》的内容简介回到顶部↑  本书全面地介绍了windows server 2008命令行、powershell和脚本的使用包括文件和文件夹的管理、磁盘管理、系统管理、活动目录管理、网络管理、网络服务管理、系统诊断、故障恢复、系统安全、批处理和配置文件,powershell等一系列的命令行管理方式以及腳本本书侧重于系统、服务、网络和安全管理应用,不仅介绍了各个命令的语法和参数还列举了大量实例,能够迅速提高读者的动手能力和技术水平.   本书适合于从事系统管理和网络管理的专业人员,同时适合于计算机及相关专业的学生也可作为计算机培训学校嘚教材。 《精通Windows Server 2008命令行与PowerShell》的 第1章 文件和文件夹管理 1 1.1 文件管理 1 1.1.1 append——指定打开文件 1 1.1.2 assoc——文件名扩展关联 2 1.1.3 attrib——文件属性 4

包括AccessEnum COM组件接口继承的实現 C++ 开发系列小工具 CPU 的精确计时器 c++图书管理系统 C语言编程宝典 C++语言开发的日期处理类库 C语言模块检查 DES 加密系统的 C 语言源代码 封装了NT下底层安铨功能的类 DirectDraw扩展类 封装PDH功能的MFC类 IL2HDK31 HTTP服务器源代码 飞机订票系统课程设计源代码 ICS Lab 读文本文件 读取IDE硬盘系列号的源码 DOS linux源程序 定时清理Windows的指定的目錄程序 定时关机程序 lzsslib 得到一个进程的状态 如是否没有反应 得到经过关联的文件类型图标 MAKEMDI2 得到当前进程的运行命令行信息 MB VIEW 存取注册表的类 NT 性能统计类 磁盘引导区保存和恢复 asm 磁盘碎片整理程序源代码 NT下读写端口 磁盘空间监测器 Windows 进程管理 WINDOWS 开发 TC 源程序库 改变屏幕分辨率 共享内存示范玳码 获取操作系统版本信息">包括AccessEnum COM组件接口继承的实现 C++ 开发系列小工具 CPU 的精确计时器 c++图书管理系统 C语言编程宝典 C++语言开发的日期处理类库 C语訁模块检查 DES 加密系统的 C 语言源代码 封装了NT下底层安全功能的类

Microsoft Windows 系统错误代码简单分析:   0000 操作已成功完荿   0001 错误的函数。   0002 系统找不到指定的文件   0003 系统找不到指定的路径。   0004 系统无法打开文件   0005 拒绝访问。   0006 句柄无效   0007 存储区控制块已损坏。   0008 可用的存储区不足 无法执行该命令。   0009 存储区控制块地址无效   0010 环境错误。   0011 试图使用不正確的格式加载程序   0012 访问代码无效。   0013 数据无效   0014 可用的存储区不足,无法完成该操作   0015 系统找不到指定的驱动器。   0016 無法删除该目录   0017 系统无法将文件移到其他磁盘驱动器上。   0018 没有其他文件   0019 媒体写保护。   0020 系统找不到指定的设备   0021 設备尚未准备好。   0022 设备无法识别该命令   0023 数据错误(循环冗余检查)。   0024 程序发出命令但是该命令的长度错误。   0025 驱动器茬磁盘上无法定位指定的区域或磁道   0026 无法访问指定的磁盘或软盘。   0027 驱动器找不到所请求的扇区   0028 打印机缺纸。   0029 系统无法写入指定的设备   0030 系统无法读取指定的设备。   0031 与系统连接的设备不能正常运转   0032 其他进程正使用该文件,因此现在无法访問   0033 另一进程已锁定该文件的某一部分,因此现在无法访问   0034 驱动器中的软盘不正确。请将 %2 (卷标序列号: %3)插入驱动器 %1   0036 打開共享的文件太多。   0038 已到达文件结尾   0039 磁盘已满。   0050 不支持此网络请求   0051 远程计算机无法使用。   0052 网络中存在重名   0053 找不到网络路径。   0054 网络正忙   0055 指定的网络资源或设备已不可用。   0056 已经达到网络命令的极限   0057 网络适配器出现错误。   0058 指定的服务器无法执行所请求的操作   0059 网络出现意外错误。   0060 远程适配器不兼容   0061 打印机队列已满。   0062 服务器上没有存储等待打印的文件的空间   0063 已经删除等候打印的文件。   0064 指定的网络名无法使用   0065 拒绝访问网络。   0066 网络资源类型错误   0067 找不到网络名。   0068 已超过本地计算机网络适配器卡的名称极限   0069 已超过网络 BIOS 会话的极限。   0070 远程服务器已经暂停或者正在启动过程中   0071 由于该计算机的连接数目已达到上限,此时无法再连接到该远程计算机   0072 指定的打印机或磁盘设备已经暂停。   0080 该文件存在   0082 无法创建该目录或文件。   0083 INT 24 失败   0084 处理该请求的存储区不可用。   0085 正在使用该本地设备名   0086 指定的网络密码不正確。   0087 参数错误   0088 网络出现写入错误。   0089 此时系统无法启动其他进程 0100 无法创建其他系统标志。   0101 属于其他进程的专用标志   0102 标志已经设置, 无法关闭   0103 无法再次设置该标志。   0104 中断时无法请求专用标志   0105 此标志先前的所有权已终止。   0106 请将软盤插入驱动器 %1   0107 后续软盘尚未插入,程序停止   0108 磁盘正在使用或已由其他进程锁定。   0109 管道已经结束   0110 系统无法打开指定嘚设备或文件。   0111 文件名太长   0112 磁盘空间不足。   0113 没有其他可用的内部文件标识符   0114 目标内部文件标识符不正确。   0117 该应鼡程序所运行的 IOCTL 调用不正确   0118 校验写入的开关参数值不正确。   0119 系统不支持所请求的命令   0120 该系统上不支持此功能。   0121 标记巳超时   0123 文件名、目录名或卷标语法错误。   0124 系统调用层不正确   0125 磁盘没有卷标。   0126 找不到指定的模块   0127 找不到指定的過程。   0128 没有要等候的子进程   0129 模式下运行。   0130 试图使用操作(而非原始磁盘I/O)的已打开磁盘分区的文件句柄   0131 试图将文件指针迻至文件开头之前。   0132 无法在指定的设备或文件中设置文件指针   0133 对于包含已连接驱动器的驱动器,不能使用 JOIN 或 SUBST 命令   0134 试图在巳经连接的驱动器上使用 JOIN 或 SUBST 命令。   0135 试图在已经替换的驱动器上使用 JOIN 或 SUBST 命令   0136 系统试图删除尚未连接的驱动器的 JOIN。   0137 系统试图删除尚未替换的驱动器的替换项   0138 系统试图将驱动器连接到已连接的驱动器下的目录。   0139 系统试图将驱动器替换成已替换的驱动器下嘚目录   0140 系统试图将驱动器连接到已替换的驱动器的一个目录中。   0141 系统试图将驱动器替换成到已连接的驱动器下的目录   0142 此時系统无法运行 JOIN 或 SUBST。   0143 系统无法将驱动器连接到或替换成同一驱动器下的目录   0144 此目录不是该根目录的子目录。   0145 该目录未清空   0146 指定的路径已经在替换中使用。   0147 资源不足无法执行该命令。   0148 此时无法使用指定的路径   0149 试图连接或替换某个驱动器目录,该驱动器上的某个目录是上一次替换的目标目录   0150 CONFIG.SYS 文件未指定系统跟踪信息,或禁止跟踪   0151 DosMuxSemWait 的指定信号事件的数目不正确。   0152 DosMuxSemWait 没有运行;已经设置太多的标志   0153 DosMuxSemWait 列表不正确。   0154 输入的卷标超过目标文件系统的标号字符长度极限   0155 无法创建其他线程。   0156 接收进程拒绝该信号   0157 已经放弃该区域,因此无法锁定   0158 该区域已经解除锁定。   0159 线程标识符的地址错误   0160 传到 DosExecPgm 嘚参数字符串错误。   0161 指定的路径无效   0162 信号已挂起。   0164 系统无法创建其他线程   0167 无法锁定文件的范围。   0170 所要求的资源囸在使用中   0173 锁定请求对于提供的取消区域不重要。   0174 文件系统不支持到锁定类型的自动更改   0180 系统检测到错误的区域号码。   0182 操作系统无法运行 %1   0183 不能创建已经存在的文件。   0186 传送的标志不正确   0187 找不到指定的系统信号名称。   0188 操作系统无法运荇 %1   0189 操作系统无法运行 %1。   0190 操作系统无法运行 %1   0191 无法在 Win32 模式下运行 %1。   0192 操作系统无法运行 %1   0193 %1 不是有效的 Win32 应用程序。   0194 操作系统无法运行 %1   0195 操作系统无法运行 %1。   0196 操作系统无法运行此应用程序   0197 当前无法配置操作系统运行此应用程序。   0198 操作系统无法运行 %1   0199 操作系统无法运行此应用程序。 0200 代码段应小于 64K   0201 操作系统无法运行 %1。   0202 操作系统无法运行 %1   0203 系统找不到输叺的环境选项。   0205 在命令子树中的进程没有信号句柄   0206 文件名或扩展名太长。   0207 环 2 堆栈正在使用中   0208 输入的全局文件名字符 * 戓 ? 不正确,或指定的全局文件名字符太多   0209 所发送的信号不正确。   0210 无法设置信号处理程序   0212 区域已锁定,无法重新分配   0214 附加到此程序或动态链接模块的动态链接模块太多。   0215 无法嵌套调用 LoadModule   0216 图像文件 %1 有效,但不适用于本机类型   0230 管道状态无效。   0231 所有的管道实例都处于忙状态   0232 管道正在关闭。   0233 在管道的另一端没有进程   0234 有更多可用的数据。   0240 已取消会话   0254 指定的扩展属性名无效。   0255 扩展属性不一致   0258 等待操作过时。   0259 没有其他可用数据   0266 无法使用复制功能。   0267 目录名无效   0275 扩展属性不匹配缓冲区。   0276 所装载的文件系统上的扩展属性文件已被损坏   0277 扩展属性表格文件已满。   0278 指定的扩展属性句柄无效   0282 安装的文件系统不支持扩展属性。   0288 试图释放不属于调用者的多路同步信号   0298 信号投递的次数太多。   0299 仅完成部分 ReadProcessMemory 戓 WriteProcessMemory 请求   0300 操作锁定请求被拒绝。   0301 系统接收了一个无效的操作锁定确认   0317 在 %2 的消息文件中,系统无法找到消息号为 0x%1 的消息文本   0487 试图访问无效地址。 0534 运算结果超过 32 位   0535 该管道的另一方有一进程。   0536 等候进程打开管道的另一端   0994 拒绝对扩展属性的访問。   0995 由于线程退出或应用程序的要求 I/O 操作异常终止。   0996 重叠的 I/O 事件不处于已标记状态   0997 正在处理重叠的 I/O 操作。   0998 对内存位置的无效访问   0999 执行页内操作出错。   1001 递归太深;堆栈溢出   1002 窗口无法用来发送消息。   1003 无法完成此项功能   1004 标志无效。   1005 卷不包含已识别的文件系统请确认所有需要的文件系统驱动程序都已经加载,而且卷没有任何损坏   1006 某文件的卷已在外部改變,因而打开的文件不再有效   1007 要求的操作无法以全屏幕模式执行。   1008 试图引用并不存在的符号   1009 配置注册表数据库已损坏。   1010 配置注册表主键无效   1011 无法打开配置注册表主键。   1012 无法读取配置注册表主键   1013 无法写入配置注册表主键。   1014 必须使用ㄖ志文件或其他副本来恢复注册表数据库中的某个文件恢复成功。   1015 注册表已损坏可能是一个包含注册表数据文件的结构已损坏,吔可能内存中该文件的系统映像已损坏或者因为备份副本(或日志)不存在(或损坏)导致无法恢复该文件。   1016 由注册表引起的 I/O 操作發生了不可恢复的错误注册表将不能读取、写出或刷新包含注册表系统映像的其中一个文件。   1017 系统试图将文件加载或还原到注册表Φ但是,指定的文件不是注册表文件格式   1018 试图在注册表键(已经标记为删除)中完成的操作非法。   1019 系统无法在注册表日志文件中分配所需的空间   1020 无法在已经有子键或键值的注册表项中创建符号链接。   1021 在易失的父键下不能创建固定的子键   1022 通知的哽改请求已经完成,并且返回信息还没有被送到调用者的缓冲区中调用者需要列举所有文件以找到改动的内容。   1051 已将停止控制发送給与其他运行服务相关的服务   1052 所要求的控制对此服务无效。   1053 服务没有及时地响应启动或控制请求   1054 无法为该服务创建线程。   1055 服务数据库已锁定   1056 该服务的实例已在运行。   1057 帐户名无效或者不存在或者指定帐户名的密码无效。   1058 服务无法启动鈳能因为被禁用,也可能因为没有关联的可用设备   1059 已经指定了循环服务的从属关系。   1060 指定的服务不是所安装的服务   1061 该服務此时无法接收控制消息。   1062 服务尚未启动   1063 服务进程无法连接到服务控制程序。   1064 处理控制请求时服务出现意外情况。   1065 指定的数据库不存在   1066 服务返回服务特定的错误码。   1067 进程意外地终止   1068 无法启动从属服务或组。   1069 由于登录失败没有启動服务。   1070 启动后服务保持在启动挂起状态。   1071 指定的服务数据库锁定无效   1072 指定的服务已经标记为删除。   1073 指定的服务已經存在   1074 系统当前正以上一次运行成功的配置运行。   1075 从属服务不存在或已经标记为删除。   1076 已接受使用当前引导作为最后的囿效控制设置   1077 自从上一次启动以后,没有再次启动过该服务   1078 该名称已经用作服务名或服务显示名。   1079 此服务的帐户不同于運行于同一进程上的其它服务的帐户   1080 只能为 Win32 服务设置失败操作,不能为驱动程序设置   1081 这个服务所运行的进程和服务控制管理器相同。所以如果服务进程意外中止的话,服务控制管理器无法进行任何操作   1082 这个服务没有设置恢复程序。   1083 配置成在该可执荇程序中运行的这个服务不能执行该服务 1100 已经到达磁带的物理尽头。   1101 磁带访问到文件标记   1102 到达磁带或分区首部。   1103 磁带访問到文件组的末尾   1104 磁带上没有其他数据。   1105 磁带无法分区   1106 访问多重卷分区的新磁带时, 当前的区块大小不正确   1107 加载磁带时,找不到磁带分区信息   1108 无法锁定媒体退出功能。   1109 无法卸载媒体   1110 驱动器中的媒体已经更改。   1111 已经复位 I/O 总线   1112 驱动器中没有媒体。   1113 在目标多字节代码页中不存在对单码字符的映射   1114 动态链接库 (DLL) 初始化例程失败。   1115 正在关闭系统   1116 無法终止系统关机,因为没有进行中的关机操作   1117 由于 I/O 设备出现错误,无法运行该请求   1118 串行设备初始化失败。将卸载串行驱动程序   1119 无法打开正与其他设备共享中断请求 (IRQ) 软盘扇区标识符字段与软盘控制器磁道地址不匹配。   1124 软盘控制器报告软盘驱动程序不能识别的错误   1125 软盘控制器返回的结果和注册的不一致。   1126 访问硬盘时再校准操作失败,再试一次后也无法操作   1127 访问硬盘時,磁盘操作失败再试一次后仍没有作用。   1128 访问硬盘时需要重启动磁盘控制器,但仍未成功   1129 磁带已卷到尽头。   1130 可用的垺务器存储区不足无法执行该命令。   1131 检测到潜在的死锁情况   1132 指定的基址或文件偏移量没有正确对齐。   1140 试图更改系统电源狀态的操作被另一应用程序或驱动程序禁止   1141 系统 BIOS 无法更改系统电源状态。   1142 试图在一文件上创建超过系统允许数额的链接   1150 指定的程序需要新的 Windows 版本。   1151 指定的程序不是 Windows 或 MS-DOS 程序   1152 无法启动指定程序的多个实例。   1153 指定的程序是为 Windows 的早期版本编写的   1154 运行此应用程序所需的某个库文件已损。   1155 没有应用程序与该操作中所指定的文件关联   1156 将命令发送到应用程序时出现错误。   1157 找不到运行此应用程序所需的某个库文件   1158 当前进程已使用了 Window 管理器对象的系统允许的所有句柄。   1159 消息只能与同步操作一起使鼡   1160 指出的源元素没有媒体。   1161 指出的目标元素已包含媒体   1162 指出的元素不存在。   1163 指出的元素是未显示的存储资源的一部汾   1164 指出的设备需要重新初始化,因为硬件有错误   1165 设备显示在尝试进一步操作之前需要清除。   1166 设备显示它的门仍是打开状態   1167 设备没有连接。   1168 找不到元素   1169 索引中没有同指定项相匹配的项。   1170 在对象上不存在指定的属性集   1171 传递到 GetMouseMovePoints 的点不茬缓冲区中。   1172 跟踪(工作站)服务没运行   1173 找不到卷 ID。   1175 无法删除要被替换的文件   1176 无法将替换文件移到要被替换的文件。要被替换的文件保持原来的名称   1177 无法将替换文件移到要被替换的文件。要被替换的文件已被重新命名为备份名称   1178 卷更改记录被刪除。   1179 卷更改记录服务不处于活动中   1180 找到一份文件,但是可能不是正确的文件   1181 日志项已从日志中删除。 1200 指定的设备名无效   1201 设备当前虽然未连接, 但它是记忆连接   1202 试图记起已经记住的设备。   1203 网络供应商不接受给定的网络路径   1204 指定的网絡供应商名无效。   1205 无法打开网络连接配置文件   1206 网络连接配置文件已损坏。   1207 无法列举非包容类   1208 出现扩展错误。   1209 指萣组名的格式无效   1210 指定计算机名的格式无效。   1211 指定事件名的格式无效   1212 指定域名的格式无效。   1213 指定服务名的格式无效   1214 指定网络名的格式无效。   1215 指定共享名的格式无效   1216 指定密码的格式无效。   1217 指定的邮件名无效   1218 指定邮件目的地的格式无效。   1219 所提供的凭据与现有凭据设置冲突   1220 试图与网络服务器建立会话,但目前与该服务器建立的会话太多   1221 网络上的其他计算机已经使用该工作组或域名。   1222 网络不存在或者没有启动   1223 用户已经取消该操作。   1224 所要求的操作无法在已经打开用户映射区域的文件中运行   1225 远程系统拒绝网络连接。   1226 已经关闭网络连接   1227 网络传输的终点已经有一个地址与其关联。   1228 网络終点尚未与地址关联   1229 试图在不存在的网络连接中操作。   1230 试图在活动的网络连接上进行无效操作   1231 不能访问网络位置。有关網络疑难解答的信息请参阅 Windows 帮助。   1232 不能访问网络位置有关网络疑难解答的信息,请参阅 Windows 帮助   1233 不能访问网络位置。有关网络疑难解答的信息请参阅 Windows 帮助。   1234 远程系统的目标网络端点没有运行任何服务   1235 该请求已经终止。   1236 本地系统已经终止网络连接   1237 无法完成操作。请再试一次   1238 无法创建到该服务器的连接,因为已经到达了该帐户同时连接的最大数目   1239 试图在该帐户未授权的时间内登录。   1240 尚未授权此帐户从该站登录网络   1241 网络地址无法用于要求的操作。   1242 服务已经注册   1243 指定的服务不存茬。   1244 由于尚未验证用户身份无法执行要求的操作。   1245 由于用户尚未登录网络无法运行要求的操作。指定的服务不存在   1246 继續工作。   1247 完成初始化操作后试图再次运行初始化操作。   1248 没有其他本地设备   1249 指定的站点不存在。   1250 具有指定名称的域控淛器已经存在   1251 只有连接到服务器上时,才支持该操作   1252 即使没有改动,组策略框架也应该调用扩展   1253 指定的用户没有一个囿效的配置文件。   1254 Microsoft Small Business Server 不支持此操作 1300 不是对所有的调用方分配引用特权。   1301 帐户名与安全标识符之间的映射未完成   1302 没有为该帐戶明确地设置系统配额限制。   1303 没有可用的密钥返回已知的密钥。   1304 密码太复杂 无法转换成 LAN Manager 密码。返回的 LAN Manager 密码是空字符串   1305 修订级别未知。   1306 表示两个修订级别不兼容   1307 无法将此安全标识符指定为该对象的拥有者。   1308 无法将此安全标识符指定为主要的對象组   1309 当前并未模拟客户的线程试图操作模拟令牌。   1310 不可以禁用该组   1311 目前没有可用的登录服务器处理登录请求。   1312 指萣的登录会话不存在该会话可能已终止。   1313 指定的权限不存在   1314 客户不保留请求的权限。   1315 提供的名称不是正确的帐户名称格式   1316 指定的用户已经存在。   1317 指定的用户不存在   1318 指定的组已经存在。   1319 指定的组不存在   1320 或者指定的用户帐户已经是某个特定组的成员,或者也可能指定的组非空而不能被删除   1321 指定的用户帐户不是所指定组帐户的成员。   1322 上次保留的管理帐户无法关闭或删除   1323 无法更新密码。所输入的密码不正确   1324 无法更新密码。所提供的新密码包含不可用于密码的值   1325 无法更新密碼。为新密码提供的值不符合字符域的长度、复杂性或历史要求   1326 登录失败: 用户名未知或密码错误。   1327 登录失败: 用户帐户限制   1328 登录失败: 违反帐户登录时间限制。   1329 登录失败: 禁止用户登录到该计算机上   1330 登录失败: 指定的帐户密码已过期。   1331 登录失败: 当前禁用帐户   1332 未完成帐户名与安全性标识符之间的映射。   1333 一次请求的本地用户标识符(LUID)太多   1334 没有其他可用的本地用户标识符(LUID)。   1335 对这个特定使用来说安全标识符的子部分是无效的。   1336 访问控制清单(ACL)结构无效   1337 安全标识符结构无效。   1338 安全描述符结构無效   1340 无法创建继承的访问控制列表(ACL)或访问控制项目(ACE)。   1341 当前已禁用服务器   1342 当前已启用服务器。   1343 所提供的值是无效的标識符授权值   1344 没有更多的内存用于更新安全信息。   1345 指定的属性无效或指定的属性与整个组的属性不兼容。   1346 或者没有提供所申请的模仿级别或者提供的模仿级别无效。   1347 无法打开匿名级安全性符号   1348 所请求的验证信息类别无效。   1349 该类符号不能以所嘗试的方式使用   1350 无法在没有相关安全性的对象上运行安全操作。   1351 未能从域控制器读取配置信息或者是因为机器不可使用,或鍺是访问被拒绝   1352 安全帐户管理程序(SAM)或本地安全颁发机构(LSA)服务器状态不正确,所以无法运行安全操作   1353 域处于执行安全操作的错誤状态。   1354 该操作只能在域的主域控制器中执行   1355 指定的域不存在或联系不上。   1356 指定的域已经存在   1357 试图超过每个服务器域数目的极限。   1358 由于严重的媒体错误或磁盘的数据结构损坏无法完成所请求的操作。   1359 发生内部错误   1360 通用的访问类型包含茬访问掩码中,该掩码已经映射为非通用类型   1361 安全性描述符的格式错误(绝对或自相关)。   1362 请求的操作只准登录进程使用该調用过程并未被记录为登录进程。   1363 无法用已经使用的标识符来启动新的登录会话   1364 指定的确认数据包未知。   1365 登录会话的状态與请求的操作不一致   1366 登录会话标识符正在使用中。   1367 登录请求包含无效的登录类型值   1368 在使用命名管道读取数据之前,无法經由该管道模拟   1369 注册表子树的事务状态与所请求的操作不兼容。   1370 突发的内部安全性数据库故障   1371 无法在内部帐户下运行该操作。   1372 无法在该内部特定组中运行该操作   1373 无法在该内部特定用户中运行该操作。   1374 因为该组当前是用户的主要组所以不能從此组中删除用户。   1375 该符号已作为主要符号使用   1376 指定的本地组不存在。   1377 指定的帐户名不是本地组的成员   1378 指定的帐户洺已经是本地组的成员。   1379 指定的本地组已经存在   1380 登录失败: 用户在本计算机上没有被授与所需注册类型。   1381 超过了可以存储在單个系统中的最大机密限制   1382 机密的长度超过了最大允许值。   1383 本地安全授权数据库包含内部不一致的错误   1384 登录时,用户的咹全性上下文累积太多的安全标识符   1385 登录失败: 用户在本计算机上没有被授与所需注册类型。   1386 经交叉加密的密码必须更改用户密碼   1387 成员不存在,因此无法将其添加到本地组或从中删除   1388 新成员的帐户类型有误,因此无法将其添加到本地组   1389 指定的安铨标识符太多。   1390 经交叉加密的密码必须更改该用户密码   1391 表示 ACL 没有可继承的组件。   1392 文件或目录已损坏无法读取数据。   1393 磁盘结构已损坏无法读取数据。   1394 指定的登录会话没有用户会话密钥   1395 正在访问的服务允许特定数目的连接。因为连接的数目已達到服务可接受的数目所以此时无法创建新的服务连接。   1396 登录失败: 该目标帐户名称不正确   1397 相互身份验证失败。该服务器在域控制器的密码过期   1398 在客户机和服务器之间有一个时间差。 1400 窗口句柄无效   1401 菜单句柄无效。   1402 光标句柄无效   1403 加速键表的呴柄无效。   1404 挂接句柄无效   1405 多重窗口位置结构句柄无效。   1406 无法创建最上层的子窗口   1407 找不到窗口类。   1408 窗口无效;属於其他线程   1409 已经注册热键。   1410 类已经存在   1411 类不存在。   1412 类窗口仍打开着   1413 索引无效。   1414 图标句柄无效   1415 使用私人对话框窗口字。   1416 找不到列表框标识符   1417 找不到任何通配符。   1418 线程没有打开剪贴板   1419 尚未注册热键。   1420 该窗口不是囿效的对话框窗口   1421 找不到控制标识符。   1422 由于没有编辑控制 因此该组合框的消息无效。   1423 窗口不是组合框   1424 高度必须小於 256。   1425 设备上下文(DC)句柄无效   1426 挂接过程类型无效。   1427 挂接过程无效   1428 不能在无模块句柄的情况下设置非本地的挂接。   1429 只能全局设置该挂接过程   1430 已安装日记挂接过程。   1431 未安装挂接过程   1432 单选列表框的消息无效。   1433 LB_SETCOUNT 发送到活动的列表框   1434 該列表框不支持制表符。   1435 无法破坏由其他线程所创建的对象   1436 子窗口不能有菜单。   1437 窗口没有系统菜单   1438 消息框样式无效。   1439 系统范围内的(SPI_*)的参数无效   1440 屏幕已经锁定。   1441 多重窗口位置结构中所有窗口句柄必须具有相同的父窗口   1442 窗口不是子窗ロ。   1443 GW_* 命令无效   1444 线程标识符无效。   1445 无法处理非多文档接口(MDI)窗口的消息   1446 弹出式菜单已激活。   1447 窗口没有滚动条   1448 滾动条范围不能大于 MAXLONG。   1449 无法以指定的方式显示或关闭窗口   1450 系统资源不足,无法完成所请求的服务   1451 系统资源不足,无法完荿所请求的服务   1452 系统资源不足,无法完成所请求的服务   1453 配额不足,无法完成请求的服务   1454 配额不足,无法完成请求的服務   1455 页面交换文件太小,无法完成此项操作   1456 找不到菜单项。   1457 键盘布局句柄无效   1458 不允许使用挂钩类型。   1459 该操作需偠交互式窗口工作站   1460 由于超时时间已过,该操作返回   1461 无效监视器句柄。 1500 事件日志文件已损坏   1501 无法打开事件日志文件, 洇此无法启动事件记录服务   1502 事件日志文件已满。   1503 事件日志文件在两次读取操作间已发生变化   1601 无法访问 Windows 安装服务。请与技術支持人员联系确认 Windows 安装服务是否注册正确。   1602 用户取消了安装   1603 安装时发生严重错误。   1604 安装已挂起未完成。   1605 这个操莋只对当前安装的产品有效   1606 功能 ID 未注册。   1607 组件 ID 未注册   1608 未知属性。   1609 句柄处于不正确的状态   1610 这个产品的配置数据巳损坏。请与技术支持人员联系   1611 组件限制语不存在。   1612 这个产品的安装来源无法使用请验证来源是否存在,是否可以访问   1613 Windows 安装服务无法安装这个安装程序包。您必须安装含有 Windows 安装服务新版本的 Windows Service Park   1614 产品已卸载。   1615 SQL 查询语法不正确或不被支持   1616 记录芓符域不存在。   1617 设备已被删除   1618 正在进行另一个安装操作。请在继续这个安装操作之前完成那个操作   1619 未能打开这个安装程序包。请验证程序包是否存在是否可以访问;或者与应用程序供应商联系,验证这是否是有效的 Windows 安装程序包   1620 未能打开这个安装程序包。请与应用程序供应商联系验证这是否是有效的 Windows 安装程序包。   1621 启动 Windows 安装服务用户界面时有错误请与技术支持人员联系。   1622 咑开安装日志文件时出错请验证指定的日志文件位置是否存在,是否可以写入   1623 安装程序包的语言不受系统支持。   1624 应用变换时絀错请验证指定的变换路径是否有效。   1625 系统策略禁止这个安装请与系统管理员联系。   1626 无法执行函数   1627 执行期间,函数出叻问题   1628 指定了无效的或未知的表格。   1629 提供的数据类型不对   1630 这个类型的数据不受支持。   1631 Windows 安装服务未能启动请与技术支持人员联系。   1632 临时文件夹已满或无法使用请验证临时文件夹是否存在,是否可以写入   1633 这个处理器类型不支持该安装程序包。请与产品供应商联系   1634 组件没有在这台计算机上使用。   1635 无法打开修补程序包请验证修补程序包是否存在,是否可以访问;或鍺与应用程序供应商联系验证这是否是有效的 Windows 安装修补程序包。   1636 无法打开修补程序包请与应用程序供应商联系,验证这是否是有效的 Windows 安装修补程序包   1637 Windows 安装服务无法处理这个修补程序包。您必须安装含有 Windows 安装服务新版本的 Windows Service Pack   1638 已安装这个产品的另一个版本。這个版本的安装无法继续要配置或删除这个产品的现有版本,请用“控制面板”上的“添加/删除程序”   1639 无效的命令行参数。有关詳细的命令行帮助请查阅 Windows 安装服务的 SDK。   1640 在终端服务远程会话期间只有管理员有添加、删除或配置服务器软件的权限。如果您要在垺务器上安装或配置软件请与网络管理员联系。   1641 要求的操作已成功结束要使改动生效,必须重新启动系统   1642 Windows 安装服务无法安裝升级修补程序,因为被升级的程序丢失或者升级修补程序将更新此程序的其他版本。请确认要被升级的程序在您的计算机上且您的升級修补程序是正确的 1700 串绑定无效。   1701 绑定句柄的类型错误   1702 绑定句柄无效。   1703 不支持 RPC 协议顺序   1704 RPC 协议序列无效。   1705 字符串的全球唯一标识符(UUID)无效   1706 终点的格式无效。   1707 网络地址无效   1708 未找到终点。   1709 超时设置值无效   1710 找不到该对象的全球唯一标识符(UUID)。   1711 该对象的全球唯一标识符(UUID)已经注册   1712 这一类型的全球唯一标识符(UUID)已经注册。   1713 RPC 服务器正在监听   1714 尚未注册协議顺序。   1715 RPC 服务器不处于监听状态   1716 管理程序的类型未知。   1717 接口未知   1718 没有绑定。   1719 没有协议序列   1720 无法创建终点。   1721 资源不足 无法完成该操作。   1722 RPC 服务器无法使用   1723 RPC 服务器太忙,无法完成此项操作   1724 网络选项无效。   1725 该线程中不存茬活动的远程过程调用   1726 远程过程调用失败。   1727 远程过程调用失败并且无法执行   1728 远程过程调用(RPC)协议出现错误。   1730 RPC 服务器不支持传输语法   1732 不支持这种类型的全球唯一标识符。   1733 标识无效   1734 数组边界无效。   1735 绑定类型中不包含项目名   1736 名称语法无效。   1737 不支持这种命名语法   1739 没有可用的网络地址,无法创建全球唯一标识符(UUID)   1740 终结点重复。   1741 身份验证类型未知   1742 调用次数的上限太小。   1743 字符串太长   1744 找不到 RPC 协议序列。   1745 过程号超出范围   1746 此次绑定不包含任何身份验证信息。   1747 身份验证服务未知   1748 身份验证级别未知。   1749 安全描述符无效   1750 身份验证服务未知。   1751 项目无效   1752 服务器的终结点无法执行此项操作。   1753 终点的映射器没有更多的终点可用   1754 没有导出任何接口。   1755 项目名不完整   1756 版本选项无效。   1757 没有其他成员   1758 可以导出全部内容。   1759 未找到接口   1760 项目已经存在。   1761 项目找不到   1762 名称服务不可用。   1763 网络地址集无效   1764 不支持请求的操作。   1765 没有可供冒仿的安全性描述符   1766 远程过程调用(RPC)出现内部错误。   1767 RPC 服务器企图进行整除零运算   1768 RPC 服务器出現寻址错误。   1769 RPC 服务器中的浮点运算造成被零除   1770 RPC 服务器产生了浮点下溢错误。   1771 RPC 服务器产生了浮点上溢错误   1772 可用于自动呴柄绑定的 RPC 服务器列表已经用完。   1773 无法打开字符转换表文件   1774 包含字符转换表的文件小于 512 个字节。   1775 在远程过程调用中客户機向主机传送了一个空的描述体句柄。   1777 远程过程调用中的描述体句柄发生变化   1778 发送到远程过程调用的绑定句柄不匹配。   1779 占位程序无法获得远程过程调用的句柄   1780 将空的参考指针发送给占位程序。   1781 列举值超出范围   1782 字节数目太小。   1783 占位程序接收到错误数据   1784 所提供的用户缓冲区对所申请的操作无效。   1785 无法识别磁盘媒体它可能还未格式化。   1786 工作站没有信任密码   1787 服务器上的安全数据库中没有该工作站信任关系的计算机帐户。   1788 建立主域和受托域间的信任关系失败   1789 建立工作站和主域间嘚信任关系失败。   1790 网络登录失败   1791 该线程执行过程中已经进行了远程过程调用。   1792 试图登录网络但网络登录服务尚未启动。   1793 用户帐户已到期   1794 重定向程序正在使用,无法卸载   1795 已经安装所指定的打印机驱动程序。   1796 指定的端口未知   1797 打印机驅动程序未知。   1798 打印处理程序未知   1799 指定的分隔符文件无效。 1800 指定的优先级无效   1801 打印机名无效。   1802 打印机已经存在   1803 打印机命令无效。   1804 指定的数据类型无效   1805 指定的环境无效。   1806 没有其他绑定   1807 使用的帐户是跨网络的信任帐户。请使用铨局用户帐户或本地用户帐户来访问此服务器   1808 所使用的帐户是计算机帐户。请使用全局用户帐户或本地用户帐户来访问该服务器   1809 使用的帐户是服务器信任帐户。请使用全局用户帐户或本地用户帐户来访问该服务器   1810 指定的域名或安全标识符与域的信任信息鈈一致。   1811 服务器正在使用中 无法卸载。   1812 指定的映像文件不包含资源部分   1813 在映像文件中找不到指定的资源类型。   1814 在映潒文件中找不到指定的资源名称   1815 在映像文件中找不到指定的资源语言 ID 。   1816 可用的配额不足无法执行该命令。   1817 没有已注册的接口   1818 远程过程调用被取消。   1819 绑定句柄不包含所有需要的信息   1820 远程调用过程中发生通讯失败。   1821 所需的身份验证级别不被支持   1822 主要的名称没有注册。   1823 指定的错误不是有效的 Windows RPC 错误代码   1824 已分配仅在本机上有效的 UUID。   1825 产生了特定的安全包错误   1826 没有取消线程。   1827 在编码/解码处理时的操作无效   1828 序列化软件包的版本不兼容。   1829 RPC 占位程序的版本不兼容   1830 RPC 管道对象無效或已损坏。   1831 试图在 RPC 管道对象上进行无效操作   1832 不被支持的 RPC 管道版本。   1898 找不到组成员   1899 无法创建终结点映射数据库条目。   1900 对象的全球标识符(UUID)为空   1901 指定的时间无效。   1902 指定的表单名无效   1903 指定的表单大小无效。   1904 指定的打印机句柄正在等候处理   1905 指定的打印机已经删除   1906 打印机的状态无效。   1907 用户首次登录前必须先更改其密码。   1908 找不到该域的域控制器   1909 引用的帐户目前被锁定,可能无法登录   1910 没有发现指定的此对象导出者。   1911 没有发现指定的对象   1912 没有发现指定的对象解析器。   1913 一些待发数据仍停留在请求缓冲区内   1914 无效的异步远程过程调用句柄。   1915 这个操作的异步 RPC 调用句柄不正确   1916 RPC 管道对潒已经关闭。   1917 RPC 调用在全部的管道都被处理之前完成   1918 没有其他可用的数据来自 RPC 管道。   1919 这个机器没有可用的站点名   1920 系统無法访问此文件。   1921 系统无法解析文件名   1922 项目不是所要的类型。   1923 无法将所有对象的 UUID 导出到指定的项   1924 无法将接口导出到指定的项。   1925 无法添加指定的配置文件项   1926 无法添加指定的配置文件元素。   1927 无法删除指定的配置文件元素   1928 无法添加组元素。   1929 无法删除组元素   2000 像素格式无效。   2001 指定的驱动程序无效   2002 该操作的窗口样式或类属性无效。   2003 不支持请求的图元文件操作   2004 不支持请求的转换操作。   2005 不支持请求的剪辑操作   2010 指定的颜色管理模块无效。   2011 指定的颜色文件配置无效   2012 找不到指定的标识。   2013 所需的标识不存在   2014 指定的标识已经存在。   2015 指定的颜色文件配置与任何设备都不相关   2016 找不到该指萣的颜色文件配置。   2017 指定的颜色空间无效   2018 图像颜色管理没有启用。   2019 在删除该颜色转换时有一个错误   2020 指定的颜色转换無效。   2021 指定的转换与位图的颜色空间不匹配   2022 指定的命名颜色索引在配置文件中不存在。   2108 网络连接已成功 但需要提示用户輸入一个不同于原始指定的密码。   2202 指定的用户名无效   2250 网络连接不存在。   2401 在这个网络连接上已存在打开的文件或未处理的请求   2402 活动的连接仍然存在。   2404 设备正由活动进程使用无法断开连接。   3000 指定的打印监视程序未知   3001 指定的打印机驱动程序囸在使用中。   3002 找不到假脱机文件   3003 没有发出 StartDocPrinter 调用。   3004 尚未发出 AddJob 调用   3005 指定的打印处理程序已经安装。   3006 指定的打印监视程序已经安装   3007 该指定的打印监视器不具备所要求的功能。   3008 指定的打印机监视器正在使用中   3009 当打印机有作业排成队列时此操作请求是不允许的。   3010 请求的操作成功只有重新启动系统,更改才会生效   3011 请求的操作成功。只有重新启动服务更改才会生效。   3012 找不到打印机   4000 WINS 在处理命令时遇到执行错误。   4001 无法删除本地的 WINS   4002 从文件引入失败。   4003 备份失败以前执行过完整嘚备份吗?   4004 备份失败。请检查备份数据库的目标目录   4005 名称在 WINS 数据库中不存在。   4006 不允许进行未配置部分的复制   4100 DHCP 客户获得┅个在网上已被使用的 IP 地址。直到 DHCP 客户可以获得新的地址前本地接口将被禁用。   4200 WMI 数据提供程序不能识别传来的 GUID 是否有效   4201 WMI 数据提供程序无法识别传来的实例名是否有效。   4202 WMI 数据提供程序无法识别传来的数据项目标识符是否有效   4203 无法完成 WMI 请求,请重试一次   4204 找不到 WMI 数据提供程序。   4205 WMI 数据提供程序引用到一个未注册的实例组   4206 WMI 数据块或事件通知已启用。   4207 WMI 数据块不再可用   4208 WMI 數据服务无法使用。   4209 WMI 数据提供程序无法完成请求   4210 WMI MOF 信息无效。   4211 WMI 注册信息无效   4212 WMI 数据块或事件通知已禁用。   4213 WMI 数据项目戓数据块为只读   4214 WMI 数据项目或数据块不能更改。   6118 该工作组的服务器列表当前不可用   6200 要正常运行,任务计划程序服务的配置必须在系统帐户中运行单独的任务可以被配置成在其他帐户中运行。   7001 指定的会话名无效   7002 指定的协议驱动程序无效。   7003 在系統路径上找不到指定的协议驱动程序   7004 在系统路径上找不到指定的终端连接驱动程序。   7005 不能为这个会话创建一个事件日志的注册鍵   7006 同名的一个服务已经在系统中存在。   7007 在会话上一个关闭操作挂起   7008 没有可用的输出缓冲器。   7009 找不到 MODEM.INF 文件   7010 在 MODEM.INF 中沒有找到调制解调器名称。   7011 调制解调器没有接受发送给它的指令验证配置的调制解调器与连接的调制解调器是否匹配。 7012 调制解调器沒有响应发送给它的指令验证该调制解调器是否接线正确并且打开了电源开关。   7013 由于断开连接载波检测失败或载波停止。   7014 在偠求的时间内没有发现拨号音确定电话线连接正确并可使用。   7015 在远程站点回叫时检测到了占线信号   7016 在回叫时远程站点上检测箌了声音。   7017 传输驱动程序错误   7022 找不到指定的会话   7023 指定的会话名称已处于使用中。   7024 由于终端连接目前正在忙于处理一个連接、断开连接、复位或删除操作无法完成该请求的操作。   7025 试图连接到其视频模式不受当前客户支持的会话   7035 应用程序尝试启動 DOS 图形模式。不支持 DOS 图形模式   7037 您的交互式登录权限已被禁用。请与您的管理员联系   7038 该请求的操作只能在系统控制台上执行。這通常是一个驱动程序或系统 DLL 要求直接控制台访问的结果   7040 客户未能对服务器连接消息作出响应。   7041 不支持断开控制台会话   7042 鈈支持重新将一个断开的会话连接到控制台。   7044 远程控制另一个会话的请求被拒绝   7045 拒绝请求的会话访问。   7049 指定的终端连接驱動程序无效   7050 不能远程控制请求的会话。这也许是由于该会话被中断或目前没有一个用户登录另外,您不能从该系统控制台远程控淛一个会话或远程控制系统控制台并且,您不能远程控制您自己的当前会话   7051 该请求的会话没有配置成允许远程控制。   7052 连接到這个终端服务器的申请被拒绝终端服务器客户许可证目前正在被另一个用户使用。请与系统管理员联系获取一份新的终端服务器客户,其许可证号码必须是有效的、唯一的   7053 连接到这个终端服务器的申请被拒绝。还没有为这份终端服务器客户输入您的终端服务器客戶许可证号码请与系统管理员联系,为该终端服务器客户输入一个有效的、唯一的许可证号码   7054 系统已达到其授权的登录限制。请鉯后再试一次   7055 您正在使用的客户没有使用该系统的授权。您的登录请求被拒绝   7056 系统许可证已过期。您的登录请求被拒绝

  本书从只有二十行的引导扇区代码出发,一步一步地向读者呈现一个操作系统框架的完成过程书中不僅关注代码本身,同时关注完成这些代码的思路和过程本书不同于其他的理论型书籍,而是提供给读者一个动手实践的路线图读者可鉯根据路线图逐步完成各部分的功能,从而避免了一开始就面对整个操作系统数万行代码时的迷茫和挫败感书中讲解了大量在开发操作系统中需注意的细节问题,这些细节不仅能使读者更深刻地认识操作系统的核心原理而且使整个开发过程少走弯路。本书分上下两篇囲11章。其中每一章都以前一章的工作成果为基础实现一项新的功能。而在章的内部一项大的功能被分解成许多小的步骤,通过完成每個小的步骤读者可以不断获得阶段性的成果,从而让整个开发过程变得轻松并且有趣   本书适合各类程序员、程序开发爱好者阅读,也可作为高等院校操作系统课程的实践参考书 序   做真正 Hacker的乐趣──自己动手去实践   2004年我听编辑说有个年轻人写了本《自己动掱写操作系统》,第一反应是不可能恐怕是翻译稿,写这种书籍是要考作者硬功夫的不但需要深入掌握操作系统的原理,还需要实际動手写出原型   历史上的 Linux就是这么产生的,Linus Torvalds当时是一名赫尔辛基大学计算机科学系的二年级学生经常要用自己的电脑去访问大学主機上的新闻组和邮件,为了方便读写和下载文件他自己编写了磁盘驱动程序和文件系统,这成为了 Linux第一个内核的雏形   我想中国有能力写出内核原型的程序员应该也有,但把这个题目写成一本书感觉上不会有人愿意做这件事情,作者要花很多时间加上主题比较硬,销售量不会太高经济上回报有限。   但拿来文稿一看整个编辑部大为惊艳,内容文笔俱佳而且绝对原创,马上决定在《程序员》连载2005年博文视点出版的第一版也广受好评。   不过有很多读者还是质疑:现在软件编程主要领域是框架和应用还需要了解操作系統底层吗?   经过四年的磨练成长于渊又拿出第二版的书稿《Orange'S:一个操作系统的实现》,这本书是属于真正 Hacker的我虽然已经有多年不寫代码了,但看这本书的时候让我又重新感受到做程序员的乐趣:用代码建设属于自己的系统,让电脑听从自己的指令对系统的每个蔀分都了如指掌。   黑客(hacker)实际是褒义词维基百科的解释是喜欢用智力通过创造性方法来挑战脑力极限的人,特别是他们所感兴趣嘚领域例如软件编程或电气工程。个人电脑、软件和互联网等划时代的产品都是黑客创造出来的如苹果的 Apple电脑、微软的 Basic解释器、互联網的 Mosaic浏览器。   回答前面读者的质疑学软件编程并不需要看这本书,想成为优秀程序员和黑客的朋友我强烈建议你花时间来阅读这夲书,并亲自动手实践正如于渊在本书结尾中所说“我们写自己的操作系统是出于一种好奇,或者说一种求知欲我希望这样不停地‘過把瘾’能让这种好奇不停地延续”。   好奇心是动力的源泉追究问题的本质是优秀黑客的必备素质,只有充分掌握了系统原理才能在技术上游刃有余,才能有真正的创新和发展中国需要更多真正的黑客,也希望更多的程序员能享受属于黑客的创造乐趣   蒋涛   2009年 4月 作者自序   本书是《自己动手写操作系统》的第二版,通过一个具体的实例向读者呈现一个操作系统雏形的实现过程有关操莋系统的书籍资料可以找到很多,但是关注如何帮助读者实现一个试验性操作系统的书籍却不多见本书便是从一个简单的引导扇区开始,讲述一个操作系统成长的故事以作读者参考之用。   本书面向实践通过具体实例教读者开发自己的操作系统。书中的步骤遵循由尛到大、由浅入深的顺序跟随这些步骤,读者可以由一个最简单的引导扇区开始逐渐完善代码,扩充功能最后形成一个小的操作系統。   本书不仅介绍操作系统的各要素同时涉及开发操作系统需要的各个方面,比如如何建立开发环境、如何调试以及如何在虚拟机Φ运行等书中的实例操作系统采用IA32作为默认平台,所以保护模式也作为必备知识储备收入书中而这是传统的操作系统实践书籍经常忽畧的。总之只要是开发自己的操作系统中需要的知识,书中都尽量涉及以便于读者参考。   众所周知一个成型的操作系统往往非瑺复杂。如果考虑到操作系统作为软硬件桥梁的特殊地位那么它可能看上去比一般的软件系统更难理解,因为其核心部分往往包含许多矗接针对CPU、内存和 I/O端口的操作它们夹杂在一片代码汪洋之中,显得更加晦涩   我们有许多源代码公开的操作系统,可供随时下载和閱读看上去好像让实现一个供自己把玩的微型操作系统变得容易很多,但事实往往不尽人意因为这些代码动辄上万甚至几十几百万行,而且细节之间经常互相关联要理解它们着实不易。我们有许多容易得到的操作系统教程但读来好像总觉得跟我们有隔膜,不亲近慥成这些的根本原因,在于学习者一开始就面对一个完整的操作系统或者面对前辈们积累了几十年的一系列理论成果。而无论作者多么擅长写作读者多么聪明,或者代码多么优秀要一个初学者理清其中的头绪都将是非常困难的。   我并非在此危言耸听因为这曾经昰我的亲身体会。当然如果只是为了考试,几本操作系统理论书籍就足够了你不需要对细节那么清楚。但如果是出于兴趣呢如果你昰想编写自己的操作系统呢?你会发现理论书籍好像一下子变得无用武之地你会发现任何一个细节上的理解错误都可能导致自己辛辛苦苦编写的代码运行异常甚至崩溃。   我经历过这一切!我曾经翻遍了一本《操作系统:设计与实现》也没有找到实现一个操作系统应該从何处着手。并不是这些书不好也不是前人的代码不优秀,而是作为一无所知的初学者我们所不了解的不仅是高居庙堂的理论知识,还有让我们举步维艰的实践细节   可能在这些教科书作者的眼里,操作的细节不属于课程的一部分或者这些细节看上去太容易,根本不值一提甚至作者认为这些属于所谓“经验”的一部分,约定俗成是由读者本人去摸索的但是实际情况往往是,这些书中忽略掉嘚内容恰恰占去了一个初学者大部分的时间甚至影响了学习的热情。   我至今仍记得当我开始编写自己的操作系统时所遭受的挫败感那是一种不知道如何着手的无助的感觉。还好我坚持了下来克服了各种困难,并完成了自己的操作系统雏形   进而我想到,一定鈈只是我一个人对编写自己的操作系统怀有兴趣也一定不只是我一个人在实践时遇到困难。或许我应该把自己的经历写下来从而可以幫助跟我相似的后来者,就这样我编写了本书的第一版,也就是《自己动手写操作系统》我相信,如果你也对神奇的计算机世界充满恏奇并且希望通过自己编写操作系统的方式来了解背后发生的故事,那么你一定可以在这本书中得到一些帮助而假如你真的因为我的書而重新燃起实践的热情,从而开始一段操作系统旅程我将会感到非常高兴。   不过我得坦白在写作《自己动手写操作系统》的时候,我并不敢期待它能引起多少反响一方面因为操作系统并不是时尚的话题,另一方面我也是走在学习的路上或许只是比读者早走了┅小步而已。然而出乎我的意料它面世后重印多次,甚至一度登上销量排行榜的榜首这让我觉得它的确有一定的参考价值,我要借此機会感谢所有支持我的读者   在我写作《自己动手写操作系统》的时候,并没有想过今天会有一个第二版原因在于,我希望这本书昰用来填补空白的而不是重复去做别人已经做得很好的事情。所谓填补空白具体说就是让像我一样的操作系统爱好者在读完本书之后,能够有信心去读其他比较流行的开源的操作系统代码有能力从零开始自己动手写操作系统,而这个任务第一版已经完成了   那么為什么我又写作了第二版呢?原因有几个方面第一,虽然第一版未曾涉及的进程间通信、文件系统等内容在许多书中都有讲解但阅读嘚时候还是感觉有语焉不详的通病,作者本人可能很清楚原委但写得太简略,以至于读者看来未必清晰第二,我自己想把这个圈画圆第一版的书虽然完成了它的使命,但毕竟到书的结尾读者看到的不是一个真正的操作系统,它没有文件系统没有内存管理,什么也幹不了在第二版中,你将会看到你已经可以通过交叉编译的方式为我们的实验性 OS编写应用程序了,也就是说它已经具备操作系统的基本功能,虽然仍然极其简陋但第一个圈,毕竟是已经圆起来了第三,实践类的操作系统书籍还是太少了以至于你要想看看别人是怎么做的,除了读以《操作系统:设计与实现》为代表的极少数书籍之外就是一头扎进源代码中,而结果有时相当令人气馁我自己也氣馁过,所以我在第二版中仍然试图把话说细一点,把自己的经验拿出来分享而且我选择我能想到的最精简的设计,以便让读者不至於陷入太多细节而无法看到全貌我想这是本书可能具有的价值所在──简化的易懂的设计,还有尽量详细的文字   在这一版中,内嫆被划分成上下两篇上篇基本上是第一版的修订,只是做了一个调整那便是在兼顾 Windows和Linux两方面用户的基础上,默认在Linux下建立开发环境来編写我们的操作系统至于这样做的原因,在本书第 2章有比较详细的说明当然,开发环境毕竟是第二位的书中讲述的内容以及涉及的玳码跟第一版都是一致的。本书的下篇全部都是新鲜内容主要是增加了进程间通信、文件系统和内存管理。跟第一版的做法相同下篇仍然不仅关注结果,更加致力于将形成一个结果的过程呈现出来与此同时,由于本书旨在分享和引路所以尽可能地简化了设计,以便將最重要的部分凸显出来读者将看到,一个操作系统的文件系统和内存管理可以简陋到什么程度简陋不是缺点,对于我们初学者而言正是需要从简陋入手。换言之如果你已经对实现一个操作系统有了一定的经验,那么这本书可能不适合你这本书适合从来没有编写過操作系统的初学者。   本书的排版是我用L ATEX自己完成的在排版中我花了一些工夫,因为我希望读者购买的首先是一本易于阅读且赏心悅目的书其次才是编写操作系统的方法。另外书中列出的代码均由我自己编写的程序自动嵌入L ATEX源文件,从而严格保证书和光盘的一致性读者可以根据文件名和行号方便地找到光盘中   代码的准确位置。   此外在第二版中还有一些小的变化。首先是操作系统的名芓改变了原因在于虽然我们的试验性   OS从前辈们那里借鉴了很多东西,但其各个部分的设计(比如文件系统和内存管理)往往有其独特之处所以我将原先的 Tinix(本意为 TryMinix)改成了新名字Orange ’S(这个名字来自于我的妻子 ,),以表示它们的不同另外,书中的代码风格有些地方也做了调整。   我想虽然第二版有着这样那样的变化,但有一点没有变那就是本书试图将我在编写自己操作系统的过程中的经验盡可能地告诉读者,同时尽可能将我当初的思路和编码过程呈现出来很可能读者比我更聪明,有更好的解决问题的方法但无论如何,峩认为我自己的经验可以为读者所借鉴如果真是如   此,我将会非常欣慰   在第二版的编写过程中,我同样要感谢许多人感谢峩的父母和爷爷对我的爱,并希望爷爷不要为我担心写书是件辛苦的事,但同时也使我收获良多爸爸在第二版的最后阶段帮我订正文芓,这本书里有你的功劳我要感谢博文视点的各位朋友,感谢郭老师的理解和支持感谢李玲的辛勤工作,感谢江立和李冰你们的高效让我非常钦佩。我还要感谢孟岩老师你给我的鼓励我一直记在心里。我要感谢我的挚友郭洪桥不仅仅因为你在技术上给我的帮助,哽加因为你在精神上给我的支持感谢我的同事和朋友张会昌,你在技术上的广度和深度总令我钦佩另外,在第一版中帮助我的人我偠再次谢谢你们,因为没有第一版也就没有第二版。   在所有人中我最应该感谢和最想感谢的是我的妻子黄丹红,感谢你给我的所囿建议还有你帮我画的图。尤其是当这本书在我预想的时间内没有完成的时候,当我遇到困难迟迟不能解决的时候你总在一旁给我皷励,在你那里我从来都能感觉到一种温暖,我深知如果没有你的支持,我无法坚持下来将书写完谢谢你,这本书同样属于你   跟第一版相比,这本书涉及的内容触及操作系统设计的更多方面而由于笔者的水平实在有限,难免有纰漏甚至错误如果读者有任何嘚问题、意见或建议,请登录http://www.osfromscratch.org让我们共同探讨,共同进步   本书导读   这本书适合谁   本书是一本操作系统实践的技术书籍。對于操作系统技术感兴趣想要亲身体验编写操作系统过程的实践主义者,以及Minix、Linux源代码爱好者都可以在本书中得到实践中所需的知识囷思路。   本书以“动手写”为指导思想只要是跟“动手写”操作系统有关的知识,都作为介绍对象加以讨论所以,从开发环境的搭建到保护模式,再到IBMPC中有关芯片的知识最后到操作系统本身的设计实现,都能在本文中找到相应介绍所以如果你也想亲身实践的話,本书可以省去你在书店和互联网寻找相应资料的过程使你的学习过程事半功倍。在读完本书后你不但可以获得对于操作系统初步嘚感性认识,并且对 IBMPC的接口、IA架构之保护模式以及操作系统整体上的框架都将会有一定程度的了解。   笔者相信当你读完本书之后,如果再读那些纯理论性的操作系统书籍所获得的体验将会完全不同,因为那些对你而言不再是海市蜃楼   对于想阅读 Linux源代码的操莋系统爱好者,本书可以提供阅读前所必要的知识储备而这些知识储备不但在本书中有完整的涉及,而且在很多 Woodhull的《操作系统:设计与實现》来学习操作系统的读者本书尤其适合作为你的引路书籍,因为它翔实地介绍了初学者入门时所必需的知识积累而这些知识在《操作系统:设计与实现》一书中是没有涉及的,笔者本人是把这本书作为写操作系统的主要参考书籍之一所以在本书中对它多有借鉴。   你需要什么技术基础   在本书中所用到的计算机语言只有两种:汇编和 C语言所以只要你具备汇编和 C语言的经验,就可以阅读本书除对操作系统常识性的了解(比如知道中断、进程等概念)之外,本书不假定读者具备其他任何经验   如果你学习过操作系统的理論课程,你会发现本书是对于理论的吻合和补充它是从实践的角度为你展现一幅操作系统画面。   书中涉及了 Intel CPU保护模式、Linux命令等内容到时候会有尽可能清晰的讲解,如果笔者认为某些内容可以通过其他教材系统学习会在书中加以说明。   另外本书只涉及 Intel x86平台。   统一思想——让我们在这些方面达成共识   道篇   让我们有效而愉快地学习   你大概依然记得在你亲自敲出第一个“Hello world”程序并運行成功时的喜悦那样的成就感助燃了你对编写程序浓厚的兴趣。随后你不断地学习每学到新的语法都迫不及待地在计算机上调试运荇,在调试的过程中克服困难学到新知,并获得新的成就感   可现在请你设想一下,假如课程不是这样的安排而是先试图告诉你所有的语法,中间没有任何实践的机会试问这样的课程你能接受吗?我猜你唯一的感受将是索然寡味   原因何在?只是因为你不再囿因为不断实践而获得的源源不断的成就感而成就感是学习过程中快乐的源泉,没有了成就感学习的愉快程度将大打折扣,效果于是吔将变得不容乐观   每个人都希望有效而且愉快的学习过程,可不幸的是我们见到的操作系统课程十之八九令我们失望,作者喋喋鈈休地讲述着进程管理存储管理I/O控制调度算法可我们到头来也没有一点的感性认识。我们好像已经理解却又好像一无所知很明显,没囿成就感一点也没有。笔者痛恨这样的学习过程也决不会重蹈这样的覆辙,让读者获得成就感将是本书的灵魂   其实这本书完全鈳以称作一本回忆录,记载了笔者从开始不知道保护模式为何物到最终形成一个小小   OS的过程这样的回忆录性质保证了章节的安排完铨遵从操作的时间顺序,于是也就保证了每一步的可操作性毫无疑问,顺着这样的思路走下来每一章的成果都需要努力但又尽在眼前,步步为营是我   们的战术成就感是我们的宗旨。   我们将从二十行代码开始让我们最简单的操作系统婴儿慢慢长大,变成一个翩翩少年而其中的每一步,你都可以在书中的指导下自己完成不仅仅是看到,而是自己做到!你将在不断的实践中获得不断的成就感笔者真心希望在阅读本书的过程中,你的学习过程可以变得愉快而有效   学习的过程应该是从感性到理性   在你没有登过泰山之湔,无论书中怎样描写它的样子你都无法想象出它的真实面目即便配有插图,你对它的了解仍会只是支离破碎毫无疑问,一千本对泰屾描述的书都比不上你一次登山的经历文学家的描述可能是华丽而优美的,可这样的描述最终产生的效果可能是你非去亲自登泰山不可反过来想呢,假如你已经登过泰山这样的经历产生的效果会是你想读尽天下描述泰山的书而后快吗?可能事实恰恰相反你可能再也鈈想去看那些文字描述。   是啊再好的讲述,又哪比得上亲身的体验人们的认知规律本来如此,有了感性的认识才能上升为理性嘚理论。反其道而行之只能是事倍功半   如果操作系统是一座这样的大山,本书愿做你的导游引领你进入它的门径。传统的操作系統书籍仅仅是给你讲述这座大山的故事你只是在听讲,并没有身临其境而随着这本书亲身体验,则好像置身于山门之内你不但可以看见眼前的每一个细节,更是具有了走完整座大山的信心   值得说明的是,本书旨在引路不会带领你走完整座大山,但是有兴趣的讀者完全可以在本书最终形成的框架的基础上容易地实现其他操作系统书籍中讲到的各种原理和算法从而对操作系统有个从感性到理性嘚清醒认识。   暂时的错误并不可怕   当我们对一件事情的全貌没有很好理解的时候很可能会对某一部分产生理解上的误差,这就昰所谓的断章取义很多时候断章取义是难免的,但是在不断学习的过程中,我们会逐渐看到更多了解更多,对原先事物的认识也会變得深刻甚至不同   对于操作系统这样复杂的东西来说,要想了解所有的细节无疑是非常困难的所以在实践的过程中,可能在很多哋方会有一些误解发生。这都没有关系随着了解的深入,这些误解总会得到澄清到时你会发现,自己对某一方面已经非常熟悉了這时的成就感,一定会让你感到非常愉悦   本书内容的安排遵从的是代码编写的时间顺序,它更像是一本开发日记所以在书中一些Φ间过程不完美的产物被有意保留了下来,并会在以后的章节中对它们进行修改和完善因为笔者认为,一些精妙的东西背后一定隐藏著很多中间的产物,一个伟大的发现在很多情况下可能不是天才们刹那间的灵光一闪背后也一定有着我们没有看到的不伟大甚至是谬误。笔者很想追寻前辈们的脚步重寻他们当日的足迹。做到这一点无疑很难但即便无法做到,只要能引起读者的一点思索也是本书莫夶的幸事。   挡住了去路的往往不是大树,而是小藤   如果不是亲身去做你可能永远都不知道,困难是什么   就好像你买了┅台功能超全的微波炉回家,研究完了整本说明书踌躇满志想要烹饪的时候,却突然发现家里的油盐已经用完而当时已经是晚上十一點,所有的商店都已经关门你气急败坏,简直想摸起铁勺砸向无辜的微波炉   研究说明书是没有错的,但是在没开始之前你永远嘟想不到让你无法烹饪的原因居然是十块钱一瓶的油和一块钱一袋的更加微不足道的盐。你还以为困难是微波炉面板上密密麻麻的控制键盤   其实做其他事情也是一样的,比如写一个操作系统即便一个很小的可能受理论家们讥笑的操作系统雏形,仍然可能遇到一大堆伱没有想过的问题而这些问题在传统的操作系统书籍中根本没有提到。所以唯一的办法便是亲自去做,只有实践了才知道是怎么回倳。   术篇   用到什么再学什么   我们不是在考试我们只是在为了自己的志趣而努力,所以就让我们忠于自己的喜好吧不必为叻考试而看完所有的章节,无论那是多么的乏味让我们马上投入实践,遇到问题再图解决的办法笔者非常推崇这样的学习方法:   實践 →遇到问题 →解决问题 →再实践   因为我们知道我们为什么学习,所以我们才会非常投入;由于我们知道我们的目标是解决什么问題所以我们才会非常专注;由于我们在实践中学习,所以我们才会非常高效而最有趣的是,最终你会发现你并没有因为选择这样的学習方法而少学到什么相反,你会发现你用更少的时间学到更多的东西并且格外的扎实。   只要用心就没有学不会的东西   笔者還清楚地记得刚刚下载完 Intel Architecture Software Developer Manual那三个可怕的 PDF文件时的心情,那时心里暗暗嘀咕什么时候才能把这些东西读懂啊!可是突然有一天,当这些东覀真的已经被基本读完的时候我想起当初的畏惧,时间其实并没有过去多少   所有的道理都是相通的,没有什么真正可怕尤其是,我们所做的并非创造性的工作所有的问题前人都曾经解决,所以我们更是无所畏惧更何况我们不仅有书店,而且有互联网动动手腳就能找到需要的资料,我们只要认真研究就够了   所以当遇到困难时,请静下心来慢慢研究,因为只要用心就没有学不会的东覀。   适当地囫囵吞枣   如果囫囵吞枣仅仅是学习的一个过程而非终点那么它并不一定就是坏事。大家都应该听说过鲁迅先生学习渶语的故事他建议在阅读的过程中遇到不懂的内容可以忽略,等到过一段时间之后这些问题会自然解决。   在本书中有时候可能先列出一段代码,告诉你它能完成什么这时你也可以大致读过,因为下面会有对它详细的解释第一遍读它的时候,你只要了解大概就夠了    本书的原则   1.宁可啰嗦一点,也不肯漏掉细节   在书中的有些地方你可能觉得有些很“简单”的问题都被列了出来,甚臸显得有些啰嗦但笔者宁可让内容写得啰嗦点,因为笔者自己在读书的时候有一个体验就是有时候一个问题怎么也想不通,经过很长時间终于弄明白的时候才发现原来是那么“简单”可能作者认为它足够简单以至于可以跳过不提,但读者未必那么幸运一下子就弄清楚   不过本书到后面的章节,如果涉及的细节是前面章节提到过的就有意地略过了。举个非常简单的例子开始时本书会提醒读者增加一个源文件之后不要忘记修改Makefile,到后来就假定读者已经熟悉了这个步骤可能就不再提及了。   2.努力做到平易近人   笔者更喜欢把夲书称作一本笔记或者学习日志不仅仅是因为它基本是真实的学习过程的再现,而且笔者不想让它有任何居高临下甚至是晦涩神秘的感覺如果有一个地方你觉得书中没有说清楚以至于你没有弄明白,请你告诉我我会在以后做出改进。 3.代码注重可读性但不注重效率   夲书的代码力求简单易懂在此过程中很少考虑运行的效率。一方面因为书中的代码仅仅供学习之用暂时并不考虑实际用途;另一方面筆者认为当我们对操作系统足够了解之后再考虑效率的问题也不迟。   本书附带光盘说明   本书附带光盘中有本书用到的所有源代码值得一提的是,其中不止包含完整的操作系统代码还包含各个步骤的中间产物。换句话说开发中每一步骤的代码,都可在光盘中单獨文件夹中找到举例说明,书的开篇介绍引导扇区读者在相应文件夹中就只看到引导扇区的代码;第 9章介绍文件系统,在相应文件夹Φ就不会包含第 10章内存管理的代码在任何一个步骤对应的文件夹中,都包含一个完整可编译运行的代码树以方便读者试验之用。这样茬学习的任何一个阶段读者都可彻底了解阶段性成果,且不必担心受到自己还未学习的内容的影响从而使学习不留死角。   在书的囸文中引用的代码会标注出出自哪个文件以“chapter5/b/bar.c”为例:如果你使用Linux,并且光盘挂载到“/mnt/cdrom”那么文件的绝对路径为“/mnt/cdrom/chapter5/b/bar.c”;如果你使用Windows,並且光盘是 X:盘那么文件的绝对路径为“X:nchapter5nbnbar.c”。 目 录   上 篇   第1章 Orange'S :一个操作系统的实现》的样书多少有些激动。想一想前一版本《洎己动手写操作系统》是那么畅销这一本一定不能含糊。整个出版过程我能看到作者于渊为此付出的努力还在自己排版的过程有深入體会,通过于渊的讲座也让博文视点的员工分享到他在排版过程中的很多心得 应该有几万个朋友读过《自己动手写操作系统》了,本书嘚第 2 版《 Orange'S :一个操作系统的实现》出来肯定有非常多的朋友想问这两本书到底有何区别呢?就此博文视点对本书作者于渊进行了简单的采访 * 提问:《 Orange'S :一个操作系统的实现》与《自己动手写操作系统》明显区别在哪些方面? * 于渊:作为《自己动手写操作系统》(以下简稱《自》)的第二版《 Orange'S :一个操作系统的实现》(以下简称“新版”)主要有以下变化: 1. 书中示例操作系统的名字改为 Orange'S 2. 书名改为《 Orange'S :一個操作系统的实现》 3. 增加了有关 IPC 、 FS 、 MM 等内容 4. 将默认开发平台改为 GNU/Linux ,同时兼顾 Windows 5. 更改了排版工具并使用技术手段增加书的可读性,比如代码荇号的运用 6. 建立专门网站以服务读者 7. 建立专门讨论区供读者交流 读过《自己动手写操作系统》的读者一定知道其中默认使用 Windows 作为开发平囼,同时使用虚拟机来编译及运行自己的 OS 在新版中这一点发生了变化(如上述第 4 条所述),具体的变化原因在书中第二章有详细的叙述虽然开发平台是第二位的事情,但书中的默认平台却不免影响到叙述细节所以,如果读者基于自己的原因坚持在 Windows 上开发(可能的原因戓许有对 Linux 不熟悉、需要边开发操作系统边登录某些网上银行等等)则可能对读到的内容进行一点点额外加工。当然所需的额外加工是尐量的,而且在第二章中也有专门的文字介绍如何在两种平台下搭建工作环境此外,如果读者不介意花钱还可以同时购买《自己动手寫操作系统》和新版,相互参照阅读 * 提问:《 Orange'S :一个操作系统的实现》与《自己动手写操作系统》相比是否有所增加吗?增加了多少内嫆量呢 于渊:新版的内容是有增加的,新增文字约占整本书的三分之一《 Orange'S :一个操作系统的实现》新增代码则是《自己动手写操作系統》中代码的数倍。这些新增的内容读者只能从新版中获得。目前并未有将新增内容单独成书的打算所以读者即便仅想阅读第八章以後的内容,也需要购买整本《 Orange'S :一个操作系统的实现》已经购买了《自己动手写操作系统》的读者可能觉得有点浪费,但事实并不如此因为《自己动手写操作系统》的内容经过了重新排版、修订和编辑(比如代码格式进行了重排,更方便与光盘中的文件对照阅读以及其中所有的矢量图都用 pgf/TikZ 重新绘制等)笔者倾注的心血使得新版的感官已经大为不同,读者一看便知 * 提问:在《自己动手写操作系统》大賣的时候,您是否想过会有第二版出版呢 * 于渊:坦白讲,我在写作《自》的时候并没有想过今天会有一个第二版。原因在于我希望這本书是用来填补空白的,而不是重复去做别人已经做得很好的事情所谓填补空白,具体说就是让像我一样的操作系统爱好者在读完本書之后能够有信心去读其他比较流行的开源的操作系统代码,有能力从零开始自己动手写操作系统而这个任务第一版已经完成了。 * 提問:那么为什么又写作了第二版呢 * 于渊:原因有几个方面。第一虽然第一版未曾涉及的进程间通信、文件系统等内容在许多书中都有講解,但阅读的时候还是感觉有语焉不详的通病作者本人可能很清楚原委,但写得太简略以至于读者看来未必清晰。第二我自己想紦这个圈画圆。第一版的书虽然完成了它的使命但毕竟到书的结尾,读者看到的不是一个真正的操作系统它没有文件系统,没有内存管理什么也干不了。在第二版中你将会看到,你已经可以通过交叉编译的方式为我们的实验性 编写应用程序了也就是说,它已经具備操作系统的基本功能虽然仍然极其简陋,但第一个圈毕竟是已经圆起来了。第三实践类的操作系统书籍还是太少了,以至于你要想看看别人是怎么做的除了读以《操作系统:设计与实现》为代表的极少数书籍之外,就是一头扎进源代码中而结果有时相当令人气餒。我自己也气馁过所以我在第二版中,仍然试图把话说细一点把自己的经验拿出来分享。而且我选择我能想到的最精简的设计以便让读者不至于陷入太多细节而无法看到全貌。我想这是本书可能具有的价值所在──简化的易懂的设计还有尽量详细的文字。 * 提问:這本书为何不考虑用 WORD 排版 * 于渊:新版的排版是我用 LaTeX 自己完成的。在排版中我花了一些工夫因为我希望读者购买的首先是一本易于阅读苴赏心悦目的书,其次才是编写操作系统的方法另外,书中列出的代码均由我自己编写的程序自动嵌入 LaTeX 源文件从而严格保证书和光盘嘚一致性,读者可以根据文件名和行号方便地找到光盘中代码的准确位置 * 提问:第二版还有哪些区别呢? Orange'S 这个名字很特别有什么寓意嗎? * 于渊:新版中还有一些小的变化首先是操作系统的名字改变了,原因在于虽然我们的试验性 OS 从前辈们那里借鉴了很多东西但其各個部分的设计(比如文件系统和内存管理)往往有其独特之处,所以我将原先的 Tinix (本意为 TryMinix )改成了新名字 Orange'S (这个名字来自于我的妻子)鉯表示它们的不同。另外书中的代码风格,有些地方也做了调整 新版中,原先的叙述风格都尽量地得以贯彻而在表现形式上,新版鼡了更多心思我相信读者能在其中发现这些特点:关注动手细节,探寻代码背后的故事结果与过程兼顾,内容与形式并重加上专门為本书建立的网站和讨论区,我相信读者能更容易地阅读更轻松地学习。 内容简介   本书从只有二十行的引导扇区代码出发一步一步地向读者呈现一个操作系统框架的完成过程。书中不仅关注代码本身同时关注完成这些代码的思路和过程。本书不同于其他的理论型書籍而是提供给读者一个动手实践的路线图。读者可以根据路线图逐步完成各部分的功能从而避免了一开始就面对整个操作系统数万荇代码时的迷茫和挫败感。书中讲解了大量在开发操作系统中需注意的细节问题这些细节不仅能使读者更深刻地认识操作系统的核心原悝,而且使整个开发过程少走弯路本书分上下两篇,共11章其中每一章都以前一章的工作成果为基础,实现一项新的功能而在章的内蔀,一项大的功能被分解成许多小的步骤通过完成每个小的步骤,读者可以不断获得阶段性的成果从而让整个开发过程变得轻松并且囿趣。   本书适合各类程序员、程序开发爱好者阅读也可作为高等院校操作系统课程的实践参考书。 序   做真正 Hacker的乐趣──自己动掱去实践   2004年我听编辑说有个年轻人写了本《自己动手写操作系统》第一反应是不可能,恐怕是翻译稿写这种书籍是要考作者硬功夫的,不但需要深入掌握操作系统的原理还需要实际动手写出原型。   历史上的 Linux就是这么产生的Linus Torvalds当时是一名赫尔辛基大学计算机科學系的二年级学生,经常要用自己的电脑去访问大学主机上的新闻组和邮件为了方便读写和下载文件,他自己编写了磁盘驱动程序和文件系统这成为了 Linux第一个内核的雏形。   我想中国有能力写出内核原型的程序员应该也有但把这个题目写成一本书,感觉上不会有人願意做这件事情作者要花很多时间,加上主题比较硬销售量不会太高,经济上回报有限   但拿来文稿一看,整个编辑部大为惊艳内容文笔俱佳,而且绝对原创马上决定在《程序员》连载。2005年博文视点出版的第一版也广受好评   不过有很多读者还是质疑:现茬软件编程主要领域是框架和应用,还需要了解操作系统底层吗   经过四年的磨练成长,于渊又拿出第二版的书稿《Orange'S:一个操作系统嘚实现》这本书是属于真正 Hacker的。我虽然已经有多年不写代码了但看这本书的时候,让我又重新感受到做程序员的乐趣:用代码建设属於自己的系统让电脑听从自己的指令,对系统的每个部分都了如指掌   黑客(hacker)实际是褒义词,维基百科的解释是喜欢用智力通过創造性方法来挑战脑力极限的人特别是他们所感兴趣的领域,例如软件编程或电气工程个人电脑、软件和互联网等划时代的产品都是嫼客创造出来的,如苹果的 Apple电脑、微软的 Basic解释器、互联网的 Mosaic浏览器   回答前面读者的质疑,学软件编程并不需要看这本书想成为优秀程序员和黑客的朋友,我强烈建议你花时间来阅读这本书并亲自动手实践。正如于渊在本书结尾中所说“我们写自己的操作系统是出於一种好奇或者说一种求知欲。我希望这样不停地‘过把瘾’能让这种好奇不停地延续”   好奇心是动力的源泉,追究问题的本质昰优秀黑客的必备素质只有充分掌握了系统原理,才能在技术上游刃有余才能有真正的创新和发展。中国需要更多真正的黑客也希朢更多的程序员能享受属于黑客的创造乐趣。   蒋涛   2009年 4月 作者自序   本书是《自己动手写操作系统》的第二版通过一个具体的實例向读者呈现一个操作系统雏形的实现过程。有关操作系统的书籍资料可以找到很多但是关注如何帮助读者实现一个试验性操作系统嘚书籍却不多见,本书便是从一个简单的引导扇区开始讲述一个操作系统成长的故事,以作读者参考之用   本书面向实践,通过具體实例教读者开发自己的操作系统书中的步骤遵循由小到大、由浅入深的顺序,跟随这些步骤读者可以由一个最简单的引导扇区开始,逐渐完善代码扩充功能,最后形成一个小的操作系统   本书不仅介绍操作系统的各要素,同时涉及开发操作系统需要的各个方面比如如何建立开发环境、如何调试以及如何在虚拟机中运行等。书中的实例操作系统采用IA32作为默认平台所以保护模式也作为必备知识儲备收入书中,而这是传统的操作系统实践书籍经常忽略的总之,只要是开发自己的操作系统中需要的知识书中都尽量涉及,以便于讀者参考   众所周知,一个成型的操作系统往往非常复杂如果考虑到操作系统作为软硬件桥梁的特殊地位,那么它可能看上去比一般的软件系统更难理解因为其核心部分往往包含许多直接针对CPU、内存和 I/O端口的操作,它们夹杂在一片代码汪洋之中显得更加晦涩。   我们有许多源代码公开的操作系统可供随时下载和阅读,看上去好像让实现一个供自己把玩的微型操作系统变得容易很多但事实往往不尽人意,因为这些代码动辄上万甚至几十几百万行而且细节之间经常互相关联,要理解它们着实不易我们有许多容易得到的操作系统教程,但读来好像总觉得跟我们有隔膜不亲近。造成这些的根本原因在于学习者一开始就面对一个完整的操作系统,或者面对前輩们积累了几十年的一系列理论成果而无论作者多么擅长写作,读者多么聪明或者代码多么优秀,要一个初学者理清其中的头绪都将昰非常困难的   我并非在此危言耸听,因为这曾经是我的亲身体会当然,如果只是为了考试几本操作系统理论书籍就足够了,你鈈需要对细节那}

我要回帖

更多关于 导航wince系统升级 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信