自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(196)
  • 资源 (2)
  • 收藏
  • 关注

原创 chromium启动流程(二)-UtilityProcess进程启动流程

一文我们知道 browser进程通过RunBrowser 函数启动,而其他进程则通过RunOtherNamedProcessTypeMain函数启动,今天我们以NetworkService进程的启动来分析其他进程启动, 同时也说明service进程的运行方式。函数会根据Service 的名称判断是否能在io服务线程执行,如果可以在io服务线程执行,就调用io_thread_services_->RunService执行,否则只能在主线程执行,调用TryRunMainThreadService在主线程执行。

2024-02-04 15:06:56 916

原创 chromium启动流程(一)-browser进程启动流程

前面通过一些列文章,我们了解清楚了chromium的线程模型和ipc通信框架ipcz。接下来我们分析一下chromium的启动流程。本篇以browser进程启动为例进行分析。chromium的启动入口在chrome/app/chrome_exe_main_aura.cc中。这里面Aura是Chromium项目中用于窗口管理的底层框架。它负责管理用户界面的窗口和其他图形元素。Aura提供了一个跨平台的框架,用于构建Chromium浏览器的用户界面组件。

2024-01-28 19:32:34 1291

原创 chromium通信系统-ipcz系统(十一)-mojo binding

这里908-909行创建Message的时候指定的消息名称为internal::kChildProcess_BindServiceInterface_Name, 用于指示服务端调用哪个方法。Accept方法调用ChildProcessStubDispatch::Accept方法,第一个参数为sink_, 第二个参数为消息体。mojom::ChildProcess::Stub_ stub_, 也就是ChildProcessStub。我们看一下它的实现以及set_sink 方法。生成带c++代码如下。

2024-01-08 19:34:19 1115

原创 chromium通信系统-ipcz系统(十)-消息通知(trap)

MojoAddTriggerIpcz 函数顾名思义就是向trap添加一个触发器,用于注册trap 事件观察者,参数trap_handle 是用于指向MojoTrap的句柄,handle 是 portal的句柄,也就是添加的触发器针对与portal 上面的事件。Trap函数如果trap 关注的事件(conditions)没有满足,则会注册成功,否则返回IPCZ_RESULT_FAILED_PRECONDITION 表示前置条件不满足,满足的条件通过satisfied_condition_flags参数返回。

2024-01-08 14:54:47 868

原创 chromium通信系统-ipcz系统(九)-ipcz系统代码实现-跨Node通信-代理和代理消除

chromium通信系统-ipcz系统(六)-ipcz系统代码实现-跨Node通信-基础通信 一文我们分析了跨Node的基础通信过程。 a进程和b进程通信的过程。 但在程序中a进程将自己打开的一对portal中的一个portal传递给了b进程。由于篇幅问题这个过程我们并没有分析,这篇文章我们就来分析这个过程。代理路由的形成我们已经分析了基础通信过程。这里我们直接从RemoteRouterLink::AcceptParcel 函数开始分析端口的发送过程。142 void RemoteRouterLink

2024-01-02 19:13:16 903

原创 chromium通信系统-ipcz系统(八)-ipcz系统代码实现-跨Node通信-Broker和Broker通信

前面我们分析了Broker和NonBroker通信,也分析了NonBroker和NonBroker通信,这里我们分析一下Broker和Broker通信过程。我们直接一步到位,看NodeConnector的创建。当前节点是broker的情况下,对端节点也是broker,就是broker to broker请求,创建NodeConnectorForBrokerToBroker。uint32_t。

2024-01-01 18:43:26 895

原创 chromium通信系统-ipcz系统(七)-ipcz系统代码实现-跨Node通信-NonBroker和NonBroker通信

