无忧启动论坛

标题: 教你自己写一个简单的操作系统 [打印本页]

作者: lintel    时间: 2007-12-18 19:16
标题: 教你自己写一个简单的操作系统
看后请投票:
你认为写这篇文章对你有帮助么?



来无忧那么多年了,自己也从02年那个什么都不懂的菜鸟到现在的版主。自己却只学习,没有为无忧做什么贡献。

谨以此文送给那些想了解系统启动,操作系统原理的兄弟了解平时不知道的东西。高手就见笑了.


看懂本文的前提:

首先,你必须有一定的编程知识,汇编语言是必不可少的。但是,如果你只是了解,不懂汇编也没有关系。

其次,你还需要有冷静的头脑,因为汇编编译程序不比高级语言程序,只能帮你编译而除错的能力很差。你需要冷静的头脑去思考

自己在哪里出现了错误,并修正。

你必须树立一个信念,你是可以做到的。而且写一个操作系统(operating system) 并不是人们传说中的只有精英分子才能做的,那么的传神。




   中断向量与中断向量表
  
什么是中断向量呢?
简单地说,就是我们所说的中断函数(INT)。在DOS时代以至现在,都是经常用到的。

在中断源识别方法时提到:早期的微机系统中将由硬件产生的中断标识码
(中断源的识别标志,可用来形成相应的中断服务程序的入口地址或存放中断服务程序的首地址)称为中断向量。在Pc/AT中也用到这个名称,但含义有所不同。在Pc/AT机中,中断向量是指中断服务程序的入口地址,包括段地址CS和段内偏移 量IP共4个字节。在PC/AT中,规定内存储器的最低1 KB用来存放中断向量(共256个),称这一片内存区为中断向量表,如图所示。
  在Pc/AT中由硬件产生的中断标识码被称为中断类型号(当然,中断类型号还有其他的产生方法,如指令中直接给出、CPU自动形成等),即在中断响应期间8259A产生的是当前请求中断的最高优先级的中断源的中断类型号。中断类型号和中断向量之间有下面的关系:
  中断类型号×4=存放中断向量的首地址
  有了存放中断向量的首地址,从该地址开始的4个存储单元中取出的就是中断服务程序的入

以下就是中断列表:

04H 1H 1 单步调试时处理器发出的中断
08H 2H 2 非屏蔽中断
0CH 3H 3 调试程序设置断点时处理器发出的中断
10H 4H 4 发生算术溢出时处理器发出的中断
14H 5H 5 调用BIOS的屏幕拷贝操作
18-1FH 6-7H 6-7 保留单元
20H 8H 8 每1/18.2秒定时器发出的中断
24H 9H 9 按压或释放键时产生的中断
28H 0AH 10 保留单元
2CH 0BH 11 通讯设备使用的硬件中断
30H 0CH 12 通讯设备使用的硬件中断
34H 0DH 13 交替打印时硬件产生的中断
38H 0EH 14 软驱操作结束时产生的硬件中断
3CH 0FH 15 打印机发出警告信号时产生的硬件中断
40H 10H 16 BIOS的显示I/O功能调用
44H 11H 17 BIOS设备确认调用
48H 12H 18 BIOS确认内存空间大小的功能调用
4CH 13H 19 BOIS的磁盘I/O功能调用
50H 14H 20 BIOS的RS-232串行I/O功能调用
54H 15H 21 在PC和XT机上是BIOS磁带I/O功能调用。在AT机上是AT扩充服务功能调用。
58H 16H 22 BIOS的键盘I/O功能调用
5CH 17H 23 BIOS的打印机I/O功能调用
60H 18H 24 ROM的BASIC解释和程序功能调用
64H 19H 25 BIOS的装载引导服务调用
68H 1AH 26 BIOS的日期时钟功能调用
6CH 1BH 27 Ctrl+Break处理程序功能调用。当键入Ctrl+Break键时指向可执行的程序入口初始化BIOS使该向量指向一条TRET指令。用户可修改该向量,使它指向自己的程序。
70H 1CH 28 指向每1/18.2秒时可执行的服务程序的入口。初始化时该向量指向一条IRET指令。用户可修改该向量,使它指向自己的Ctrl+Break 处理程序。
74H 1DH 29 指向显示控制器初始化参数。BIOS使这个向量指向ROM驻留表。
78H 1EH 30 指向软盘参数表。BIOS使这个向量指向ROM 驻留表,但是DOS把它改为指向DOS的RAM 驻留表。
7CH 1FH 31 指向一点阵表。在这个表中,BIOS可以找到字符集后128个字符的点阵
80H 20H 32 终止程序的DOS功能调用
84H 21H 33 任何种DOS功能调用  
88H 22H 34 指向DOS的结束地址
8CH 23H 35 指向DOS的Ctrl+Break处理程序
90H 24H 36 指向DOS的严重错误处理程序
94H 25H 37 DOS绝对磁盘读调用
98H 26H 38 DOS绝对磁盘写调用
9CH 27H 39 程序终止,但仍驻留内存的DOS功能调用
9DH 28H 40 DOS空闲
9EH 29H 41 支持驱动器程序输出
9FH-A1H 2AH-2CH 42-44 保留单元
A2H 2DH 45 DOS构件接口
A3H 2EH 46 COMMAND.COM退回入口
A4H 2FH 47 多路中断(空闲信号)
A5-FFH 30-3FH 48-63 为DOS保留的单元
100H 40H 64 保留单元
104H 41H 65 指向硬盘0的参数表,BOIS使这个向量指向ROM驻留的表。
108-10FH 42-43H  66-67 保留单元
110H 44H 68 PC机使用,用于指向低分辩率图形字符参数表
114H 45H 69 保留单元
118H 46H 70 指向硬盘1的参数表,BIOS使这个向量指向 ROM驻留的表。
11CH 47H 71 保留单元
120H 48H 72 PC机使用,用于把PC机的键盘代码变换为标准的键盘代码。
124H 49H 73 指向键盘增强服务变换表
128-17FH 4A-5FH 74-95 保留单元
180-19FH 60-67H 96-103 为用户程序保留的单元
1A0-1BFH 68-6FH 104-111 未使用
1C0H 70H 112 硬件中断(IRQ--interrupt request) 8--实时时钟中断
1C4H 71H 113 硬件中断9
1C8H 72H 114 硬件中断10
1CCH 73H 115 硬件中断11
1D0H 74H 116 硬件中断12
1D4H 75H 117 硬件中断13--BIOS把这个中断向量重定向为非屏蔽中断(NMI)
1D8H 76H 118 硬件中断14
1DCH 77H 119 硬件中断15
1E0-1FFH 78-7FH 120-127 未使用
200-217H 80-85H 128-133 为BASIC保留
218-3C3H 86-F0H 134-240 BASIC程序运行时提供给BASIC解释程序作用
3C4-#FFH F1-FFH <> 241-255 未作用






