「帧同步java」帧同步码检测过程中的校核

博主:adminadmin 2022-11-21 16:08:06 101

本篇文章给大家谈谈帧同步java,以及帧同步码检测过程中的校核对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。

本文目录一览:

简述ppp协议在进行同步传输喝异步传输时分别采用什么方法保证透明传输

慢慢的看一下,应该容易理解.

在网络通信过程中,通信双方要交换数据,需要高度的协同工作。为了正确的解释信号,接收方必须确切地知道信号应当何时接收和处理,因此定时是至关重要的。在计算机网络中,定时的因素称为位同步。同步是要接收方按照发送方发送的每个位的起止时刻和速率来接收数据,否则会产生误差。通常可以采用同步或异步的传输方式对位进行同步处理。

1. 异步传输(Asynchronous Transmission): 异步传输将比特分成小组进行传送,小组可以是8位的1个字符或更长。发送方可以在任何时刻发送这些比特组,而接收方从不知道它们会在什么时候到达。一个常见的例子是计算机键盘与主机的通信。按下一个字母键、数字键或特殊字符键,就发送一个8比特位的ASCII代码。键盘可以在任何时刻发送代码,这取决于用户的输入速度,内部的硬件必须能够在任何时刻接收一个键入的字符。

异步传输存在一个潜在的问题,即接收方并不知道数据会在什么时候到达。在它检测到数据并做出响应之前,第一个比特已经过去了。这就像有人出乎意料地从后面走上来跟你说话,而你没来得及反应过来,漏掉了最前面的几个词。因此,每次异步传输的信息都以一个起始位开头,它通知接收方数据已经到达了,这就给了接收方响应、接收和缓存数据比特的时间;在传输结束时,一个停止位表示该次传输信息的终止。按照惯例,空闲(没有传送数据)的线路实际携带着一个代表二进制1的信号,异步传输的开始位使信号变成0,其他的比特位使信号随传输的数据信息而变化。最后,停止位使信号重新变回1,该信号一直保持到下一个开始位到达。例如在键盘上数字“1”,按照8比特位的扩展ASCII编码,将发送“00110001”,同时需要在8比特位的前面加一个起始位,后面一个停止位。

异步传输的实现比较容易,由于每个信息都加上了“同步”信息,因此计时的漂移不会产生大的积累,但却产生了较多的开销。在上面的例子,每8个比特要多传送两个比特,总的传输负载就增加25%。对于数据传输量很小的低速设备来说问题不大,但对于那些数据传输量很大的高速设备来说,25%的负载增值就相当严重了。因此,异步传输常用于低速设备。

2. 同步传输(Synchronous Transmission):同步传输的比特分组要大得多。它不是独立地发送每个字符,每个字符都有自己的开始位和停止位,而是把它们组合起来一起发送。我们将这些组合称为数据帧,或简称为帧。

数据帧的第一部分包含一组同步字符,它是一个独特的比特组合,类似于前面提到的起始位,用于通知接收方一个帧已经到达,但它同时还能确保接收方的采样速度和比特的到达速度保持一致,使收发双方进入同步。

帧的最后一部分是一个帧结束标记。与同步字符一样,它也是一个独特的比特串,类似于前面提到的停止位,用于表示在下一帧开始之前没有别的即将到达的数据了。

同步传输通常要比异步传输快速得多。接收方不必对每个字符进行开始和停止的操作。一旦检测到帧同步字符,它就在接下来的数据到达时接收它们。另外,同步传输的开销也比较少。例如,一个典型的帧可能有500字节(即4000比特)的数据,其中可能只包含100比特的开销。这时,增加的比特位使传输的比特总数增加2.5%,这与异步传输中25 %的增值要小得多。随着数据帧中实际数据比特位的增加,开销比特所占的百分比将相应地减少。但是,数据比特位越长,缓存数据所需要的缓冲区也越大,这就限制了一个帧的大小。另外,帧越大,它占据传输媒体的连续时间也越长。在极端的情况下,这将导致其他用户等得太久。

同步传输方式中发送方和接收方的时钟是统一的、字符与字符间的传输是同步无间隔的。

