《嵌入式操作系统设计与实现》读后感
计算机学院物联网工程15-01班张学浩201501030130004
最近我阅读了一本书,书名叫《嵌入式操作系统设计与实现》,书的作者是蓝枫叶。
本书是《自己动手写嵌入式操作系统》的全面升级版,作者对自己亲自在PC上开发嵌入式操作系统的“Hello China”进行全面的升级和改进,本书具有极高的实用性,对于嵌入式软件开发工程师、应用软件开发工程师均有很高的参考价值,对于大中院校的学生学习和理解操作系统及计算机原理也会有许多启发,对于系统软件爱好者更是一本不可多得的好书,因为它会使您得到一个完整而细致的实践过程。
即以作者亲自在PC上开发嵌入式操作系统“Hello China”的全过程为主线,详细地叙述自己动手写嵌入式操作系统所需的各方面知识。
以下是我对这本书内容的理解:Hello china的内存管理部分的设计应该算是比较复杂的,其采用了虚拟内存机制,需要MMU的支持。
Hello china将系统内存分为kernel memory 和paged memory,kernel memory只能被kernel利用,并且kernel memory分为两大类,一类为按照4kB粒度进行块分配的内存区域;另一类为可以按照任意大小进行分配的区域。
按照4KB粒度进行分配的思路类似于应用于内核的分页机制,任意大小内存分配采用的是Heap算法,该算法在某种应用下会产生内存碎片。
Paged memory就是将内存切分成4KB 大小的page,并且采用page frame(页框)对其进行描述。
Paged memory可以映射给进程的VM,实现虚拟内存机制。
Paged frame机制与Linux下的实现颇为类似。
系统中的每个进程都会拥有一个virtual memory manager(虚拟内存管理器)对进程所拥有的内存进行管理,VMM是对虚拟内存的抽象,其封装了虚拟内存资源及其属性,并且对虚拟内存的操作方法进行了封装,例如虚拟内存分配方法和释放方法。
每个进程的虚拟内存空间都会被分成一些区域(VM area),这些VM区域通过链表或者二叉树联系起来,构成虚拟空间的整体。
在hello china中的VM区域对象为virtual area descriptor,该对象对虚拟内存的线性地址空间进行描述。
在虚拟内存管理对象结构中还有一个非常重要的对象:页面索引对象(page index manager),该对象封装了虚拟地址与物理地址之间转换所需的数据结构,其中页目录的物理地址(Intel架构的CR3寄存器值)就存储在该对象中。
要实现虚拟内存机制,那么需要页表实现虚拟地址与物理地址之间的转换,转换过程通过MMU的硬件机制来实现。
页面索引对象的封装有一个好处,就是增强了代码的可抑制性,页面操作与体系
结构相关,如果将这一部分内容封装成对象,那么从逻辑层面上看非常清晰,便于移植。
显然,在虚拟内存的整个机制中,重要的管理对象有页面管理管理对象、虚拟内存管理对象和页面索引管理对象。
页面管理对象维护着物理页框,虚拟内存管理对象维护着虚拟内存资源,页面索引管理对象维护着虚拟地址与物理地址之间的映射关系。
这样的一种机制与Linux中的虚拟内存机制是一致的。
在同步与互斥机制方面,hello china也作了非常多的工作。
在uc/os操作系统中,临界区的数据保护都是通过关中断的方式进行。
对于实时操作系统而言是有问题的,如果临界区过长,那么极易导致中断事件的丢失。
并且对于单CPU而言,通过关中断的方式可以解决临界区问题,但是对于多CPU而言,关中断是解决不了问题的,除非有能力将所有CPU 的中断同时禁止。
针对该问题,hello china解决了多CPU下的临界区互斥问题,解决的方法类似于Linux中的处理方法,这种方法具有很强的通用性。
Intel等CPU都提供了读-访问-写(BTS)指令,通过这些指令可以实现对内存单元的排他访问、修改,因此可以实现某一内存单元的原子操作。
在这些CPU指令的辅助下,可以实现spinlock机制,在spinlock 的基础上可以实现semaphore的机制。
与uc/os等嵌入式操作系统相比,hello china实现了较为完整的同步互斥机制,但是需要CPU硬件支持。
在中断管理方面,hello china的可移植性较好,与Linux具有相同的设计思想。
考虑到不同CPU具有不同的中断入口机制,hello china采用统一的中断入口程序作为最底层的中断服务程序。
有些CPU采用了中断向量表机制(Intel CPU),有些CPU没有采用中断向量表机制(PPC CPU)。
对于这些不同架构的CPU,一旦发生中断事件,那么都进入到统一的中断服务程序(IRQ_handle),在IRQ_hanle程序中再根据不同的中断向量调用用户注册的中断服务程序,并且一个中断向量中的中断服务程序可以通过链表的方式管理起来,实现中断共享。
PCI总线就是一种中断共享的总线,软件层就需要采用这样的机制。
看完这本书,加深了我对嵌入式这门课程的理解,使我更容易理解嵌入式的内容及应用。
而且更重视这门与我们生活息息相关的科技。
作为当代大学生,理应追求更高的自我,完善自我,超越自我。
在平时的课程学习的同时,开拓新的知识面,提高自我修养。
在科技日益发展的今天,不仅是我们的思想,还有我们的科技文化方面,更要跟上时代的步伐,学习不同方面的技术,以充实自我。
加油!FLYERS.。