我们还需要了解计算机的启动过程:

(摘自网络)

先让我们来了解一些基本概念。第一个是大家非常熟悉的BIOS(基本输入输出系统),BIOS是直接与硬件打交道的底层代码,它为操作系统提供了控制硬件设备的基本功能。BIOS包括有系统BIOS(即常说的主板BIOS)、显卡BIOS和其它设备(例如IDE控制器、SCSI卡或网卡等)的BIOS,其中系统BIOS是本文要讨论的主角,因为计算机的启动过程正是在它的控制下进行的。BIOS一般被存放在ROM(只读存储芯片)之中,即使在关机或掉电以后,这些代码也不会消失。

  第二个基本概念是内存的地址,我们的机器中一般安装有32MB、64MB或128MB内存,这些内存的每一个字节都被赋予了一个地址,以便CPU访问内存。32MB的地址范围用十六进制数表示就是0~1FFFFFFH,其中0~FFFFFH的低端1MB内存非常特殊,因为最初的8086处理器能够访问的内存最大只有1MB,这1MB的低端640KB被称为基本内存,而A0000H~BFFFFH要保留给显示卡的显存使用,C0000H~FFFFFH则被保留给BIOS使用,其中系统BIOS一般占用了最后的64KB或更多一点的空间,显卡BIOS一般在C0000H~C7FFFH处,IDE控制器的BIOS在C8000H~CBFFFH处。

  第一步: 当我们按下电源开关时,电源就开始向主板和其它设备供电,此时电压还不太稳定,主板上的控制芯片组会向CPU发出并保持一个RESET(重置)信号,让CPU内部自动恢复到初始状态,但CPU在此刻不会马上执行指令。当芯片组检测到电源已经开始稳定供电了(当然从不稳定到稳定的过程只是一瞬间的事情),它便撤去RESET信号(如果是手工按下计算机面板上的Reset按钮来重启机器,那么松开该按钮时芯片组就会撤去RESET信号),CPU马上就从地址FFFF0H处开始执行指令,从前面的介绍可知,这个地址实际上在系统BIOS的地址范围内,无论是Award BIOS还是AMI BIOS,放在这里的只是一条跳转指令,跳到系统BIOS中真正的启动代码处。

  第二步: 系统BIOS的启动代码首先要做的事情就是进行POST(Power-On Self Test,加电后自检),POST的主要任务是检测系统中一些关键设备是否存在和能否正常工作,例如内存和显卡等设备。由于POST是最早进行的检测过程,此时显卡还没有初始化,如果系统BIOS在进行POST的过程中发现了一些致命错误,例如没有找到内存或者内存有问题(此时只会检查640K常规内存),那么系统BIOS就会直接控制喇叭发声来报告错误,声音的长短和次数代表了错误的类型。在正常情况下,POST过程进行得非常快,我们几乎无法感觉到它的存在,POST结束之后就会调用其它代码来进行更完整的硬件检测。

  第三步: 接下来系统BIOS将查找显卡的BIOS,前面说过,存放显卡BIOS的ROM芯片的起始地址通常设在C0000H处,系统BIOS在这个地方找到显卡BIOS之后就调用它的初始化代码,由显卡BIOS来初始化显卡,此时多数显卡都会在屏幕上显示出一些初始化信息,介绍生产厂商、图形芯片类型等内容,不过这个画面几乎是一闪而过。系统BIOS接着会查找其它设备的BIOS程序,找到之后同样要调用这些BIOS内部的初始化代码来初始化相关的设备。

  第四步: 查找完所有其它设备的BIOS之后,系统BIOS将显示出它自己的启动画面,其中包括有系统BIOS的类型、序列号和版本号等内容。

  第五步: 接着系统BIOS将检测和显示CPU的类型和工作频率,然后开始测试所有的RAM,并同时在屏幕上显示内存测试的进度,我们可以在CMOS设置中自行决定使用简单耗时少或者详细耗时多的测试方式。

  第六步: 内存测试通过之后,系统BIOS将开始检测系统中安装的一些标准硬件设备,包括硬盘、CD-ROM、串口、并口、软驱等设备,另外绝大多数较新版本的系统BIOS在这一过程中还要自动检测和设置内存的定时参数、硬盘参数和访问模式等。

  第七步: 标准设备检测完毕后,系统BIOS内部的支持即插即用的代码将开始检测和配置系统中安装的即插即用设备,每找到一个设备之后,系统BIOS都会在屏幕上显示出设备的名称和型号等信息,同时为该设备分配中断、DMA通道和I/O端口等资源。

  第八步: 到这一步为止,所有硬件都已经检测配置完毕了,多数系统BIOS会重新清屏并在屏幕上方显示出一个表格,其中概略地列出了系统中安装的各种标准硬件设备,以及它们使用的资源和一些相关工作参数。

  第九步: 接下来系统BIOS将更新ESCD(Extended System Configuration Data,扩展系统配置数据)。ESCD是系统BIOS用来与操作系统交换硬件配置信息的一种手段,这些数据被存放在CMOS(一小块特殊的RAM,由主板上的电池来供电)之中。通常ESCD数据只在系统硬件配置发生改变后才会更新,所以不是每次启动机器时我们都能够看到“Update ESCD… Success”这样的信息,不过,某些主板的系统BIOS在保存ESCD数据时使用了与Windows 9x不相同的数据格式,于是Windows 9x在它自己的启动过程中会把ESCD数据修改成自己的格式,但在下一次启动机器时,即使硬件配置没有发生改变,系统BIOS也会把ESCD的数据格式改回来,如此循环,将会导致在每次启动机器时,系统BIOS都要更新一遍ESCD,这就是为什么有些机器在每次启动时都会显示出相关信息的原因。

  第十步: ESCD更新完毕后,系统BIOS的启动代码将进行它的最后一项工作,即根据用户指定的启动顺序从软盘、硬盘或光驱启动。以从C盘启动为例,系统BIOS将读取并执行硬盘上的主引导记录,主引导记录接着从分区表中找到第一个活动分区,然后读取并执行这个活动分区的分区引导记录。
  如果系统之中安装有引导多种操作系统的工具软件,通常主引导记录将被替换成该软件的引导代码,这些代码将允许用户选择一种操作系统,然后读取并执行该操作系统的基本引导代码(DOS和Windows的基本引导代码就是分区引导记录)。

   BIOS在最后的一步,计算机就会检查磁盘盘的0面0磁道1扇区,如果发现它以0xAA55结束,则BIOS认为它是一个引导扇区。将这512B的内容装载到内存的0000:7C00处,然后开始执行”



  上面介绍的便是计算机在打开电源开关(或按Reset键)进行冷启动时所要完成的各种初始化工作,如果我们在DOS下按Ctrl+Alt+Del组合键(或从Windows中选择重新启动计算机)来进行热启动,那么POST过程将被跳过去,直接从第三步开始,另外第五步的检测CPU和内存测试也不会再进行。我们可以看到,无论是冷启动还是热启动,系统BIOS都一次又一次地重复进行着这些我们平时并不太注意的事情,然而正是这些单调的硬件检测步骤为我们能够正常使用电脑提供了基础。