异步传输方式并不要求发送方和接收方的时钟完全一样,字符与字符间的传输是异步的。

同步与异步传输的区别

1,异步传输是面向字符的传输,而同步传输是面向比特的传输。

2,异步传输的单位是字符而同步传输的单位是桢。

3,异步传输通过字符起止的开始和停止码抓住再同步的机会,而同步传输则是以数据中抽取同步信息。

4,异步传输对时序的要求较低,同步传输往往通过特定的时钟线路协调时序。

5,异步传输相对于同步传输效率较低。

「帧同步java」帧同步码检测过程中的校核

关于这个java代码的解释,每句的解释,请大手帮忙!!!

肯定不是你能写的。改也不好改!

有些东西会用它就行了,没必要死扣!

网络工程师需要会什么

一、《网络工程师考试大纲》

二、历次考试的试题分析与解答,一般看看近三年的

三、全国计算机技术与软件专业技术资格(水平)考试指定用书:

《网络工程师教程》雷震甲主编(清华大学出版社)

《软件设计师教程》陈平 褶华 主编(清华大学出版社)

注:《软件设计师教程》不需全看,只要看:

第 1章 计算机系统知识

第 3章 操作系统知识

第 4章 系统开发和运行知识

第11章 标准化基础知识

第12章 知识产权基础知识

四、全国计算机技术与软件专业技术资格(水平)考试辅导用书

《网络工程师考试辅导》雷震甲主编(西安电子科技大学出版社)

《软件设计师考试辅导》陈平主编(西安电子科技大学出版社)

以上这些就是网工考试的“最基础”的复习资料,不可不看!

五、还有一本“不可多得”的好书:《网络工程师考试冲刺指南》徐锋(电子工业出版社),也需看!

再推荐一个网站吧

里面有些资料非常好的

还有

C++或者JAVA,你选一个语言学的精深一些

不需要太多,好好掌握一门语言就够了

仅仅靠一种语言就可以实现需求的程序

特别是你想搞网络

那我更建议你学好JAVA

如果你将来想搞应用系统,那你就学C++

网络工程师级考试大纲

一、考试说明

1. 考试要

(1) 熟悉计算机系统的基础知识;

(2) 熟悉网络操作系统的基础知识;

(3) 理解计算机应用系统的设计和开发方法;

(4) 熟悉数据通信的基础知识;

(5) 熟悉系统安全和数据安全的基础知识;

(6) 掌握网络安全的基本技术和主要的安全协议与安全系统;

(7) 掌握计算机网络体系结构和网络协议的基本原理;

(8) 掌握计算机网络有关的标准化知识;

(9) 掌握局域网组网技术,理解城域网和广域网基本技术;

(10) 掌握计算机网络互联技术;

(11) 掌握TCP/IP协议网络的联网方法和网络应用服务技术;

(12) 理解接入网与接入技术;

(13) 掌握网络管理的基本原理和操作方法;

(14) 熟悉网络系统的基本性能测试和优化技术,以及可靠性设计技术;

(15) 理解网络应用的基本原理和技术;

(16) 理解网络新技术及其发展趋势;

(17) 了解有关知识产权和互联网的法律、法规;

(18) 正确阅读和理解本领域的英文资料。

2.通过本级考试的合格人员能根据应用部门的要求进行网络系统的规划、设计和网络设备的软硬件安装调试工作,能进行网络系统的运行、维护和管理,能高效、可靠、安全地管理网络资源;作为网络专业人员对系统开发进行技术支持和指导;具有工程师的实际工作能力和业务水平,能指导助理工程师从事网络系统的构建和管理工作。

3. 本级考试设置的科目包括:

(1) 计算机与网络知识,考试时间为150分钟,笔试;

(2) 网络系统设计与管理,考试时间为150分钟,笔试。

二、考试范围

考试科目1:计算机与网络知识

1. 计算机系统知识

1.1 硬件知识

1.1.1 计算机结构

· 计算机组成(运算器、控制器、存储器、存储器、I/O部件)

· 指令系统(指令、寻址方式、CISC、RISC)

