30天自制操作系统日志第3天.pdf

上传人:l*** 文档编号:73122105 上传时间:2023-02-15 格式:PDF 页数:14 大小:875.64KB
返回 下载 相关 举报
30天自制操作系统日志第3天.pdf_第1页
第1页 / 共14页
30天自制操作系统日志第3天.pdf_第2页
第2页 / 共14页
点击查看更多>>
资源描述

《30天自制操作系统日志第3天.pdf》由会员分享,可在线阅读,更多相关《30天自制操作系统日志第3天.pdf(14页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。

1、操作系统实验日志学号实验日期520姓名实验项目甘昆禄专业年级班级智能 1601第 3 天:进入 32 位模式并导入 C 语言一、实验主要内容一、实验主要内容1、制作真正的 IPL,即启动程序加载器,用来加载程序。添加的代码关键部分如下:MOVMOVMOVMOVMOVMOVMOVMOVMOVINT这里有 JC 指令,是一些特定指令中的一种,后面知识点收录有。JC 就是 jump if carry,如果进位标志位 1 的话,就跳转。就是成功调用 0 x13 就会跳转到 error 处。INT 0 x13 又是一个中断,这里 AH 是 0 x02 的时候是读盘的意思,就是要把磁盘的内容写入到内存中。

2、今天实验用到了 4 个软中断,都记在知识点里了。至于 CHDHCLAL 三个寄存器呢,就分别是柱面号、磁头号、扇区号、执行的扇区数。那JCAX,0 x0820ES,AXCH,0DH,0CL,2;柱面 0;磁头 0;AH=0 x02:读盘AH,0 x02AL,1BX,0DL,0 x00;执行 1 个扇区;A 驱动器(现在都只有一个驱动器了);调用磁盘 BIOS 0 x13 error么含有 IPL 的启动区位于:C0-H0-S1(Cylinder,magnetic Head,Sector)然后 ESBX 和缓冲地址有关。2、缓冲区地址 0 x0820MOV AL,ES:BX;ES*16+BX-A

3、L说是原来 16 位的 BX 只能表示 065535,后来就引入了一个段寄存器,用 MOV AL,ES:BX;ES*16+BX-AL 这样的方法就可以表示更大的地址,就够当时用了,可以指定 1M 内存地址了。那么这里我们就是将 0X0820 赋值给 ES,BX 为 0,这样 ES*16 后就访问 0X8200 的地址,那么就是讲软盘数据转载到 0X8200 到 0X83ff 的地方。3、试错以及读满 10 个柱面MOVMOVMOVMOVMOVAX,0 x0820ES,AXCH,0DH,0CL,2readloop:retry:MOVMOVMOVMOVINTJNCADDCMPJAEAH,0 x02

4、AL,1BX,0DL,0 x000 x13next;没出错就跳到 nextMOVSI,0;记录失败的次数,SI 达到 5 就停止SI,1SI,5;SI 加一;SI 和 5 比较;SI=5 时跳转到 errorerrornext:MOVMOVINTJMPAH,0 x00DL,0 x000 x13retry;重置驱动器,看上面 AH 变为 0X00 和 0X02 功能不同MOVADDMOVADDCMPJBEMOVADDCMPJBMOVADDCMPJBAX,ESAX,0 x0020ES,AXCL,1CL,18readloopCL,1DH,1DH,2readloopDH,0CH,1CH,CYLSrea

5、dloop这里很明显,从 CLDHCH 依次循环计数,就是读取完一个磁头的扇区后换一个磁头,到这个柱面都结束了就换一个柱面,一直读完 10 个柱面。4、到正菜了,主程序操作系统完成了启动区的制作,下一步开始编写操作系统代码。最简单的操作系统:Fin:HLTJmpfin我们需要将操作系统本身的内容写到名为文件中,再把他保存到磁盘映像里,然后我们从启动区执行这个就行了。老作者用一个简单的例子告诉我们当我们向一张空软盘保存文件时,1)文件名会写在 0 x002600 以后的地方;2)文件的内容会写在 0 x004200 以后的地方。由于目前的启动区程序是从启动区后面开始(不包括启动区)加载到内存地址

6、 0 x8200处的,所以磁盘 0 x4200 的内容就会被加载到内存地址 0 xc200 处,其中 0 xc200=0 x8200+0 x4200-512(启动区大小),现在我们就可从 0 xc200 处加载我们自己写的程序用于执行了。需要在头加入 org0 xc200,在启动区最后添加代码 jmp0 xc200。如此在装载完os 后,即会跳到地址 0 xc200 执行操作系统程序。5、让他显示图形模式这里是中断调用显卡函数,设置显示模式,320*200*8 位彩色模式,有 256 种颜色可以使用。画面一片漆黑,大概是因为显存没有设置吧,下面的预存地址 VRAM 就是为显存留的,Video

