seL4之hello-3征途 #

回顾上周

  • 了解seL4的启动流程和初始化线程
  • 了解seL4的几种内核对象和权能机制
  • 完成hell0-2的运行.

补充上周

1.找到根任务(初始化线程)的创建具体的位置(那一个函数)

这个函数在kernel/src/kernel/boot.c中

具体查找的截图如下:

2.找出内核中bootinfo的定义,和为根任务创建 bootinfo的代码

查找方法:使用cscope 查找关键字seL4_BootInfo

查找结果如下所示

### 3.阅读手册,找出seL4中有哪些类型的对象,列出全部对象类型,并简要介绍其作用 ###

![](http://files.cnblogs.com/files/zpfbuaa/3.bmp)

查找代码结果

介绍本周

  • 了解seL4的启动流程和初始化线程
  • 了解seL4的几种内核对象和权能机制

2016年11月28日23:20:18

来自伊甸一点的温馨提醒:注意本周内容较多,建议分多次练习,并记录下实验结果

1.提供本次必要的实验手册 ###

文件信息

File: C:\Users\PengFei_Zheng\Desktop\seL4之hello-3征途.zip
Size: 13713128 bytes
Modified: 2016年11月28日, 23:22:24
MD5: 6AF7C2002EF47F60BBCD9D7A12F34937
SHA1: 6B1DC165E95D5E5FBA6AD2697B8C81C8667167DD
CRC32: 9B6CEDED

### 2.详细介绍实验步骤 ###

来自伊甸一点的温馨提示:手册在刚刚下载的文件

#### 0. 查看手册明确实验内容 ####

1. 初始化hello-3状态 ####

执行命令 make ia32_hello-3_defconfig

运行结果截图:

2. 进入hello-3目录下 ####

  • 执行命令如下图所示:

  • 进入文件main.c: gedit main.c

需要做的就是完成当中对TODO1 ~ TODO15的修改.

solution的路径如下所示:

3. 生成hello-3 ####

生成hello-3的指令: make

运行截图

4. 运行hello-3 ####

运行指令如下所示:

qemu-system-i386 -nographic -m 512 -kernel images/kernel-ia32-pc99 -initrd images/hello-3-image-ia32-pc99

来自伊甸一点的温馨提醒:指令有点长,注意不要copy错了

小白的我给的运行部分截图:

退出模拟器的指令: Ctrl+a 松开之后再按 x

### 3.IPC的概念与演化 ###

  • L4的IPC有同步和异步两种,它们的区别是什么?试举例说明。

L4的IPC同步机制 synchronous IPC 避免了内核中的缓冲以及与其相关的管理和复制成本。它也是直接进程切换和临界映射优化的先决条件。

L4的IPC异步机制 asynchronous IPC,在seL4中将该模型定义为异步端点 asynchronous endpoints

下面的例子估计北航的才会深有体会:

你去食堂吃饭。假如你要点香锅,你需要先排队点菜,之后拿到一个号码牌。这样你就可以回到你的座位上等着了,并且你可以回到座位上和妹子聊聊天什么的。一直到你听到你的号码被叫到,你才过去把饭拿回来。(这就是异步)

还是去食堂吃饭,不过这次去了学二食堂,人很多。你找到你想吃的那个窗口对应的队就排着了,然后你一直在队里面等啊等啊等(这里不排除和妹子聊天的可能,但是在seL4中既然你都进队了,就得准守规则好好等着不许聊天)。这时候你就在里面直到你前面没有人了并且还有饭菜剩下,你才能成功拿到自己的饭。(这就是同步)

更多有关IPC请移步该文档

  • L4最初采用的IPC方法不是endpoint,而是叫做 Clans & Chiefs模型,简要描述一下是什么是 Clans & Chiefs。相比 endpoint,它有哪些缺点?

下图为嵌套的clans,嵌套的clans内部通信是自由的,但是对于嵌套的clans外部依旧需要通过chief的重定位通信。

下图为task tree的构造

这里的task tree不能当做一个整体来看待了,只知道某一个clan中的task但是无法确定内部的task都是哪些。

即clans是相互独立的。上图的右部显示出了之前的task tree独立。

也就是我们所说的:我的附属的附属不是我的附属。当然也可以换成:我的随从的随从不是我的随从。

下面是对task tree的独立性解释

4.seL4中的IPC接口 ###

  • 阅读文档,列举seL4提供的用于IPC的接口,简要描述他们的作用和区别。

内核提供的系统调用:

  • 你在hello3中调用了seL4_Call函数,找到这个函数。这个函数体是C语言吗?如果不是C语言,想想为什么?

使用cscope找到seL4_Call函数

可以看到里面的关键字有register也就是寄存器,既然是直接对寄存器进行操作的,那么应该使用的就是汇编语言了。现在我们举一个例子找一下是不是这样子的。

查找asm

找到__asm__的定义如下:

嗯嗯,确实这里用的是汇编语言。具体的含义不是很清楚,里面有指令mov 数据传送指令以及 adrp 地址生成指令。使用会汇编语言可以提高通信速度吧。

2016年12月2日10:33:14

对上述进行修改和更正,尤其是上面提到的汇编语言可以提高通信速度这一说法:

seL4_Call 里面那个asm后面的确实是汇编,这种写法叫C语言嵌入汇编inline assembly。不过使用汇编最主要不是为了性能,主要是为了通过sysenter指令进行系统调用。

C语言是没法系统调用的。 比如我们编程时候调的什么open、read等系统级函数,他们的实现就跟seL4_Call 很相似,也是inline assembly。

想了解更多关于介绍指令的内容请移步该博客

5.endpoint的代码 ###

2016年11月29日12:51:09

(⊙v⊙)嗯 未完待续...

  • 在内核代码中找到 endpoint对象(结构体)的定义。并指出它占几个字节。

  • 一个 endpoint对象有多种状态,阅读代码,找找 endpoint有哪几种状态。尝试理 解各种状态的含义

  • 分析endpoint结构体各个字段的含义,就像上次作业分析 cap 的字段含义等,最好画图表示。

  • 上次我们了解了TCB对象,其中有两个指针成员,分别叫 做 tcbEPNext和 tcbEPPrev,这两个字段是什么含义?与 endpoint有什么关系?

  • 上面找的都是同步端点,找找内核代码中异步端点的定义

6.seL4 IPC初步分析 ###

  • 找到seL4_Call函数,考虑一下这个函数执行完之后,会发生什么,下一行要执行的代码在哪里?

  • 如果你完成了上一步,尝试把接下来发生的事情(函数调用过程) 表示出来(例如:funcA->funcB->funcC等)。

7.hello4实验 ###

转载注意 ###

转载请注明原作者:伊甸一点

转载请以链接形式注明文章地址

seL4之hello-3征途的更多相关文章

  1. Java 征途:行者的地图

    前段时间应因缘梳理了下自己的 Java 知识体系, 成文一篇望能帮到即将走进或正在 Java 世界跋涉的程序员们. 第一张,基础图 大约在 2003 年我开始知道 Java 的(当时还在用 Delph ...

  2. 征途 bzoj 4518

    征途(1s 256MB)journey [问题描述] Pine开始了从S地到T地的征途. 从S地到T地的路可以划分成n段,相邻两段路的分界点设有休息站. Pine计划用m天到达T地.除第m天外,每一天 ...

  3. seL4之hello-2旅途(完成更新)

    seL4之hello-2旅途 2016/11/19 13:15:38 If you like my blog, please buy me a cup of coffee. 回顾上周 seL4运行环境 ...

  4. seL4环境配置

      转载声明:希望大家能够从这里收获知识之外,也能够体会到博主撰写博客的辛苦.个人博客势单力薄,对于强转甚至转载博客访问量高于原文的例子不在少数. 希望能够得到大家关注的同时,也能够稍微体谅一下博主的 ...

  5. bzoj-4518 4518: [Sdoi2016]征途(斜率优化dp)

    题目链接: 4518: [Sdoi2016]征途 Description Pine开始了从S地到T地的征途. 从S地到T地的路可以划分成n段,相邻两段路的分界点设有休息站. Pine计划用m天到达T地 ...

  6. 【BZOJ-4518】征途 DP + 斜率优化

    4518: [Sdoi2016]征途 Time Limit: 10 Sec  Memory Limit: 256 MBSubmit: 230  Solved: 156[Submit][Status][ ...

  7. [转]Java 征途:行者的地图

    前段时间应因缘梳理了下自己的 Java 知识体系, 成文一篇望能帮到即将走进或正在 Java 世界跋涉的程序员们. 第一张,基础图 大约在 2003 年我开始知道 Java 的(当时还在用 Delph ...

  8. BZOJ4518: [Sdoi2016]征途

    Description Pine开始了从S地到T地的征途. 从S地到T地的路可以划分成n段,相邻两段路的分界点设有休息站. Pine计划用m天到达T地.除第m天外,每一天晚上Pine都必须在休息站过夜 ...

  9. Java 征途:行者的地图 (转)

    http://www.cnblogs.com/mindwind/p/5251430.html Java 征途:行者的地图   前段时间应因缘梳理了下自己的 Java 知识体系, 成文一篇望能帮到即将走 ...

随机推荐

  1. Dubbo学习小记

    前言 周一入职的新公司,到了公司第一件事自然是要熟悉新公司使用的各种技术,搭建本地的环境. 熟悉新公司技术的过程中,首先就是Maven,这个前面已经写过文章了,然后就是Dubbo----公司的服务都是 ...

  2. 猫哥网络编程系列:详解 BAT 面试题

    从产品上线前的接口开发和调试,到上线后的 bug 定位.性能优化,网络编程知识贯穿着一个互联网产品的整个生命周期.不论你是前后端的开发岗位,还是 SQA.运维等其他技术岗位,掌握网络编程知识均是岗位的 ...

  3. 对于前端,「微信小程序」其实不美好

    微信小程序开放公测了,9月底我曾经写过一篇 「微信小程序」来了,其中最后一句:"谢天谢地,我居然还是个前端". 这种火爆的新事物总是令人激动,感谢这个时代. 但是,当我真作为开发者 ...

  4. 【初学者指南】在ASP.NET MVC 5中创建GridView

    介绍 在这篇文章中,我们将会学习如何在 ASP.NET MVC 中创建一个 gridview,就像 ASP.NET Web 表单中的 gridview 一样.服务器端和客户端有许多可用的第三方库,这些 ...

  5. BoneCP 升级遇到的问题

    Caused by: org.springframework.beans.BeanInstantiationException: Could not instantiate bean class [c ...

  6. SqlHelper中IN集合场景下的参数处理

    我手头有个古老的项目,持久层用的是古老的ADO.net.前两天去昆明旅游,其中的一个景点是云南民族村,通过导游介绍知道了一个古老的民族——基诺族,“基”在这个族内代表舅舅,“基诺”意为“跟在舅舅后边” ...

  7. ERROR ITMS-90167: "No .app bundles found in the package"错误

    ERROR ITMS-90167: "No .app bundles found in the package" 出现如上错误请查检以下2个方向: 1.macOS Sierra 1 ...

  8. My First Android Application Project 第一个安卓应用

    一.前言: 安卓(Android):是一种基于Linux的自由及开放源代码的操作系统,主要用在移动设备上,如手机.平板电脑.其他的设备也有使用安卓操作系统,比如:电视机,游戏机.数码相机等等. 二.具 ...

  9. 计算机程序的思维逻辑 (40) - 剖析HashMap

    前面两节介绍了ArrayList和LinkedList,它们的一个共同特点是,查找元素的效率都比较低,都需要逐个进行比较,本节介绍HashMap,它的查找效率则要高的多,HashMap是什么?怎么用? ...

  10. 【分布式】Zookeeper在大型分布式系统中的应用

    一.前言 上一篇博文讲解了Zookeeper的典型应用场景,在大数据时代,各种分布式系统层出不穷,其中,有很多系统都直接或间接使用了Zookeeper,用来解决诸如配置管理.分布式通知/协调.集群管理 ...