在chromium通信系统-ipcz系统(六)-ipcz系统代码实现-跨Node通信-基础通信 一文中我们分析了broker 和 nonbroker 通信的过程。本文我们来分析NonBroker 和NonBroker的通信过程,同样以单元测试为例子分析。mojo/core/invitation_unittest.cc 951 DEFINE_TEST_CLIENT(NonBrokerToNonBrokerHost) { 952 MojoHandle invitation = AcceptInvita

2024-01-01 17:13:01 828

原创 chromium通信系统-ipcz系统(六)-ipcz系统代码实现-跨Node通信-Broker和NodeBroker通信

chromium通信系统-ipcz系统(二)-ipcz系统代码实现-同Node通信一文分析了同Node通信的场景。今天我们来分析一下跨Node通信的场景。我们以典型的broker 和非broker通信的场景来分析。mojo/core/invitation_unittest.cc 926 TEST_F(MAYBE_InvitationTest, NonBrokerToNonBroker) { 927 // Tests a non-broker inviting another non-broke

2023-12-16 10:08:56 942

原创 chromium通信系统-ipcz系统(五)-ipcz系统代码实现-信道和共享内存

chromium通信系统-mojo系统(一)-ipcz系统代码实现-同Node通信一文中我们分析了同Node通信的过程,在分析跨Node(跨进程)通信过程前,为了缩小篇幅,作为承上启下,我们先来分析一下Ipcz的通信信道和共享内存机制。我们在前面chromium通信系统-mojo系统(一)-ipcz系统基本概念一文介绍了NodeLink和RouterLink的概念,这两个概念都是比较上层,在一个操作系统中,两个进程要想通信,就要借助ipc机制。 如上图所示,RouterLink之间的通信要借助NodeL

2023-12-05 12:57:15 264

原创 chromium通信系统-ipcz系统(四)-ipcz-分层、和mojo的关系以及handle

ipcz driver层对应的对象基类为ObjectBase,ObjectBase 提供的方法包括: type方法返回对象的类型,FromHandle() 和 TakeFromHandle() 方法用于将IpczHandle() 转化为具体对象。ipcz层对应的对象基类为APIObject,APIObject 提供四个方法,FromHandle() 和 TakeFromHandle() 方法用于将IpczHandle() 转化为具体对象。系统层面的实现,主要是对Socket文件描述的包装。

2023-12-04 22:44:20 434

原创 chromium通信系统-ipcz系统(三)-ipcz-消息相关的宏展开

mojo消息相关的宏人工比较难展开,所以让gpt帮忙展开了一下,写在这里bool NodeMessageListener::OnMessage(Message& message) { return DispatchMessage(message);}bool NodeMessageListener::OnTransportMessage( const DriverTransport::RawMessage& raw_message, const DriverTra

2023-12-03 09:00:03 168

原创 chromium通信系统-ipcz系统(二)-ipcz系统代码实现-同Node通信

在chromium通信系统-mojo系统(一)-ipcz系统基本概念一文中我们介绍了ipcz的基本概念。 本章我们来通过代码分析它的实现。handle系统为了不对上层api暴露太多细节,实现解耦,也方便于传输,ipcz系统使用handle表示一个对象,handle类似于文件描述符,用IpczHandle类型表示ipcz系统内的一个对象。一个可以用IpczHandle 句柄表示的对象必须是APIObject子类。APIObject数据结构如下class APIObject : public RefCou

2023-11-26 19:25:24 246

原创 chromium通信系统-ipcz系统(一)-ipcz系统基本概念

chromium ipzc 进程间通信基本概念介绍

2023-11-17 13:13:21 376

原创 Android NativeBridge过程分析

Art的NativeBridge使用hodini作为callback实际去加载类库其中做了少量的一些操作1 Zoygote fork应用进程的时候frameworks/base/core/jni/com_android_internal_os_Zygote.cppForkAndSpecializeCommon函数bool use_native_bridge = !is_system_server && (instructionSet != NULL) &&

2023-10-19 15:58:31 244

原创 chromium线程模型(2)-线程池实现

到这里,除了关闭的情景,线程池的方方面面也分析的差不多了。我觉得chromium的设计实在是太复杂,存在过度设计嫌疑。另外如果有协程就不必这么大费周折的去处理阻塞任务。也许是因为开发者对底层不太了解,也可能是很多历史包袱,才使得chromium的设计如此复杂吧。

2023-10-19 10:25:40 419

原创 C++编程语言的深度解析: 从零开始的学习路线

编程,作为21世纪的一项核心技能,吸引了越来越多的人。其中,C++作为一种历史悠久、应用广泛的语言,依然具有强大的生命力。但是,C++的学习曲线对初学者来说可能略显陡峭。在这篇深入探讨中,我们将一步一步帮助你构建一个稳固的C++学习基础。

2023-10-11 09:45:38 151

原创 chromium线程模型(1)-普通线程实现(ui和io线程)

chromium线程模型分析

2023-10-08 11:06:04 1238

翻译 chromium线程模型(1)--- 官方文档

这段代码主要介绍了Chrome浏览器的多进程和多线程架构。Chrome具有多进程架构,每个进程都是高度多线程的。本文将介绍每个进程共享的基本线程系统。主要目标是保持主线程(在浏览器进程中称为“UI”线程)和IO线程(每个进程用于接收IPC的线程)响应灵敏。这意味着将任何阻塞的I/O或其他昂贵的操作卸载到其他线程。我们的方法是使用消息传递作为线程之间通信的方式。我们不鼓励使用锁定和线程安全的对象。相反,对象只存在于一个(通常是虚拟的——稍后我们将讨论!)线程上,我们通过这些线程之间传递消息进行通信。

2023-10-02 09:06:45 364

原创 一场时代的挑战与转变

总的来说,年轻人存款难是一个深层次的社会问题,它的解决需要政府、社会和个人共同努力。对于年轻人来说,他们面临的不仅仅是存款的问题,更是一个如何在追求生活质量的同时,处理好财务问题,实现生活和理财的平衡的问题。在我们的社会中,有一种现象引起了人们广泛的关注,那就是“年轻人存款”的问题。年轻人需要学会如何在享受生活的同时,规划好自己的财务,做到既能满足当下的生活需求,也能为未来做好准备。存款的难题,实际上是一个更广泛的社会问题的反映。年轻人,作为社会的新生力量,他们的财务状况自然引起了人们的关注。

2023-06-25 14:28:01 172 1

原创 SEAndroid学习

selinux 学习

2022-11-27 16:56:24 898 1

原创 surfaceflinger 新版本总结(Android10)

surfaceflinger概览

2022-09-14 09:11:59 731

原创 Android连接器(二)-elf文件的加载

VerifyElfHeaderelf加载过程其实最主要的部分就是创建程序的段ElfReader::ElfReader(const char* name, int fd, off64_t file_offset, off64_t file_size) : name_(name), fd_(fd), file_offset_(file_offset), file_size_(file_size), phdr_num_(0), phdr_mmap_(nu

2022-05-06 10:44:27 653

原创 Android连接器(一)-elf文件格式总结

elf包含两种视图,分别是文件视图和程序视图描述文件视图的主要数据结构就是section,一个elf文件包含多个section,每个section是相对独立的数据。文件使用Section Headers来描述section的名称类型以及位置大小。描述程序的视图为程序头表和程序头。链接器会根据程序头表来对数据进行加载。程序头表中存放多个程序头,程序头描述的是程序段。程序段并不在elf中,需要链接器进行内存分配,并将elf文件中的不同部分映射到分配的段内存上。一个程序段版本多个具有相同属性(读写执行权限一

2022-05-06 10:39:05 672

原创 Android连接器(三)-Android 程序加载运行-链接器实现

/* * This is the entry point for the linker, called from begin.S. This * method is responsible for fixing the linker's own relocations, and * then calling __linker_init_post_relocation(). * * Because this method is called before the linker has fixed i

2022-05-04 15:50:06 955

原创 聊一聊PhoneWindowManager的窗口布局管理

    记得之前在小米的时候,有个同学说PhoneWindowManager是最乱的地方,好像很多杂活都是PhoneWindowManager去干,其实我不太认同这个说法。 仔细分析一下,PhoneWindowManager实现了WindowManagerPolicy, WindowManagerPolicy注释写的很清楚: * This interface supplies all UI-specific behavior of the window manage

2022-04-11 09:28:40 2048

原创 内存屏障(不错文章)

https://blog.csdn.net/qb_2008/article/details/6840593

2021-10-03 20:25:20 166

原创 如何看到守护daemon进程的标准输出log

可以gdb 来实现:gdb -p pid 某个进程gdb > call close(1)(gdb) > call dup2(creat(“/var/log/print.log”,0666),1)(gdb) > quit#!/bin/shLOG_FILE=”/var/log/debug_gdb.txt”if [ ! -n “$1” ] ;thenecho -e “please input process pid”exitelseecho $LOG_FILEfi

2021-09-07 13:59:21 308

原创 Android 策略路由

Android使用netd对网络进行管理,一个操作系统如何对网络进行管理的呢,又是如何实现的,我们本篇文章就来分析一下。Android的网络管理我觉得最重要的就是策略路由,为了了解Android的策略路由,我们先熟悉下路由规则。路由器我们都比较熟悉,属于三成设备,路由器是用于数据报转发的,那么路由器如何确定将一个设备转发到下一跳路由呢,是通过路由表。#ip route show61.135.165.183 via 192.168.1.1 dev wlp5s0 proto unspec defaul

2021-08-11 08:46:55 5352 3

原创 arm异常处理unwind 过程

backtrace:#00 pc 00062928 /data/app/com.ss.android.article.news-1/lib/arm/libuserinfo.so (_Unwind_VRS_Pop+84)#01 pc 00062f64 /data/app/com.ss.android.article.news-1/lib/arm/libuserinfo.so (__gnu_unwind_execute+240)#02 pc 00063230 /data/app/com.ss.androi

2021-07-10 18:23:52 1149 2

原创 通过auditd找到干坏事的进程

最近发现服务器上某个进程会定期执行echo 1 > /proc/sys/vm/drop_caches 命令, 不知道哪个傻瓜干的, 这严重影响了服务器的性能, 问题是通过kernal log看到的[30352749.162493] sh (11336): drop_caches: 1[30356347.539229] sh (21947): drop_caches: 1[30359945.590508] sh (28856): drop_caches: 1[30363543.255243] s

2021-06-11 09:18:16 1770

原创 大量CLOSE_WAIT 状态链接问题

代码复线close_wait 状态服务端import socket #socket模块import timeHOST='127.0.0.1'PORT=50007s= socket.socket(socket.AF_INET,socket.SOCK_STREAM) #定义socket类型,网络通信,TCPs.bind((HOST,PORT)) #套接字绑定的IP与端口s.listen(1) #开始TCP监听,监听1个请求while 1: conn,ad.

2021-06-10 10:55:45 379

原创 linux kernel log 时间戳转可视化时间

#!/bin/bash if [ $# -ne 1 ];then echo "input an dmesg time" exit 1fi unix_time=`echo "$(date +%s) - $(cat /proc/uptime | cut -f 1 -d' ') + ${1}" | bc`echo ${unix_time}date -d @${unix_time} "+%Y-%m-%d %H:%M:%S"

2021-05-14 14:09:33 1713 1

原创 内存泄漏的一种分析思路

这个思路主要是dump应用程序的内存,然后通过strings程序来寻哪些字符串重复的比较多,可能是内存泄漏引起的。然后strings -a xxx.mem | sort | uniq -c | sort然后看重复率比较高的字符串,是否指向某些泄漏的内存。...

2021-02-04 13:22:01 214

原创 2021年计划

1 学会多思考,每天7半做20分钟冥想2 写一个基于arm v8操作系统,在树莓派上运行起来3 研究brpc和bthread代码4 继续体系学习android5 减肥到170斤一下6 买房7 晋升或者跳槽8 减少手机使用9 读20本书2021年最主要的就是多写少看...

2021-01-25 09:46:47 434 1

原创 Android 设置window信息到inputflinger

在Android InputDispatch事件派发->选择目标窗口一文中我们分析了Android 根据Wms的window信息来派发事件到window对应的应用程序,今天我们来分析下Android如何更新window信息到inputflinger。当window信息发生变化的时候Wms需要更新window的信息到inputflinger, Android使用InputMonitor.java类来完成操作,InputMonitor 更新window的函数为updateInputWindowsLw。 我们在

2021-01-20 22:24:45 932

原创 gdb调试技巧(不断更新)

指定段地址,将加载地址和运行地址不同的情况add-symbol-file xxx.elf 0x80030 -s .text.boot 0x80000 -s .rodata 0x80758

2021-01-16 17:31:19 519

原创 Android 打包镜像对权限的管理

Android ext4镜像制作的主要逻辑都在system/extras/ext4_utils/make_ext4fs.c文件中,其实就是根据某个文件夹创建ext4格式的二进制文件。 ext4包含superblock,inode, inode table, group descriptors, block bitmap 和block等主要的结构。文件的权限信息一般保存在inode中。正常情况下打包文件的权限和目标目录下的权限应该是相同的static u32 build_directory_structu

2021-01-12 22:34:04 685

原创 Android InputDispatch事件派发->选择目标窗口

WindowManagerService的主要两大作用:1 和surfaceflinger交互,创建surface, 通知surfacelinger窗口的层级、大小、位置等属性。2 和inputflinger交互, 告知inputflinger当前窗口大小位置,是否可以接受input事件以及窗口可以处理什么类型的事件。surfacelinger和inputflinger都是系统里面两个负载较重的服务。为了分心WindowManagerService我准备先从inputflinger这端着手,因为这端

2021-01-12 22:28:17 2578 1

原创 Android sdk version和Android版本对照

2021-01-03 08:19:37 5430

原创 ActivityManagerService对于Task的管理

在Ams中Activity的容器是Task, task的容器是stack, 所以我们先来看下stack是如何管理Task的final class ActivityStack { /** * The back history of all previous (and possibly still * running) activities. It contains #TaskRecord objects. */ private ArrayList<Tas

2020-12-31 22:30:06 487 1

hadoop hdfs配置文件详解

hadoop的 hdfs配置文件 对文件的每项property进行中文描述 希望的家支持 过几天还会献上其他

2013-12-29

80C51单片机可控流水灯的设计

单片机 80C51 作单片机的入门

2013-03-06

空空如也

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

TA关注的人

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