自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

原创 HotSpot 源代码编译

编译环境 Windows10,VMware15,Ubuntu18.04, 虚拟环境。 PC机,内存32G,CPU 16 核心,I7八代。 Ubuntu18.04 虚拟机。 环境准备 安装Boot JDK,下载Linux版Oracle JDK8,解压安装到/usr/lib下, 执行 gedi...

2020-04-26 15:15:29 64 0

原创 Android10.0 系统源代码编译

AndroidQ已改名Android10, 今天我们换一种方式来编译Android10。 编译环境 Windows10,VMware15,Ubuntu18.04, 虚拟环境。 PC机,内存32G,CPU 16 核心,I7八代。 Ubuntu18.04 虚拟机。 源码下载 下载 ...

2019-12-19 14:22:39 1793 4

原创 Android9.0 系统源码编译

一个多月没写博客了,感觉不会再爱了。Android P 发布已经好久了,今天来尝一尝这块Pie。 编译环境 Ubuntu18.04, 双系统环境 PC机,内存32G,CPU 16 核心,I7八代。 源码下载 镜像源 : https://aosp.tuna.tsinghua.edu.cn ...

2019-04-16 16:46:49 4358 1

原创 Hadoop2.8.5 节点间的数据传输

数据节点 DataNode 在运行中会与三种对端有互动。第一种是 NameNode ,如前所述,对于数据块的存储地点,虽然最初是由 NameNode 分配和指定的,但相关的信息最终来自DataNode 的报告。第二种是用户的 App (包括 Shell ),用户的 App 可以存在于集群内的任何节...

2019-01-31 10:49:48 330 0

原创 Hadoop2.8.5 数据节点 DataNode

数据节点 DataNode 在 HDFS 文件系统中处于从属的地位, 但是其结构却比处于主导地位的查名节点 NameNode 更复杂。这是因为:虽然 NameNode 起着目录的作用,但是文件的内容却是存储在 DataNode 上的,读写文件时一旦知道了哪一个块在什么节点上,或者指定存放在什么节点...

2019-01-30 10:45:39 276 0

原创 Hadoop2.8.5 分布式文件系统HDFS

