操作系统Android 基础和运行机制课程论文.docx

上传人:b****5 文档编号:6927267 上传时间:2023-01-12 格式:DOCX 页数:12 大小:175.86KB
下载 相关 举报
操作系统Android 基础和运行机制课程论文.docx_第1页
第1页 / 共12页
操作系统Android 基础和运行机制课程论文.docx_第2页
第2页 / 共12页
操作系统Android 基础和运行机制课程论文.docx_第3页
第3页 / 共12页
操作系统Android 基础和运行机制课程论文.docx_第4页
第4页 / 共12页
操作系统Android 基础和运行机制课程论文.docx_第5页
第5页 / 共12页
点击查看更多>>
下载资源
资源描述

操作系统Android 基础和运行机制课程论文.docx

《操作系统Android 基础和运行机制课程论文.docx》由会员分享,可在线阅读,更多相关《操作系统Android 基础和运行机制课程论文.docx(12页珍藏版)》请在冰豆网上搜索。

操作系统Android 基础和运行机制课程论文.docx

操作系统Android基础和运行机制课程论文

西南大学电子信息工程学院

课程论文

 

考试科目操作系统

教师

学年2014-2015

学期6

姓名

学号

类别专业选修

成绩

 

2015年7月1日

电子信息工程学院制

 

Android基础和运行机制

第一章概论

1.1Android系统简介

Android是Google于2007年11月05日宣布的基于Linux平台的开源移动操作系统的名称,该平台由操作系统、中间件、用户界面和应用软件组成。

它采用软件堆层(SoftwareStack,又名软件叠层)的架构,主要分为三部分。

底层以Linux内核工作为基础,由C语言开发,只提供基本功能;中间层包括函数库Library和虚拟机VirtualMachine,由C++开发。

最上层是各种应用软件,包括通话程序,短信程序等,应用软件则由各公司自行开发,以Java作为编写程序的一部分。

不存在任何以往阻碍移动产业创新的专有权障碍,号称是首个为移动终端打造的真正开放和完整的移动软件。

Google通过与软、硬件开发商、设备制造商、电信运营商等其他有关各方结成深层次的合作伙伴关系,希望借助建立标准化、开放式的移动电话软件平台,在移动产业内形成一个开放式的生态系统。

Android作为Google企业战略的重要组成部分,将进一步推进“随时随地为每个人提供信息”这一企业目标的实现。

全球为数众多的移动电话用户正在使用各种基于Android的电话。

谷歌的目标是让(移动通讯)不依赖于设备甚至平台。

出于这个目的,Android将补充,而不会替代谷歌长期以来奉行的移动发展战略:

通过与全球各地的手机制造商和移动运营商结成合作伙伴,开发既有用又有吸引力的移动服务,并推广这些产品。

1.2Android系统的结构

1.2.1系统内核

Android是运行于Linuxkernel之上,但并不是GNU/Linux。

因为在一般GNU/Linux里支持的功能,Android大都没有支持,包括Cairo、X11、Alsa、FFmpeg、GTK、Pango及Glibc等都被移除掉了。

Android又以Bionic取代Glibc、以Skia取代Cairo、再以opencore取代FFmpeg等等。

Android为了达到商业应用,必须移除被GNUGPL授权证所约束的部份,例如Android将驱动程序移到Userspace,使得Linuxdriver与Linuxkernel彻底分开。

Bionic/Libc/Kernel/并非标准的Kernelheaderfiles。

Android的Kernelheader是利用工具由LinuxKernelheader所产生的,这样做是为了保留常数、数据结构与宏。

Android的Linuxkernel控制包括安全(Security),存储器管理(Memory

Management),程序管理(ProcessManagement),网络堆栈(NetworkStack),驱动程序模型(DriverModel)等。

下载Android源码之前,先要安装其构建工具Repo来初始化源码。

Repo是Android用来辅助Git工作的一个工具。

1.2.2后缀简介

APK是安卓应用的后缀,是AndroidPackage的缩写,即Android安装包(apk)。

APK是类似SymbianSis或Sisx的文件格式。

通过将APK文件直接传到Android模拟器或Android手机中执行即可安装。

apk文件和sis一样,把androidsdk编译的工程打包成一个安装程序文件,格式为apk。

APK文件其实是zip格式,但后缀名被修改为apk,通过UnZip解压后,可以看到Dex文件,Dex是DalvikVMexecutes的全称,即AndroidDalvik执行程序,并非JavaME的字节码而是Dalvik字节码。

APK文件结构