· 多处理器(紧耦合系统、松耦合系统、阵列处理机、双机系统、同步)

· 处理器性能

1.1.2 存储器

· 存储介质(半导体存储器、磁存储器、光存储器)

· 存储系统

· 主存与辅存

· 主存类型,主存容量和性能

· 主存配置(主存奇偶校验、交叉存取、多级主存、主存保护系统)

· 高速缓存

· 辅存设备的性能和容量计算

1.1.3 输入输出结构和设备

· I/O接口(中断、DMA、通道、SCSI、并行接口、通用接口总线、RS-232、USB、IEEE1394、红外线接口、输入输出控制系统、通道)

· 输入输出设备类型和特性

1.1.4 嵌入式系统基础知识

1.2 操作系统知识

1.2.1 基本概念

· 操作系统定义、特征、功能及分类(批处理、分时、实时、网络、分布式)

· 多道程序

· 内核和中断控制

· 进程和线程

1.2.2 处理机管理、存储管理、设备管理、文件管理、作业管理

· 进程的状态及转换

· 进行调度算法(分时轮转、优先级、抢占)

· 死锁

· 存储管理方案(分段与分页、虚存、页面置换算法)

· 设备管理的有关技术(Spooling、缓冲、DMA、总线、即插即用技术)

· 文件管理

· 共享和安全(共享方式、可靠性与安全性、恢复处理、保护机制)

· 作业的状态及转换

·作业调度算法(先来先服务、短作业优先、高响应比优先)

1.3 系统配置方法

1.3.1 系统配置技术

· 系统架构模式(2层、3层及多层C/S和B/S系统)

· 系统配置方法(双机、双工、热备份、容错、紧耦合多处理器、松耦合多处理器)

· 处理模式(集中式、分布式、批处理、实时系统、Web计算、移动计算)

1.3.2 系统性能

· 性能设计(系统调整、响应特性)

· 性能指标、性能评估(测试基准、系统监视器)

1.3.3 系统可靠性

· 可靠性计算(MTBF、MTTR、可用性、故障率)

· 可靠性设计(失效安全、软失效、部件可靠性及系统可靠性的分配及预估)

· 可靠性指标和可靠性评估,RAS(可靠性、可用性和可维护性)

2. 系统开发和运行基础知识

2.1 系统开发基础知识

2.1.1 需求分析和设计方法

· 需求分析

· 结构化分析设计

· 面向对象设计

· 模块设计、I/O设计、人机界面设计

2.1.2 开发环境

· 开发工具(设计工具、编程工具、测试工具、CASE)

· 集中开发环境

2.1.3 测试评审方法

· 测试方法

· 评审方法

· 测试设计和管理方法(注入故障、系统测试)

2.1.4 项目管理基础知识

· 制定项目计划

· 质量计划、管理和评估

· 过程管理(PERT图、甘特图、工作分解结构、进度控制、关键路径)

· 配置管理

· 人员计划和管理

· 文档管理(文档规范、变更手续)

· 开发组织和作用(开发组成员、项目经理)

· 成本管理和风险管理

2.1.5 系统可审计性

· 审计方法、审计跟踪

· 在系统中纳入和可审计性

2.2 系统运行和维护知识

2.2.1 系统运行

· 系统运行管理(计算机系统、网络)

· 系统成本管理

· 系统运行(作业调度、数据I/O管理、操作手册)

· 用户管理(ID注册和管理)

· 设备和设施管理(电源、空调设备、设备管理、设施安全和管理)

· 系统故障管理(处理手续、监控,恢复过程、预防措施)

· 安全管理

· 性能管理

· 系统运行工具(自动化操作工具、监控工具、诊断工具)

· 系统转换(转入运行阶段、运行测试、版本控制)

· 系统运行服务标准

2.2.2 系统维护

· 维护的类型(完善性维护、纠错性维护、适应性维护、预防性维护)

· 维护的实施(日常检查、定期维护、预防性维护、事后维护、远程维护)

· 硬件维护,软件维护,维护合同

3. 网络技术

3.1 网络体系结构