一个好的操作系统,也是由许多模块组成。


最基本的操作系统也需要以下部分组成:

1. Boot Sector我们一般称软盘上的为引导扇区,在硬盘盘上的一般上我们就说是硬盘主引导记录(MBR) +  硬盘分区表

2.实时的内核

3.文件系统


再看看以下的建议:

一个相当不错的网站:http://my.execpc.com/~geezer/osd/index.htm

虽然是英文的,但写的很清楚明白。页面也很简单。

这篇文章就是其中一篇文章的一部分。觉得相当不错,我翻译了一下,和大家共享。

因为有些地方可能翻译的不是很准确所以先把原文贴出来。


Some advice on writing your own bootloader

Don't do it. At least, don't make the bootloader the first thing you work on. Reasons:
lA bootloader is not an OS.
lA bootloader is a VERY SMALL part of an OS.
lWriting a GOOD bootloader is as much work as writing a small OS (e.g. GRUB).
lWriting a robust and flexible bootloader is difficult. (Writing a crappy and inflexible bootloader is distressingly easy.)
lWriting a bootloader requires a lot of arcane knowledge (e.g. unreal mode, A20 gate, BIOS bugs and subtleties) that is otherwise useless.
lBootloaders are very difficult to test and debug.
lBecause of the hybrid 16- and 32-bit nature of x86 CPUs, x86 boot code is ugly.
lIf booting your kernel fails, you won't know if the error is in your kernel or in your bootloader.
lIf you are developing under DOS or Windows 9x, you can use DOS (or FreeDOS) as your bootloader. Otherwise, use GRUB. It's not perfect, but it's still better than writing your own, and it's the closest thing to a 'standard' bootloader there is.


