自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(76)
  • 收藏
  • 关注

原创 Hadoop2.8.5 容器的周转与分配

上一篇关于作业的受理中,RM端通过RMAppImpl类表示作业,通过调度策略将作业存储后尝试运行该作业,这个时候调度器将为作业分配容器。容器代表着整个系统的资源在RM端的分配形式。 allocate (),其实只是从这个列表中收揽已经分配的容器(RMContainer 对象),并为这些容器办理使用证件( NMToken 对象),然后一并打包成一个Alloc ation 对象。每当从 newlyAl...

2019-01-02 16:33:36 512

原创 Hadoop2.8.5 作业的受理

上一篇作业的提交最终流转到RMAppManager手中,RM节点上的ClientRMService对象相当于接待站,而RMApp Manager对象则专门管理与作业的申请和运行相关。两个对象均由 ResourceManager 创建,都在同一个 JVM 上。ClientRMService 是 通 过 调 用 rmAppManager. submitApplication ()把 作 业 申 请 交...

2019-01-01 10:25:43 448

原创 Hadoop2.8.5 作业的提交

Hadoop的RPC是以CS两端协议栈和协议引擎构成的,在查看作业的提交流程过程中我们总是从两端去看的,也即作业提交的Client端和作业接收的Service端。以此将作业的提交分为两个阶段。第一阶段是Client端,主要是作业的准备以及作业如何通过RPC协议与Service通讯。第二阶段是Service端如何接收和处理RPC协议请求。 Hadoop 在其历史上曾经提供了新、老两种 API ,此外...

2018-12-31 14:42:33 436

原创 Hadoop2.8.5 RPC 机制 二

由上一篇我们知道 Hadoop 是利用 ProtoBuf 和 Proxy 搭建起自己的 RPC 机制的。Hadoop 的 RPC 机制在 Client 一侧就是通过 Proxy 实现的。Proxy ,即“代理”,是 JDK 提供的一个类,可以说是专为RMI 定制的。Proxy 对象的创建一定是与 InvocationHandler 联系在一起的。InvocationHandler 是JDK 中定义...

2018-12-27 14:18:58 397 2

原创 Hadoop2.8.5 RPC机制 一

RPC 是“ RemoteProcedureCall ”即“远地过程调用”的缩写。这个机制的目的,是让一台机器上的程序能像调用本地的“过程”那样来调用别的机器上的某些过程。需要特别说明的是,RPC 并非针对远地的所有过程,并不是对远地所有的过程都可以随心所欲地通过 RPC 加以调用,而只能针对预先确定的某些过程,并且在程序上得有些准备和安排。RPC 交互的两方,总有一方是通信的主动发起方,也是某种...

2018-12-26 16:48:57 409 1

原创 Hadoop2.8.5 资源管理器(RM)

YARN调度使用状态机(StateMachine)来驱动,我们以RM(ResourceManager)为例来看状态机如何驱动其运行。作为YARN的框架核心管理者整个集群的计算资源,对 于 宿 主 机 而 言,执 行 着ResourceManager 的 Java 虚拟机是个独立的进程。用户每向这个 Hadoop 平台提交一个应用程序作业,即 App ,资源管理器就会设法在某个NM 节点上为其另起...

2018-12-18 16:07:18 1214

原创 Hadoop2.8.5 YARN状态机

YARN主节点RM受理用户提交的作业之后,创建AM并分配资源,然后密切注视着作业的进展。YARN的代码广泛使用着状态机(StateMachine),来调度处理走走停停粗粒度的作业流程。在此“有限状态机”模型中,一个宏观的过程被抽象成一台机器,其结构包括一组“状态”,一组触发规则和一组操作。从程序设计的角度看,定义一组状态和事件可以使用枚举(enum)类型,跳转规则使用一个表,或者一个结构数组,表的...

2018-12-17 16:01:49 623

原创 Hadoop2.8.5 集群拓扑

Hadoop运行在多机集群上时,每台机器都成为集群的一个节点(Node),节点之间连成一个局域网,一般是二层交换机(Switch),也可能是三层交换机。集群内的节点之间可以通过 IP 地址通信,也可以通过节点的域名即 URL 通信,这就需要有 DNS ,这意味着,在网络可以通达的某处存在着 DNS 服务,因而可以根据对方的URL 查到其 IP 地址。这也意味着,集群内这些节点都应有个域名,并且登记...

2018-12-17 11:28:26 2247

原创 Hadoop2.9.2 源码编译

