Magenta: devmgr进程的线程分布
来源:互联网 发布:qq三国活力涨不停算法 编辑:程序博客网 时间:2024/06/04 19:18
devmgr和devhost的关系我们以后再说,今天先看看devmgr的线程有哪些功能。最新的Magenta版本在Qemu上跑起来之后,运行命令“ps -T”后有如下的层次结构:
$ ps -TTASK PSS PRIVATE SHARED STATE NAMEj:1028 38.5M 37.0M root p:1043 9894.0k 9892k 28k bin/devmgr t:1046 blocked bin/devmgr t:1084 blocked mxio-dispatcher t:1100 blocked local-multiloader t:1135 blocked service-starter j:1075 26.4M 25.7M magenta-drivers p:1168 430.0k 428k 28k /boot/bin/acpisvc t:1218 blocked initial-thread t:1370 blocked thrd_t:0x36b0ee2cfb30/TLS=0x4f8 t:1378 blocked thrd_t:0x36f9fdcb2b30/TLS=0x4f8 p:1539 202.0k 200k 28k devhost:root t:1563 blocked initial-thread p:1576 566.0k 564k 28k devhost:misc t:1599 blocked initial-thread t:1879 blocked debug-reader t:1990 blocked i8042-kbd-irq t:2107 blocked dmctl-multiloader t:2290 blocked i8042-mouse-irq p:1719 994.0k 224k 1564k devhost:pci#1:1234:1111 t:1742 blocked initial-thread p:1781 24.3M 24.3M 28k devhost:pci#3:8086:2922 t:1823 blocked initial-thread t:1945 blocked ahci-irq t:1950 blocked ahci-watchdog t:1955 blocked ahci-worker j:1087 2456.0k 1672k magenta-services p:1089 254.0k 252k 28k crashlogger t:1122 blocked initial-thread t:1363 blocked self-dump-thread p:1157 1078.0k 308k 1564k virtual-console t:1193 blocked initial-thread p:1198 166.0k 164k 28k netsvc t:1237 blocked initial-thread p:2000 226.0k 224k 28k sh:console t:2052 blocked initial-thread p:2095 186.0k 184k 28k vc:sh t:2130 blocked initial-thread p:2167 186.0k 184k 28k vc:sh t:2192 blocked initial-thread p:2229 190.0k 188k 28k vc:sh t:2254 blocked initial-thread p:2424 170.0k 168k 28k /boot/bin/ps t:2457 running initial-thread j:1088 0B 0B fuchsiaTASK PSS PRIVATE SHARED STATE NAME
其中”j”表示Job,”p”表示Process,”t”表示Thread。可见在root job之下分为4类:
- process“bin/devmgr”: 设备管理
- magenta-drivers job :驱动类别
- magenta-services job :services类别
- fuchsia job : fuchsia的各个job和process
其中进程”bin/devmgr”有4个线程,其作用分列如下:
bin/devmgr
这是主线程,在初始化完毕后,作为daemon线程监听设备事件并处理。主要处理devhost发起的device的add、remove、bind等请求。
在实现上,采用的是监听一个特定的 port对象dc_port,回调处理函数是dc_handle_device。dc_port会监听devhost的请求channel,当依据devhost的请求创建了新的device后,又会监听device的请求channel,以响应deice的操作请求。
回调的对象类型是port_handler_t,包含了回调函数和回调参数。
mxio-dispatcher
也是采用监听port并处理相关事件的方法。主要处理文件的访问,请参见回调函数mxrio_handler和vfs_handler。其文件操作请求来自各个进程。
可参考 Magenta - 文件系统概述。
local-multiloader
在launchpad运行应用或服务时,需要请求loader service去加载文件,此service的初始化见mxio_loader_service。从此函数可见可有3种loader service:
- system loader service:这是全局的loader,由驱动dmctl创建。创建线程”dmctl-multiloader”监听请求。
- 默认的loader “mxio_multiloader_new_service”,会在调用者的进程内创建线程“local-multiloader”;
- 用户自定义的loader “local-custom-loader”,会在调用者的进程内创建线程“”local-custom-loader”;
在”bin/devmgr”发起loader service时,system loader还未加载,所以使用的是默认的“local-multiloader”,此线程利用port监听事件channel,回调函数是multiloader_cb,会调用default_load_object去加载文件。
service-starter
此线程的入口函数是service_starter,在启动一些service之后,作为daemon线程,监听文件夹”/dev/class/block”,如果有新文件出现在此文件夹中,则说明有新的block device增加。调用回调函数block_device_added处理此device,一般是mount此设备。
- Magenta: devmgr进程的线程分布
- Magenta
- Magenta
- Magenta
- Magenta
- Magenta
- Magenta
- Magenta
- Fuchsia使用的内核Magenta
- Magenta与LK的关系
- 一个进程的内存分布
- Linux进程的内存分布
- pmap 显示进程的内存分布
- 进程使用的内存空间分布情况
- 进程使用的内存空间分布情况
- 进程使用的内存空间分布情况
- 进程虚拟空间分布中特殊的VMA
- C/C++进程内存的分布
- SVN中trunk,branches,tags用法详解
- web前端:浮动
- 获取Bitmap保存到指定文件夹路径
- Leetcode Add Two Numbers 遇到的问题
- [NOIP2017模拟]beautiful
- Magenta: devmgr进程的线程分布
- 并查集
- 有助于事业发展和幸福感提升的四个约定
- Object类详解
- Git 常用命令
- 解读vue生成的文件目录结构
- Vue.js数据状态管理-Vuex(-)
- Android EditText监听小数点让用户只能输入小数点后两位
- Nginx+Tomcat搭建高性能负载均衡集群