不要自己写!至少,不要让bootloader成为你开始做的第一件事情。理由如下:

lbootloader并不是一个操作系统,而只是一个bootloader只是操作系统中很小的一部分。

l它会消耗你想当多的精力——写一个强壮的、灵活的bootloader非常难。(完成一个蹩脚的缺少灵活的bootloader非常简单)。完成一个好的bootloader需要做的工作和完成一个小的操作系统的工作量相同。比如GRUBl写一个bootloader需要的不是算法,而是令人头疼的硬件细节方面的知识。(比如非实模式下的A20地址线、BIOS的bug和其它细节),实际上这些东西都没有用。(我不知道这里我翻译的是不是合适,原文是:Writing a bootloader requires a lot of arcane knowledge (e.g. unreal mode, A20 gate, BIOS bugs and subtleties) that is otherwise useless.)

1.Bootloader很难被调试和测试

2.由于x86 CPU的需要,bootloader的代码不得不以16位和32位的汇编混合,因此它看起来一点都不漂亮

3.如果你的内核启动失败了,那么你不会清楚问题是在你的内核还是你的bootloader。

所以,如果你正在DOS、Windows 9x下开发,那么完全可以使用DOS(或这是FreeDOS)的引导程序。或者使用GRUB。虽然这样做并不完美,但是还是比你自己写要好的多。




不过虽然看到了这篇文章,但是我还是要自己写。个人感觉这些话都是写给那些想做出一个想当规模操作系统的牛人的。而我的目的并不是完成一个很完美的OS,而只是一个小的试验性质的操作系统,可以说只是学习。bootloader将会对我理解整个计算机的工作结构有很大的帮助


这里的BOOTLOADER是指对引导代码





说完了这些,那么,我们来开始编写操作系统的旅程吧!


我们需要比较多的工具。

1. BCHOS  一个模拟PC的软件
ftp://down:down@ddyou.3322.org/emulator-demo402.zip


2.NASM 开源的ASM(汇编)编译程序。
ftp://down:down@ddyou.3322.org/emulator-demo402.zip


3.Vfloppy 一个虚拟软盘启动工具

ftp://down:down@ddyou.3322.org/VFLOPPY.RAR








下载BOOT.rar文件,然后解压到NTLDR的目录下,在BOOT.ini上添一句:  C:\boot.bin="Boot Loader"

然后重新开机,选择Boot Loader,看看,出现了什么 ?

(未完,待续)

[ 本帖最后由 lintel 于 2008-1-10 06:24 PM 编辑 ]

writebin.rar

940 Bytes, 下载次数: 1485, 下载积分: 无忧币 -2

一个引导程序写入工具

boot.rar

198 Bytes, 下载次数: 1596, 下载积分: 无忧币 -2

最简单的引导器!