Hadoop的两大系统之一“HDFS”。所谓分布,是说整个文件系统的内容并非集中存储在一台或几台“文件服务器上”,而是分散在集群的不同节点上。理想的情景是集群内的每一台机器都承担着一些内容的存储。HDFS 是 Hadoop 集群的文件系统,这是一种分布( distributed )、容错( fau...

2019-01-29 13:52:19 154 0

原创 Hadoop2.8.5 MapReduce计算流程

上一篇我们从宏观的角度从作业认领到分发考察了MapReduce框架。今天我们来探究其内部,从宏观上说, MR 框架主要就是 Map 和 Reduce 这两个阶段。但是实际上远不是那么简单,这两个宏观的阶段都进一步划分成好几个更微观的阶段,前面提到过的排序(Sort )阶段为例, Mapper 的输...

2019-01-14 09:22:16 187 0

原创 Hadoop2.8.5 MapReduce计算框架

Hadoop 中 YARN 子系统的使命是为用户提供大数据的计算框架。早期的Hadoop ,甚至早期的 YARN 都只提供一种计算框架,那就是 MapReduce。 Hadoop 后来有了一些新的发展,除 MapReduce 外又提供了称为 Chain 和 Stream 的计算框架,一来使用户不必...

2019-01-13 10:48:28 129 0

原创 Hadoop2.8.5 作业的投运

上一篇关于容器的投运是YARN调度在受理作业后分配一个容器并投运到NM节点上,在NM上建立一个 “ 项目组长 ”,该项目组长就是 MRAppMaster。也就是说RM只管到这一级。接下来的事情由 MRAppMaster来处理。根 据 ContainerLaunchContext 中的信息将作业分解...

2019-01-11 14:46:53 99 0

原创 Hadoop2.8.5 容器的投运

上一篇我们考察了YARN调度系统的容器周转和分配,RM受理作业后就为该作业分配容器,最后由发射架将容器发送到对岸的NodeManager上,现在我们来看NM收到容器后如何启动JVM并创建AM作为作业的领头人,之后的事情就交给了AM。今天我们就来考察容器投运到NM这一过程。为了投运一个作业,RM 首...

2019-01-10 14:58:42 108 0

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

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

2019-01-02 16:33:36 143 0

原创 Hadoop2.8.5 作业的受理

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

2019-01-01 10:25:43 211 0

原创 Hadoop2.8.5 作业的提交

Hadoop的RPC是以CS两端协议栈和协议引擎构成的,在查看作业的提交流程过程中我们总是从两端去看的,也即作业提交的Client端和作业接收的Service端。以此将作业的提交分为两个阶段。第一阶段是Client端,主要是作业的准备以及作业如何通过RPC协议与Service通讯。第二阶段是Ser...

2018-12-31 14:42:33 153 0

原创 Hadoop2.8.5 RPC 机制 二

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

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

原创 Hadoop2.8.5 RPC机制 一

RPC 是“ RemoteProcedureCall ”即“远地过程调用”的缩写。这个机制的目的,是让一台机器上的程序能像调用本地的“过程”那样来调用别的机器上的某些过程。需要特别说明的是,RPC 并非针对远地的所有过程,并不是对远地所有的过程都可以随心所欲地通过 RPC 加以调用,而只能针对预先...

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

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

YARN调度使用状态机(StateMachine)来驱动,我们以RM(ResourceManager)为例来看状态机如何驱动其运行。作为YARN的框架核心管理者整个集群的计算资源,对 于 宿 主 机 而 言,执 行 着ResourceManager 的 Java 虚拟机是个独立的进程。用户每向这个...

2018-12-18 16:07:18 262 0

原创 Hadoop2.8.5 YARN状态机

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

2018-12-17 16:01:49 195 0

原创 Hadoop2.8.5 集群拓扑

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

2018-12-17 11:28:26 654 0

原创 Hadoop2.9.2 源码编译

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

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

原创 Android8.0 USB系统框架

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

2018-11-28 16:20:48 1908 1

原创 Android8.0 Rild守护进程

电话是一种开放的通信渠道,任何人都可以随时向任何电话号码致电或者发送短信,因此 Android 用户需要能够轻松屏蔽骚扰电话和短信。在 Android N 推出之前,Android 用户只能依靠下载的应用来限制来自骚扰电话号码的来电和短信。但是,由于没有适当的 API 来屏蔽来电和短信,这些应用大...

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

原创 Android8.0 存储系统

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

2018-11-09 10:45:51 1026 0

原创 Android8.0 输入系统

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

2018-11-05 15:05:41 327 0

原创 Android8.0 蓝牙系统

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

2018-10-30 15:04:37 3735 0

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

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

2018-10-20 20:39:24 4083 0

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

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

2018-10-13 11:19:02 839 0

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

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

2018-10-12 10:54:18 1940 0

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

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

2018-09-23 11:12:06 1551 0

原创 Android8.0 HwComposer 硬件抽象层

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

2018-09-12 16:47:38 3883 0

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

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

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

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

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

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

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

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

2018-08-27 22:50:05 8748 0

原创 Android8.0 Media系统(二)

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

2018-08-21 11:46:22 1135 0

原创 Android8.0 Media系统(一)

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

2018-08-20 21:18:48 2609 0

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

经过以上三篇对AudioTrack,AudioFlinger, AudioPolicy的分析,发现音频数据经过AudioTrack,通过AudioPolicy路由,由AudioFlinger的各路线程混合输出到合适的Audio设备去。我们再分析AudioFlinger构造函数的时候涉及到音频硬件抽...

2018-08-14 15:52:48 2200 0

原创 Android8.0 Audio系统之AudioPolicy

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

2018-08-14 11:43:43 4256 0

原创 Android8.0 Audio系统之AudioFlinger

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

2018-08-13 16:52:40 4386 0

原创 Android8.0 Audio系统之AudioTrack

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

2018-08-13 11:46:46 2864 0

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

众所周知Android是基于Linux内核的开放性系统,我们可以看到Google开放的大部分操作系统实现代码。之所以说它是开放的而不是开源的,是因为Android系统代码不是完全开源的。这始于Linux内核开源协议和第三方厂商隐私安全的矛盾,为了绕过之一矛盾,Google构建了HAL,通过它在在遵...

2018-08-07 15:30:26 1867 0

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

上一篇我们从Binder在系统native层的服务管理与提供机制,它与Framework的native层的实现大不相同,但是实现思想是一致的,都是需要借助Binder驱动来实现服务的管理与跨进程使用。只不过,由于业务层需要导致实现上的不同,比如HAL层的Binder框架并没有将通讯和业务绞和起来,...

2018-07-31 13:51:33 1142 0

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