关闭

《30天自制操作系统》学习笔记--第10天

标签: 30天自制操作系统
1211人阅读 评论(0) 收藏 举报
分类:

       内存管理和叠加处理

       今天的代码比较多,对于写过程序的人来说应该还是比较容易看懂的。

       首先说的内存管理,昨天说道把很多内存分成0x1000字节大小的块,然后分配给程序使用,但是不一定所有的程序用到的都是0x1000的整数倍字节,所以就要设计一个取整的方法,就有了书中提到的聪明做法(size+0xfff)&0xfffff000;这个做法或者称为算法的正确性证明很简单,带两个数试一下就知道玄机了,就是把一个12位非零二进制数向前进位,而零不进位,最后把后3位归零。我们还可以把大于x的任何数进位,小于等于x的舍去(size+0x1000-x-1)&0xfffff000;哈哈,应该是对的,我也没有证明。。不过x=0是和原式一样的。。举一反三山寨之本。。。

       接着就到了我很疑惑的地方了。叠加处理,但是!!!注意!!!作者开始给结构体显示的分配内存了,就是图层的控制结构体,我不明白,之前写的那些结构体也没分配内存,为啥突然从这开始分配了,而作者根本没提,难道是因为昨天才写的内存管理,今天就开始用了?那之前的程序怎么办呢。我一会儿还是好好研究一下。

       感觉要设计系统,就应该对这个系统的宏观结构应该完全清楚,骨架清晰,内容就可以随意发挥了。现在是骨架还没搞清楚,所以博猪没有一开始就写自己山寨版,而是想把书看完,然后找点操作系统相关的书再看看然后再做个试验品出来玩玩。。哈哈。。不知道思路正确不正确。。

       至于这个叠加处理,其基本目的是控制多个图层,设计相应的数据结构。而刷新那里作者反复的实验,但其本质就是减少冗余计算,就是说有些计算能剩就不做,就像一个简单的图像卷积(好吧,博猪以前做过一段时间图像处理,听不懂的可以完全忽略。。)如果按照算法做,时间复杂度是O(x*y*size*size)(x,y是图像的大小x

*y个像素,size是卷积核宽度),但经过优化可以做到只要O(x*y),而方法就是要用到前一步的计算结果,减少冗余的计算量(好吧,这是博猪第一次面试的面试题,很幸运。公司没要我0.0)。好,叠加的优化原理是哪个地方改变了,就刷新改变的区域的像素。至于实现细节,书中的代码有详细介绍,关键是确定叠加区域,然后重绘叠加区域。。。 

        明天继续努力。。。


1
1
查看评论

《30天自制操作系统》学习笔记——第十四天

来开始第14 天的内容吧。                                       ...
  • u011879578
  • u011879578
  • 2014-02-27 14:30
  • 742

30天自制操作系统之第12天 定时器(1)

定时器的中断处理程序要保证高效率,需要进行一些优化,这里介绍优化的方法。对于一个操作系统来说,会有多个定时器,假设该操作系统维护了500个定时器,当每一次定时中断发生时(这里我们设定1秒发生100次中断),调用中断处理程序,中断处理程序会对这500个定时器进行if判断,看哪些正在被使用,这样1秒内,...
  • BlueCloudMatrix
  • BlueCloudMatrix
  • 2014-08-09 22:32
  • 1565

<30天自制操作系统>第四天

第四天内容主要是基于第三天的图形界面显示更进了一步。主要是更复杂的显示,而不是单纯的切换到显示模式。对显卡内存进行数据写入,从而显示出我们想要的画面。想要画东西,只要往VRAM里写数据即可,先看以下程序:_write_mem8: ; void write_mem8(int addr, int ...
  • talent_CYJ
  • talent_CYJ
  • 2016-07-22 14:03
  • 581

《30天自制操作系统》第1天

1.下载一个二进制编辑器(网上很多下载,google一下即可,也叫十六进制编辑器),他能直接对二进制数进行编辑。如果你对(某种处理器的)机器码非常熟悉的话,理论上可以用二进制编辑器完成(此处理器上的)任何软件的制作,小至一个计算器,大至一个编译器,操作系统(因为所有软件本质上都是CPU的机器指令和一...
  • a379039233
  • a379039233
  • 2013-12-21 18:18
  • 2726

《30天自制操作系统》 第三天

程序: 本次的程序,汇编语言:; haribote-os ; TAB=4 ORG 0xc200 ; 这个程序将要被装载到内存的什么地方呢? MOV AL,0x13 ; VGA显卡,320x200x8位彩色 MOV AH,0x00 INT 0x10 fin: H...
  • e891377
  • e891377
  • 2016-09-26 23:42
  • 303

《30天自制操作系统》——从汇编到C

这次我们要用到4个文件,分别是ipl.nas、asmhead.nas、func.nas和 bootpack.c。 ipl.nas是引导扇区中的16bit程序,用于从磁盘中加载数据并跳转到asmhead.nas中。 asmhead.nas也是16bit程序,用于加载全局变量表,切换cpu到32位的保护...
  • ekkie
  • ekkie
  • 2016-05-12 00:32
  • 905

《30天自制操作系统》学习笔记(六)

IDT学习心得 (一)什么是中断?     通常被定义为一个事件,该事件改变处理器执行的指令顺序。例如通过键盘输入、点击鼠标等 (二)为什么要引入中断?     因为CPU的处理速度远高于外围硬件设备的响应速度,为了提高...
  • qq_35041101
  • qq_35041101
  • 2016-07-03 14:51
  • 403

30天自制操作系统——用U盘启动自制系统

最近试读了《30天自制操作系统》的前两章,感觉很有意思。 但是发现里面写的系统都是用软盘启动的,现在在大多数电脑上已经看不见软驱了,所以如果想运行书中的操作系统只能通过qemu(随书光盘中已经附带)模拟运行。这样的话成就感就会少很多,感觉像是在做一个简单的控制台程序,相信大多数童鞋都希望能做出...
  • h820911469
  • h820911469
  • 2014-02-28 14:52
  • 4757

《30天自制操作系统》——虚拟机使用

《30天自制操作系统》是一本学习操作系统的好教材,它教我们怎么从建立引导区开始,从零实现一个操作系统。但是,实现书中例子的时候,我们需要不断将我们写好的操作系统代码写入软盘并且还要不断重启电脑来试验我们的代码,大家一定感到很头疼吧。 与其不停的重启,不如使用模拟器,向大家推荐一款模拟器qemu,它是...
  • ekkie
  • ekkie
  • 2016-05-08 12:45
  • 1044

《30天自制操作系统》 day5 小结

结构体、文字显示与GDT/IDT初始化
  • u014000679
  • u014000679
  • 2016-07-27 22:09
  • 333
    个人资料
    • 访问:378094次
    • 积分:5160
    • 等级:
    • 排名:第6379名
    • 原创:116篇
    • 转载:2篇
    • 译文:1篇
    • 评论:84条
    博客专栏