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

2019-04-15 14:53发布

1.PIC 可编程中断控制器 PIC 连接8个中断信号,监视输入管脚的8个中断信号。主PICIRQ0-IRQ7IRQ2连接到从PICIRQ8-IRQ15)。 中断发生后,CPU命令PIC发送2个字节的数据,格式是:0xcd  0xXXCPU收到2个字节后把数据当做指令来执行。0xCd 就是INT的机器码,cd  10 就是INT 0x10,于是执行了中断程序。 2.每次访问内存时,将所访问的地址和数据放到高速缓存中,第二次访问的时候,只需访问缓存即可,大大提高了速度。9成以上的时候浪费在循环上。 缓存功劳很大。 Cr0 |=    CR0_CACHE_DISABLE;//允许缓存 Cr0 &=  ~CR0_CACHE_DISABLE;//禁止缓存 聪明的编译器:编译器优化能力较强,偶尔会把不需要优化的地方优化了,这点需要注意。 3.挑战内存管理:一个程序运行时,需要向操作系统申请内存空间的分配,OS必须恰当管理好那些内存可以使用(空闲),那些内存不可以使用(正在使用),这就是内存管理。内存管理的基础,一是内存分配,一是内存释放。 4.第一个方法:按4kB为单位进行内存管理,专门用一个内存查找表,如果不可用标记为1,可用标记为0  最开始空闲空闲设为0,当一个程序向OS申请100k内存空间时,从内存查找表中找到连续25个为0的地址空间即可。找到后(查找表)标记为1,程序运行完毕释放空间再标记为0 第二个方法: Struct FREEINFO {unsigned int addr,size;};空闲空间的起始地址addr,空闲空间的大小size struct MEMMAN{int frees;struct FREEINFO free[1000];}零碎地址 查找空闲地址空间,如果大小满足要求,addr+=要分配的大小;size-=要分配的大小; 释放:增加一条可用内存信息,free++ 上下舍入:i = (i+0xfff) & 0xfffff000; 5.图层的显示与叠加---多个图层的叠加,重绘,只绘制改变的地方即可!!! //////////////////////////////////////////////////////////////////////////////////////////////////////////////////// 总结 1.计算机主要功能是计算(信息的处理),次要功能是通讯,基本都是围绕这两个功能进行;最开始的计算机就是用于科学计算的; 2.CPU是核心部件,计算功能都由其完成; 3.计算的是数据,现实的物理世界都可以抽象为数据,0101的二进制数据; 4.数据需要输入,因此需要输入设备,比如鼠标,键盘等,数据经过CPU的处理后也需要输出,输出设备包括文件,显示器,打印机等; 5.具体的计算是由指令完成的,一个指令可以看成一块电路,比如加法器电路; 6.计算的对象是数据,计算的核心是算法(复杂数据的表现形式称为数据结构); 7.所有的高级程序最终都编译称为CPU的指令,也就是一系列的01串,可以用二进制编辑器查看任何软件的机器指令;编译器不过是一个文本转换工具,把高级语言转化为机器指令代码; 8.多任务是由CPU保存刚运行的寄存器,最后返回现场; 9.
存储是一个很重要的功能,数据和指令都需要存储,软件运行后都在内存中,CPU根据PC寄存器的值一条一条执行指令; 10.所有的编程都是对CPU编程,就是顺序执行一条条的机器指令;汇编和机器指令一一对应,是最底层的语言,他可以控制硬件完成(CPU所能做的)所有的功能; 11.电脑开机后,CPU寄存器CS=0xffff,其他寄存器都为0CPU执行CSIP=0xffff0处的程序,此程序为BOIS ROM程序,他的功能是开始执行硬件的检查(POST),查找外部硬件内存,键盘,显示器,硬盘是否正常,自检完成后BIOS把控制权转交给下一阶段的启动程序。安装启动顺序查找启动设备,查看第一个扇区最后两字节是否是55AA,如果是,开始执行此扇区的代码,这个代码功能主要是载入操作系统到内存中,载入后,将控制权交给操作系统。 12.操作系统的三大抽象:文件系统,虚拟内存(内存空间),线程。 显示器上的图形都是CPU绘制出来的,CPU将像素数据写到显存空间,电子扫描仪按像素扫描到显示器即可完成显示。窗口的显示,隐藏,叠加,鼠标的显示等都是由操作系统完成,主要是绘制。键盘,鼠标,网卡的输入都是中断实现,中断效率高,占用CPU时间少。多任务就是CPU的寄存器值保存,最后还原过程。 13.操作系统将一系列常用功能封装为函数,以供应用程序调用,这种函数就是操作系统的API函数,比如windows系统的winAPIMFC不过是对winAPI的再次封装而已。 14.定时器功能也是由中断完成,到时间了用中断通知CPU 15.内存管理是一个很重要的功能,有很多实现方法,一个方法就是维护一个列表,指示当前空闲内存的起始地址和空闲大小,如果有程序要求OS分配内存空间1k,查找此表即可,如果有则将起始地址加上1k,将大小减去1k 16.操作系统保护功能:限定应用程序段的地址,如果访问到其他地址,触发一般性保护异常。 17.无论何时看到源代码总应该想到他最终的表现是机器代码-机器指令,甚至可以想象到他编译后的机器代码是什么。 18.一般的编译器都会将依赖CPU生成的机器码的部分单独归为一个名为Backend的模块,根据不同的CPU可以更换相应的Backend,就可以支持其他型号的CPU了。 19.很多看似难如登天的事情,一旦真的下决心去做,你会发现难度并没有想象中那么高,只是我们往往缺少一颗勇于挑战的心罢了。 20.软件0101,数据结构与算法,C/C++,Web,移动互联网,智慧地球,智能电器,Linux,能源与材料,地球是平的---大争之世,全球化视野,宇宙视野,上帝的角度, 21.高屋建瓴,抓住本质和重点。 2013-12-26