系统架构图_基于,LAMP,架构的,ACMICPC在线评测系统设计

系统架构图_基于,LAMP,架构的,ACMICPC在线评测系统设计,第1张

摘 要 本课题在牡丹江师范学院已有的在线评测系统上进行全面重构,将 OJ 系统各个组成部分进行解耦,使得 OJ 系统各个模块之间独立性增强,容易修改现有功能及扩充新功能,以应对举办比赛时的访问压力。包括本课题的系统架构设计,对其下各个模块核心内容的阐述,包括基于 Linux 系统的沙箱模型、基于 Java 的多线程服务器、基于AMP 架构和 MVC 设计模式的 Web 前端系统的设计与实现,以及影响系统安全的各种因素和对应的解决方案。
关键词 在线评测系统 ACM/ICPC LAMP 架构
中图分类号:TP31152 文献标识码:A
0 绪论
ACM/ICPC 目的旨在使大学生运用计算机来充分展示自己分析问题和解决问题的能力。在线评测系统(Online Judge System,以下简称 OJ)起到了非常重要的作用。集训队员可以在线评测系统上挑选各种题目挑战自我,提高自我,学习各种数据结构和算法;在统一组织的集中训练中可以通过指定题目的形式来强化训练效果;而在线评测系统对比赛功能的支持,进一步提高了集训队员的学习热情,同时还可以模拟比赛的环境,培养那些计划参与 ACM/ICPC 赛事的队伍的团结合作能力。
但是其中大部分OJ 系统是闭源、封闭的,无法获取其源代码进行修改扩充以满足现有需求,牡丹江师范学院 ACM/ICPC 集训队才于 2010 年推出自己的OJ。但是该系统存在几个问题:一,效率不足,无法承受每年牡丹江师范学院程序设计大赛预选赛的压力;二,由于该系统没有应用沙箱技术运行用户代码,存在安全隐患,可能直接导致服务器被劫持。此后,Google Code 上陆续出现了几个开源 OJ 系统,但是在架构设计上仍不够完善,且无法与原系统的数据格式兼容,因此,有必要重新开发一个经过合理设计的新 OJ 系统,从根本上解决上述的问题,为集训队提供一个稳定可用的学习环境。
1 系统架构设计
为了方便用户的使用,本系统采用 B/S 架构,只要用户使用的是有网络接入的计算机,就可以通过浏览器进行访问。根据该系统的具体情况,在设计上将其分为以下四个组成部分:(1)网站系统(Web 端);(2)评测核心(Judge);(3)评测核心封装层(Judge Wrapper);监听守护进程(Daemon)。
在设计上,该项目将系统的几个主要组成模块充分解耦,一方面,多个模块之间可以并行开发;另一方面,各个模块解耦后使得系统的修改和扩充更加容易,每个模块的可重用性也相应增强。例如,当其他学校需要实现一个功能界面完全不同的 OJ 系统或是作业平台时,可以直接采用本项目的评测核心,避免重复开发。
2 评测核心的设计与实现
作为在线评测系统中最核心的部分,尤其是需要监控用户运行,需要涉及到很多相关技术,特别是与系统底层关系密切的技术。在 Linux 下,系统调用的实现通常是用户程序通过触发80号软中断或者执行 SYSCALL/SYSENTER 等平台相关的 CPU 指令陷入到内核中,内核通过寄存器获 取用户程序的输入,在通过严格的检查后执行相应 *** 作。
在本系统中涉及的主要系统调用包括 fork、setitimer、execve、wait、ptrace、setrlimit、chroot、setuid 等。
(1)fork 系统调用通过复制调用进程的上下文来创建一个新进程。(2)setitimer 系统调用用于设置定时器。(3)execve 系统调用用于载入一个新的可执行程序,替换当前进程的地址空间。(4)wait 系统调用允许父进程阻塞,直到子进程发生一些事件。(5)ptrace 系统调用是一个可以使父进程在用户层拦截和修改系统调用的函数,可以监控和控制其他进程,该函数还能够改变子进程中的寄存器和内核映像,因而可以实现断点调试和系统调用的跟踪。(6)setrlimit 系统调用可以改变进程的资源限制。(7)chroot 系统调用使得调用进程的将某一目录当作其根目录,以此限制该进程及子进程对该目录外文件的访问。(8)setuid 系统调用允许进程改变其有效用户 ID。在本系统中,用户提交的代码可能存在恶意,对其编译后的程序需要运行在服务器上,因此必须对其进行严密的监控,防止恶意代码带来的危害。在本系统支持的四种语言中,C、C++、Pascal 三者经过编译后产生本地代码,可以通过Linux 系统调用(主要是 fork、execve、chroot、setuid 和 ptrace)来创建一个沙箱,限制恶意代码访问文件、控制系统的权限,尤其是通过 ptrace 来限制可使用的系统调用,在很大程度上保证了系统的安全。
运行时检测是最重要、最复杂的运行时监控机制。本系统中通过 ptrace 系统调用来监控用户进程。每当用户进程出发一个系统调用,或者是收到某些信号的时候,用户进程会将控制权暂时移交给监控核心。监控核心将严格监控用户进程的各项参数,以保证其不执行危害系统安全的 *** 作:(1)检查程序是否正常退出。(2)检查程序是否收到了非正常的信号。(3)通过进程的缺页中断次数计算进程使用的内存资源是否超出限制。(4)检查进程系统调用是否合法。
在以上四项检测都不存在问题的情况下,用户进程才能继续执行。
由于题目根据其合法结果数量可以分成普通类型和 Special Judge 类型,因此针对不同的类型,需要分别对其进行判断。(1)普通类型的题目,其合法结果唯一,因此只需要简单判断用户程序与标准答案的一致性即可。(2)Special Judge 类型的题目,在本系统中,约定了 SPJ 程序的名称以及数据的传递方式,包括标准输出、用户输出,以及 SPJ 程序的数据,由评测核心调用 SPJ 程序来完成最后的评判过程。
3 评测核心层的设计与实现
每当用户提交一份新的代码,Wrapper 即会被调用,从数据库中获取代码的详细信息。在此阶段需要关注的信息主要包括:(1)用户提交的代码本身及其关键属性(如语言类型)。(2)此代码的提交用户类型,是普通用户还是管理员。(3)此代码所属的题目是否处于正在进行的比赛。(4)此代码是否已经被评测过。