· 网络拓扑结构

· OSI/RM

· 应用层协议(FTP、TELNET、SNMP、DHCP、POP、SMTP、HTTP)

· 传输层协议(TCP、UDP)

· 网络层协议IP(IP地址、子网掩码)

· 数据链路层协议(ARP、RARP、PPP、SLIP)

· 物理地址(单播、广播、组播)

3.2 编码和传输

3.2.1 调制和编码

· AM、FM、PM、QAM

· PCM、抽样

3.2.2 传输技术

· 通信方式(单工/半双工/全双工、串行/并行、2线/4线)

· 差错控制(CRC、海明码、奇偶校验、比特出错率)

· 同步控制(起停同步、SYN同步、标志同步、帧同步)

· 多路复用(FDM、TDM、WDM)

· 压缩和解压方法(JPEG、MPEG、MH、MR、MMR、游程长度)

3.2.3 传输控制

· 竞争系统

· 轮询/选择系统

· 基本规程、多链路规程、传输控制字符、线路控制

· HDLC

3.2.4 交换技术(电路交换、存储转发、分组交换、ATM交换、帧中继)

3.2.5 公用网络和租用线路

3.3 网络

3.3.2 网络分类

· 按地域分类(LAN、MAN、WAN)

· 按服务分类(因特网、企业内部网)

· 按传输媒体分类(电话、数据、视像)

· 按电信网分类(驻地、接入、骨干)

3.3.2 LAN

· LAN拓扑(总线型、星型、环型)

· 访问控制系统(CSMA/CD、令牌环、令牌总线)

· LAN间的连接、LAN-WAN的连接、对等连接、点对点连接

· 高速LAN技术(千兆以太网)

· 无限LAN

3.3.3 MAN常用结构

3.3.4 WAN与远程传输服务

· 租用线路服务、线路交换服务、分组交换服务

· ISDN、VPN、帧中继、ATM、IP连接服务

· 卫星通信服务、移动通信服务、国际通信服务

3.3.5 因特网

· 因特网概念(网际互联设备、TCP/IP、IP路由、DNS、代理服务器)

· 电子邮件(协议、邮件列表)

· Web(HTTP、浏览器、URL、HTML、XML)

· 文件传输(FTP)

· 搜索引擎(全文搜索、目录搜索、智能搜索)

· QoS、CGI、VoIP

3.3.6 接入网与接入技术

3.3.7 网络性能

· 有关线路性能的计算(传输速度、线路利用率、线路容量、通信量、流量设计)

· 性能评估

· 排队论的应用

3.4 网络通信设备

3.4.1 传输介质和通信电缆

· 有线/无线介质(双绞线、同轴电缆、光纤;无线电波、光、红外线)

· 分配线架(IDF)、主配线架(MDF)

3.4.2 各类通信设备

· 线路终端设备、多路设备、交换设备、转接设备

· 线路连接设备(调制解调器、DSU、NCU、TA、CCU、PBX)

3.5 网络连接设备

· 网际连接设备(网关、网桥、生成树网桥、源路由网桥、路由器、中继器、集线器、交换机)

3.6 网络软件系统

3.6.1 网络操作系统

· 网络操作系统的功能、分类和特点

· 网路设备驱动程序(ODL、NDIS)

· 网络通信的系统功能调用(套接字API)

· RPC

· TP Monitor

· 分布式文件系统

· 网络设备功能

3.6.2 网络管理

· 网络管理的功能域(安全管理、配置管理、故障管理、性能管理、计费管理)

· 网络管理协议(CMIS/CMIP、SNMP、RMON、MIB-II)

· 网络管理工具(ping、traceroute、NetXray、Analyzer、Sniffer)

· 网络管理平台(OpenView、NetView、SunNet Manager)

· 分布式网络管理

3.6.3 网络应用与服务

· WWW

· FTP文件传输

· 电子邮件

· Telnet

· 信息检索

· 视频点播

· 网络会议

· 远程教育

· 电子商务

· 电子政务

· CSCW和群件

4. 网络安全

4.1 安全计算

4.1.1 保密性和完整性