作者: 无优处男    时间: 2007-12-18 19:20
晕,这也原创??建议到书店看看,这类书好多了……随书光盘还有源码
作者: 阿非    时间: 2007-12-18 19:25
菜鸟不懂,路过&nbsp;
作者: lintel    时间: 2007-12-18 19:25
原帖由 无优处男 于 2007-12-18 07:20 PM 发表
晕,这也原创??建议到书店看看,这类书好多了……随书光盘还有源码


作者: fzfchao    时间: 2007-12-18 19:34
刚刚在龙族看过了!!
作者: 无优处男    时间: 2007-12-18 20:00
建议不要原创一些己经有很多而且书上写得非常详细的东东……
直接扫描粘贴过来似乎更好一些(这样的话好像就不叫原创了)
作者: sangmei    时间: 2007-12-18 20:12
路过..............没符合前提条件........
作者: 123    时间: 2007-12-18 20:23
楼主太健忘了,又把老帖翻上来
作者: lintel    时间: 2007-12-18 21:16
原帖由 无优处男 于 2007-12-18 08:00 PM 发表
建议不要原创一些己经有很多而且书上写得非常详细的东东……
直接扫描粘贴过来似乎更好一些(这样的话好像就不叫原创了)


这个就不一定了,上次是简单的,让您嘲笑了一番,这次我要写的不是简单的了,而是能够实现类似DOS那样的了

我还是谢谢你,如果不是你上次的嘲笑,我也不可能去研究那个清华的X86汇编教程了,还是要谢谢小弄大叔^_^
作者: lintel    时间: 2007-12-18 21:22
原帖由 fzfchao 于 2007-12-18 07:34 PM 发表
刚刚在龙族看过了!!


应该不一样吧,估计是HELLO WORLD !那样的系统吧?
这样的话是引导器而不是完整的系统,真正的系统需要一个完整的内核
作者: lintel    时间: 2007-12-18 21:45
原帖由 无优处男 于 2007-12-18 09:42 PM 发表
转贴(不是我原创)
当然更不是那些杂志里面的写个MBR就称为操作系统骗稿费的东东。
看了下目录感觉这本书还是有点内容的,有兴趣的可以学习下。我现在是没兴趣了……
Intel要是有他的光盘的话发上来不错,里 ...


你这个就是于渊写的《自己动手写操作系统》
作者: lintel    时间: 2007-12-18 22:01
原帖由 无优处男 于 2007-12-18 09:48 PM 发表
你点他同类书就会看到有几本了
国外的:


既然这样,那么你也应该教我们吧,一味得嘲笑别人太不好了。

如果这样的话,那么我这个东东就不要继续了,上课还是重要点。而且这个东东花费的时间太长了,是大量的脑力活动。
作者: 无优处男    时间: 2007-12-18 22:14
晕,那你当我没说过……我的意思是如果你是跟别人相同的话那还不如直接放个下载的上来。如果不相同的,是你原创的,那继续……说不定明年可以看到你的书呢。时间应该不是问题,大脑不活动就算你粘贴完了固计自己的系统也启动不了吧。年青人大脑应该多活动活动,我现在老了,不想大脑活动了,只想床上运动……
作者: lintel    时间: 2007-12-18 22:17
磁盘(指硬盘和软盘)的0扇区实际上是一个引导扇区。它的目的是找出并加载系统的内核,或者是 second-stage loader这里的second stage loader对应着刚才我们说的如果512字节的引导程序不能容纳引导代码,那么你就需要各two stage loader。这个second对应着的就是第2步。有3种方法能够实现:

1.从相邻的扇区加载内核或是second stage (没有文件系统)
2.不相邻的扇区(无论磁盘是否有文件系统)。这个bootloader的安装程序必须创建一个不相邻的扇区的映射,并且把这个映射写到first-stage代码中。(可能这段话按照原文翻译下来不是很好理解,我对这段话的理解就是:这是侯你不需要文件系统,那么你需要将第一阶段的引导代码的最后将第二阶段的引导代码从磁盘读出装入内存,使得第一阶段的引导代码运行结束后能够跳转到第二阶段的代码处继续执行。)
3. 使用磁盘上现有的文件系统加载


于渊选择的是第3种方法。

那么从相邻的扇区加载内核或是second stage,这样应该在硬盘上能够成功运行吧?在这个时候我还没有想好这个系统文件格式要怎么样定义,自己定义一个文件系统,不知道会怎么样^_^

[ 本帖最后由 lintel 于 2007-12-18 10:19 PM 编辑 ]
作者: 123    时间: 2007-12-18 22:41
LS说的好象是GRUB安装到MBR的过程
作者: lintel    时间: 2007-12-18 22:48
原帖由 123 于 2007-12-18 10:41 PM 发表
LS说的好象是GRUB安装到MBR的过程