Hadoop是一个由Apache基金会所开发的分布式系统基础架构。Apache Hadoop软件库是一个框架,允许使用简单的编程模型跨计算机集群分布式处理大型数据集。它旨在从单个服务器扩展到数千台计算机,每台计算机都提供本地计算和存储。库本身不是依靠硬件来提供高可用性,而是设计用于检测和处理应用层的故障,从而在计算机集群之上提供高可用性服务,每个计算机都可能容易出现故障。该项目包括以下模块:...

2018-11-29 14:53:36 1308 3

原创 Android8.0 USB系统框架

USB(通用串行总线)主机模式向外设进行供电,使 Android 设备能够驱动 USB 总线,并且可以使用各种 USB 外设(包括音频接口,存储,MIDI),USB 和蓝牙低功耗连接都可以用于传输 MIDI 协议。USB配件模式,受外设供电驱动,包括数据传输,充电。USB开发模式,应用调试,唯一可见的外设功能是 Android fastboot 或 Android 调试桥 (adb)。fastbo...

2018-11-28 16:20:48 5820 2

原创 Android8.0 Rild守护进程

电话是一种开放的通信渠道,任何人都可以随时向任何电话号码致电或者发送短信,因此 Android 用户需要能够轻松屏蔽骚扰电话和短信。在 Android N 推出之前,Android 用户只能依靠下载的应用来限制来自骚扰电话号码的来电和短信。但是,由于没有适当的 API 来屏蔽来电和短信,这些应用大部分要么达不到预期效果,要么用户体验不佳。一些制造商可能会提供他们自己的开箱即用型屏蔽解决方案,但...

2018-11-13 14:05:47 2024 2

原创 Android8.0 存储系统

Android 一直在不断发展,可支持各种存储设备类型和功能。所有 Android 版本均支持配有传统存储(包括便携式存储和内置存储)的设备。便携式存储是指物理介质(如 SD 卡或 USB 设备),用于进行临时数据传输/文件存储。物理介质可以随设备一起保留更长时间,但并非固定在设备上,可以移除。自 Android 1.0 开始,SD 卡已可用作便携式存储;Android 6.0 增加对 USB 的...

2018-11-09 10:45:51 2272 1

原创 Android8.0 输入系统

Android 输入子系统名义上是由遍历系统多个层的事件管道组成,在最低层,物理输入设备会生成描述状态更改(例如按键按压和触摸接触点)的信号。设备固件以某种方式编码和传输这些信号,例如向系统发送 USB HID 报告或在 I2C 总线上产生中断。然后,信号由 Linux 内核中的设备驱动程序解码。Linux 内核为许多标准的外围设备提供驱动程序,特别是那些符合 HID 协议的外围设备。然而,原始...

2018-11-05 15:05:41 740

原创 Android8.0 蓝牙系统

Android 提供支持经典蓝牙和蓝牙低功耗的默认蓝牙堆栈。借助蓝牙,Android 设备可以创建个人区域网络,以便通过附近的蓝牙设备发送和接收数据,在 Android 4.3 及更高版本中,Android 蓝牙堆栈可提供实现蓝牙低功耗 (BLE) 的功能。要充分利用 BLE API,请遵循 Android 蓝牙 HCI 要求。具有合格芯片组的 Android 设备可以实现经典蓝牙或同时实现经典蓝...

2018-10-30 15:04:37 6868

原创 Android8.0 传感器系统框架

Android传感器属于虚拟设备,可提供来自以下各种物理传感器的数据:加速度计、陀螺仪、磁力计、气压计、湿度传感器、压力传感器、光传感器、近程传感器和心率传感器。下图显示的是 Android 传感器堆栈。尽管某些传感器可以绕过传感器中枢(如果存在)进行通信,但各个组件仅可与其上方和下方紧邻的组件通信。控制系统从应用向下流向传感器,数据从传感器向上流向应用。框架负责将多个应用关联到 HAL。HA...

2018-10-20 20:39:24 6459 3

原创 Android8.0 图形引擎与窗体管理服务

以上四篇从图形引擎的硬件抽象层,数据驱动,渲染,输出等方面来看Android的图形引擎,从引擎的输入这一角度来看,引擎数据输入端主要有UI, Camera, Media 等,今天我们从UI的角度来看,以Activity的setContentView为切入点,贯穿PhoneWindow, ViewRootImpl, WindowManager, WindowManagerService,直到引擎入口...

2018-10-13 11:19:02 1497

原创 Android8.0 图形引擎的核心 - BufferQueue