· 私钥和公钥加密标准(DES、IDEA、RSA)

· 认证(数字签名、身份认证)

· 完整性(SHA、MD5)

· 访问控制(存取权限、口令)

4.1.2 非法入侵和病毒的防护

· 防火墙

· 入侵检测

· VPN、VLAN

· 安全协议(IPSec、SSL、ETS、PGP、S-HTTP、TLS)

· 硬件安全性

· 计算机病毒防护

4.1.3 可用性

· 文件的备份和恢复

4.1.4 安全保护

· 个人信息控制

· 匿名

· 不可跟踪性

4.1.5 LAN安全

· 网络设备可靠性

· 应付自然灾害

· 环境安全性

· UPS 4.2 风险管理

4.2.1 风险分析和评估

4.2.2 应付风险的对策

· 风险预防(风险转移、风险基金、计算机保险)

· 意外事故预案(意外事故类别、应付意外事故的行动预案)

4.2.3 内部控制

· 安全规章制度

· 安全策略和安全管理

5. 标准化知识

5.1 标准的制订和获取

5.1.1 标准的制订和获取过程

5.1.2 环境和安全性评估标准化

5.2 信息系统基础设施标准化

5.2.1 标准

· 国际标准(ISO、IEC)与美国标准(ANSI)

· 国家标准(GB)

· 行业标准与企业标准

5.2.2 开放系统(X/Open、OSF、POSIX)

5.2.3 数据交换标准(EDIFACT、STEP、XML)

5.2.4 安全性标准

· 信息系统安全措施标准

· 计算机防病毒标准

· 计算机防非法访问标准

· CC标准

· BS7799标准

5.3 标准化组织

· 国际标准化组织(ISO、IEC、IETF、IEEE、IAB、W3C)

· 美国标准化组织

· 欧洲工业标准化组织

· 中国国家标准化委员会

6. 信息化基础知识

· 信息化意识

· 全球信息化趋势,国家信息化战略,企业信息化战略和策略

· 企业信息资源管理基础知识

· 互联网相关的法律、法规知识

· 个人信息保护规则

7. 计算机专业英语

· 掌握计算机技术的基本词汇

· 能正确阅读和理解计算机领域的英文资料

考试科目2:网络系统设计与管理

1. 网路系统的设计和构建

1.1 网络系统的需求定义

1.1.1 应用需求分析

· 应用需求的调研(应用系统性能、信息产生和接收点、数据量和频度、数据类型和数据流向)

· 网络应用的分析

1.1.2 现有网络系统分析

· 现有网络体系结构调研(服务器的数量和位置、客户机的数量和位置、同时访问的数量、每天的用户数,每次s 使用的时间、每次数据传输的数据量、网络拥塞的时间段、采用的协议、通信模式)

· 现有网络体系结构分析

1.1.3 需求定义

· 功能需求(待实现的功能)

· 通信需求(期望的通信模式)

· 性能需求(期望的性能)

· 可靠性需求(期望的可靠性)

· 安全需求(安全性标准)

· 维护和运行需求(运行和维护的费用)

· 管理需求(管理策略)

1.2 网络系统的设计

1.2.1 技术和产品的调研和评估

· 收集信息

· 采用的技术和产品的比较研究

· 采用的技术和设备的比较要点

1.2.2 网络系统的设计

· 确定协议

· 确定拓扑结构

· 确定连接(链路的通信性能)

· 确定结点(结点的处理能力)

· 确定网络的性能(性能模拟)

· 确定可靠性措施

· 确定安全性措施(安全措施的调研,实现安全措施的技术和设备的评估)

· 网络设备的选择,制订选择标准(成本、性能、容量、处理量、延迟),性能指标的一致性,高级测试的必要性,互连性的确认

1.2.3 新网络业务运营计划

· 业务过程的确认

· 安装计划

· 转换到新网络的计划

1.2.4 设计评审

1.3 网络系统的构建和测试

1.3.1 安装工作

· 事先准备

· 过程监督

1.3.2 测试和评估

· 连接测试

· 安全性测试

· 性能测试

