描述
开 本: 16开纸 张: 胶版纸包 装: 平装是否套装: 否国际标准书号ISBN: 9787121255236
编辑推荐
书以电子科技大学自主设计的开源操作系统aCoral在ARM9 Mini2440嵌入式平台上的设计过程为思路,逐步介绍aCoral的实现,再延伸到它对多核嵌入式处理器的支持,在此过程中,介绍嵌入式实时操作系统的其他相关技术和理论,比如:实时调度机制与策略、多核计算等,让学生对其有更全面的认识。此外,全书综合应用了计算机组成原理、计算机操作系统、汇编语言、C程序设计、数据结构、嵌入式系统概论、ARM处理器及其应用等课程的知识点,力求理论与实践紧密结合,帮助读者融汇贯通上述课程的相关知识。
内容简介
本书以电子科技大学自主设计的开源操作系统aCoral在ARM9 Mini2440嵌入式平台上的设计过程为思路,逐步介绍aCoral的实现,再延伸到它对多核嵌入式处理器的支持,在此过程中,介绍嵌入式实时操作系统的其他相关技术和理论,比如:实时调度机制与策略、多核计算等,让学生对其有更全面的认识。此外,全书综合应用了计算机组成原理、计算机操作系统、汇编语言、C程序设计、数据结构、嵌入式系统概论、ARM处理器及其应用等课程的知识点,力求理论与实践紧密结合,帮助读者融汇贯通上述课程的相关知识。本书中的相关代码请读者登录华信教育资源网免费注册后下载使用。
目 录
第1章 概论 1
1.1 轮询系统(Polling Systems) 2
1.2 前后台系统(Foreground Background Systems) 2
1.3 嵌入式操作系统 3
1.3.1 简单内核 3
1.3.2 RTOS结构 4
1.3.3 多核RTOS 5
1.4 从裸板开始啊啊 6
1.5 aCoral 6
1.6 本书结构 7
习题 8
第2章 轮询系统 9
2.1 轮询系统概述 9
2.1.1 程序框架 9
2.1.2 调度 9
2.1.3 典型系统 11
2.2 搭建开发环境 11
2.3 启动Mini2440 14
2.3.1 为什么需要启动 14
2.3.2 启动流程 15
2.4 轮询的实现 29
习题 30
第3章 前后台系统 31
3.1 前后台结构 31
3.1.1 前后台系统的应用 31
3.1.2 运行方式 32
3.1.3 系统性能 32
3.1.4 前后台交换 33
3.1.5 典型系统 34
3.2 中断和中断服务 34
3.2.1 中断 34
3.2.2 中断服务 35
3.3 ARM的中断机制 35
3.4 一个简单的S3C2440中断服务 35
3.4.1 中断返回 36
3.4.2 中断注册 37
3.4.3 状态保存和现场恢复 39
3.5 前后台的实现 40
3.5.1 启动Mini2440 40
3.5.2 后台主循环 40
3.5.3 前台中断处理 43
习题 44
第4章 内核基础 46
4.1 基本术语 46
4.2 RTOS的特点 47
习题 50
第5章 搭建aCoral交叉开发环境 51
5.1 安装Ubuntu 51
5.2 安装交叉开发工具链 52
5.2.1 使用制作好的工具链 52
5.2.2 自己制作工具链 52
5.3 构建aCoral项目文件 53
习题 55
第6章 编写内核 56
6.1 aCoral线程 56
6.1.1 描述线程 57
6.1.2 线程优先级 65
6.2 调度策略 67
6.2.1 线程调度分层结构 67
6.2.2 调度策略分类 67
6.2.3 描述调度策略 68
6.2.4 查找调度策略 69
6.2.5 注册调度策略 70
6.3 基本调度机制 72
6.3.1 创建线程 72
6.3.2 调度线程 85
6.3.3 线程退出 96
6.3.4 其他基本机制 99
6.4 事务处理机制 106
6.4.1 中断管理 106
6.4.2 时钟管理 121
6.5 内存管理机制 124
6.5.1 主流内存管理机制 125
6.5.2 嵌入式系统对内存管理的特殊要求 126
6.5.3 aCoral的内存管理机制 127
6.5.4 aCoral内存管理初始化 150
6.6 线程交互机制 151
6.6.1 互斥机制 152
6.6.2 同步机制 166
6.6.3 通信机制 168
习题 179
第7章 启动内核 181
7.1 RTOS的引导模式 181
7.1.1 需要Bootloader的引导模式 181
7.1.2 不需要Bootloader的引导模式 182
7.2 Bootloader 182
7.3 aCoral环境下启动2440 185
7.4 启动aCoral 191
习题 199
第8章 移植内核 200
8.1 硬件抽象层移植 200
8.1.1 启动接口 201
8.1.2 中断接口 201
8.1.3 线程相关接口 203
8.1.4 时间相关接口 204
8.1.5 内存相关接口 205
8.1.6 开发板相关接口 205
8.1.7 多核(CMP)相关接口 205
8.1.8 移植文件规范 207
8.1.9 移植实例 208
8.2 项目移植 216
8.2.1 生成对应开发板的项目 216
8.2.2 添加到官网 220
习题 221
第9章 编译与运行内核 222
9.1 编译aCoral 222
9. 2 烧写aCoral到开发板ARM Mini2440 223
9.2.1 安装串口工具 223
9.2.2 安装烧写工具(DNW工具) 224
9.2.3 烧写与运行aCoral 225
习题 226
第10章 实时调度策略 227
10.1 任务调度策略基本概念 227
10.2 任务调度策略 228
10.2.1 典型实时调度策略 229
10.2.2 基于公平策略的时间片轮转调度 230
10.2.3 基于优先级的可抢占调度 230
10.2.4 RM调度算法 232
10.2.5 EDF调度算法 243
10.3 优先级反转及解决办法 245
10.3.1 优先级继承 246
10.3.2 优先级天花板 248
10.4 提高系统实时性的其他措施 251
10.4.1 评价RTOS的性能指标 251
10.4.2 提高实时任务响应性的措施 252
10.5 多核/处理器调度 261
10.5.1 多核/处理器技术 261
10.5.2 多核/处理器调度策略 263
习题 264
第11章 支持多核 266
11.1 ARM11 MPCore 266
11.2 多核运行机制 267
11.3 aCoral对多核机制的支持 269
11.3.1 多核启动 269
11.3.2 多核调度 276
习题 281
参考文献 282
1.1 轮询系统(Polling Systems) 2
1.2 前后台系统(Foreground Background Systems) 2
1.3 嵌入式操作系统 3
1.3.1 简单内核 3
1.3.2 RTOS结构 4
1.3.3 多核RTOS 5
1.4 从裸板开始啊啊 6
1.5 aCoral 6
1.6 本书结构 7
习题 8
第2章 轮询系统 9
2.1 轮询系统概述 9
2.1.1 程序框架 9
2.1.2 调度 9
2.1.3 典型系统 11
2.2 搭建开发环境 11
2.3 启动Mini2440 14
2.3.1 为什么需要启动 14
2.3.2 启动流程 15
2.4 轮询的实现 29
习题 30
第3章 前后台系统 31
3.1 前后台结构 31
3.1.1 前后台系统的应用 31
3.1.2 运行方式 32
3.1.3 系统性能 32
3.1.4 前后台交换 33
3.1.5 典型系统 34
3.2 中断和中断服务 34
3.2.1 中断 34
3.2.2 中断服务 35
3.3 ARM的中断机制 35
3.4 一个简单的S3C2440中断服务 35
3.4.1 中断返回 36
3.4.2 中断注册 37
3.4.3 状态保存和现场恢复 39
3.5 前后台的实现 40
3.5.1 启动Mini2440 40
3.5.2 后台主循环 40
3.5.3 前台中断处理 43
习题 44
第4章 内核基础 46
4.1 基本术语 46
4.2 RTOS的特点 47
习题 50
第5章 搭建aCoral交叉开发环境 51
5.1 安装Ubuntu 51
5.2 安装交叉开发工具链 52
5.2.1 使用制作好的工具链 52
5.2.2 自己制作工具链 52
5.3 构建aCoral项目文件 53
习题 55
第6章 编写内核 56
6.1 aCoral线程 56
6.1.1 描述线程 57
6.1.2 线程优先级 65
6.2 调度策略 67
6.2.1 线程调度分层结构 67
6.2.2 调度策略分类 67
6.2.3 描述调度策略 68
6.2.4 查找调度策略 69
6.2.5 注册调度策略 70
6.3 基本调度机制 72
6.3.1 创建线程 72
6.3.2 调度线程 85
6.3.3 线程退出 96
6.3.4 其他基本机制 99
6.4 事务处理机制 106
6.4.1 中断管理 106
6.4.2 时钟管理 121
6.5 内存管理机制 124
6.5.1 主流内存管理机制 125
6.5.2 嵌入式系统对内存管理的特殊要求 126
6.5.3 aCoral的内存管理机制 127
6.5.4 aCoral内存管理初始化 150
6.6 线程交互机制 151
6.6.1 互斥机制 152
6.6.2 同步机制 166
6.6.3 通信机制 168
习题 179
第7章 启动内核 181
7.1 RTOS的引导模式 181
7.1.1 需要Bootloader的引导模式 181
7.1.2 不需要Bootloader的引导模式 182
7.2 Bootloader 182
7.3 aCoral环境下启动2440 185
7.4 启动aCoral 191
习题 199
第8章 移植内核 200
8.1 硬件抽象层移植 200
8.1.1 启动接口 201
8.1.2 中断接口 201
8.1.3 线程相关接口 203
8.1.4 时间相关接口 204
8.1.5 内存相关接口 205
8.1.6 开发板相关接口 205
8.1.7 多核(CMP)相关接口 205
8.1.8 移植文件规范 207
8.1.9 移植实例 208
8.2 项目移植 216
8.2.1 生成对应开发板的项目 216
8.2.2 添加到官网 220
习题 221
第9章 编译与运行内核 222
9.1 编译aCoral 222
9. 2 烧写aCoral到开发板ARM Mini2440 223
9.2.1 安装串口工具 223
9.2.2 安装烧写工具(DNW工具) 224
9.2.3 烧写与运行aCoral 225
习题 226
第10章 实时调度策略 227
10.1 任务调度策略基本概念 227
10.2 任务调度策略 228
10.2.1 典型实时调度策略 229
10.2.2 基于公平策略的时间片轮转调度 230
10.2.3 基于优先级的可抢占调度 230
10.2.4 RM调度算法 232
10.2.5 EDF调度算法 243
10.3 优先级反转及解决办法 245
10.3.1 优先级继承 246
10.3.2 优先级天花板 248
10.4 提高系统实时性的其他措施 251
10.4.1 评价RTOS的性能指标 251
10.4.2 提高实时任务响应性的措施 252
10.5 多核/处理器调度 261
10.5.1 多核/处理器技术 261
10.5.2 多核/处理器调度策略 263
习题 264
第11章 支持多核 266
11.1 ARM11 MPCore 266
11.2 多核运行机制 267
11.3 aCoral对多核机制的支持 269
11.3.1 多核启动 269
11.3.2 多核调度 276
习题 281
参考文献 282
前 言
前 言
在后PC 时代的今天,嵌入式操作系统琳琅满目,在各行各业已有广泛应用,嵌入式Linux、VxWorks、INTEGRITY、Nuclear、DeltaOS、 pSOS+、VRTX、QNX、RTEMS、Cisco-IOS、ERISON-EPOC、uC/OS、uC/OSII、uC/OSIII、TinyOS、T-kernel、 Windows CE、Windows mobile、Symbian、Android、Apple-IOS在一些大学,本科生编写一个简易的操作系统内核也不是什么难事。此外,市面上也已出版了一些关于嵌入式操作系统(或者操作系统)设计和代码实现的书籍,比如,1999 年出版的《MicroC/OS-II:The Real-Time Kernel》,2005 年出版的《自己动手写操作系统完全版》,2011 年出版《一步步写嵌入式操作系统:ARM 编程的方法与实践》等。为什么还要撰写一本关于嵌入式操作系统设计的书呢?其目是从本科教学特点出发,顺应国内高校“工程教育”的发展趋势(比如:“卓越工程师计划”的实施),根据计算机专业及相关专业嵌入式方向系列教材建设的需要,将课程知识体系与操作系统设计实现过程有机结合,让学生更好地理解课程知识点,通过操作系统在具体嵌入式平台ARM9 Mini2440 的设计与实现,融会贯通相关核心知识点,进而激发读者自己设计操作系统的热情(写操作系统不是终目的),其终目的是通过写的过程来锻炼学生的系统设计能力、工程实现能力、分析与解决问题能力,充分体现教育家约翰.杜威先生“To learn by doing”的教学理念。
本书以aCoral 的设计过程为线索,首先从ARM9 Mini2440 的裸板串口驱动开始,介绍如何用汇编语言实现一个轮询结构的简单嵌入式系统。然后,引入中断机制,介绍如何实现一个前后台系统,以满足用户更为复杂的应用要求。在前两步的基础上,一步一步叙述aCoral实现细节,比如:从任务定义开始,逐步启发读者思考如何用C 语言描述一个任务、创建任务,如何将任务挂载到就绪队列上、从就绪队列中找到优先级任务、在ARM9 Mini2440上实现任务切换、触发任务调度、协调任务执行、响应用户的外部请求、通过时钟推动操作系统运行、启动内核、移植内核、搭建aCoral 的交叉开发环境、编译与运行aCoral、支持多核(以ARM 公司ARM11MPCORE 的四核心嵌入式处理器为例)等等。全书将原理与代码紧密结合;从工程实践中发现问题,在理论上对其进行详细分析并终指导操作系统设计与实现;此外,本书还对嵌入式实时操作系统编写过程中设计的相关知识进行了整合。
贯穿本书的嵌入式实时操作系统源代码来自电子科技大学嵌入式实时计算实验室设计的aCoral,参考了三星公司ARM9 S3C2440A、S3C2410A 芯片手册、ARM11MPCORE 芯片手册、Linux 开源社区、实时系统及实时调度学术论文等资料。此外,还借鉴了邵贝贝教授翻译JeanJ. Labrosse 先生的《MicroC/OS-II:The Real-Time Kernel》、C.M.Krishna 和KANG G. Shin 的《Real-Time Computing》、罗蕾教授的《嵌入式实时操作系统及应用开发(第4 版)》、桑楠教授的《嵌入式系统原理及应用开发技术(第2 版)》、李无言老师的《一步步写嵌入式操作系统:ARM 编程的方法与实践》,于渊老师写的《自己动手写操作系统完全版》等书籍。
本书在撰写过程中得到了电子工业出版社“卓越工程师计划”系列教材建设项目的支持和电子科技大学教务处特色教材建设项目的支持,作者对此深表感谢。此外,本书的撰写得到了电子科技大学计算机学院熊光泽教授、罗克露教授、罗蕾教授,信息与软件学院桑楠教·IV·授、雷航教授、蔡竟业教授、江维副教授、陈丽蓉副教授、李允副教授、徐旭如老师,厦门大学于杰老师,电子工业出版章海涛老师、裴杰老师的帮助,他们为本书的撰写提供了许多宝贵的意见和建议。
感谢电子科技大学实时计算实验室的研究生杨茂林、蒋世勇、李恒瑞、刘黎民、张晋川、陈泽玮、罗超、Furkan Hassan Saleh Rabee 以及宾夕法尼亚大学研究生廖聪、南加州大学研究生李龙杰、国防科技大学研究生龚俊如、上海交通大学读研的罗赟、复旦大学研究生胡伟松、人民大学研究生范旭、清华大学研究生陆文详、核九院研究生张朝,电子科技大学实时计算实验室学习的本科生兰宇航、陈维伟、胡斌,华为成都研究所软件工程师徐新、华为深圳研究所软件工程师陈朱旭、百度软件研发工程师李天华、三星公司南京研究所软件研发工程席臣、微软苏州研究院林添、美团网研发工程师许斌、美国云控公司成都研发中心谢鑫、美国豪威公司上海研发中心周强等,他们在作者的引导下,从本科二年级开始学习嵌入式实时系统,并在本科期间围绕(ARM9 Mini2440 + C/OS-II + LWIP + GUI + aCoral + Linux)平台上做过系列实验、课程设计、毕业设计,还在此平台上实现了智能家居及安防系统、智慧交通流量信息采集与显示系统、学习型遥控器、网络收音机、智能小车防撞系统、四轴飞行器等本科创新/实践项目(其中智能家居及安防系统获得了2010 年电子科技大学“银杏黄”项目奖,四轴飞行器获得全国一等奖),他们为aCoral 代码分析及验证做了许多细节工作。
感谢在上海自主创业的申建晶先生,他与作者一起于2009 年创建了开源嵌入式实时多核操作系统项目aCoral,并为该项目做出了巨大贡献,同时为本科教育和研究生教育中付出了许多宝贵的时间。感谢在成都自主创业的刘坚、朱葛、郑亚斌,感谢完美世界的高攀、兰王靖辉、建设银行四川分行闫志强、美国美满电子(Marvell)上海研究所的陈勇明及成都研究所的魏守峰、程潜、任艳伟、淘宝杭州研发中心的张林江等曾在电子科技大学实时计算实验室学习过的同志们,他们在校期间陆续加入项目组,与作者共同探讨嵌入式操作系统相关的技术、教学改革、本科生学习及就业等问题,这为本书结构的拟定、撰写方法等提供了思路和素材。
特别感谢我的父母、妻子和儿子,他们在本书撰写过程中给予了极大鼓励和支持。
由于作者知识和水平有限,书中不足之处在所难免,恳求各位专家及读者赐正。
作 者
在后PC 时代的今天,嵌入式操作系统琳琅满目,在各行各业已有广泛应用,嵌入式Linux、VxWorks、INTEGRITY、Nuclear、DeltaOS、 pSOS+、VRTX、QNX、RTEMS、Cisco-IOS、ERISON-EPOC、uC/OS、uC/OSII、uC/OSIII、TinyOS、T-kernel、 Windows CE、Windows mobile、Symbian、Android、Apple-IOS在一些大学,本科生编写一个简易的操作系统内核也不是什么难事。此外,市面上也已出版了一些关于嵌入式操作系统(或者操作系统)设计和代码实现的书籍,比如,1999 年出版的《MicroC/OS-II:The Real-Time Kernel》,2005 年出版的《自己动手写操作系统完全版》,2011 年出版《一步步写嵌入式操作系统:ARM 编程的方法与实践》等。为什么还要撰写一本关于嵌入式操作系统设计的书呢?其目是从本科教学特点出发,顺应国内高校“工程教育”的发展趋势(比如:“卓越工程师计划”的实施),根据计算机专业及相关专业嵌入式方向系列教材建设的需要,将课程知识体系与操作系统设计实现过程有机结合,让学生更好地理解课程知识点,通过操作系统在具体嵌入式平台ARM9 Mini2440 的设计与实现,融会贯通相关核心知识点,进而激发读者自己设计操作系统的热情(写操作系统不是终目的),其终目的是通过写的过程来锻炼学生的系统设计能力、工程实现能力、分析与解决问题能力,充分体现教育家约翰.杜威先生“To learn by doing”的教学理念。
本书以aCoral 的设计过程为线索,首先从ARM9 Mini2440 的裸板串口驱动开始,介绍如何用汇编语言实现一个轮询结构的简单嵌入式系统。然后,引入中断机制,介绍如何实现一个前后台系统,以满足用户更为复杂的应用要求。在前两步的基础上,一步一步叙述aCoral实现细节,比如:从任务定义开始,逐步启发读者思考如何用C 语言描述一个任务、创建任务,如何将任务挂载到就绪队列上、从就绪队列中找到优先级任务、在ARM9 Mini2440上实现任务切换、触发任务调度、协调任务执行、响应用户的外部请求、通过时钟推动操作系统运行、启动内核、移植内核、搭建aCoral 的交叉开发环境、编译与运行aCoral、支持多核(以ARM 公司ARM11MPCORE 的四核心嵌入式处理器为例)等等。全书将原理与代码紧密结合;从工程实践中发现问题,在理论上对其进行详细分析并终指导操作系统设计与实现;此外,本书还对嵌入式实时操作系统编写过程中设计的相关知识进行了整合。
贯穿本书的嵌入式实时操作系统源代码来自电子科技大学嵌入式实时计算实验室设计的aCoral,参考了三星公司ARM9 S3C2440A、S3C2410A 芯片手册、ARM11MPCORE 芯片手册、Linux 开源社区、实时系统及实时调度学术论文等资料。此外,还借鉴了邵贝贝教授翻译JeanJ. Labrosse 先生的《MicroC/OS-II:The Real-Time Kernel》、C.M.Krishna 和KANG G. Shin 的《Real-Time Computing》、罗蕾教授的《嵌入式实时操作系统及应用开发(第4 版)》、桑楠教授的《嵌入式系统原理及应用开发技术(第2 版)》、李无言老师的《一步步写嵌入式操作系统:ARM 编程的方法与实践》,于渊老师写的《自己动手写操作系统完全版》等书籍。
本书在撰写过程中得到了电子工业出版社“卓越工程师计划”系列教材建设项目的支持和电子科技大学教务处特色教材建设项目的支持,作者对此深表感谢。此外,本书的撰写得到了电子科技大学计算机学院熊光泽教授、罗克露教授、罗蕾教授,信息与软件学院桑楠教·IV·授、雷航教授、蔡竟业教授、江维副教授、陈丽蓉副教授、李允副教授、徐旭如老师,厦门大学于杰老师,电子工业出版章海涛老师、裴杰老师的帮助,他们为本书的撰写提供了许多宝贵的意见和建议。
感谢电子科技大学实时计算实验室的研究生杨茂林、蒋世勇、李恒瑞、刘黎民、张晋川、陈泽玮、罗超、Furkan Hassan Saleh Rabee 以及宾夕法尼亚大学研究生廖聪、南加州大学研究生李龙杰、国防科技大学研究生龚俊如、上海交通大学读研的罗赟、复旦大学研究生胡伟松、人民大学研究生范旭、清华大学研究生陆文详、核九院研究生张朝,电子科技大学实时计算实验室学习的本科生兰宇航、陈维伟、胡斌,华为成都研究所软件工程师徐新、华为深圳研究所软件工程师陈朱旭、百度软件研发工程师李天华、三星公司南京研究所软件研发工程席臣、微软苏州研究院林添、美团网研发工程师许斌、美国云控公司成都研发中心谢鑫、美国豪威公司上海研发中心周强等,他们在作者的引导下,从本科二年级开始学习嵌入式实时系统,并在本科期间围绕(ARM9 Mini2440 + C/OS-II + LWIP + GUI + aCoral + Linux)平台上做过系列实验、课程设计、毕业设计,还在此平台上实现了智能家居及安防系统、智慧交通流量信息采集与显示系统、学习型遥控器、网络收音机、智能小车防撞系统、四轴飞行器等本科创新/实践项目(其中智能家居及安防系统获得了2010 年电子科技大学“银杏黄”项目奖,四轴飞行器获得全国一等奖),他们为aCoral 代码分析及验证做了许多细节工作。
感谢在上海自主创业的申建晶先生,他与作者一起于2009 年创建了开源嵌入式实时多核操作系统项目aCoral,并为该项目做出了巨大贡献,同时为本科教育和研究生教育中付出了许多宝贵的时间。感谢在成都自主创业的刘坚、朱葛、郑亚斌,感谢完美世界的高攀、兰王靖辉、建设银行四川分行闫志强、美国美满电子(Marvell)上海研究所的陈勇明及成都研究所的魏守峰、程潜、任艳伟、淘宝杭州研发中心的张林江等曾在电子科技大学实时计算实验室学习过的同志们,他们在校期间陆续加入项目组,与作者共同探讨嵌入式操作系统相关的技术、教学改革、本科生学习及就业等问题,这为本书结构的拟定、撰写方法等提供了思路和素材。
特别感谢我的父母、妻子和儿子,他们在本书撰写过程中给予了极大鼓励和支持。
由于作者知识和水平有限,书中不足之处在所难免,恳求各位专家及读者赐正。
作 者
评论
还没有评论。