一个APK文件结构为:

1.META-INF\(注:

Jar文件中常可以看到);

2.res\(注:

存放资源文件的目录);

3.AndroidManifest.xml(注:

程序全局配置文件);

4.classes.dex(注:

Dalvik字节码);

5.resources.arsc(注:

编译后的二进制资源文件)。

总结下我们发现Android在运行一个程序时首先需要UnZip,然后类似Symbian那样直接执行安装,和WindowsMobile中的PE文件有区别,这样做对于程序的保密性和可靠性不是很高,通过dexdump命令可以反编译,但这样做符合发展规律,微软的WindowsGadgets或者说WPF也采用了这种构架方式。

在Android平台中dalvikvm的执行文件被打包为apk格式,最终运行时加载器会解压然后获取编译后androidmanifest.xml文件中的permission分支相关的安全访问,但仍然存在很多安全限制,如果你将apk文件传到/system/app文件夹下会发现执行是不受限制的。

最终我们平时安装的文件可能不是这个文件夹,而在androidrom中系统的apk文件默认会放入这个文件夹,它们拥有着root权限。

1.2.3硬件抽像层

Android的HAL(硬件抽像层)是能以封闭源码形式提供硬件驱动模块。

HAL的目的是为了把Androidframework与Linuxkernel隔开,让Android不至过度依赖Linuxkernel,以达成Kernelindependent的概念,也让Androidframework的开发能在不考量驱动程序实现的前提下进行发展。

HALstub是一种代理人(Proxy)的概念,Stub是以*.so档的形式存在。

Stub向HAL“提供”操作函数(Operations),并由Androidruntime向HAL取得Stub的Operations,再Callback这些操作函数。

HAL里包含了许多的Stub(代理人)。

Runtime只要说明“类型”,即ModuleID,就可以取得操作函数。

1.2.4中介软件

操作系统与应用程序的沟通桥梁,应用分为两层:

函数层(Library)和虚拟机(VirtualMachine)。

Bionic是Android改良libc的版本。

Android同时包含了Webkit,所谓的Webkit就是AppleSafari浏览器背后的引擎。

Surfaceflinger是就2D或3D的内容显示到屏幕上。

Android使用工具链(Toolchain)为Google自制的BionicLibc。

Android采用OpenCORE作为基础多媒体框架。

OpenCORE可分7大块:

PVPlayer、PVAuthor、Codec、PacketVideoMultimediaFramework(PVMF)、OperatingSystemCompatibilityLibrary(OSCL)、Common、OpenMAX。

Android使用skia为核心图形引擎,搭配OpenGL/ES。

skia与LinuxCairo功能相当,但相较于LinuxCairo,skia功能还只是雏形的。

2005年Skia公司被Google收购,2007年初,SkiaGL源码被公开,Skia也是GoogleChrome的图形引擎。

Android的多媒体数据库采用SQLite数据库系统。

数据库又分为共用数据库及私用数据库。

用户可通过ContentResolver类(Column)取得共用数据库。

Android的中间层多以Java实现,并且采用特殊的Dalvik虚拟机(DalvikVirtualMachine)。

Dalvik虚拟机是一种“暂存器型态”(RegisterBased)的Java虚拟机,变量皆存放于暂存器中,虚拟机的指令相对减少。

Dalvik虚拟机可以有多个实例(Instance),每个Android应用程序都用一个自属的Dalvik虚拟机来运行,让系统在运行程序时可达到优化。

Dalvik虚拟机并非运行Java字节码(Bytecode),而是运行一种称为.dex格式的文件。

1.2.5安全权限机制

Android本身是一个权限分立的操作系统。

在这类操作系统中,每个应用都以唯一的一个系统识别身份运行(Linux用户ID与群组ID)。

系统的各部分也分别使用各自独立的识别方式。

Linux就是这样将应用与应用,应用与系统隔离开。

系统更多的安全功能通过权限机制提供。

权限可以限制某个特定进程的特定操作,也可以限制每个URI权限对特定数据段的访问。

Android安全架构的核心设计思想是,在默认设置下,所有应用都没有权限对其他应用、系统或用户进行较大影响的操作。

这其中包括读写用户隐私数据(联系人或电子邮件),读写其他应用文件,访问网络或阻止设备待机等。

安装应用时,在检查程序签名提及的权限,且经过用户确认后,软件包安装器会给予应用权限。

从用户角度看,一款Android应用通常会要求如下的权限:

