质量是100g.温度是24:从头开始编写操作系统(2) 第1章:介绍 - xiaoxiaoyaya的专栏 - CSDN...

来源:百度文库 编辑:九乡新闻网 时间:2024/07/05 19:32:33
您还未登录!|登录|注册|帮助
CSDN首页 资讯 论坛 博客 下载 搜索 更多CTO俱乐部
学生大本营
培训充电
移动开发
软件研发
云计算
程序员
TUP
xiaoxiaoyaya的专栏
条新通知 登录 注册 欢迎 退出 我的博客 配置 写文章 文章管理 博客首页   全站 当前博客  空间 博客 好友 相册 留言 用户操作
[留言]  [发消息]  [加为好友] 
",ID:xiaoxiaoyaya共6829次访问,排名2万外,好友0人,关注者20人。
","qq":"
",的文章
原创 0 篇
翻译 9 篇
转载 0 篇
评论 29 篇
订阅我的博客
    
 
 
 
[编辑]xiaoxiaoyaya的公告
[编辑]文章分类
从头开始编写操作系统
存档
2011年04月(9)
公告: 祝贺2011年4月当选微软最有价值专家的会员 [意见反馈][官方博客]   从头开始编写操作系统(2) 第1章:介绍 收藏
译自:http://www.brokenthorn.com/Resources/OSDev1.html
第1 章:介绍
Mike, 2008, Updated 2010 本系列文章旨在向您展示并说明如何从头开发一个操作系统。 这是关于什么的? 操作系统是一个复杂的话题,学习操作系统是如何工作的是一个伟大的学习经历。 本系列的目的是告诉您从头开发操作系统背后的故事。无论您想要开发您自己的操作系统或是简单的只想知道操作系统是如何工作的,这个系列就适合您。 什么是操作系统? 操作系统向用户提供一台电脑的基本功能、外观和感觉。基本目的是为用户创造一个可工作的操作环境。 操作系统的例子有 Windows 、Linux 和Macintosh 等。 如果你没有编程经验 计算机编程是设计、编写计算机可以加载并执行的软件或程序。而编写操作系统正是这样一件事。 操作系统不是单个程序,而是一些独立工作并相互交流的软件集合。这是“操作环境”的意义。 因为操作系统是一个软件集合,为了开发操作系统,我们必须了解如何开发软件,就是说必须要了解如何编程。 如果你以前从没写过代码,看看“读者需要了解的知识”一节。这一节有一些不错的教程和文章的链接,它们将帮助您学习使用C++ 和80x86 汇编语言编程。 读者需要了解的知识 关于C 语言的知识 使用像C 语言这样的高级语言,可以使操作系统开发更为容易。用于操作系统开发的常用语言有C 、 C++ 、Perl 。不要以为这些是可以使用的全部语言;可以使用其他的。我就曾经见过使用FreeBASIC 的!可是,在长远来看使用更高级的语言会使工作更舒服也更困难。 C 和C++ 最常见,其中C 最常见。C 语言,是一个中级语言,既有高级的构造方法,也提供那些靠近汇编语言和系统的底层细节。所以,在操作系统开发中使用C 语言很容易。一个为什么要在操作系统开发中使用C 语言的主要原因是:C 语言原本就是为系统编程和嵌入式软件开发而设计的。 因此,我们在大多数的操作系统开发中使用C 语言。 C 语言是一个复杂的保存语言,需要一本书来描述。如果你不了解C 语言,下面的链接会对你有帮助: cprogramming.com
Thinking in C++
我个人从原来的“The C++ Programming language ”开始学习C 语言,不过现在它有些过时了。 关于x86 汇编语言的知识 80x86 汇编语言是一种低级编程语言。汇编语言提供一种直接的一对一的处理器指令映射,这使得它适合于硬件编程。 汇编语言是低级语言,这使得使用它比像C 那样的高级语言更复杂也更困难,所以,为了简单些,我们仅在那些必须使用汇编语言的地方使用它。 汇编语言是另外一种需要一本书来描述的复杂语言。如果你不了解x86 汇编语言,下面的链接会对你有帮助: Assembly Language: Step by Step
Art of Assembly
我个人从“Assembly Language Step by Step ”( 很棒的入门书) 和“ the Art of Assembly Language ”开始学起。它们都是好书。 准备完成 这是你所需要了解的全部——所有其它东西,我会随着需要教给您。如前所诉,从现在起,我不会解释C 或是x86 汇编语言的概念。然而,我仍然会解释那些您可能不熟悉的新指令比如lgdt 、sti 、cli 、bt 、cpuid 等等。 工具 为了开发低级代码,我们会使用低级软件来帮助我们。这些工具的一部分并不是必须的,但是,我们强烈推荐使用它们来简化我们的开发工作。 NASM ——汇编器 Netwide Assembler (NASM) 可以产生平坦二进制16 位程序,而大多数其他的汇编器(Turbo Assembler (TASM) 、 Microsoft's Macro Assembler (MASM) )不能。 在操作系统开发过程中,一些程序必须是纯二进制可执行程序,因此NASM 是最佳选择。 您可以在 这里 下载NASM. Microsoft Visual C++ 2005 或 2008 因为移植性的考虑,我们的操作系统的大部分代码会使用C 语言来开发。 在操作系统开发中,有些事情我们必须要控制,但是有些编译器并不支持。比如,告别了所有的运行时编译器支持(模板、异常)以及优秀的标准库!根据您的系统的设计,您也要支持或是改变更为详细的特性:比如从一个特殊地址加载,为您的出现增加内部的节等等。基本的意思是,并不是所有的编译器都适合操作系统的开发。 我会使用Microsoft Visual C++ 来开发系统。可是,使用DJGPP 、GCC 或 Cygwin 也可以。Cygwin 是一个命令壳程序用于模拟Linux 的命令壳。通过Cygwin 可以使用GCC 。 您可以从 这里 下载Visual C++ 2008 您可以从 这里 下载Visual C++ 2005 对其它编译器的支持 如前所诉,使用其它的编译器开发操作系统是可行的。而我使用的是Visual C++ ,我将会解释如何设置工作环境,使您能够使用您喜爱的编译器。 当前,我计划解释如何为以下编译器设置工作环境: DJGPP
Microsoft Visual Studio 2005
GCC
如果可能的话,我会尝试支持以下编译器: Mingw
Pelles C
如果您希望在这个列表中增加一些内容,请 联系我 。 复制引导加载器 引导加载器是一个保存在单独的512 字节的扇区中的纯二进制程序。没有它就不能创建一个操作系统,十分重要。它是您的操作系统中第一个被BIOS 加载并由处理器直接运行的程序。 我们可以使用NASM 来汇编程序,可怎么把它放到软盘上呢?我们不能只复制文件。相反,我们要用我们自己的引导加载器代替原来的(在格式化时Windows 创建的)加载器。为什么要这么做呢?记住,BIOS 仅在查找引导磁盘时查找引导扇。引导扇和“引导记录”必须在同一个扇区,所以我们得覆盖它。 有很多方法来实现这一目的。这里,我们展示两种方法,如果这种方法不适合您的系统,我们的读者可能会尝试其他的方法。 提示:在我说明如何使用之前,不用尝试这个软件,不恰当的使用这个软件会导致数据损坏,或者是您的计算机无法正确引导。 PartCopy ——低级磁盘拷贝器 PartCopy 可以使您能够将数据从一个驱动器复制到另一个。PartCopy 表示“Partial copy ”。它的功能是将制定数量扇区由一个位置复制到另一个位置,或者从一个特殊的地址到另一个。 您可以从 这里 下载它。 Windows DEBUG 命令 Windows 提供了一个小的命令行调试器。可以使用这个软件做很多工作,但我们仅需要用它将我们的引导加载器复制到磁盘的第一个512 字节中。 转到命令提示符,输入debug 。你会看到一个小横线作为提示 (-) : C:\Documents  and Settings\Michael>debug - 这就是你输入命令的地方。h 是帮助命令,q 是退出命令。w (write )是写命令,这个对我们而言最重要。 你可以让debug 加载一个文件,比如我们的引导加载器: C:\Documents  and Settings\Michael>debug boot_loader.bin - 这允许我们对它进行操作。(我们也可以使用L (Load ) 命令 加载我们需要的文件)。在前面的例子中,boot_loader.bin 文件被加载到了地址0x100 处。 为了将文件写到磁盘的第一个扇区中,我们需要W(Write) 命令, 格式如下: W [address] [drive] [firstsector] [number] Okay ……让我们看看:文件在地址(address )0x100 处。我们希望是软驱 (Drive 0) 。firstsector 是磁盘的第一个扇区(sector 0) 。扇区数(number )是1 。 放到一块,我们将boot_loader.bin 写到磁盘引导扇的代码是: C:\Documents 和 Settings\Michael>debug boot_loader.bin -w 100 0 0 1 -q 如果您希望学习更多关于DEBUG 的内容看看 这个教程 。 VFD ——虚拟软盘驱动器 您有一个软驱吗,这个程序很有用。它可以从一个软盘映像文件甚至是内存来模拟一个真正的软驱。这个程序可以创建软盘映像文件,允许直接使用Windows 文件浏览器直接格式化、复制文件(比如您的内核)。 您可以从 这里 下载它。 Bochs 虚拟机——PC 仿真器和调试器 您要把一张软盘插入的计算机,期待它可以工作。您引导您的计算机,来检查您的伟大工作!……直到,直到您的软盘马达因为您在引导加载器中忘记向控制器发送命令而损坏。 当在操作低级代码时,如果您不小心,很可能会损坏您的硬件。同样,为了测试您的操作系统,在开发过程中您需要重启您的计算机成百上千次。 同样,如果您的计算机重启了,您会做什么?当内核崩溃时,您会做什么?因为没有适合您的操作系统的调试器,调试几乎变得不可能。 如何解决?PC 仿真器。有很多可用的,比如VMWare 和Bochs 。我会使用Bochs 和Microsoft Virtual PC 用于测试。 您可以从 这里 下载Bochs. 完了,伙计们 您现在不需要知道,我列出的这些软件该怎么用,我会在需要使用它们的时候作出解释。 如果你希望在一台没有软驱的真实计算机上运行您的操作系统,从一个包含软盘映像的CD 上引导也是可以的。这是通过大多数BIOS 支持的软盘仿真(Floppy Emulation ) 实现的。 简单的使用一个CD 烧制软件(我使用MagicISO )可以从软盘映像文件生成一个可引导ISO 文件,然后,简单的把这个文件烧制到CD 上就行了。 构造步骤 上面列出了很多工具。为了更好的理解它们是怎样被使用的,我们看一下构造操作系统的整个过程。 准备好一切
使用VFD 创建并格式化要使用的虚拟磁盘文件。
设置Bochs 虚拟机从软盘引导。
引导加载器
使用NASM 汇编引导加载器来创建平坦二进制文件。
使用PartCopy 或DEBUG 命令复制引导加载器到虚拟磁盘的引导扇。
内核 ( 以及所有其它的程序)
汇编和/ 或编译所有的源代码到一个可以被引导加载器加载并执行的目标文件格式(如ELF 或PE )。
使用Windows Explorer 将内核复制到软盘中。
测试!
使用Bochs 虚拟机及调试器,使用真正的软盘或使用MagicISO 创建可引导的CD 。
下次见 本章列出的条目和概念对您来说并不新鲜。别着急——所有的一切会在后面的章节里解释。 本章的目的是为本系列的其余部分构造一个立足点。它给出了一个基本的介绍,并列出了将要使用的工具。当需要的时候,我会解释如何使用这些工具,所以你不需要了解除了“用户需要了解的知识”一节中列出的内容以外的其他东西。 我们也见到了开发操作系统的构造步骤。大多数情况下,这个描述过于简单,但是,它却告诉您在什么时候使用哪一个上面列出的工具。 下一章中,我们将回顾第一个磁盘操作系统(Disk Operating System (DOS) )并进行一次短暂的历史旅程。我们会看到一些基本的操作系统概念。 我们还不会马上使用到上面列出的工具,您不需要立即下载它们。 下次见。 发表于 @ 2011年04月13日 19:16:00 | 评论( 2 ) | 编辑| 举报| 收藏 旧一篇:从头开始编写操作系统(1) 第0章:序章  | 新一篇:从头开始编写操作系统(3) 第2章:基本理论
-
查看最新精华文章 请访问博客首页相关文章 roctang2006 发表于2011年4月19日 23:27:44  IP:219.245.129.*举报回复删除
好像有一个类似的中文书,跟这个英文文档有什么关系? Anyway,很好的工作。doc110 发表于2011年4月20日 11:47:08  IP:210.51.244.*举报回复删除
发表评论 表 情:           评论内容:  用 户 名: 登录 注册 匿名评论 匿名用户验 证 码:   重新获得验证码    专区推荐内容Android应用换电视,前30名有效!
【教程】笔记本安装MeeGo
微软BI解决方案开发简介
如何用Qt设置桌面背景
下载Windows Phone 中文培训包
下载 Windows Phone 开发工具
全新Windows Phone 开发中心
VS2010 SharePoint 入门
【免费下载】WebMatrix建站工具
AIX 专区有奖话题讨论
4.21日Adobe企业RIA开发者研讨会
MeeGo中文社区全新呈现
【教程】基于VC色温图效果实现
【教程】游戏技巧特效处理
Qt开发者社区精彩全新呈现!
Firefox 4在meego上成功安装
IDF2011:多图详解MeeGo 3月后正式发布
PayPal助力移动支付应用
<<>> 热门招聘职位【梦擎科技】诚聘Android ,iPhone ,C++ 通讯应用开发等IT人才
【上海智涌】高薪诚聘 C++高级工程师
【创思佳天津公司】招JAVA开发爱好者人才及天才设计师
【仟游软件2K Games China】诚聘程序员/高级程序员
【西普科技】高薪诚聘.net软件工程师、网页设计、产品经理
【海慧公司】诚聘中高级程序员
【亿阳信通】诚邀您的加盟!
【点点网】诚聘英才!!!
【Amazon】亚马逊诚聘技术专家!
【趣游北京】高薪诚聘C++高级工程师/工程师 AS3工程师
【华夏纬讯】高薪诚聘C#程序员
【航天信息股份有限公司】诚聘系统架构,需求分析、JAVA开发、C/C++开发研发岗位热招中
【可得眼镜网】诚聘网站技术开发工程师、UED、DBA以及美工设计
这可能是你从未见过的技术人员招聘广告!
【上海东方久信集团】招聘.NET软件工程师
【杭州引力】高薪诚聘ios开发人员
【群硕软件】诚聘优秀IT人才(.Net,Java, Android etc)
【推博网】诚聘PHP/VC/MYSQLDBA/UI/WEB设计等职位
【北京盛安怡和公司】招聘Windows C/C++,php等人员
【PDE】游戏公司诚聘程序员
荷兰互联网公司诚聘Web(Rails)开发工程师
【重庆大龙网】高薪诚聘中高级软件工程师
【瑞易信息美资】高薪诚聘软件开发及数据库人才
【新迪数字】高薪诚聘JAVA项目软件架构师、JAVA项目主管!!
【梦擎科技】诚聘Android ,iPhone ,C++ 通讯应用开发等IT人才
【上海智涌】高薪诚聘 C++高级工程师
【创思佳天津公司】招JAVA开发爱好者人才及天才设计师
【仟游软件2K Games China】诚聘程序员/高级程序员
【西普科技】高薪诚聘.net软件工程师、网页设计、产品经理
【海慧公司】诚聘中高级程序员
【亿阳信通】诚邀您的加盟!
【点点网】诚聘英才!!!
【Amazon】亚马逊诚聘技术专家!
【趣游北京】高薪诚聘C++高级工程师/工程师 AS3工程师
【华夏纬讯】高薪诚聘C#程序员
【航天信息股份有限公司】诚聘系统架构,需求分析、JAVA开发、C/C++开发研发岗位热招中
【可得眼镜网】诚聘网站技术开发工程师、UED、DBA以及美工设计
这可能是你从未见过的技术人员招聘广告!
【上海东方久信集团】招聘.NET软件工程师
【杭州引力】高薪诚聘ios开发人员
【群硕软件】诚聘优秀IT人才(.Net,Java, Android etc)
【推博网】诚聘PHP/VC/MYSQLDBA/UI/WEB设计等职位
【北京盛安怡和公司】招聘Windows C/C++,php等人员
【PDE】游戏公司诚聘程序员
荷兰互联网公司诚聘Web(Rails)开发工程师
【重庆大龙网】高薪诚聘中高级软件工程师
【瑞易信息美资】高薪诚聘软件开发及数据库人才
【新迪数字】高薪诚聘JAVA项目软件架构师、JAVA项目主管!!
 公司简介|招贤纳士|广告服务|银行汇款帐号|联系方式|版权声明|法律顾问|问题报告
北京创新乐知信息技术有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
江苏乐知网络技术有限公司 提供商务支持
 Email:webmaster@csdn.net
Copyright © 1999-2010, CSDN.NET, All Rights Reserved  本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/xiaoxiaoyaya/archive/2011/04/13/6321365.aspx
从头开始编写操作系统(2) 第1章:介绍 - xiaoxiaoyaya的专栏 - CSDN... 从头开始编写操作系统(3) 第2章:基本理论 - xiaoxiaoyaya的专栏 - CS... 从头开始编写操作系统(5) 第4章:引导加载器2 - xiaoxiaoyaya的专栏 - ... 从头开始编写操作系统(4) 第3章:引导加载器 - xiaoxiaoyaya的专栏 - C... 从头开始编写操作系统(6) 第5章:引导加载器3 - xiaoxiaoyaya的专栏 - ... J2EE项目代码编写规范 - fbtdjs的专栏 - CSDN博客 微软操作系统最核心开发故事 第1章 代码勇士(2) - 天地之大,任我游! - CSDN博... 常用音频协议介绍 - dengjiang1999的专栏 - CSDN博客 STL vector 容器介绍 - masterlee的专栏 - CSDN博客 编写超级可读代码的15个最佳实践 - 蒋宇捷的专栏 - CSDN博客 大智慧公式编写教程 - 董昊(昊子)的专栏 - CSDN博客 微软操作系统最核心开发故事 第1章 代码勇士(1) - 天地之大,任我游! - CSDN博... 微软操作系统最核心开发故事 第1章 代码勇士(3) - 天地之大,任我游! - CSDN博... bbbbbbj的专栏 - CSDN博客 WinCE BSP的BIB文件介绍 - ARM-WinCE的专栏 - CSDN博客 Quartz学习 - bubei的专栏 - CSDN博客1 SavePoint (bzszp ) - bzszp的专栏 - CSDN博客 Drupal专业开发指南 第2章 创建一个模块(1) - g089h515r806的专栏 - CSDNBlog vc++ - lonelytreebjfu的专栏 - CSDN博客 pthread_cond_wait(). - xiaochan1gfu的专栏 - CSDN博... ASCII码表 - heruibin的专栏 - CSDN博客 tcp cwnd - linweixuan的专栏 - CSDN博客 RTMP是什么 - Thinkor2k8的专栏 - CSDN博客 手机知识 - whpeace的专栏 - CSDN博客