7、RAM,显卡内存,他的地址对应着屏幕上的像素。修改这个应该可以改颜色,黑色大概是默认老贼(把坑的作者叫老贼)也不说,唉,还要查。6、进入 32 位模式及保存画面模式32 位固然好,但是 CPU32 位模式不能调用 BIOS 功能。设定完画面模式后就要得到键盘状态。这里就是把画面的像素数、颜色数、键盘信息都保存了起来。和 CYLS 一样,都保存在了 0X0FF0 附近。7、C 语言正式出场!小场面,戏份不足这 C 关键部分真的是没讲嘛!老贼!下节的内容。8、文件的转换生成流程图果然一目了然,但是真的难画,用网上的:9、一些知识点A、汇编指令JC 指令JC,是“jump if carry”的缩写,

8、意思是如果进位标志是 1 的话,就跳转。JNC 指令JNC,是“jump if not carry”的缩写,意思是如果进位标志是0 的话,就跳转。JAE 指令JAE,是“jump if above or equal”的缩写,意思是大于或者等于时,跳转。JBE 指令JBE,是“jump if below or equal”的缩写,意思是小于或者等于时,跳转。JB 指令JB,是“jump if below”的缩写,意思是大于或者等于时,跳转。B、软中断新学到的 4 个软中断(1)INT 13h AH=02h:读盘,即从磁盘中读取扇区参数:AH:02hAL:读入的扇区数CH:柱面号CL:扇区号DH:

9、磁头号DL:磁盘号ES:BX,缓冲区地址返回值:CF:错误置 1,正确置 0AH:返回值代码AL:实际读取的扇区数(2)INT 13h AH=00h:复位磁盘驱动参数:AH:00hDL:磁盘号返回值:CF:错误置为 1(3)INT 10h AH=00h:设置显示模式参数:AH:00hAL:显示模式返回值:AL=video mode flag/CRT controller mode byte(4)INT 16H AH=02h:获取键盘的状态信息C、文件的转换工具作用输入输出cc1 gcc 以 gas 汇编语言为基础,输出 gas 用的源程序 .c.gasgas2nask把 gas 变换成 nas

10、k 能翻译的语法 .gas.nasnask翻译成机器语言,生成目标文件.obj .nas.objobi2bim目标文件需与其他文件 link 才能编程真正可以执行的机器语言,bim 是二进制映像文件,是一种代替的形式 .obj.bimbim2hrm为了能够实际使用,要做成适合本书操作系统要求的形式.bim.hrb二、遇到的问题及解决方法二、遇到的问题及解决方法1、这里有些疑惑,说什么 0X80000 x83ff 是留给启动区的,但是启动区明明是在 0X7C00 到0X7DFF 的。8000 留给启动区是作什么用途呢还有这中间的地址又是作什么用呢目前没有解决。三、程序设计创新点三、程序设计创新点

11、1、硬盘知识上面没有细讲到软盘的结构,是我对这个真的感兴趣,就去网上找了一些资料,果然更全面。下面是内容:概述盘片(platter)磁头(head)磁道(track)扇区(sector)柱面(cylinder)盘片 片面 和 磁头硬盘中一般会有多个盘片组成,每个盘片包含两个面,每个盘面都对应地有一个读/写磁头。受到硬盘整体体积和生产成本的限制,盘片数量都受到限制,一般都在 5 片以内。盘片的编号自下向上从 0 开始,如最下边的盘片有 0 面和 1 面,再上一个盘片就编号为 2 面和 3 面。如下图:图 1扇区 和 磁道下图显示的是一个盘面,盘面中一圈圈灰色同心圆为一条条磁道,从圆心向外画直线,