NO,完全是两码事!
作者: hwb9091    时间: 2007-12-18 23:30
这方面到现在还是菜鸟纯粹过来看看!
作者: 小木头    时间: 2007-12-19 08:40
适合我这样的菜鸟们学习一下。自己虽然做不成可也会学习到它的原理吧!最好详细点。
作者: lvyanan    时间: 2007-12-19 10:38
虽然有的一下没理解,但佩服LZ的雄心,大力支持一下,继续等待中。。。。。。
作者: swans    时间: 2007-12-19 15:55
不过我菜得很 只能想像一下而已
作者: zzxwn    时间: 2007-12-19 15:57
路过,学习了.!
学习!!!
作者: q8q8feng    时间: 2007-12-19 22:38
感觉不错,支持楼主....
作者: goldeagle    时间: 2007-12-20 01:12
谢谢楼主分享!长见识了!
作者: lvyanan    时间: 2007-12-20 08:59
LZ没有提及逻辑磁盘的引导扇概念,其中的数据结构也很重要,该扇区程序是本逻辑盘启动的必不可少的环节,等待详细描述。。。。。。
作者: first    时间: 2007-12-20 17:28
支持,谢谢楼主!
做做看看。
作者: mickcai    时间: 2007-12-20 19:18
好高深啊^_^
待续到哪里去了啊?
作者: hdxing    时间: 2007-12-20 22:12
编程,我不会,你说的原理我看到过,也明白一些,但要我自己去写,相信要下辈子了......
作者: 艾飞    时间: 2007-12-22 08:57
写操作系统呀,不会吧,我可没这能力
作者: lxl1638    时间: 2007-12-22 12:12
一般人没有必要去动手做这些事,了解其原理就够了。
作者: vfan127    时间: 2007-12-22 12:42
就是很想详细了解系统的启动过程
所以想实践下,系统到底怎么启动的
过程的每一步都尽在自己掌握中
这种感觉应该不错的

用了这么多年电脑,还是不是很了解从按下POWER键
到出现桌面
系统到底干了些什么
作者: hua_zai    时间: 2007-12-22 15:02
提示: 作者被禁止或删除 内容自动屏蔽
作者: 悟空    时间: 2007-12-22 17:55
有深入浅出的解说,使我们菜鸟对系统有个初步了解。这对系统修复很有帮助。期待楼主的序文。
作者: xielianfei    时间: 2007-12-22 20:07
对楼主十分感谢,好好学习。
作者: jin99    时间: 2007-12-22 23:33
恩,还是需要学习以下的,谢谢了
作者: lin3884751    时间: 2007-12-23 11:07
......看不懂,非一般的头脑是不懂地,路过
作者: Allreal    时间: 2007-12-23 12:10
不管怎么样,对于像我这种水平的人来说,学习了
。。。。呵呵。  楼主辛苦了。
作者: cupidzhu1986    时间: 2007-12-23 16:47
新人 路过 看过之后帮助还是不小的
作者: zjq20032006    时间: 2007-12-23 18:00
路过,适合我这样的菜鸟们点一下标题
作者: handaweihao    时间: 2007-12-23 19:29
对我来说还是好难!!!!!!!!!!
作者: cqchen4488    时间: 2007-12-29 06:48
好象N年前在新华书店看过
作者: zjg4545    时间: 2007-12-29 12:03
操作系统是计算机系的必修课,无论是对软件专业,还是计算机应用专业,都是很重要的一门课.这门课比较难学,他既涉及很多软件知识,又涉及很多硬件知识.实验也不大好做,一般只做一些进程管理,内存管理之类的实验.楼主的简单操作系统论述,再完善一些,可做为学生的实验或课程设计,谢谢分享!
作者: lvyanan    时间: 2007-12-29 15:39
要讲操作系统就必须讲解BIOS系统中断以及0:0000——0:03FF的中断向量表和0:0400——0:05FF低址数据区的结构,只有掌握了这个基础,编写一个操作系统才成为可能,否则一切都将是空中楼阁。其实,BIOS本身就是一个操作系统,只不过太低级了一点,其它操作系统都是建立在这个基础之上的。我们期待有人提供这方面的资料。。。。。。
作者: pony8000    时间: 2007-12-30 18:54
不可能好写的吧,我觉得
作者: moe680i    时间: 2007-12-30 21:57
好东西,谢谢楼主^_^
作者: lintel    时间: 2007-12-30 23:40
原帖由 lvyanan 于 2007-12-29 03:39 PM 发表
要讲操作系统就必须讲解BIOS系统中断以及0:0000——0:03FF的中断向量表和0:0400——0:05FF低址数据区的结构,只有掌握了这个基础,编写一个操作系统才成为可能,否则一切都将是空中楼阁。其实,BIOS本身就是一 ...