软件架构作为一个概念,体现在技术和业务两个方面。
从技术角度来说:软件架构随着技术的革新不断地更新其内容,软件架构建立于当前技术和一些基本原则的基础之上。
先说一些基本原则:
分层原则:分层是为了降低软件深度复杂性而使用的关键思想,就像社会有了阶级一样,软件有了层次结构。
模块化原则:模块化是化解软件广度复杂的必然手段,模块化的目的就是让软件分工。
接口实现分离原则随着软件模块化的不断深入改进,面向接口编程而不是面向实现编程可以让复杂度日趋增高的软件降低模块之间的耦合度,从而让各模块更轻松改进。从这个原则出发,软件也从微观进行了细致的规范化。
还有两个比较小但很重要的原则:
细节隐藏原则很显然把复杂问题简化,把难看的细节隐去,能让软件结构更清晰。其实这个原则使用很普遍,java/c++语言中的封装原则以及设计模式中的Facade(外观)模式就很能体现这个原则的精神。
依赖倒置原则随着软件结构的进一步发展,层与层之间、模块与模块之间的依赖逐渐加深,而层、模块的动态可插拔要求不端增大。依赖倒置原则可看视为接口实现分离原则的深化,根据此原则的精神,软件进入了工具时代。这个原则有点类似于知名的好莱坞法则:Don't call us, we'll call you。
以上这些原则奠定了我们的软件架构的价值指标。但软件架构毕竟是建立在当前技术之上的。而每一代技术都有架构模式。过去的不再说了,让我们就来看一下当前流行的技术,以及当前我们能采用的架构。
因为面向对象是当前最流行开发技术,且设计模式的大量使用使面向对象的走向成熟,而数据库是当前最有效的存储结构、web界面是当前最流行的用户接口,所以当前最典型的三层次架构就架构在以上几项技术的基础之上,用数据库作存储层、用面向对象来实现业务层、用web来作为用户接口层。我们从三层次架构谈起:
因为面向对象技术和数据库技术不适配,所以在标准三层次架构的基础上,我们增加了数据持久层,来管理O-R双向映射,但目前一直没有最理想的实现技术。cmp和entity bean技术因为其实现复杂,功能前景有限,已接近被淘汰的边缘。JDO及hibernate作为o-r映射的后期之秀,尤其是hibernate,功能相当完备。推荐作为持久层的首选
在业务层,因为当前业务日趋负载,且变动频繁,所以我们必须有足够敏捷的技术来保证我们的适应变化的能力,在标准j2ee系统中session bean负责业务处理,且有不错的性能表现,但采用ejb系统对业务架构模式改变太大,且其复杂而昂贵,业务代码移植性差。而spring 作为一个bean配置的轻量级架构,漂亮的IOC模式实现,对业务架构影响小,所以推荐作为中间层业务框架。
在用户结构层,虽然servlet/jsp/jstl/javaBean 能够实现MVC架构,但终究过于粗糙。struts对MVC架构的实现就比较完美,Taperstry也极好地实现MVC架构,且采用基于事件的方式,非常诱人,惜其不够成熟,我们仍旧推荐struts作为用户接口层基础架构。
因为业务层是三层次架构中最有决定意义的,所以让我们回到业务层细致地分析一下,在复杂的业务我们常常需要以下基础服务的一种或几种:事务一致 性服务acid(tool:jta/jts)、并发加锁服务concurrent&&lock、池化管理服务cache、访问控制服务(tool:jaas)、流程控制服务workflow、动态实现服务IOC,串行化消息服务(tool:jms)、负载平衡服务blance等。如果我们不采用重量级应用服务器(如weblogic,websphere,jboss等)及重量级组件(EJB),我们必须自己实现其中一些服务。虽然我们大 多情况下,不需要所有这些服务,但实现起来却非易事。幸运的是我们有大量的开源实现代码,但采用开源代码却常常是件不轻松的事。
随着xml作为结构化信息传输和存储地位日渐重要,一些xml文档 *** 作工具(DOM,Digester,SAX等)的使用愈发重要,而随着 xml schema的java binding工具(jaxb,xmlbean等)工具的成熟,采用xml schema来设计xml文档格式,然后采用java binding来生成java bean 会成为主要编程模式,而这又进一步使数据中心向xml转移,使在中小数据量上,愈发倾向于以xquery为查询语言的xml数据库。现还有一个趋势, microsoft,ibm等纷纷大量开发中间软件如(microsoft office之infopath),可以直接从xml schema 生成录入页面等非常实用的功能。还有web service 的广泛应用,都将对软件的架构有非常重大的影响。至于面向服务架构(SOA)前景如何,三层次架构什么时候走入历史,现还很难定论。
aop的发展也会对软件架构有很深的影响,但在面向对象架构里,无论aspectJ还是jboss-aop抑是aspectWerks、 nanning都有其自身的严重问题:维护性很差,所以说它将很难走远。也许作为一个很好的思想,它将在web service里大展身手。
rdf,owl作为w3c语义模型的标志性的语言,也很难想象能在当前业务架构发挥太大影响。但如果真如它所声称那样,广泛地改变着信息的结构。那么对软件架构也会有深远影响。

