adb: createprocessw failed: 系统找不到指定的路径_QNX的路径名空间与搜索

大家已经知道,在QNX这样的客户端服务器系统里,服务器(资源管理器)是通过注册一个路径名字来提供服务的。那么,当客户端给出一个名字,操作系统是怎样找到相对应的服务器的?这后面的水其实很深,让我们来一探究竟。

路径名管理器(pathmgr)

首先,所有名字的注册,搜索,注销都不是由内核管理的。是的,你没有看错,不在内核当中。而是由一个叫pathmgr的资源管理器来管理的。pathmgr管理的是“路径名空间”这个资源,通俗点说就是根目录 "/"。

确实pathmgr是procnto进程的一部份,但它并不是在内核态运行的。

pronto是QNX的第一个进程,但并不意味着它就是微内核。procnto进程其实是微内核+内存管理器+进程管理器+路径名管理器的组合。这几个核外的管理器,虽然是普通QNX系统一定会用到的。但是在极端的情况下,QNX也可以做到完全不用这些管理器,只用微内核+定制的进程来实现一个系统,就像早期的VxWorks那样。只是那样的系统,等于完全取消了QNX的优势,所以虽然技术上可行,但并不流行。

好了,讲回我们的路径名搜索。最简单的就是资源管理器注册"/dev/md5",然后客户端程序open("/dev/md5")就好了。你或许会奇怪这有什么复杂的?

可是资源管理器,不光可以注册一个文件,也是可以注册目录的。最容易想到的是文件系统,当你“把某某硬盘分区 mount 到 /home”时,文件系统资源管理器就会注册 "/home/",意思是说“/home/ 以及至它下面所有的路径名,从此以后都归我管了”。如果你接下来 ls -l /home/user/.bashrc 的话,其实是把整个路径名都发给注册了 /home 的文件管理器,文件管理器就会去实际硬盘分区里找有没有/user/.bashrc这个文件,然后返回状态。

如果资源管理器可以注册另一个资源管理器注册目录的子目录,事情突然变得有趣起来。比如,资源管理器A注册了/home/abc,资源管理器B注册了/home/abc/utils,然后客户端open("/home/abc/utils/readme")时,又是哪一个资源管理器来为客户端服务呢?

这个根据客户端要求的路径名寻找对应的资源管理器的过程,就叫做路径名搜索。基本上就是让客户端跟各个可能的管理器联系,由管理器回复客户端。

我们来看一下时序图

7eaecd6bc056f7fb344816ce2b636a3a.png
  1. 客户端open("/home/abc/utils/readme"),在libc的open函数里,首先开始的就是路
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值