上三篇文章我们弄清了图形引擎的输出和动力泵,今天我们来看图形引擎的心脏。为了呈上启下,我们从Surface的创建开始看BufferQueue如何向SurfaceFlinger提供数据驱动这颗心脏跳动。1. Surface与Layer的创建窗体管理服务(WMS)通过SurfaceComposerClient创建Client与SurfaceFlinger交互,WMS负责窗体界面的优先级排序,剪切,...

2018-10-12 10:54:18 3965

原创 Android8.0 图形引擎的心跳 - Vsync信号

vsync是Android4.1黄油计划引入的三大核心元素之一,主要为解决用户交互体验差的问题。Android通过VSync机制来提高显示效果,通常这个信号是由显示驱动产生,这样才能达到最佳效果。但是Android为了能运行在不支持VSync机制的设备上,也提供了软件模拟产生VSync信号的手段。软vsync信号主要由闸刀控制线程EventControlThread,事件线程EventThread...

2018-09-23 11:12:06 2636

原创 Android8.0 HwComposer 硬件抽象层

图形引擎SurfaceFlinger作为图形系统的心脏,自然需要心跳动力,主要来自图形Composer。Composer有两种一种来自硬件驱动,一种来自软件模拟。今天我们来看Hardware部分。主要分析vsynct同步信号是如何产生传递的,为此我们将略过Fence机制(跨硬件同步),层级合成(硬件合成)相关的内容。1. DisplayHardware层frameworks\native\...

2018-09-12 16:47:38 10607

原创 Android8.0 帧缓冲硬件抽象层

之前用了一个月的时间去看Android对媒体系统,主要包括Audio,Media,Camera三个子系统;今天我们开始Android图形系统,图形系统在Android操作系统中的地位举足轻重,是用户最直接的交互界面,同时也是Android中最复杂的系统,近年来AR,VR,的发展使得图形系统变得越发复杂。我们将从图形系统的核心引擎SurfaceFlinger入手,一路往上到Framework层,从多...

2018-09-08 19:23:00 1661 2

原创 Android8.0 Camera系统架构(二)

上一篇我们从最新的Camera架构来分析Camera子系统,今天我们将从全局的视角从旧版本到新版本架构整体通览一遍,从Framework层的API(1和2)到硬件抽象层的HAL(1和3)。废话少说一起来看一下整体架构:...

2018-08-29 16:06:32 3198 2

原创 Android8.0 Camera系统架构(一)

随着Android系统的不断升级,相机子系统框架也在不断进化,由最初的API1和HAL1到现在的API2和HAL3,由最初简单的拍照,录制到现在的连拍,AI人像;可以说是架构上变动最大最频繁的子系统。整个架构可以从下面这张图看出来:Android 的相机硬件抽象层 (HAL) 可将 Camera 2 中较高级别的相机框架 API 连接到底层的相机驱动程序和硬件。相机子系统包括相机管道组件的...

2018-08-27 22:50:05 16811

原创 Android8.0 Media系统(二)

上一篇从MediaPlayer的创建,设置数据源,播放准备三个流程来看Media系统,今天我们继续来看initFromDataSource()函数,将创建数据提取器,数据提取器将读取数据源文件的元数据信息,将每一路数据流的比特率进行累加,分离数据流,音频/视频/字幕分离:设置视频源mVideoTrack ;设置音频源mAudioTrack;分离字幕等。废话少说直接上代码。1. 数据提取st...

2018-08-21 11:46:22 2071

原创 Android8.0 Media系统(一)

以上四篇对Audio系统的简要分析,由于Audio涉及的范围比较广,以后分析其他子系统时在做详细分析。我们继续Media系统的征程,Media系统任然是一个庞大的系统,以MediaPlayer为例,贯穿了Java,JNI,C++库,硬件抽象层,OpenMax驱动,涉及到音视频,编解码等内容。...

2018-08-20 21:18:48 4435

原创 Android8.0 Audio系统之硬件抽象层

经过以上三篇对AudioTrack,AudioFlinger, AudioPolicy的分析,发现音频数据经过AudioTrack,通过AudioPolicy路由,由AudioFlinger的各路线程混合输出到合适的Audio设备去。我们再分析AudioFlinger构造函数的时候涉及到音频硬件抽象层但是没有深入研究,现在,我们回过头来继续看看。1. Audio系统设备抽象AudioFli...

2018-08-14 15:52:48 4554

原创 Android8.0 Audio系统之AudioPolicy

上一篇我们跟踪分析了AudioFlinger,它是Audio系统的核心,但是AudioFlinger却不能脱离AudioPolicy工作。AudioPolicy模块承载着音频切换,音轨路由的重要工作,没有它,音频输出将乱套。在分析AudioFlinger的时候我们稍微涉及了AudioPolicyService,现在我们重新来看它。void AudioPolicyService::onFirst...