1.3.3 转换到新网络的工作计划

2. 网络系统的运行、维护管理、评价

2.1 网络系统的运行和维护

2.1.1 用户措施

· 用户管理、用户培训、用户协商

2.1.2 制定维护和升级的策略和计划

· 确定策略

· 设备的编址

· 审查的时间

· 升级的时间

2.1.3 维护和升级的实施

· 外部合同要点

· 内部执行要点

2.1.4 备份与数据恢复

· 数据的存储与处置

· 备份

· 数据恢复

2.1.5 网络系统的配置管理

· 设备管理

· 软件

· 网络配置图

2.2 网络系统的管理

2.2.1 网络系统的监视

· 网络管理协议(SNMP 、MIB-2、RMON)

· 利用工具监视网络性能(LAN监控器)

· 利用工具监视网络故障

· 利用工具监视网络安全(入侵检测系统)

· 性能监视的检查点

· 线路故障检查点

· 安全监视的检查点

2.2.2 故障恢复分析

· 故障分析要点(LAN监控程序)

· 排除故障要点

· 故障报告撰写要点

2.2.3 系统性能分析

· 系统性能分析要点

2.2.4 危害安全的对策

· 危害安全情况分析(调查损失情况,收集安全信息,查找原因)

· 入侵检测要点

· 对付计算机病毒的要点(查杀病毒措施)

2.3 网络系统的评价

2.3.1 系统评价

· 系统能力的限制

· 潜在问题分析

· 系统评价要点

2.3.2 改进系统的建议

· 系统生命周期

· 系统经济效益

· 系统的可扩充性

· 建议改进系统的要点

3. 网络系统实现技术

3.1 网络协议

· 商用网络协议(SNA/APPN、IPX/SPX、AppleTalk、TCP/IP)

· 商务协议(XML、CORBA、COM/DCOM、EJB)

· Web 服务(WSDL、SOAP、UDDI)

3.2 可靠性设计

· 硬件高可靠性技术

· 软件高可靠性技术

· 系统维护高可靠性技术

· 容错技术

· 通信质量

3.3 网络设施

3.3.1 xDSL调制解调器

3.3.2 ISDN路由器

· 接口

· 功能(非通信控制功能、NAT功能)

3.3.3 FRAD(帧装配/拆装)、CLAD(信元装配/拆装)

· 接口

· 功能

3.3.4 远程访问服务器

· 功能和机制

3.3.5 办公室个人手持系统(PHS)

· 数字无绳电话的功能特性

3.3.6 中继式HUB

· 倍速集线器(功能和机制)

3.3.7 L2、L3、L4及多层交换机功能和机制

3.3.8 IP路由器功能和控制

3.3.9 虚拟网(功能与机制)

3.3.10 与其他协议的共存(多协议路由器、IP隧道)

3.4 网络应用服务

3.4.1 地址服务

· 机制、DHCP、IPv6(机制和传输技术)

3.4.2 DNS(功能、机制)

· 域名、FQDN

3.4.3 电子邮件(功能、机制)

· SMPT、POP、MIME、IMAP4、LDAP

· 邮件列表

· Web Mail

3.4.4 电子新闻(功能和机制、NNTP)

3.4.5 Web服务(功能和机制、HTTP)

3.4.6 负载分布(Web交换)

3.4.7 电子身份验证(功能、机制、认证授权、电子证书)

3.4.8 服务机制

· 服务供应商、供应商漫游服务、拨号IP连接、CATV连接、IP电话、因特网广播和组播、电子商务、电子政务、移动通信、EZweb、主机服务提供者、EDI(规则、表单、Web EDI)、B2B、B2C、ASP、数据中心

4. 网络新技术

4.1 光纤网

· ATM-PDS、STM-PDS

· 无源光网PON(APON、EPON)

4.2 无线网

· 移动电话系统(WLL、WCDMA、CDMA2000、TD-SCDMA)

· 高速固定无线接入(FWA)

· 802.11a、802.11b、802.11g

· 微波接入(MMDS LMDS)

· 卫星接入

· 篮牙接入

4.3 主干网