可以这样说吧,至于:BIOS系统中断以及0:0000——0:03FF的中断向量表和0:0400——0:05FF低址数据区的结构,对于简单到只有引导器的系统来说,这个似乎没有必要。
根本不需要保护模式
作者: sunboss    时间: 2007-12-31 01:28
来看看,无忧2007年的贡献。。。
作者: lvyanan    时间: 2007-12-31 13:24
原帖由 lintel 于 2007-12-30 11:40 PM 发表



可以这样说吧,至于:BIOS系统中断以及0:0000——0:03FF的中断向量表和0:0400——0:05FF低址数据区的结构,对于简单到只有引导器的系统来说,这个似乎没有必要。
根本不需要保护模式

要编一个操作系统,不了解0:0000—0:05ff之间的数据结构,如何去编写与硬件进行IO的模块,操作系统没有这些硬件IO模块,又怎能成为一个有用的操作系统?
作者: m68    时间: 2008-1-1 02:44
关注一下!顺祝

作者: zjq20032006    时间: 2008-1-1 11:05
理想归理想,现实归现实,楼主醒醒吧
作者: dos622    时间: 2008-1-1 15:28
赶兴趣!只是懂的太少了点
作者: chhrgv    时间: 2008-1-1 22:35
真复杂,有些不明.不过还是顶你.
作者: yong001    时间: 2008-1-2 16:50
我说LZ也是的
但是我们不可以那样说他的不是
他也是为别人嘛
作者: sanya167    时间: 2008-1-2 19:41
很好的帖子
学习了啊,谢谢了,
作者: cxcsky    时间: 2008-1-2 22:36
路过66666666
作者: quest    时间: 2008-1-3 12:09
学习............
作者: lyy5552489    时间: 2008-1-4 12:18
高手的东西,太难懂了,编程,最怕了
作者: cfscc    时间: 2008-1-4 16:34
强烈关注中,请楼主继续发力!!!
作者: sansa520    时间: 2008-1-6 06:14
這麽多路過的??看看了解就OK了..現在的我懶得動手了...PE都懶得去整.
作者: ywqsa206    时间: 2008-1-6 12:32
路过,,好多高人啊。。
作者: whaily    时间: 2008-1-6 13:15
不管怎么样,都要了解了解
毕竟菜鸟多吗
作者: 长风破浪    时间: 2008-1-8 15:30
需要学习的东西还很多很多啊!
作者: lintel    时间: 2008-1-8 18:03
原帖由 lvyanan 于 2007-12-31 01:24 PM 发表

要编一个操作系统,不了解0:0000—0:05ff之间的数据结构,如何去编写与硬件进行IO的模块,操作系统没有这些硬件IO模块,又怎能成为一个有用的操作系统?


说明一下,写一个操作系统,不仅仅需要很多的精力还需要有很多的东东。
对于现在的普通人来说,这个似乎也没有必要,其实实在,这个只是一个引导器。一个不需要DOS环境的COM文件而已。
作者: lintel    时间: 2008-1-8 18:05
既然这样,就有必要说明什么是中断向量。请看顶楼
作者: lvyanan    时间: 2008-1-8 18:12
标题: 回复 #65 lintel 的帖子
我明白你的意思了,是我钻了牛角尖,不好意思哦。。。。。。
作者: 阿文    时间: 2008-1-8 18:46
这么多人泼冷水,不用这样吧!

---------------------------------------------

俺虽然好几年前就注册了,看着人来人去,很多都是被气走的。

前两年就走了几个高手,现在真是冷清很多。我支持你,写吧!终有一天,你就是比尔.盖次
作者: redmax    时间: 2008-1-9 13:11
每个人的精力是有限的,我把有限精力的50%花在游戏上;30%花在学习上;20%花在工作上.你的东西让我很感兴趣,但是我已经没有精力去鼓捣它了!
作者: lvyanan    时间: 2008-1-11 13:29
原帖由 lintel 于 2008-1-8 06:03 PM 发表


说明一下,写一个操作系统,不仅仅需要很多的精力还需要有很多的东东。
对于现在的普通人来说,这个似乎也没有必要,其实实在,这个只是一个引导器。一个不需要DOS环境的COM文件而已。

写一个引导器(MBR引导程序)还是比较容易的,对未入门的兄弟们来说,不如剖析一个典型的引导器来的更实际一些。