拨打电话、发送短信或彩信、修改/删除SD卡上的内容、读取联系人的信息、读取日程信的息,写入日程数据、读取电话状态或识别码、精确的(基于GPS)地理位置、模糊的(基于网络获取)地理位置、创建蓝牙连接、对互联网的完全访问、查看网络状态,查看WiFi状态、避免手机待机、修改系统全局设置、读取同步设定、开机自启动、重启其他应用、终止运行中的应用、设定偏好应用、震动控制、拍摄图片等。

一款应用应该根据自身提供的功能,要求合理的权限。

用户也可以分析一款应用所需权限,从而简单判定这款应用是否安全。

如一款应用是不带广告的单机版,也没有任何附加的内容需要下载,那么它要求访问网络的权限就比较可疑。

1.3Android系统的特点

Android系统最震撼人心之处在于其开放性和服务的免费性方面。

Anroid是一个对第三方软件完全开放的平台,开发者在为其开发程序时拥有更大的自由度,突破了iPhone等只能添加为数不多的固定软件的枷锁;同时与WindowsMobiel(现叫WindowsPhone)、Symbian等厂商不同,Android操作系统免费向开发人员提供,这样可节省30%的成本。

Android平台的手机以及平板电脑具有以下5大特点:

1、开放性

在优势方面,Android平台首先就是其开放性,开发的平台允许任何移动终端厂商加入到Android联盟中。

显著的开放性可以使其拥有更多的开发者,随着用户和应用的日益丰富,一个崭新的平台也将很将走向成熟,苹果的IOS系统封闭;无向任何厂商提供,WindowsPhone系统封闭,厂商需要花高价购买;Nokia的Symbian之前也一直是封闭,现在已经末落了。

2、挣脱运营商的束缚

在过去很长的一段时间,特别是在欧美地区,手机应用往往受到运营商制约,使用什么功能接入什么网络,几乎都受到运营商的控制。

自从Android上市,用户可以更加方便地连接网络,运营商的制约减少。

随着EDGE、HSDPA这些2G至3G移动网络的逐步过渡和提升,手机随意揍人网络已不是运营商口中的笑谈。

3、丰富的硬件选择

这一点还是与Android平台的开放性相关。

由于Android的开放性,众多的厂商会推出丰富多彩、各具特色的多种产品。

功能上的差异和特色却不会影响到数据同步、甚至软件的兼容性。

好比用户从诺基亚的Syrnbian(塞班)风格手机一下改用装载Android(安卓)系统的手机,同时还可将Symbian中优秀的软件带到新手机上使用,联系人等资料更是可以方便地转移。

4、不受任何限制的开发商

Android平台提供给第三方开发商~个十分宽泛、自由的环境,因此不会受到各种条条框框的阻挠,可想而知,这样会有多少新颖别致的软件会诞生。

但这也有其两面性,血腥、暴力、情色方面的程序和游戏如何控制正是留给Android开发人员的难题之一。

5、无缝结合的Google应用

如今Google在互联网领域已经走过十多年历史,从搜索巨人到全面的互联网渗透,Google服务如地图、邮件、搜索等已经成为连接用户和互联网的重要纽带,而Android平台手机将无缝结合这些Google应用。

第二章Android系统架构

Android的系统架构和其操作系统一样,采用了分层的架构。

从架构图看,Android分为四个层,从高层到低层分别是应用程序层、应用程序框架层、系统运行库层和Linux内核层。

图1android架构

2.1应用程序

Android会同一系列核心应用程序包一起发布,该应用程序包包括客户端,SMS短消息程序,日历,地图,浏览器,联系人管理程序等。

所有的应用程序都是使用JAVA语言编写的。

2.2应用程序框架

开发人员也可以完全访问核心应用程序所使用的API框架。

该应用程序的架构设计简化了组件的重用;任何一个应用程序都可以发布它的功能块并且任何其它的应用程序都可以使用其所发布的功能块(不过得遵循框架的安全性)。

同样,该应用程序重用机制也使用户可以方便的替换程序组件。

隐藏在每个应用后面的是一系列的服务和系统,其中包括;

丰富而又可扩展的视图(Views),可以用来构建应用程序,它包括列表(Lists),网格(Grids),文本框(Textboxes),按钮(Buttons),甚至可嵌入的web浏览器。

内容提供器(ContentProviders)使得应用程序可以访问另一个应用程序的数据(如联系人数据库),或者共享它们自己的数据

资源管理器(ResourceManager)提供非代码资源的访问,如本地字符串,图形,和布局文件(Layoutfiles)。

通知管理器(NotificationManager)使得应用程序可以在状态栏中显示自定义的提示信息。