· IPoverSONET/SDH

· IpoverOptical

· IpoverDWDM

4.4 通信服务

· 全天候IP连接服务(租用线路IP服务)

· 本地IP网(NAPT)

· Ipv6

4.5 网络管理

· 基于TMN的网络管理

· 基于CORMBA的网络管理

4.6 网格结算

BlastBufferQueue 原理解读

Google针对新的同步机制,在BBQ对象JAVA层面设计了一系列功能接口,列举功能更新较大几个接口:

提供用于下一次缓冲区要更新的事务。 BBQ 不会立即提交此事务,通过该接口将下一帧的提交控制在调用者手中,调用者可以将其用于更高级别的同步。

将传入的事务合并到 BBQ 中的下一个事务。 当具有指定帧号的下一帧可用时,将直接与含有Buffer的事务进行合并并提交。

客户端可以监听Buffer的合成状态,在 SurfaceFlinger 中已应用包含带有 framenumber 的缓冲区的事务时触发回调,通知客户端合成完成。

与之前Android版本不同的是,Surface对象的创建、Buffer size与Surface size的更新也支持直接通过BBQ进行操作。

Android 12 Google将BufferQueue(简称BQ)组件从SF端移动到了客户端,BQ组件的初始化也放在BBQ的初始化中。通过类名可以看出BBQ更像是BQ的装饰者,在BQ本来功能特性的基础上添加了同步的功能。

通过官图大概了解,整个生产消费模型都在客户端,图形缓冲区的出队、入队、获取等操作都在客户端完成,预示着生产着模型从远程通讯变成了本地通讯, 消费者监听器也从SF端的 ContentsChangedListener 。带来的改变就是客户端需要通过事务Transaction来向SF端提交Buffer与图层的属性。

接下来以应用显示流程为例,梳理下BBQ的初始化流程:

应用端通过方法 relayoutWindow 向WMS服务申请窗口布局,创建应用对应SurfaceControl,随后根据SurfaceControl创建BlastBufferQueue:

frameworks / base / core / java / android / view / ViewRootImpl.java

BBQ主要核心逻辑的初始化都放在了Native对象的构造函数,做了以下几件事:

frameworks / native / libs / gui / BLASTBufferQueue.cpp

frameworks / native / libs / gui / BLASTBufferQueue.cpp

BLASTBufferItemConsumer (简称BBIC)继承自 ConsumerBase ,创建BBIC的同时,消费者模型与消费者监听器建立起了连接:

frameworks / native / libs / gui / ConsumerBase.cpp

frameworks / native / libs / gui / BufferQueueConsumer.cpp

这一步也就让 BBIC 建立了对Buffer状态的监听。接下来看BBQ如何有选择性的监听Buffer的状态。

BBIC 拥有监听Buffer所有状态的能力,BBQ对Buffer特定状态的监听离不开 BBIC,因此,BBQ 继承了两个抽象类 ConsumerBase 与 BufferItemConsumer ,分别针对 Buffer 消费状态与生产状态进行监听。

frameworks / native / libs / gui / BufferQueueConsumer.cpp

BBQ初始化完成,消费者模型建立完成,由于BBQ动态监听缓冲区的状态,如果有可消费的缓冲区,BBQ会触发缓冲区的事务提交:

通过梳理BBQ的初始化,对消费者端的大概流程有了一定的认识,接下来梳理下生产者方的代表,也就是Surface。Android 显示的的内容来源于各种绘制模块,而这些绘制模块需要与BQ建立连接,获取Buffer用以绘制,这样才能将绘制的画像通过BBQ提交给SF合成。Surface作为生产者模型与绘制模块之间桥梁,相关的流程掌握显得尤为重要。

绘制模块指的是那些图像生产者,如以使用SurfaceView、GlSurfaceView、TextureView控件为代表的Video模块、Camera模块、游戏应用等,以及使用软件绘制、硬件加速绘制为代表的普通控件。

回到创建BBQ的流程,在ViewRootImpl.getOrCreateBLASTSurface方法中,创建完BBQ,紧接着会创建Surface对象,直接看Native 对象的构造函数:

