Magenta: devmgr进程的线程分布

devmgr和devhost的关系我们以后再说,今天先看看devmgr的线程有哪些功能。最新的Magenta版本在Qemu上跑起来之后,运行命令“ps -T”后有如下的层次结构:

$ ps -T
TASK             PSS PRIVATE  SHARED   STATE NAME
j: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                 fuchsia
TASK             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此设备。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值