12、可以将磁道划分为若干个弧段,每个磁道上一个弧段被称之为一个扇区(图践绿色部分)。扇区是磁盘的最小组成单元,通常是 512 字节。(由于不断提高磁盘的大小,部分厂商设定每个扇区的大小是 4096 字节)图 2磁头 和 柱面硬盘通常由重叠的一组盘片构成,每个盘面都被划分为数目相等的磁道,并从外缘的“0”开始编号,具有相同编号的磁道形成一个圆柱,称之为磁盘的柱面。磁盘的柱面数与一个盘面上的磁道数是相等的。由于每个盘面都有自己的磁头,因此,盘面数等于总的磁头数。如下图图 3磁盘容量计算存储容量 磁头数 磁道(柱面)数 每道扇区数 每扇区字节数图 3 中磁盘是一个 3 个圆盘 6 个磁头,7 个柱面(每

13、个盘片 7 个磁道)的磁盘,图 3 中每条磁道有 12 个扇区,所以此磁盘的容量为:存储容量 6*7*12*512=258048每个磁道的扇区数一样是说的老的硬盘,外圈的密度小,内圈的密度大,每圈可存储的数据量是一样的。新的硬盘数据的密度都一致,这样磁道的周长越长,扇区就越多,存储的数据量就越大。磁盘读取响应时间寻道时间:磁头从开始移动到数据所在磁道所需要的时间,寻道时间越短,I/O 操作越快,目前磁盘的平均寻道时间一般在 315ms,一般都在 10ms 左右。旋转延迟:盘片旋转将请求数据所在扇区移至读写磁头下方所需要的时间,旋转延迟取决于磁盘转速。普通硬盘一般都是 7200rpm,慢的 54

14、00rpm。数据传输时间:完成传输所请求的数据所需要的时间。小结一下:从上面的指标来看、其实最重要的、或者说、我们最关心的应该只有两个:寻道时间;旋转延迟。读写一次磁盘信息所需的时间可分解为:寻道时间、延迟时间、传输时间。为提高磁盘传输效率,软件应着重考虑减少寻道时间和延迟时间。块/簇 概述磁盘块/簇(虚拟出来的)。块是操作系统中最小的逻辑存储单位。操作系统与磁盘打交道的最小单位是磁盘块。通俗的来讲,在 Windows 下如 NTFS 等文件系统中叫做簇;在 Linux 下如 Ext4 等文件系统中叫做块(block)。每个簇或者块可以包括 2、4、8、16、32、642 的 n 次方个扇区。

15、为什么存在磁盘块读取方便:由于扇区的数量比较小,数目众多在寻址时比较困难,所以操作系统就将相邻的扇区组合在一起,形成一个块,再对块进行整体的操作。分离对底层的依赖:操作系统忽略对底层物理存储结构的设计。通过虚拟出来磁盘块的概念,在系统中认为块是最小的单位。Page:操作系统经常与内存和硬盘这两种存储设备进行通信,类似于“块”的概念,都需要一种虚拟的基本单位。所以,与内存操作,是虚拟一个页的概念来作为最小单位。与硬盘打交道,就是以块为最小单位。扇区、块/簇、page 的关系扇区:硬盘的最小读写单元块/簇:是操作系统针对硬盘读写的最小单元page:是内存与操作系统之间操作的最小单元。扇区=块/簇=

16、page以上是网络搜寻的知识概要。下面是我用虚拟机查看的硬盘基本信息(绕了一些弯路),根据以上信息可以得出:1,该硬盘总容量为 10 GB。2,sectors 表示总共有那么多个扇区。3,其中 Units=sectors of 1*512=512 bytes 表示扇区的容量,这里好像没有柱面4,Sector size(logical/physical):512 bytes/512 bytes 扇区大小物理和逻辑都是512bytes。5,I/O size(minimum/optimal):512 bytes/512 bytes 表示磁盘最小 I/O 读写大小512bytes。6,Disk identifier 表示硬盘标识符。四、实验心得体会四、实验心得体会最开始我们讲要编写一个一通电就能运行的程序。启动盘的第一个扇区是启动区,把程序代码保存到这个扇区即可,这样就是一个通电就能运行的程序。这个程序最开始我们只是在屏幕上显示一个字符串信息“Hello,world!”,最终改造为一个 IPL,即把其他程序装载进入内存的程序(从磁盘读取操作系统的程序)。先写个最简单的操作系统,即显示一个字符串即可,再慢慢添加新的功能。现在我们的操作系统能显示画面模式了,虽然还是全黑,但是很快就可以修改显存来更改显示颜色了,还是很期待的。

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 应用文书 > 工作报告

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知得利文库网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号-8 |  经营许可证:黑B2-20190332号 |   黑公网安备:91230400333293403D

© 2020-2023 www.deliwenku.com 得利文库. All Rights Reserved 黑龙江转换宝科技有限公司 

黑龙江省互联网违法和不良信息举报
举报电话:0468-3380021 邮箱:hgswwxb@163.com