移动终端操作系统架构概览.docx
- 文档编号:12154391
- 上传时间:2023-04-17
- 格式:DOCX
- 页数:28
- 大小:299.62KB
移动终端操作系统架构概览.docx
《移动终端操作系统架构概览.docx》由会员分享,可在线阅读,更多相关《移动终端操作系统架构概览.docx(28页珍藏版)》请在冰豆网上搜索。
移动终端操作系统架构概览
现有的终端操作系统:
Android、WindowsMobile、Symbian、iPhone、BlackBerry、WindowsPhone7、Beda
Android操作系统
Android是Google公司基于Linux平台的开源智能移动终端操作系统。
历代Android系统的名称,这真的是一份小吃的盛宴啊:
Android1.5Cupcake(纸杯蛋糕)
Android1.6Donut(甜甜圈)
Android2.0/2.0.1/2.1Eclair(松饼)
Android2.2/2.2.1Froyo(冻酸奶)
Android2.3Gingerbread(姜饼)
Android3.0/3.1/3.2Honeycomb(蜂巢)
Android4.0IceCreamSandwich(冰激凌三明治)
Android5.0JellyBean(果冻豆)
Android6.0KeyLimePie(柠檬派)
Android是一个针对移动设备的程序集,其中包括一个操作系统,一个中间件和一些关键性应用.
特性
•程序程序框架可重用及可复写组件组成
•针对移动设备优化过的Dalvik虚拟机
•整合浏览器,该浏览器基于开源的WebKit引擎开发
•提供了优化过得图形系统,该系统由一个自定义的2D图形库;一个遵循OpenGLES1.0标准(硬件加速)的3D图形库组成
•使用SQLite来实现结构化数据的存储
•媒体方面对一些通用的audio,video,和图片格式提供支持(MPEG4,H.264,MP3,AAC,AMR,JPG,PNG,GIF)
•GSM技术(依赖硬件)
•蓝牙,EDGE,3G和WiFi(依赖硬件)
•Camera,GPS,指南针,和加速计(依赖硬件)
•非常丰富的开发环境,包括一个设备模拟器,调适工具,内存和效率调优工具和一个Eclipse的插件ADT
Android平台的整体架构分为4层:
①Linux内核层、②系统运行库、③应用程序框架层、④应用程序层
Android采用层次化系统架构。
其软件层次结构包括操作系统(OS)、中间件(MiddleWare)和应用程序(Application)。
Linux内核层
Android以Linux操作系统内核为基础,借助Linux内核服务实现硬件设备驱动,进程和内存管理,网络协议栈,电源管理,无线通信等核心功能。
Android4.0版本之前基于Linux2.6系列内核,4.0及之后的版本使用更新的Linux3.X内核,并且两个开源项目开始有了互通。
Linux3.3内核中正式包括一些Android代码,可以直接引导进入Android。
Linux3.4将会增添电源管理等更多功能,以增加与Android的硬件兼容性,使Android在更多设备上得到支持。
Android内核对Linux内核进行了增强,增加了一些面向移动计算的特有功能。
例如,低内存管理器LMK(LowMemoryKeller),匿名共享内存(Ashmem),以及轻量级的进程间通信Binder机制等。
这些内核的增强使Android在继承Linux内核安全机制的同时,进一步提升了内存管理,进程间通信等方面的安全性。
下表列举了Android内核的主要驱动模块:
驱动名称
说明
Android电源管理(PowerManagement)
针对嵌入式设备的,基于标准Linux电源管理系统的,轻量级的电源管理驱动
低内存管理器(LowMemoryKeller)
可以根据需要杀死进程来释放需要的内存。
扩展了Linux的OOM机制,形成独特的LMK机制
匿名共享内存(Ashmem)
为进程之间提供共享内存资源,同时为内核提供回收和管理内存的机制
日志(AndroidLogger)
一个轻量级的日志设备
定时器(AnroidAlarm)
提供了一个定时器用于把设备从睡眠状态唤醒
物理内存映射管理(Android PMEM)
DSP及其他设备只能工作在连续的物理内存上,PMEM用于向用户空间提供连续的物理内存区域映射
Android定时设备(AndroidTimeddevice)
可以执行对设备的定时控制功能
Yaffs2文件系统
Android采用大容量的NAND闪存作为存储设备,使用Yaffs2作为文件系统管理大容量MTDNANDFlash;Yaffs2占用内存小,垃圾回收简洁迅速。
AndroidParanoid网络
对Linux内核的网络代码进行了改动,增加了网络认证机制。
可在IPV4,IPV6和蓝牙中设置,由ANDROID_PARANOID_NETWORK宏来启用此特性。
硬件抽象层
内核驱动和用户软件之间还存在所谓的硬件抽象层(HardwareAbstractLayer,HAL),它是对硬件设备的具体实现加以抽象。
HAL没有在Android官方系统架构图中标明,下图标出了硬件抽象层在android系统中的位置:
鉴于许多硬件设备厂商不希望公开其设备驱动的源代码,如果能将android的应用框架层与linux系统内核的设备驱动隔离,使应用程序框架的开发尽量独立于具体的驱动程序,则android将减少对Linux内核的依赖。
HAL由此而生,它是对Linux内核驱动程序进行的封装,将硬件抽象化,屏蔽掉了底层的实现细节。
HAL规定了一套应用层对硬件层读写和配置的统一接口,本质上就是将硬件的驱动分为用户空间和内核空间两个层面;Linux内核驱动程序运行于内核空间,硬件抽象层运行于用户空间。
系统运行库层
官方的系统架构图中,位于Linux内核层之上的系统运行库层是应用程序框架的支撑,为Android系统中的各个组件提供服务。
系统运行库层由系统类库和Android运行时构成。
1.系统类库
系统类库大部分由C/C++编写,所提供的功能通过Android应用程序框架为开发者所使用。
主要的系统类库及说明如下表:
系统类库名称
说明
SurfaceManager
执行多个应用程序时,管理子系统的显示,另外也对2D和3D图形提供支持
MediaFramework
基于PacketVideoOpenCore的多媒体库,支持多种常用的音频和视频格式的录制和回放,所支持的编码格式包括MPEG4,MP3,H264,AAC,ARM
SQLite
本地小型关系数据库,Android提供了一些新的SQLite数据库API,以替代传统的耗费资源的JDBCAPI
OpenGL|ES
基于OpenGLES1.0API标准实现的3D跨平台图形库
FreeType
用于显示位图和矢量字体
WebKit
Web浏览器的软件引擎
SGL
底层的2D图形引擎
Libc(bionicl ibc)
继承自BSD的C函数库bioniclibc,更适合基于嵌入式Linux的移动设备
SSL
安全套接层,是为网络通信提供安全及数据完整性的一种安全协议
除上表列举的主要系统类库之外,AndroidNDK(NativeDevelopmentKit),即Android原生库,也十分重要。
NDK为开发者提供了直接使用Android系统资源,并采用C或C++语言编写程序的接口。
因此,第三方应用程序可以不依赖于Dalvik虚拟机进行开发。
实际上,NDK提供了一系列从C或C++生成原生代码所需要的工具,为开发者快速开发C或C++的动态库提供方便,并能自动将生成的动态库和java应用程序一起打包成应用程序包文件,即.apk文件。
注意,使用原生库无法访问应用框架层API,兼容性可能无法保障。
而且从安全性角度考虑,Android原生库用非类型安全的程序语言C,C++编写,更容易产生安全漏洞,原生库的缺陷(bug)也可能更容易直接影响应用程序的安全性。
2.运行时
Android运行时包含核心库和Dalvik虚拟机两部分。
核心库:
核心库提供了Java5seAPI的多数功能,并提供Android的核心API,如android.os,,android.media等。
Dalvik虚拟机:
Dalvik虚拟机是基于apache的java虚拟机,并被改进以适应低内存,低处理器速度的移动设备环境。
Dalvik虚拟机依赖于Linux内核,实现进程隔离与线程调试管理,安全和异常管理,垃圾回收等重要功能。
本质而言,Dalvik虚拟机并非传统意义上的java虚拟机(JVM)。
Dalvik虚拟机不仅不按照Java虚拟机的规范来实现,而且两者不兼容。
Dalvik和标准Java虚拟机有以下主要区别:
∙Dalvik基于寄存器,而JVM基于栈。
一般认为,基于寄存器的实现虽然更多依赖于具体的CPU结构,硬件通用性稍差,但其使用等长指令,在效率速度上较传统JVM更有优势。
∙Dalvik经过优化,允许在有限的内存中同时高效地运行多个虚拟机的实例,并且每一个Dalvik应用作为一个独立的Linux进程执行,都拥有一个独立的Dalvik虚拟机实例。
Android这种基于Linux的进程“沙箱”机制,是整个安全设计的基础之一。
∙Dalvik虚拟机从DEX(Dalvik Executable)格式的文件中读取指令与数据,进行解释运行。
DEX文件由传统的,编译产生的CLASS文件,经dx工具软件处理后生成。
∙Dalvik的DEX文件还可以进一步优化,提高运行性能。
通常,OEM的应用程序可以在系统编译后,直接生成优化文件(.ODEX);第三方的应用程序则可在运行时在缓存中优化与保存,优化后的格式为DEY(.dey文件)。
应用程序框架层
应用程序框架层提供开发Android应用程序所需的一系列类库,使开发人员可以进行快速的应用程序开发,方便重用组件,也可以通过继承实现个性化的扩展。
具体包括的模块如表:
应用程序框架层类库名称
功能
活动管理器(ActivityMananger)
管理各个应用程序生命周期并提供常用的导航回退功能,为所有程序的窗口提供交互的接口
窗口管理器(WindowManager)
对所有开启的窗口程序进行管理
内容提供器(ContentProvider)
提供一个应用程序访问另一个应用程序数据的功能,或者实现应用程序之间的数据共享
视图系统(ViewSystem)
创建应用程序的基本组件,包括列表(lists),网格(grids),文本框(textboxes),按钮(buttons),还有可嵌入的web浏览器。
通知管理器(NotificationManager)
使应用程序可以在状态栏中显示自定义的客户提示信息
包管理器(PackageManager)
对应用程序进行管理,提供的功能诸如安装应用程序,卸载应用程序,查询相关权限信息等。
资源管理器(ResourceManager)
提供各种非代码资源供应用程序使用,如本地化字符串,图片,音频等
位置管理器(LocationManager)
提供位置服务
电话管理器(TelephonyManager)
管理所有的移动设备功能
XMPP服务
是Google在线即时交流软件中一个通用的进程,提供后台推送服务
应用层
Android平台的应用层上包括各类与用户直接交互的应用程序,或由java语言编写的运行于后台的服务程序。
例如,智能手机上实现的常见基本功能程序,诸如SMS短信,电话拨号,图片浏览器,日历,游戏,地图,web浏览器等程序,以及开发人员开发的其他应用程序。
Android系统的安全机制
默认情况下第三方应用没有权限进行有害操作,主要体现在对系统上的文件进行操作时,不同应用具有不同操作等级。
①进程保护。
程序只能在自己的进程空间,与其它进程完全隔离,从而实现进程之间互不干扰;
②权限模型。
Android要求用户在使用API是进行权限声明。
权限声明在AndroidManifest.xml文件里进行设置,主要有四种模式:
①Context.MODE_PRIVATE仅能被创建的应用访问;
②Context.MODE_APPEN检测存在的文件,就在文件后面追加内容
③Context.MODE_READABLE当前文件可以被其它应用读取
④Context.MODE_WRITEABLE当前文件可以被其它应用写入
四种权限模式在声明时可以叠加。
权限声明通过ProtectedLevel分为4个等级:
①Normal只要申请就可以使用;
②Dangerous取得用户的确认才可以使用;最常用的等级。
③Signature让应用程序不弹出确认提示;
④Signatureorsystem开发应用时,获得平台签名。
Android项目的目录结构
1、源程序目录src-用于放置源程序
2、自动生成目录gen-自动生成不允许用户自行修改的R.java文件,用于引用资源文件(即res目录下的数据)
3、资源目录res
res:
放置应用程序用到的资源文件。
其包含(Drawable,layout,values等目录)。
当这个目录下的文件发生变化时,src目录下面的R。
java就会自动发生变化。
res/drawable:
放置应用到的图片资源。
res/layout:
放置一些与UI相应的布局文件,都是xml文件。
res/values:
放置字符串,颜色,数组等常量数据。
=========================================
*res中的资源,会在生成的R类中,生成索引id
*getResources()方法,获得Resources对象,来访问res中的资源
Res根据不同的资源内容预定义了相应的子目录,这些目录的名字不能任意定义。
Res目录只支持一级子目录,不支持多级子目录
res/layout:
用于放置布局用的xml文件,这些xml用于定义一个界面的布局
res/layout/main.xml
res/drawable:
其中存放图片。
res/drawable目录下放置一个名为icon.png的图片文件
drawable在2.0版本以后出现了若干个
drawable目录
根据屏幕硬件尺寸不同,选取使用不同
drawable下的图片资源
res/values:
存放的是各种类型的数据。
是用xml文件保存。
res/values/strings.xml
用于:
1:
最大程度的重用资源
2:
便于国际化处理
*将文本、数组、颜色、样式外化
*国际化I18n-Internationalization
本地化L10n-Localization
*values
values-en-rUS
values-en-eUK
values-zh-rCN
values-zh-rTW
values-kr
values-rJP
*布局文件.xml
@string/hello_world
*Activity
getResources().getString("hello_world");
res/xml:
存放我们程序中需要使用的xml文件
*xml文件会被编译(压缩)
*创建XmlPullParser
getResources().getXml(索引id)引用资源
res/raw:
存放原始文件,原始的,未编译(未压缩)的文件
通常:
视频文件,音频文件
*不能创建子目录
*获得raw中文件的输入流:
in=getResources().openRawResource(R.raw.xxx);
*资源的国际化
raw
raw-en-rUK
raw-en-rUS
raw-zh-rHK
raw-zh-rCN
raw-zh-rTW
res/anim:
android支持的动画文件(用xml定义)
在res目录下的资源文件名:
①:
必须符合java标识符命名规则
②:
字母不能含有大写
android应用程序的入口文件AndroidManifest.xml-Android程序的清单文件,相当于配置文件,配置应用程序名称、图标、Activity、Service、Receiver等
AndroidManifest.xml将包含如下设置:
applicationpermissions、Activities、intentfilters等
4、支持库目录libs:
当前工程所依赖的jar包.
5、媒体文件目录assets:
放置一些程序所需要的媒体文件.
6、编译目录bin:
工程的编译目录.存放一些编译时产生的临时文件和当前工程的.apk文件.
文件proguard-project.txt:
加密当前程序所使用
R类
android虽然没有明确说明,但是values目录下的资源不是根据文件名在R中对应的。
而是根据values中xml的内容决定。
android使用R类对访问资源提供了统一的方式。
使用R类中的不同常量,来获取对应的相关资源。
R类中的常量我们通常叫它为资源的ID。
通过R类在程序中获取资源的方式:
Resource类
该实例用于管理当前应用程序中的所有资源。
获取该实例的方式为:
Context.getResource()方法
Resource中提供了获取不同资源的方法
getColor(intresId)
getString(intresId)
getDrawable(intresId)
getStringArray(intresId)获取字符串数组
android.jar文件,这是一个Java归档文件,其中包含构建应用程序所需的所有的AndroidSDK库(如Views、Controls)和APIs。
通过android.jar将自己的应用程序绑定到AndroidSDK和AndroidEmulator,这允许你使用所有Android的库和包,且使你的应用程序在适当的环境中调试。
WindowsPhone7操作系统
WindowsPhone7是一个32位操作系统,内核基于WindowsCE6.0R3。
双层架构,由内核层和用户层组成。
应用进程被分配2GB内存,其中虚拟内存可达1GB,内核也被分配2GB。
WindowsPhone由硬件层、内核层、系统层和应用层组成。
WindowsPhone是基于.NETCompactFramework框架的托管环境CLR。
其中包含了两种开发框架:
∙SilverlightFramework:
以SilverlightFramework为基础的WindowsPhone7应用程序是由一堆的Page组成的,每一个Page是一个扩展名为.XAML的文件,代表一个操作画面。
WP7.0是基于Silverlight3.0,WP7.1则是基于Silverlight4。
∙XNAFramework:
主要的用途在支持开发游戏程序,提供2D/3D的动画,音效,及各种游戏相关的功能,协助有志于开发游戏程序的企业或个人发展WindowsPhone、Xbox360、Zune播放器、以及Windows7平台的游戏程序。
对于大多应用程序我们可以选择Silverlight进行开发,而对于游戏可以选择XNA。
WindowsPhone7软件结构体系有两部分组成,即Screen部分和Cloud部分。
Screen部分由“ToolandSupport”和Runtimes组成,Cloud由“DeveloperPortalServices”和“CloudService”组成。
Screen部分可以理解为本地,Cloud部分可以理解为云端。
“ToolandSupport”是开发应用所必须的开发工具和技术支持;
Runtimes则是开发应用的框架,提供所需要的的API和功能。
WindowsPhone系统具有封闭性,应用程序模型只支持第三方应用程序在前台运行,不支持后台应用。
WindowsPhone第三方应用开发的限制:
①很难实现流量监控、短信拦截、病毒实时监控等功能;
②不能开发涉及手机摄像头的应用程序;
③不能对应用程序界面进行个性化定制;
④设计系统类的应用必须使用系统提供的界面运行;
⑤开发者必须通过Zune同步功能将开发好的应用程序发送到手机上。
⑥没有提供SMS、Phone、Email、Camera的API,打电话、发送短信都需要用户确认才能执行。
特色功能,开发者可以通过Task调用系统任务来实现。
XAP程序包的启动过程:
宿主程序通过AppMainfest.xaml来获取程序的入口点(EntryPointType)入口程序集(EntryPointAssembly)Silverlight运行版本(RuntimeVersion),然后初始化调用Application.LoadComponent方法来生成App对象的实例,接下来初始化手机,定义一个Frame,,通过WMAppMaingest.xml文件获取启动时的Page(NavigationPage)页面设置到Frame,然后设置到RootVisual来显示此Page。
WindowsPhone7安全模型
①给予最小权限和隔离,同时引入Chamber概念;Chamber可理解为独立模块,分为四层:
TCB(TrustComputingBase)层处于内核模式,涉及内核和内核设备驱动,权限较大;
ERC(elevatedrightschamber)层主要是服务程序以及用户模式驱动;
SRC(standardrightschamber)层位于装的微软应用而设计的层;
LPC(leastprivilengedchamber)层专为第三方应用程序预装的应用商店下载的应用而设计的,权限最小。
②强制代码签名和代码检测
用户只能通过应用程序商店下载应用,拒绝盗版,保护开发者版权;
应用要想发布,必须经过微软的代码签名,并与之前的版本有较大差异;
设计和检测代码的工具:
MicrosoftSDLThreatModelingTool、FxCop、BinScope。
开发人员可以将应用.Xap文件发布到WindowsPhone市场,向开发商提交.xap文件。
.xap文件是一个压缩文件,其中包含应用程序所需的所有信息,这包括应用程序图标、开始磁贴,元数据,并许可条款的决定如何使用它们的程序。
应用发布到WindowsPhone市场后,开发人员使用应用集线器来管理应用程序的版本报价。
WindowsPhone7具备进程隔离、应用数据隔离等功能,并支持SSL和HTTPS等加密传输协议。
Wi
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 移动 终端 操作系统 架构 概览