host-base:基于主机
lan-base:基于局域网
lan-free:基于SAN
server-free:基于SAN
LAN-FREE
环境:RS6000+FASTT700+3583带库,所谓LAN-free,是指数据不经过局域网直接进行备份,即用户只需将磁带机或磁带库等备份设备连接到SAN中,各服务器就可把需要备份的数据直接发送 到共享的备份设备上,不必再经过局域网链路。由于服务器到共享存储设备的大量数据传输是通过SAN网络进行的,局域网只承担各服务器之间的通信(而不是数 据传输)任务。
LAN_FREE是专门用于SAN环境下的备份,可以使备份的数据直接通过SAN的链路从备份客户端(AIX主机)到备份设备(磁带机,支持光纤),有别 于传统通过LAN链路的备份方式,这样可以不占用以太网络的带宽,一般要求硬件设备支持光纤存储(磁带机,阵列),需要通过SAN交换机(2109等)设 备将这些设备连接起来,软件要求TSM,和TSM对LAN_FREE支持的AGENT数据库可用TDP。
下图展示了Lan Free备份的方案架构图:
在这里插入描述
SERVER-FREE
SAN Server-Free备份 LAN Free备份对需要占用备份主机的CPU资源,如果备份过程能够在SAN内部完成,而大量数据流无需流过服务器,则可以极大降低备份 *** 作对生产系统的影响。SAN Server-Free备份就是这样的技术。
在这里插入描述
一、备份的概念
备份顾名思义,就是将数据以某种形式保存下来,备份的根本目的在于恢复,在这些数据丢失、毁坏和受到威胁的时候,使用数据的备份来恢复数据。虽然备份的定 义可能很简单,不过具体实施存储系统的备份却可能是一份艰巨的任务,其中包含了许多可以预见的以及不易预见的需要考虑的因素。
二、备份与拷贝、归档的区别
备份不能仅仅通过拷贝完成,因为拷贝不能留下系统的注册表等信息;而且也不能留下历史记录保存下来,以做追踪;当数据量很大时,手工的拷贝工作又是何其麻 烦。备份=拷贝+管理。管理包括备份的可计划性、磁带机的自动化 *** 作、历史记录的保存以及日志记录等等。正如生命周期理论将在线数据分级为在线和近线数据 一样,离线数据亦可分为备份与存档数据,以降低投资和运维成本。
存档的目的是将需要长期备查或转移到异地保存/恢复的数据存放到可移动存储介质上。严格意义上讲,存档的目的不是为了保障数据安全,而只是为了实现数据仓 储。如果说备份相当于桌头的字典,工作时会经常翻用,存档则好像日常工作中生成的一些具长期保存价值的文字资料,被转移到书架上或档案馆里备查。
三、常规备份的实现方式
通常一套完整的备份系统包含备份软件、磁带机/磁带库、和备份服务器,具体的备份策略的制定、备份介质的管理以及一些扩展功能的实现,都是由备份软件来最 终完成的。在备份服务器上安装备份软件的服务器端,在应用服务器端安装备份软件的客户端代理,如果是数据库应用还需要相应的数据库接口程序,客户端代理软 件和服务器端软件协调工作,按照预先制定的备份策略自动或手动的将数据备份到磁带上。然而一个具有一定规模的数据中心的数据备份要涉及到多种UNIX平台 和不同的数据库类型,可以想象每天的备份工作对于管理员来说都是一个挑战。
备份策略制定是备份工作的重要部分。一般来说需要备份的数据存在一个2/8原则,即20%的数据被更新的概率是80%。这个原则告诉我们,每次备份都完整的复制所有数据是一种非常不合理的做法。事实上,真实环境中的备份工作往往是基于一次完全备份之后的增量或差量备份。
完全备份很好理解,即把所有数据进行一次完整的备份,当进行恢复的时候只需要一盘磁带;
增量备份是只有那些在上次完全备份或者增量备份后被修改了的文件才会被备份,如下图,优点是备份数据量小,需要的时间短,缺点是恢复的时候需要多盘磁带,出问题的风险较大,
差量备份是备份那些自从上次完全备份之后被修改过的文件,如下图,因此从差量备份中恢复速度是很快的,因为只需要两份磁带(最后一次完全备份和最后一次差量备份),缺点是每次备份需要的时间较长。
备份窗口是在进行备份 *** 作时,应用系统可以接受的最长备份时间,对于某些5X8类型的非关键应用备份窗口可以很大,但是对于7X24小时的应用备份窗口就会很小。
四、LAN Free和Serverless备份
所谓LAN Free Backup顾名思义,就是指释放网络资源的数据备份方式。
在SAN架构中,备份服务器向应用服务器发送指令和信息,指挥应用服务器将数据直接从磁盘阵列中备份到磁带库中。在这个过程中,庞大的备份数据流没有流经 网络,为网络节约了宝贵的带宽资源。在NAS架构中,情形十分类似,磁带库直接连接在NAS文件服务器上,备份服务器通过NDMP协议,指挥NAS文件服 务器将数据备份到磁带库中。细心观察之下会发现,这两种方式虽然都节约了网络资源,但却增加了服务器的工作负荷,缺点是价格非常昂贵,大多数备份软件的 LAN Free功能选项都需要用户付出高昂的价格。
Serverless Backup技术是以全面的释放网络和服务器资源为目的的,技术核心就是在SAN的交换层实现数据的复制工作,这样备份数据不仅无需经过网络,而且也不必 经过应用服务器的总线,完全的保证了网络和应用服务器的高效运行。但是现实情况却没有这么理想,Serverless Backup技术目前只能停留在纸面上,实际实施效果很差,完全不需要主机干预还不现实。
存储基础知识(八):备份技术(下)
一、主流备份软件
备份软件厂商中头把交椅当属Veritas公司。这家公司经过近几年的发展和并购,在备份软件市场已经占据了四成左右的份额。其备份产品主要是两个系列 ——高端的NetBackup和低端的Backup Exec。其中NetBackup适用于中型和大型的存储系统,可以广泛的支持各种开放平台。NetBackup还支持复杂的网络备份方式和LAN Free的数据备份,其技术先进性是业界共同认可的。
Backup Exec是原Seagate Soft公司的产品,在Windows平台具有相当的普及率和认可度,微软公 司不仅在公司内部全面采用这款产品进行数据保护,还将其简化版打包在Windows *** 作系统中,我们现在在Windows系统中使用的“备份”功能,就是 OEM自Backup Exec的简化版。2000年初,Veritas收购了Seagate Soft之后,在原来的基础上对这个产品进一步丰富和加强,现在,这款产品在低端市场的占用率已经稳稳的占据第一的位置。
Legato公司是备份领域内仅次于Veritas公司的主要厂商。作为专业的备份软件厂商,Legato公司拥有着比Veritas公司更久的历史,这 使其具有了相当的竞争优势,一些大型应用的产品中涉及到备份的部分都会率先考虑与Legato的接口问题。而且,像Oracle等一些数据库应用干脆内置 集成了Legato公司的备份引擎。这些因素使得Legato公司成为了高端备份软件领域中的一面旗帜。在高端市场这一领域,Legato公司与 Veritas公司一样具有极强的技术和市场实力,两家公司在高端市场的争夺一直难分伯仲。
Legato公司的备份软件产品以NetWorker系列为主线,与NetBackup一样,NetWorker也是适用于大型的复杂网络环境,具有各种 先进的备份技术机制,广泛的支持各种开放系统平台。值得一提的是, NetWorker中的Cellestra技术第一个在产品上实现了Serverless Backup的思想。仅就备份技术的先进性而言,Legato公司是有实力可以挑战任何强大对手的。
除了Veritas和Legato这备份领域的两大巨头之外,IBM Tivoli也是重要角色之一。其Tivoli Storage Manager产品是高端备份产品中的有力竞争者。与Veritas的NetBackup和Legato的NetWorker相比,Tivoli Storage Manager更多的适用于IBM主机为主的系统平台,但其强大的网络备份功能觉对可以胜任任何大规模的海量存储系统的备份需要。
CA公司是软件领域的一个巨无霸企业,虽然主要精力没有放在存储技术方面,但其原来的备份软件ARCServe仍然在低端市场具有相当广泛的影响力。近年 来,随着存储市场的发展,CA公司重新调整策略,并购了一些备份软件厂商,整合之后今年推出了新一代备份产品——BrightStor,这款产品的定位直 指中高端市场,看来CA公司誓要在高端市场与Veritas和Legato一决雌雄。
二、带机、带库厂商及产品
备份设备的生产厂家很多,每个厂家都有着较长的产品线,由于篇幅所限,我们不可能一一列举。这里主要介绍那些国际知名的、国内有影响力的带机和带库原厂商 及其主打产品。目前,带机正在朝快的数据传输速度和高的单盘磁带存储容量方向发展,具有主流驱动技术的带机厂商包括Quantum、Exabyte和 Sony等。
Quantum带机在中档产品中占据了市场大部分份额,但其中很大一部分走了OEM的销售渠道。其自动加载机SuperLoader可将多个备份目标集中 到一个共享的自动系统中,降低处理成本,而基于磁盘(备份介质是磁盘)又具有磁带海量特性的近线备份设备DX30可显著缩短备份与恢复时间。
Exabyte的磁带驱动技术包括8mm Mammoth和VXA技术,VXA是定位低端的新的磁带技术,它以包的格式读写数据,并可对磁带上的数据记录区进行无空隙扫描,具有高质量、高可靠性、低成本等性能特点。其中VXA-1带机专为苹果机设计的存储方案;VXA-2同样具有较高的性价比,并具有12MB/s传输速率及160GB容量,与VXA-1向下兼容。
这里我们有必要讲一讲Sony的基于AIT技术的带机产品:AIT-1、AIT-2和AIT-3,其中AIT-3是高性能和大容量的新存储方案,容量(未 压缩)为100GB,速率为12MB/s,而且能够与AIT-1、AIT-2完全读和写逆向兼容,并具有分层磁头、创新性的磁带内存储器(MIC) 驱动器接口系统等多项专利技术,提高磁轨密度和存储速度。
磁带库厂商相对品牌较多,用户的选择空间也更大一些。目前主流的磁带库厂商主要有STK,Quantum,Exabyte和IBM等。
在带库厂商中,市场份额最大的当属美国存储技术公司(StorageTek,STK)。STK目前最主要的产品线是L系列,包括L20、L40、L80、 L180、L700、L5500,从最小20磁带槽位到最大5500磁带槽位。在其入门级产品上,支持LTO、DLT和SuperDLT等开放技术,只有 在高端产品上才同时支持其自身拥有的9840、9940驱动技术。
Quantum拥有DLT、SuperDLT技术,其用户基础和发展前景都很好。其P系列的主打产品P4000和P7000分别可以支持几百槽位和十几个 驱动器,适合于企业级用户;M系列是模块化的产品,可根据用户系统需求的增长灵活扩展带库的容量和性能,M1500可从20槽位扩展到200槽 位,M2500则可从100槽位扩展到300槽位,非常适合于那些快速发展的中小企业。美中不足的是,ATL对超大容量的解决方案不是非常理想,在这一部 分市场上的竞争力较弱。
8mm是安百特(Exabyte)公司的独立技术,具有速度快、容量大、可靠性高、价廉、体积小等特点,主要用于带库,其8mm带库的智能机械臂系统可任 意存取磁带,采用模块化设计,产品线全,从VXA自动化/驱动器产品系列AutoPak230/115/110、VXA-1/1到Mammoth Tape自动化/驱动器产品系列X200/80/430M/215M/EZ17、M2/Mammoth/Eliant 820,容量从单盘(非压缩)33GB到整库12TB,涵盖由低到高的用户市场,可实现无人值守自动数据存储管理,适用于服务器备份、网络备份、自动归 档、分级存储管理及图形图像等领域。
IBM,众所周知,生产和销售所有IT类产品,当然也包括带库产品。IBM的带库和带机产品大体可分2个系列:用于IBM环境的和用于开放环境的。如 IBM的3494、3575等带库只支持其专用的驱动器,开放性差,虽然这些带库产品也支持HP、SUN等主流服务器平台,但实际上几乎只用在IBM环境 中。随着SAN技术的普及,追求开放性和互联性成为存储行业的潮流。结合LTO驱动技术的投产,IBM为其开放存储系统解决方案推出了新的带库系列—— 3583和3584。
三、备份技术新趋势
D2D2T是Disk to Disk toTape的缩写,即数据备份从磁盘阵列到磁盘库到磁带的过程。传统的磁带备份总是会带给用户以下苦恼:
1、备份速度慢,备份窗口冗长
2、备份的根本目的在于恢复,而磁带的恢复速度很慢,对于TB级的数据恢复等待时间过长
3、磁带介质受灰尘、温度、湿度影响很大,难以保证已经离线保存的磁带在需要的时候可以正常工作
4、磁带库的机械手等物理设备的故障率和磨损率相对电子元件较高
相信长期从事磁带备份工作的管理员(尤其是大数据量关键应用的磁带备份)对以上几点都会深有感触,尤其是当在线数据受到破坏,需要依靠磁带备份来恢复正常生产的时候,大家都会为能否顺利恢复数据捏一把汗。
有什么办法可以解决磁带备份固有的劣势呢?随着磁盘容量的增长价格的下降,使用磁盘备份作为磁带备份的补充甚至替代都成为可能,当然磁带体积小,便于归档 等特点是磁盘设备不具备的,因此D2D2T即磁盘到磁盘到磁带备份方式有效地中和了磁盘备份和磁带备份的优点,在线数据保存在高速磁盘阵列,备份数据首先 保存在性价比较高的SATA磁盘阵列中,然后定期将磁盘备份的数据保存到磁带上,这样既缩短了备份窗口又增强了数据恢复的可靠性。

