Magenta - Namespace


Magenta的Namespace当前比较简单,只实现了类似于Linux的Mount-space,其他的space隔离暂未看到。Namespace的实现和其文件系统密切相关,后续有机会详细描述,现在只大概说明。

Magenta是以Client/Service的方式实现了文件系统。在devmgr进程中,除了做设备管理之外(device add,device remove, etc),还有1个线程mxio-dispatcher作为文件操作service(open,close,read,write, etc)。其他进程在打开文件时,会通过channel将request发送给service,service执行完文件操作后,将结果返回。

可见在上述的文件架构上,还是很容易实现mount-space的。即本地先创建一个虚拟的文件目录,并将本地的文件映射到service可见的对应的文件即可。


在目前Magenta有个测试程序namespace-test,我们可以实际跑起来看看效果。namespace-test运行时可带参数或不带参数。

当不带参数时,创建如下的映射:

{ "/bin", "/boot/bin" },
{ "/lib", "/boot/lib" },
{ "/fake", "/boot" },
{ "/fake/dev", "/dev" },
{ "/fake/tmp", "/tmp" },
{ "/fake/dev/class/pci/xyz", "/boot/src" },

前者是本地的虚拟文件或目录,后者是root目录下的文件或目录。运行以后,枚举前者目录下的文件,会发现和后者下的文件一样。

我们重点看看带参数运行的情况。

$ namespace-test /bin=/boot/bin
{ .handle = 0x6ce666a3, type = 0x00000020, .path = '/bin' },

在本地只创建1个目录/bin,对应到目录/boot/bin。

$ ls /
d  1        0 bin

可见当前根目录下只有1个目录。

$ ps
/boot/bin/sh: 2: ps: not found
$ echo $PATH
/system/apps:/system/bin:/boot/bin

执行ps失败,是因为/bin目录默认不在PATH路径中,所以未搜索到命令ps。

$ PATH=/system/apps:/system/bin:/boot/bin:/bin
$ ps
dlsvc: could not open 'ld.so.1'
/boot/bin/sh: 5: Cannot create child process: (UNKNOWN): elf_load: handle_interp failed

将/bin目录添加进PATH路径中,可以搜索到ps,但执行失败,因为我们没有映射lib库,导致搜索不到ld.so.1。

我们重新执行namespace-test,将目录/boot/lib也映射。

$ namespace-test /bin=/boot/bin /boot/lib=/boot/lib
{ .handle = 0x36307b6d, type = 0x00000020, .path = '/boot/lib' },
{ .handle = 0x36f07b69, type = 0x00010020, .path = '/bin' },
$ ls /
d  1        0 bin
d  1        0 boot
$ ls /boot/
d  1        0 lib
$ PATH=/system/apps:/system/bin:/boot/bin:/bin
$ ps
task-utils/walker: cannot open sysinfo: 2
WARNING: walk_root_job_tree failed: ERR_NOT_FOUND (-25)

ps命令还是执行失败,这是因为ps需要读取文件/dev/misc/sysinfo,但我们并未映射目录/dev。

我们重新执行namespace-test,将目录/dev也映射。

$ namespace-test /bin=/boot/bin /boot/lib=/boot/lib /dev=/dev
{ .handle = 0x62cdf50f, type = 0x00000020, .path = '/dev' },
{ .handle = 0x63bdf561, type = 0x00010020, .path = '/boot/lib' },
{ .handle = 0x6045f55f, type = 0x00020020, .path = '/bin' },
$ ls /
d  1        0 bin
d  1        0 boot
d  1        0 dev
$ ps
/boot/bin/sh: 2: ps: not found
$ PATH= PATH=/system/apps:/system/bin:/boot/bin:/bin
$ ps
TASK           PSS PRIVATE  SHARED NAME
j:1028                             rootp:1043   1373.8k   1372k     28k bin/devmgrj:1082                           magenta-driversp:1245  789.8k    788k     28k /boot/bin/acpisvcp:1659  249.8k    248k     28k devhost:rootp:1720  645.8k    644k     28k devhost:miscp:1786  253.8k    252k     28k devhost:platformp:1955 7329.8k   7328k     28k devhost:pci#1:1234:1111p:2017   24.4M   24.4M     28k devhost:pci#3:8086:2922j:1103                           magenta-servicesp:1104  293.8k    292k     28k crashloggerp:1193  237.8k    236k     28k netsvcp:2291  509.8k    508k     28k sh:consolep:2364  241.8k    240k     28k sh:vcp:2498  241.8k    240k     28k sh:vcp:2569  237.8k    236k     28k sh:vcp:6875  329.8k    328k     28k /boot/bin/namespace-testp:6960  381.8k    380k     28k /boot/bin/shp:7047  249.8k    248k     28k /bin/ps
TASK           PSS PRIVATE  SHARED NAME

DONE!

