学习操作系统原理最好的方法是自己写一个简单的操作系统. 前面铺垫了这么久,今天终于开始写程序了.本讲将介绍3个逐步深入但非常简单的程序,一方面是让大家熟悉开发流程,另一方面是顺便解决前面遇到的CPU占用率高的问题. 一.mbr1.asm回顾 mbr1.asm的代码之前我们介绍过,这里我们回顾一下代码和演示步骤. mbr1.asm代码如下: ;生成一个空的MBR times 510 db 0 ;前510个字节全为0 db 0x55,0xaa ;最后两个字节是0x55和0xaa. 下面我们来演示:…
学习操作系统原理最好的方法是自己写一个简单的操作系统. 在上一讲中我们向屏幕打印字符串"GrapeOS"用了十几行汇编代码,如果要输出的字符比较多,这种方法太繁琐了.本讲我们将打印字符串封装成一个函数,使用时就方便多了. 一.mbr7.asm mbr7.asm代码如下: org 0x7c00 ;如果没有该行将无法正确打印要显示的字符串. ;初始化段寄存器. mov ax,cs mov ds,ax ;ds指向与cs相同的段. mov ax,0xb800 mov es,ax ;本程序中es…
学习操作系统原理最好的方法是自己写一个简单的操作系统. 一.外设和I/O接口 前面我们介绍过冯·诺依曼结构包含5部分,其中输入设备和输出设备统称为外部设备,简称外设.常见的外设有鼠标.键盘.显示器.硬盘等.由于外设种类多.差异大.速度慢等原因,导致CPU无法直接与外设沟通.于是在CPU和外设之间产生了"中间人",这个"中间人"就是I/O接口.如下图: CPU与外设的信息交流都是通过I/O接口来间接实现的.比如我们前面向屏幕输出字符,并不是CPU直接将数据传递给屏幕,…
学习操作系统原理最好的方法是自己写一个简单的操作系统. 本讲代码文件为boot.asm,要读取的文件为data.txt. 一.在FAT16系统中读取文件的流程 在GrapeOS中用到的文件少且小,所有文件都放在了根目录下,数量不会超过16个,占用的簇不会超过254个.所以读取目录项只需要读取根目录的第1个扇区即可,读取FAT表项也只需读取FAT1表的第1个扇区即可. 以下是读取文件的流程图: 二.代码及讲解 boot.asm中的代码如下: ;--------------------定义常量---…
学习操作系统原理最好的方法是自己写一个简单的操作系统. 在上一讲中我们学习了用汇编语言读硬盘,本讲我们来学习用汇编语言写硬盘.同样也是设计一个简单的实验,实验内容为: 在内存中准备一段有特征的512字节数据,地址为0x7e00~0x7fff,其特征是前3个字节依次为4.5.6,最后3个字节依次为6.5.4.然后将该段内存数据写入到硬盘的第2个扇区,并查看虚拟硬盘第2个扇区的数据是否与内存中0x7e00~0x7fff的数据一致,如果一致则说明写硬盘成功. 本讲代码文件只有一个boot2.asm.…
学习操作系统原理最好的方法是自己写一个简单的操作系统. 在上一讲中我们已经安装配置了开发环境,在本讲中我们来测试一下开发环境是否正常. 我们的测试流程如下: 1.在Visual Studio Code中编写GrapeOS代码: 2.在CentOS中编译GrapeOS代码: 3.在QEMU中运行GrapeOS. 注意:在本讲中涉及到的代码或操作如有不懂的地方暂时不用管,后面会讲.本讲只是为了测试开发环境是否正常,只要你能跟着做下来就行. 下面我们来依次测试这3步流程. 1. 在Visual Stu…
学习操作系统原理最好的方法是自己写一个简单的操作系统. 按一下电脑上的电源按钮,电脑就启动了,不一会儿电脑屏幕上就出现了登录界面或直接进入了桌面. 这是一个很日常的场景,但有时候会有个疑问:电脑内部是如何启动的?本讲我们就简单的介绍一下. 因为本教程属于入门型,不考虑UEFI等比较新的技术. 电脑的启动过程在细节上是比较复杂的,但在大的过程上分为以下几个: 上电->BIOS->MBR(boot)->loader->kernel->交互界面(图形/命令行) 上面是一个比较经典的…
学习操作系统原理最好的方法是自己写一个简单的操作系统. 前面我们介绍过电脑的启动过程: 上电->BIOS->MBR(boot)->loader->kernel->交互界面(图形/命令行) 本讲我们要介绍的是MBR(Master Boot Record,主引导记录).在电脑中对磁盘的读写是按扇区为基本单位的,一般每个扇区为512个字节.也就是说每读一次磁盘,读取的字节数是512字节的整数倍.同样每写一次磁盘,写入的字节数也是512字节的整数倍.MBR是磁盘的第一个扇区,又叫做主…
学习操作系统原理最好的方法是自己写一个简单的操作系统. 写程序不免需要调试,写不同的程序调试方式也不同.如果做应用软件开发,相应的程序调试方式是建立在有操作系统支持的基础上的.而我们现在是要开发操作系统,如何调试操作系统的程序呢?如果操作系统程序直接跑在真机上或虚拟机上(比如VirtualBox)是很难调试的,所以我们在开发阶段操作系统程序主要在虚拟机QEMU上跑,因为QEMU支持调试.当然很多事情都是有利也有弊的,QEMU虽然支持调试,但它的运行效率比VitrualBox要低,所以我们最终的G…
学习操作系统原理最好的方法是自己写一个简单的操作系统. 一.屏幕显示原理 电脑显示器屏幕是由很多很小的像素组成的.每个像素就像是一个小灯泡,在屏幕上一排一排的整齐排列着.只要能控制每个像素的颜色就能显示出各种各样的图形.如果近距离观察过会场或室外的大屏幕会有更直观的感受,这种大屏幕上每个像素就是一个小灯泡. 屏幕显示原理大致可以如下表示: CPU(程序)->显卡(显存)->显示器(屏幕) 在程序的控制下,CPU将要显示的数据发送到显卡上的显存(显卡上的内存),显存中的数据和屏幕上的像素是有对应…