android应用开发框架是ApplicationFramework其系统架构由5部分组成,分别是:LinuxKernel、AndroidRuntime、Libraries、ApplicationFramework、Applications。第二部分将详细介绍这5个部分。下面自底向上分析各层。Android架构1、LinuxKernelAndroid基于Linux26提供核心系统服务,例如:安全、内存管理、进程管理、网络堆栈、驱动模型。LinuxKernel也作为硬件和软件之间的抽象层,它隐藏具体硬件细节而为上层提供统一的服务。如果你学过计算机网络知道OSI/RM,就会知道分层的好处就是使用下层提供的服务而为上层提供统一的服务,屏蔽本层及以下层的差异,当本层及以下层发生了变化不会影响到上层。也就是说各层各尽其职,各层提供固定的SAP(ServiceAccessPoint),专业点可以说是高内聚、低耦合。如果你只是做应用开发,就不需要深入了解LinuxKernel层。2、AndroidRuntimeAndroid包含一个核心库的集合,提供大部分在Java编程语言核心类库中可用的功能。每一个Android应用程序是Dalvik虚拟机中的实例,运行在他们自己的进程中。Dalvik虚拟机设计成,在一个设备可以高效地运行多个虚拟机。Dalvik虚拟机可执行文件格式是dex,dex格式是专为Dalvik设计的一种压缩格式,适合内存和处理器速度有限的系统。大多数虚拟机包括JVM都是基于栈的,而Dalvik虚拟机则是基于寄存器的。两种架构各有优劣,一般而言,基于栈的机器需要指令,而基于寄存器的机器指令更大。dx是一套工具,可以将Javaclass转换成dex格式。一个dex文件通常会有多个class。由于dex有时必须进行最佳化,会使文件大小增加1-4倍,以ODEX结尾。Dalvik虚拟机依赖于Linux内核提供基本功能,如线程和底层内存管理。3、LibrariesAndroid包含一个C/C++库的集合,供Android系统的各个组件使用。这些功能通过Android的应用程序框架(applicationframework)暴露给开发者。下面列出一些核心库:系统C库--标准C系统库(libc)的BSD衍生,调整为基于嵌入式Linux设备媒体库--基于PacketVideo的OpenCORE。这些库支持播放和录制许多流行的音频和视频格式,以及静态图像文件,包括MPEG4、H264、MP3、AAC、AMR、JPG、PNG界面管理--管理访问显示子系统和无缝组合多个应用程序的二维和三维图形层LibWebCore--新式的Web浏览器引擎,驱动Android浏览器和内嵌的web视图SGL--基本的2D图形引擎3D库--基于OpenGLES10APIs的实现。库使用硬件3D加速或包含高度优化的3D软件光栅FreeType--位图和矢量字体渲染SQLite--所有应用程序都可以使用的强大而轻量级的关系数据库引擎4、ApplicationFramework通过提供开放的开发平台,Android使开发者能够编制极其丰富和新颖的应用程序。开发者可以自由地利用设备硬件优势、访问位置信息、运行后台服务、设置闹钟、向状态栏添加通知等等,很多很多。开发者可以完全使用核心应用程序所使用的框架APIs。应用程序的体系结构旨在简化组件的重用,任何应用程序都能发布他的功能且任何其他应用程序可以使用这些功能(需要服从框架执行的安全限制)。这一机制允许用户替换组件。所有的应用程序其实是一组服务和系统,包括:视图(View)--丰富的、可扩展的视图集合,可用于构建一个应用程序。包括包括列表、网格、文本框、按钮,甚至是内嵌的网页浏览器内容提供者(ContentProviders)--使应用程序能访问其他应用程序(如通讯录)的数据,或共享自己的数据资源管理器(ResourceManager)--提供访问非代码资源,如本地化字符串、图形和布局文件通知管理器(NotificationManager)--使所有的应用程序能够在状态栏显示自定义警告活动管理器(ActivityManager)--管理应用程序生命周期,提供通用的导航回退功能5、ApplicationsAndroid装配一个核心应用程序集合,包括电子邮件客户端、SMS程序、日历、地图、浏览器、联系人和其他设置。所有应用程序都是用Java编程语言写的。更加丰富的应用程序有待我们去开发!从上面我们知道Android的架构是分层的,非常清晰,分工很明确。Android本身是一套软件堆迭(SoftwareStack),或称为「软件迭层架构」,迭层主要分成三层: *** 作系统、中间件、应用程序。从上面我们也看到了开源的力量,一个个熟悉的开源软件在这里贡献了自己的一份力量。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/13153026.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-06-12
下一篇 2023-06-12

发表评论

登录后才能评论

评论列表(0条)

保存