[ 本帖最后由 lvyanan 于 2008-1-11 01:30 PM 编辑 ]
作者: netwinxp    时间: 2008-1-13 16:14
00000-005ff的数据主要用于实模式的DOS和BIOS,现在的32位系统通常不再通过中断+DMA来访问设备,而是通过PCI总线命令来访问的(甚至PCI总线都快被淘汰了).快淘汰的东西建议不要研究了:)
如果你要研究底层的咚咚的话,推荐你做一个AT89C51+USB1.0芯片读取U盘里面的文件并用7段码LED(LCD)轮流以16进制显示.
作者: ljpbin    时间: 2008-1-14 01:08
期待一下吧,每人的思路不同,可以取其所长
作者: yanghai135    时间: 2008-1-16 09:40
有,了解了一些~~~!
作者: 假大空    时间: 2008-1-17 15:59
估计编出来可以和麒麟相拼了。呵呵
作者: longteeth    时间: 2008-1-20 11:07
一点也不懂,回家睡觉。。。。。。
作者: ning    时间: 2008-1-21 23:48
怎么没有下文了..................
作者: longmarchdai    时间: 2008-1-23 23:37
这样的话是引导器而不是完整的系统,真正的系统需要一个完整的内核
作者: 33ch    时间: 2008-1-26 17:27
目前的水平看不懂,期待版主的作品!
作者: 弹涂鱼眼    时间: 2008-1-27 06:38
天书..............看不懂
作者: 玄天    时间: 2008-1-31 15:27
唉~~~
我想吃肉,明天得去买条猪养着.....
作者: wulee    时间: 2008-2-1 11:46
不过我菜得很 只能想像一下而已
作者: huanon    时间: 2008-2-1 13:00
一般人没有必要去动手做这些事,了解其原理就够了。
作者: lintel    时间: 2008-2-1 22:51
过几天继续,大家期待吧
作者: ewtfwee    时间: 2008-2-2 16:53
看不太懂
需要努力学习了
作者: 5q8    时间: 2008-2-3 22:29
感谢楼主!

懂得很多的人,
写出的教程让莱鸟不懂,
甚至不让莱鸟懂,
为什么关键的地方总让莱鸟不懂?
真搞不懂!
论坛的宗旨通常就是让莱鸟懂!

而且让莱鸟速懂!
论坛的宗旨总不会让高手懂吧?
论坛只为高手而准备,那还有啥意思?


[ 本帖最后由 5q8 于 2008-2-3 10:30 PM 编辑 ]
作者: lulu_roc    时间: 2008-2-4 23:15
思路可以好好学习学习。
作者: cisco_wz    时间: 2008-2-5 00:22
很想学会,但是基础太差,看的晕乎乎的,还需要很大的努力。
作者: 闪电鼠    时间: 2008-2-5 14:28
这东西不是以大家都能学会的

作者: tanghuajin59    时间: 2008-2-6 21:42
小L谦虚啊,你是高手啊,只不过这里的高手太多了。。。。
作者: daoker    时间: 2008-2-8 16:23
路过,

看过。
作者: ZSL00    时间: 2008-2-9 00:26
支持一下、、、、、、、、
作者: 汉江小鱼    时间: 2008-2-29 22:46
标题: 我要看
高手懂了就歇一歇,不要又哭又闹滴!
纯菜,路过!!!!!!!!!!!!
作者: likezyj    时间: 2008-3-1 04:20
大麻烦了,还是用别人的
作者: haoxxx    时间: 2008-3-1 12:40
学习学习,,..........
作者: lvyanan    时间: 2008-3-1 15:34
LZ把基础的知识都提供了,看来是可以开始研究这个小的、实验性的操作系统了,我也非常感兴趣,bootloader对我来说并不难,操作系统倒是没搞过,新鲜,有挑战性。可惜的是,我只会裸汇编,不会用源汇编工具。
作者: haoxxx    时间: 2008-3-4 17:39
学习很累,怕怕....
作者: snowground    时间: 2008-3-4 18:56
先学下,支持!!!!
作者: lisong    时间: 2008-3-5 14:03
暂时还没学到这里!!!!!!!!!!!!!!
作者: wyl0205    时间: 2008-3-15 13:49
不懂哦
好难啊!!
作者: 求学者0802    时间: 2008-3-15 13:59
感觉好像挺复杂的啊!不过还是要学习啊!学习本来就是这样啊!呵呵......支持!
作者: longfei008    时间: 2008-3-15 14:43
关于BIOS启动部分很好很详细!
作者: 糖衣炮弹    时间: 2008-3-15 19:19
还不具备条件的说,
至少自己目前离这水平还很远……
作者: xhq789    时间: 2008-3-16 17:57
o(∩_∩)o...  一楼的观点很好·




欢迎光临 无忧启动论坛 (http://wuyou.net./) Powered by Discuz! X3.3