Magenta - Namespace相关推荐

  1. C++ namespace 的作用以及使用

    namespace 是什么: 命名空间(namespace)是一种描述逻辑分组的机制,可以将按某些标准在逻辑上属于同一个任务中的所有类声明放在同一个命名空间中.标准C++库(不包括标准C库)中所包含的 ...

  2. javascript之namespace模式

    JavaScript 的命名空间并不是真正的命名空间, 只是在脚本内部创建一个封闭的小空间, 必须通过特定的空间名称才能对空间内部的代码进行访问, 这样可以防止同名函数和变量发生冲突, 也可以更方便地 ...

  3. 关于命名空间namespace

    虽然任意合法的PHP代码都可以包含在命名空间中,但只有以下类型的代码受命名空间的影响,它们是:类(包括抽象类和traits).接口.函数和常量. 在声明命名空间之前唯一合法的代码是用于定义源文件编码方 ...

  4. Namespace(命名空间)的使用

    作者:飞刀 关于Namespace(命名空间)的使用常用<% @ Import Namespace="System.Data" %>,这是在引用M$为我们提供的Name ...

  5. C++中的命名空间namespace

    1.Cpp中的命名空间 假设这样一种情况,当一个班上有两个名叫Zara的学生时,为了明确区分它们,我们在使用名字之外,不得不使用一些额外的信息,比如他们的家庭住址,或者他们父母的名字等等.同样的情况, ...

  6. Unable to locate Spring NamespaceHandler for XML schema namespace [http://cxf.apache.org/jaxws]

    利用cxf调试webservice接口的时候出现下面的错误 error:Unable to locate Spring NamespaceHandler for XML schema namespac ...

  7. Kubernetes学习笔记二:Namespace,Cgroups 的隔离与应用

    Kubernetes学习系列文章:Kubernetes-博客专栏 今天在学习极客时间专栏:<深入剖析Kubernetes> 第五讲05 | 白话容器基础(一):从进程说开去和第六讲06 | ...

  8. C++_static,类模板、函数模板、namespace

    C++_static,类模板.函数模板.namespace 1.static 2.类模板 3.函数模板 4.namespace 5.深入,更多细节 参考:侯捷<C++面向对象高级编程>

  9. linux网络命名空间详解,Linux Network Namespace (netns) 详解

    Linux Network Namespace (netns) 详解 Network Namespace (以下简称netns)是Linux内核提供的一项实现网络隔离的功能,它能隔离多个不同的网络空间 ...

最新文章

  1. C++ STL: 基本六大部件概览 及 各个容器使用方式和底层实现概览
  2. android this context,Android應用開發中關於this.context=context的理解
  3. 《图解HTTP》读书笔记--第5章与HTTP协作的Web服务器
  4. Top 10 Things I Know for Sure-深信不疑的十大哲理
  5. tf卡量产工具万能版_新物1TB TF卡正式开卖!容量大得惊人,售价也同样不菲
  6. android绘制河流双曲线,项目三:河道测量试题库(13页)-原创力文档
  7. laravel artisan 后台运行_3分钟短文:Laravel用户自定义命令行简明教程
  8. [转]Spring事务tx:annotation-driven/
  9. MySQL笔记-ibd文件格式初步分析(仅数据块笔记)
  10. append从一个添加到另一_麻城一总投资1.5亿项目开工建设,另一项目预计9月底开工,还有一个年产值14亿的5G项目快速推进中...
  11. python爬取岗位数据并分析_Python年薪最高有50w|探秘全国近1600个Python岗位数据分析...
  12. 【转】VC2008 配置OpenGL环境
  13. C4D模型工具—恢复平滑着色(Phong)
  14. H3C OSPF基本配置命令
  15. C# 调用dll文件
  16. PS--解决文字不清晰问题
  17. 博客群建软件有什么功能?
  18. 华为mate40e灭屏显示教程
  19. pytorch搭建Resnet50实现狗狗120个品种类的分类
  20. 全栈合一:万物互联下的智能安全运维

热门文章

  1. PHPCMS_数据库配置
  2. C++调用openssl实现DES加密解密cbc模式 zeropadding填充方式 pkcs5padding填充方式 pkcs7padding填充方式...
  3. 2019/10/09 02-无参装饰器***
  4. 查看Linux补丁程序 版本,查看Linux内核的版本方法
  5. linux卸载命令rpm,Linux之rpm包的卸载与安装方法步骤
  6. 【优化算法】黑洞模拟算法(MVO)【含Matlab源码 479期】
  7. bzoj 4247: 挂饰
  8. IIS的安装与配置详细图解教程
  9. 华为正式官宣鸿蒙OS,华为正式官宣,鸿蒙OS 2.0系统即将问世,Mate 40有望首发
  10. 长文对话实录:国内物联网10年沉浮,AIoT技术如何破局?| AIoT+智慧城市峰会