2018-08-14 11:43:43 9056

原创 Android8.0 Audio系统之AudioFlinger

继上一篇AudioTrack的分析,本篇我们来看AudioFlinger,AF主要承担音频混合输出,是Audio系统的核心,从AudioTrack来的数据最终都会在这里处理,并被写入到Audio的HAL。frameworks\av\services\audioflinger\AudioFlinger.cppAudioFlinger::AudioFlinger() : BnAudio...

2018-08-13 16:52:40 10971

原创 Android8.0 Audio系统之AudioTrack

继上一篇Android硬件抽象层和HAL层Binder框架,我们这次选择Audio系统来研究,之所以选择Audio系统,并非Audio系统简单,恰恰是因为Audio系统复杂。Audio系统与Media系统,Surface系统,通话系统,蓝牙系统…都有交互,可见Audio系统的复杂度。我们将从四个层面去剖析Audio系统:1. AudioTrack , 2. AudioFlinger , 3. Au...

2018-08-13 11:46:46 6166

原创 Android8.0 硬件抽象层实现分析

众所周知Android是基于Linux内核的开放性系统,我们可以看到Google开放的大部分操作系统实现代码。之所以说它是开放的而不是开源的,是因为Android系统代码不是完全开源的。这始于Linux内核开源协议和第三方厂商隐私安全的矛盾,为了绕过之一矛盾,Google构建了HAL,通过它在在遵守Linux协议的同时,又能保护第三方厂商的利益;既然能这么牛,那么Google是如何做到的呢,秘密就...

2018-08-07 15:30:26 2901

原创 Android8.0 Binder之面向HAL服务(二)

上一篇我们从Binder在系统native层的服务管理与提供机制,它与Framework的native层的实现大不相同,但是实现思想是一致的,都是需要借助Binder驱动来实现服务的管理与跨进程使用。只不过,由于业务层需要导致实现上的不同,比如HAL层的Binder框架并没有将通讯和业务绞和起来,所以在业务逻辑处理上更为复杂,当然复杂是为了更好的适应业务需求。那么我们不妨回到Java层看看Java...

2018-07-31 13:51:33 3013 1

原创 Android8.0 Binder之面向HAL服务(一)

前两篇文章我们简要分析了Android8.0系统下框架层的Binder框架,包括servicemanager, native和java层面的binder顶层框架。今天我们来看binder在HAL层是如何实现跨进程管理的,在Android8.0的HAL层,HAL通过Binder将各种硬件驱动抽象为硬件服务,以削弱快速的版本更新带来的影响,通过只更新Framework层来达到消灭系统碎片化。废话少说,...

2018-07-30 23:11:59 3113

原创 Android8.0 Binder之面向系统服务(二)

上一篇文章我们上一篇文章我们着重分析了: 1.Binder在Native层如何巧妙的将通讯与业务结合起来; 2.服务是如何路由的。

2018-07-24 20:56:34 601 1

原创 Android8.0 Binder之面向系统服务(一)

Android碎片化问题一直是OS更新的痛点,Google在Android8.0引入的Treble旨在解决Android长期以来碎片化严重的问题,Treble计划将Binder扩展为三角结构,分别对应dev/binder,dev/vndbinder,dev/hwbinder;其中binder和vndbinder 通过上下文区分的形式共用代码,hwbinder则独立出来;在Android8.0以前F...

2018-07-24 13:17:48 2559 2

原创 Android8.0 系统启动之孵化

上一篇讲到Android系统的孵化准备阶段,有了准备阶段的环境,接下来进入孵化阶段。frameworks/base/cmds/app_process/app_main.cppint main(int argc, char* const argv[]){ if (!LOG_NDEBUG) { //打印启动参数 String8 argv_String; for...

2018-07-18 08:38:27 1141

原创 Android8.0 系统启动之孵化准备

在帕美尔省后面有一座金刚山,它有一小时路程高,一小时路程宽,一小时路程深。有一只鸟每隔一百年飞到这里来一次,在这座山上磨一磨它的小嘴。要等到这座山完全磨平,那么永恒的第一秒钟才算过去。 ———– 坚持Android系统启动过程较为复杂,主...

2018-07-15 17:40:57 1347

原创 Android8.0 系统源码编译

Android8.1系统源码编译编译环境:Ubuntu18.04 硬件环境:ThinkPad编译准备安装jdk sudo apt-get update sudo apt-get install openjdk-8-jdk sudo apt-get install openjdk-8-jre 安装依赖 sudo apt-get install -...

2018-07-07 18:00:49 3425 1

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除