活动管理器(ActivityManager)用来管理应用程序生命周期并提供常用的导航回退功能。

2.3系统运行库

Android包含一些C/C++库,这些库能被Android系统中不同的组件使用。

它们通过Android应用程序框架为开发者提供服务。

以下是一些核心库:

*系统C库-一个从BSD继承来的标准C系统函数库Libc),它是专门为基于Embeddedlinux的设备定制的。

*媒体库-基于PacketVideoOpenCORE;该库支持多种常用的音频、视频格式回放和录制,同时支持静态图像文件。

编码格式包括MPEG4,H.264,MP3,AAC,AMR,JPG,PNG。

*SurfaceManager-对显示子系统的管理,并且为多个应用程序提供了2D和3D图层的无缝融合。

*LibWebCore-一个最新的web浏览器引擎用,支持Android浏览器和一个可嵌入的web视图。

第三章进程和线程的设计

当一个应用的第一个组件需要运行时,android系统就为这个组件启动一个只有一个线程的Linux进程,默认的,应用的所有组件都运行这个进程中的这个线程中。

但是,你可以安排组件运行在其他的进程中,并且为你的任意的进程增加若干线程。

3.1进程设计

  组件运行的进程是在manifest文件里控制的,四大组件都一个process属性可以指定进程来运行,这些属性可以被设置为了每个组件都可以运行在他自己的进程中,或者几个组件共享一个进程,或者不共享,如果两个应用共享一个LinuxuserID并且有相同的权限,那么就可以使这两个应用中的组件运行在相同的进程中,也有process属性,用来指定对所有组件的属性。

  所有的组件都在指定的进程中的主线程中实例化,系统调用这些组件就是从主线程里发出的,其他的线程将不会对每个组件再实例化,所有作为调用的回应的这些方法,比如说View.onKeyDown()还是组件的生命周期函数等等都是运行在这个主线程中的,这就意味着当系统调用这个组件时,这个组件不能长时间的阻塞线程(比如说网络操作,循环计算),因为这样会阻塞这个进程中的其他组件,你可以将很耗时的任务分到其他的线程中。

  当内存不足或者有其他更紧急的进程要求时,Android系统可能关闭一个进程,运行在这个进程中的应用组件因此被销毁,当用户又重新回来时,进程才被重新启动。

  至于究竟要停止哪个进程,android系统是通过衡量哪个进程对用户来说更重要来实现的。

3.2线程设计

  你可以限制你的应用运行在一个进程中,但是有的时候你需要新开一个线程在后台运行,用户界面需要随时对用户的要求做出反应,所以一些很耗时的工作应该重新启动一个线程来做,以免阻塞主进程。

  线程通过java的标准对象Thread创建.Android提供了很多方便的管理线程的方法:

—Looper在线程中运行一个消息循环;Handler传递一个消息;HandlerThread创建一个带有消息循环的线程。

远程调用(Remoteprocedurecalls)

  Android系统有一个轻量级的远程调用机制(RPC)-----一个方法在本地调用,但是在远程执行(在另外一个进程里),返回给调用端的所有结果都必须的系统能理解的,将数据从本地进程和地址空间传递到远程的进程和地址空间,并在远端重新装配,返回值的时候传输方向相反,android系统会去做这些传输的工作,让你能够集中精力来定义你的RPC

  一个RPC接口只能包含方法,默认的,即使是没有值返回,所有的方法都是同步执行的,就是说本地方法一直会阻塞直到远端的方法执行完毕)。

  简单的说,这个远程调用的机制是这样工作的:

  首先你需要用IDL(interfacedefinitionlanguage)声明你的RPC接口,然后android系统会使用aidl工具来形成一个java接口,并且这个java接口是本地进程和远端进程都可以获得的,这个java接口包含了两个内部类。

  这两个内部类有管理远程调用(你用IDL声明的接口)的所以代码,两个内部类都实现IBinder接口,一个是在本地(内部)使用,这个你可以不用自己写代码,另外一个叫做Stub,继承自Binder类的,包含所有完成进程间通信(IPC)的代码,他包含你在RPC接口中声明的所有方法,你应该继续继承Stub类来实现这些方法。

  一般的,远端进程应该由一个service来管理(因为一个service能通知系统关于这个进程和他连接到的其他进程)。

3.3进程的生命周期

Android系统总是尽最大的努力来维持一个应用的进程,但系统的内存不足时就可能需要关闭一些旧的进程了,但是决定关闭哪个进程呢,android系统把所以的进程放进一个重要性树里,最低重要性的进程将会被停止,系统有5种重要性等级,重要性从高到低如下:

  

