《嵌入式操作系统实验报告.docx》由会员分享,可在线阅读,更多相关《嵌入式操作系统实验报告.docx(38页珍藏版)》请在金锄头文库上搜索。
1、嵌入式操作系统实验报告 大学信息科学与工程学院 实验报告 姓名: 安磊 班级: 计科 0901 学号: 0909090310 指导老师: 宋虹 目录 课程设计内容 - 3 3 uC/OS 操作系统简介 - 3 3 S uC/OS 操作系统的组成 - - 3 3 S uC/OS 操作系统功能作用 - 4 4 S uC/OS 文件系统的建立 - 6 6 文件系统设计的原则 - - 6 6 文件系统的层次结构和功能模块 - - 6 6 文件系统的详细设计 - - 8 8 文件系统核心代码 - 9 9 课程设计感想 - 11 附录 - 12 课程设计 内容 在 uC/OS 操作系统中增加一个简单的文件
2、系统。 要求如下: (1) 熟悉并分析 uc/os 操作系统 (2) 设计并实现一个简单的文件系统 (3) 可以是存放在内存的虚拟文件系统,也可以是存放在磁盘的实际文件系统 (4) 编写测试代码,测试对文件的相关操作:建立,读写等 课程设计目的 操作系统课程主要讲述的内容是多道操作系统的原理与技术,与其它计算机原理、编译原理、汇编语言、计算机网络、程序设计等专业课程关系十分密切。 本课程设计的目的综合应用学生所学知识,建立系统和完整的计算机系统概念,理解和巩固操作系统基本理论、原理和方法,掌握操作系统开发的基本技能。 I I S uC/OS 操作系统简介 C/OS-II 是一种可移植的,可植入
3、 ROM 的,可裁剪的,抢占式的,实时多任务操作系统内核。它被广泛应用于微处理器、微控制器和数字信号处理器。 C/OS 和 C/OS-II 是专门为计算机的嵌入式应用设计的, 绝大部分代码是用 C 语言编写的。CPU 硬件相关部分是用汇编语言编写的、总量约 200 行的汇编语言部分被压缩到最低限度,为的是便于移植到任何一种其它的 CPU 上。用户只要有标准的 ANSI 的 C 交叉编译器,有汇编器、连接器等软件工具,就可以将 C/OS-II 嵌入到开发的产品中。C/OS-II 具有执行效率高、占用空间小、实时性能优良和可扩展性强等特点, 最小内核可编译至 2KB 。C/OS-II 已经移植到了
4、几乎所有知名的 CPU 上。 严格地说 uC/OS-II 只是一个实时操作系统内核,它仅仅包含了任务调度,任务管理,时间管理,内存管理和任务间的通信和同步等基本功能。没有提供输入输出管理,文件系统,网络等额外的服务。但由于 uC/OS-II 良好的可扩展性和源码开放,这些非必须的功能完全可以由用户自己根据需要分别实现。 uC/OS-II 目标是实现一个基于优先级调度的抢占式的实时内核,并在这个内核之上提供最基本的系统服务,如信号量,邮箱,消息队列,内存管理,中断管理等。 S uC/OS 操作系统的组成 C/OS-II 可以大致分成核心、任务处理、时间处理、任务同步与通信,CPU 的移植等 5个
5、部分。如下图: 每个部分具体作用 1) 核心部分(OSCore.c) 是操作系统的处理核心,包括操作系统初始化、操作系统运行、中断进出的前导、时钟节拍、任务调度、事件处理等多部分。能够维持系统基本工作的部分都在这里。 2) 任务处理部分(OSTask.c) 任务处理部分中的内容都是与任务的操作密切相关的。包括任务的建立、删除、挂起、恢复等等。因为 C/OS-II 是以任务为基本单位调度的,所以这部分内容也相当重要。 3) 时钟部分(OSTime.c) C/OS-II 中的最小时钟单位是 timetick(时钟节拍)。任务延时等操作是在这里完成的。 4) 任务同步和通信部分 为事件处理部分,包括
6、信号量、邮箱、邮箱队列、事件标志等部分;主要用于任务间的互相联系和对临界资源的访问。 5) 与 CPU 的接口部分 是指 C/OS-II 针对所使用的 CPU 的移植部分。由于 C/OS-II 是一个通用性的操作系统,所以对于关键问题上的实现,还是需要根据具体 CPU 的具体内容和要求作相应的移植。这部分内容由于牵涉到 SP 等系统指针,所以通常用汇编语言编写。主要包括中断级任务切换的底层实现、任务级任务切换的底层实现、时钟节拍的产生和处理、中断的相关处理部分等内容。 S uC/OS 操作系统功能作用 任务管理 uC/OS-II 中最多可以支持 64 个任务,分别对应优先级 063,其中 0
7、为最高优先级。63 为最低级,系统保留了 4 个最高优先级的任务和 4 个最低优先级的任务,所有用户可以使用的任务数有 56 个。 uC/OS-II 提供了任务管理的各种函数调用,包括创建任务,删除任务,改变任务的优先级,任务挂起和恢复等。 系统初始化时会自动产生两个任务:一个是空闲任务,它的优先级最低,该任务仅给一个整形变量做累加运算;另一个是系统任务,它的优先级为次低,该任务负责统计当前 cpu的利用率。 时间管理 uC/OS-II 的时间管理是通过定时中断来实现的,该定时中断一般为 10 毫秒或 100 毫秒发生一次,时间频率取决于用户对硬件系统的定时器编程来实现。中断发生的时间间隔是固
8、定不变的,该中断也成为一个时钟节拍。 uC/OS-II 要求用户在定时中断的服务程序中,调用系统提供的与时钟节拍相关的系统函数,例如中断级的任务切换函数,系统时间函数。 内存管理 在 ANSI C 中是使用 malloc 和 free 两个函数来动态分配和释放内存。但在嵌入式实时系统中,多次这样的操作会导致内存碎片,且由于内存管理算法的原因,malloc 和 free 的执行时间也是不确定。 uC/OS-II 中把连续的大块内存按分区管理。每个分区中包含整数个大小相同的内存块,但不同分区之间的内存块大小可以不同。用户需要动态分配内存时,系统选择一个适当的分区,按块来分配内存。释放内存时将该块放
9、回它以前所属的分区,这样能有效解决碎片问题,同时执行时间也是固定的。 任务间通信与同步 对一个多任务的操作系统来说,任务间的通信和同步是必不可少的。uC/OS-II 中提供了4 种同步对象,分别是信号量,邮箱,消息队列和事件。所有这些同步对象都有创建,等待,发送,查询的接口用于实现进程间的通信和同步。 任务调度 uC/OS-II 采用的是可剥夺型实时多任务内核。可剥夺型的实时内核在任何时候都运行就绪了的最高优先级的任务。 uC/os-II 的任务调度是完全基于任务优先级的抢占式调度,也就是最高优先级的任务,一旦处于就绪状态,则立即抢占正在运行的低优先级任务的处理器资源。为了简化系统设计,uC/
10、OS-II 规定所有任务的优先级不同,因为任务的优先级也同时唯一标志了该任务本身 II S uC/OS 文件系统的建立 uC/OS 操作系统本身是没有自带文件系统的。但可由用户自行设计。 文件系统设计的原则: 1.简洁性 现有的比较完善的文件系统功能齐全、对系统资源要求较高,而我们所需要的这个嵌入式文件系统是嵌入式平台的一个中间件,要求简洁高效可靠。为此我们在设计过程中借鉴了MS-DOS 的 FAT16 文件系统格式的目录形式进行文件管理,打开文件数据结构则采用了类似于 UNIX 系统文件表的方式,为每一个打开文件设置了一个数据结构指针 FS_FILE,使得用户接口简洁明了。 2.多设备驱动支
11、持 考虑到应用的广泛性和存储介质的多样性,要求我们在进行设计文件系统时必须考虑对多种存储介质的兼容性。整个系统采用模块化分层设计的原则和面向对象的实现方法,使得用户可以通过统一的顶层应用程序接口方便地对各种存储介质进行文件操作。利用本文件系统可以管理不同的存储介质,可以同时访问不同的硬件。 3. 多操作系统支持 文件系统的开发是基于 ucos ii,在设计开发过程中,考虑到以后对多操作系统的支持,OS接口模块设计为动态可变,当文件系统应用于其它操作系统时,只需将 OS 接口模块中的操作系统信息变为新的操作系统即可。 4. 可靠性 由于嵌入式系统的数据资源的重要性,要求存储数据的物理介质必须具有
12、很高的稳定性,可是我们知道一些人为或外在的因素可能会导致介质的损坏,从而造成数据的缺失,所以我们要尽可能提高文件系统可靠性。 文件系统 的层次结构和功能模块 嵌入式文件系统由于功能和作用与普通桌面操作系统的文件系统不同,导致了二者在体系结构上具有很大的差异性。在普通桌面操作系统中,文件系统不仅要管理文件,提供文件系统调用 API,还要管理各种设备,支持对设备和文件操作的一致性。在嵌入式文件系统中,这种规则发生了很大的变化。在某些情况下,嵌入式系统可以针对特殊的目的来进行定制,对嵌入式操作系统的系统功能规整性、可伸缩性及其灵活性提出了更高的要求。 基于以上的考虑,我们采用了如上图所示的嵌入式文件
13、系统体系结构,该结构定义的文件系统从上到下有三个层次:第一层为 API 层、第二层为中间转换层、下层为介质驱动层。 I API 层 API 层是文件系统和用户应用程序之间的接口,它有一个标准 C 函数库,其中包含有诸如打开文件(FS_FOPEN)、写文件(FS_FWRITE)等函数。本层的功能是将用户调用传送给中间转换层。这是整个系统设计的核心,也是嵌入式文件系统中用户唯一可见的部分 POSIX中文件系统的标准系统调用全部在该部分中得以实现。 中间转换层 中间转换层要为文件系统的实现提供与硬件无关的统一接口,是文件系统结构规整性的基础。中间转换层包含有文件系统子层及逻辑块子层,其中文件系统子层将文件操作解释到逻辑块子层,然后文件系统调用逻辑块子层并根据不同的设备定义出相应的设备驱动程序;逻辑块子层主要是同步对设备驱动程序的访问,向上提供友好界面。 介质驱动层 介质驱动层是访问硬件的最低端的程序,该程序的结构要能够便于实现对硬件的访问。本层的功能主要是完成对介质的访问。本层的重要任务就是提供统一的设备驱动程序接口。 根据文件系统的层次结构,可以将该文件系统分成四大功能块:API 接口模块、中间转换模块、磁盘分区模块、设备驱动模块。如上图: I API 接口模块 主要完成文件的基本操作,包含有文件的生成、删除、打开、关闭