移动终端操作系统架构概览解剖.docx

上传人:b****7 文档编号:25494797 上传时间:2023-06-09 格式:DOCX 页数:28 大小:299.64KB
下载 相关 举报
移动终端操作系统架构概览解剖.docx_第1页
第1页 / 共28页
移动终端操作系统架构概览解剖.docx_第2页
第2页 / 共28页
移动终端操作系统架构概览解剖.docx_第3页
第3页 / 共28页
移动终端操作系统架构概览解剖.docx_第4页
第4页 / 共28页
移动终端操作系统架构概览解剖.docx_第5页
第5页 / 共28页
点击查看更多>>
下载资源
资源描述

移动终端操作系统架构概览解剖.docx

《移动终端操作系统架构概览解剖.docx》由会员分享,可在线阅读,更多相关《移动终端操作系统架构概览解剖.docx(28页珍藏版)》请在冰豆网上搜索。

移动终端操作系统架构概览解剖.docx

移动终端操作系统架构概览解剖

现有的终端操作系统:

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等加密传输协议。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 幼儿教育 > 育儿知识

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1