首先Surface的创建会传入生产者模型 GraphicBufferProducer ,这样Surface对象拥有了操作缓冲区的能力,同时在构造函数中Surface提供了一系列hook为首的函数,连接到 ANativeWindow 的函数指针,为的是给EGL模块提供对缓冲区操作的入口。而hook函数会直接调用内部的本地函数,以 hook_queueBuffer 为例:

同时软件绘制不需要通过hook函数来中转,当上层通过Surface.lockCanvas方法获取画布时会直接调用本地函数函数 Surface::dequeueBuffer 。

Surface只是绘制的中介,还需要与绘制模块进行连接后,绘制模块才能获取缓冲区和绘制图像数据,关于绘制模块如何连接到Surface,这里不做记录。

结合第一节的关于BBQ 重点API功能介绍与BBQ的初始化流程,回过头看下这三个API功能是如何实现的。

首先看 setNextTransaction 函数,调用者通过该接口可以实现将当前帧 Buffer 的提交权利控制在自己手中,同时可以加入其他图层想要的更新,然后提交,放在同一帧生效。可以思考下,如果当前帧的控制权交给了调用者,是否会导致下一帧的紊乱呢?看下这块流程:

这里BBQ做了线程阻塞的机制,当绘制模块绘制完成下一帧,并将Buffer放回了缓冲区队列,触发BBQ的 onFrameAvailable 回调,如果调用者使用了 setNextTransaction 函数传入了自定义事务,那么就会在 onFrameAvailable 函数中阻塞住线程, 暂停执行下一帧的 processNextBufferLocked 。而唤醒线程的任务交给了 releaseBufferCallback 函数。

当前帧会执行绘制提交函数 processNextBufferLocked ,但是不会立即提交,会将事务控制在自己手中。可以看到, releaseBufferCallback 的回调函数会通过 t-setBuffer传递到SF端。

也就是说当调用者主动提交事务后,SF端合成完成后会回调该通知,唤醒线程。否则会一直阻塞等待调用者提交。

大概流程如图示:

根据BBQ相关文档提示:

该机制在同步单个帧时阻塞在 UI 线程中很好,但在尝试同步多个帧时效果不佳。 它最终会减慢渲染速度。 相反,在 RenderThread 级别处理同步以允许 UI 线程继续处理帧

因此多帧同步还是有优化空间。

将调用者传入的事务合并到 BBQ 中的下一个事务。 当具有指定帧号的下一帧可用时,将直接与含有Buffer的事务进行合并并提交。也就是说将调用者事务所包含的其他对图层属性的更新合入到BBQ的事务中,与BBQ的事务在指定帧数一同生效。这个怎么实现的呢?

这个函数会将调用者传入的事务都保存在 mPendingTransactions 集合中,当执行到下一帧的

processNextBufferLocked 函数时,将集合中的事务都合入到BBQ事务中,然后直接提交:

大概流程如图示:

客户端可以监听Buffer的合成状态,在 SurfaceFlinger 中已应用包含带有 frameNumber 的缓冲区的事务时触发回调,通知调用者合成完成。

通过 t-addTransactionCompletedCallback 将 transactionCallbackThunk 回调函数传给了SF,当合成完成会触发回调,并通知调用者状态。

根据上面流程的梳理,用一张图总结下BBQ与相关模块之间的结构关系:

同步接口和异步接口的区别

Java中交互方式分为同步和异步两种:

同步交互:指发送一个请求,需要等待返回,然后才能够发送下一个请求,有个等待过程;

异步交互:指发送一个请求,不需要等待返回,随时可以再发送下一个请求,即不需要等待。

区别:一个需要等待,一个不需要等待,在部分情况下,我们的项目开发中都会优先选择不需要等待的异步交互方式。

哪些情况建议使用同步交互呢?比如银行的转账系统,对数据库的保存操作等等,都会使用同步交互操作,其余情况都优先使用异步交互。

关于帧同步java和帧同步码检测过程中的校核的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。

The End

发布于:2022-11-21,除非注明,否则均为首码项目网原创文章,转载请注明出处。