(1)、前台进程。

一个前台进程是当前执行用户请求的进程,如果有如下的一种情形的那么他就是前台进程:

  a、这个进程里运行着一个正在和用户交互的Activity(这个Activity的onResume()方法被调用)。

  b、这个进程里有绑定到当前正在和用户交互的Activity的一个service

  c、这个进程里有一个service对象,这个service对象执行了至少一个他生命周期的函数(onCreate(),onStart(),oronDestroy()).

  d、这个进程里有一个执行了onReceive()方法的broadcastreceiver对象

  只有一定数量的前台进程在任何时间都存在,他们只有在最后的时刻被停止---系统的内存太少了而不能运行这些仅有的前台进程了),一般的,在那个时刻,手机会重新设置内存页的状态,所以停止一些前台的进程是为了保持对用户操作的快速响应。

  

(2)可见进程。

一个可见进程一个没有任何前台显示的组件,但是仍然可以影响到用户当前屏幕所看见的东西,如果有如下的一种情形那么他就是可见进程。

  a、这个进程里一个Activity,但是这个Activity当前不是在前台显示,但是仍然对用户是可见的(这个Activity的onPause()方法被调用),比如说一个Activity调用一个dialog,那么这个dialog是当前显示的组件,这个Activity不是在前台显示,但是对用户是可见的。

  b、这个进程里有一个绑定到一个可见Activity(如上所述的Activity)的service

  一个可见进程是极端重要的,只有在为了显示所有前台进程时,即显示前台进程都不够时,才会停止可见进程。

  (3)、服务进程。

一个服务进程是一个通过startService()启动的但是没有在前两个分类中的进程,虽然服务进程不是用户直接能看见的,但是他也总是做一些用户很关心的事(如在后台播放mp3,从网络上下载东西),所以系统会一直保持服务进程运行,除非内存不足以运行服务进程,前台进程,可见进程。

  (4)后台进程。

一个后台进程是运行一个当前对用户是不可见的Activity(这个Activity的onStop()被调用),这些进程对用户体验没有什么直接的影响,当内存不足以运行前台进程,可见进程,服务进程时,可以随时停止后台进程,通常有很多的后台进程在运行,系统会把这些后台进程放进一个LRU中(最近使用队列),最近使用的就最后停止。

  (5)空进程。

一个空进程就是进程里没有任何活动的应用组件,维持这种进程的唯一原因就是作为一种缓存,当一个组件需要启动时加快启动的速度,系统为了平衡进程缓存和核心缓存会停止这些空的进程。

  Android系统会取一个进程里的所以组件的最高重要性来安排进程的重要性,比如说,一个进程里有一个service和一个可见的Activity,那么这个进程会被安排成一个可见进程,而不是服务进程。

  另外,一个进程的重要性有可能会因为其他进程的依赖而升高,一个进程不能比他所服务的进程的重要性低,比如有进程A里的service绑定到了进程B的组件上,那么进程A的重要性至少和进程B的一样,或者更高。

  因为一个服务进程的重要性比运行一个后台Activity的进程高,所以,当一个Activity做一些长时间运行的任务时,最好启动一个service来做,而不是放到一个线程里去做,特别是这个任务的时间可能比Activity运行的时间还长的时候,比如在后台播放音乐,或者上传一张图片到网上,使用一个service保证了这个任务至少是服务进程的重要性,broadcastreceiver也是一样,长时间运行的任务也最好是放到一个service里,而不是放到一个线程里。

第四章调度算法

4.1进程调度的基础知识

在一个系统中,经常运行着多个进程,和CPU个数相比,当然是进程数远远大于CPU个数咯,那么就存在为进程分配CPU资源的问题。

一般而言,有两种分配方式,一个是由进程间协调,例如一个比较友好的进程在一定的时刻主动让出CPU,这样其他进程就有机会使用CPU。

但是这种类似道德上的约束往往行不通,因为总会有“恶意“进程存在嘛!

另外一个比较难以克服的问题是友好的标准没法统一,例如什么时候该友好一下?

除了这种不靠谱的道德约束外,大师们又引进了抢占式分配,这种分配方式类似法律约束。

每个进程会分配一定的CPU资源,OS也会定时(处理时钟中断)+定点(比如系统调用返回到userspace前,)检查进程的CPU资源使用情况。

一旦某个进程CP

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

当前位置:首页 > 人文社科

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

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