虚拟化机制的几大挑战:1.性能。在实现虚拟化的同时不增加系统过多开销。2.控制。高效运行程序的同时对CPU保持控制(对资源的管理)。

Limited direct execution:直接在CPU中运行程序。因此,OS启动程序是首先在进程列表中创建一个process entry,为其分配内存,从磁盘中将代码加载到内存,找到main()入口开始执行,完毕后执行return,OS释放内存,将进程从列表中删除。

这个方法会带来两个问题:1.OS如何保证一个程序在它有效运行时不做我们不允许它做的事情?2.OS如何将它停止,并切换到其他进程。

Peoblem #1限制操作

OS如何辨别类似open()或read()的系统调用?当你调用open()时,你是在执行C库中的一个procedure call。其中,无论是open()还是其他系统调用,库都会使用与内核达成一致的调用来将参数放入彼此都了解的位置(堆栈,特定寄存器),将系统调用号也放入公共位置,然后执行上述trap instruction。trap unpacks并返回值后,库中代码返回control给发出系统调用的程序。因此,进行系统调用的C库部分是在汇编中hand-coded,它们必须遵循约定处理参数并返回正确值,以及执行hardware-specific trap instruction。

当运行在CPU上的程序想执行一些限制操作(向磁盘发I/O,获取更多类似CPU或内存的系统资源)时?

有一种方式是对程序访问不加限制。这样影响构建不同的操作系统,如果构建一个检查访问文件权限的文件系统时,不能简单地让任何程序都向磁盘发出I/O。这里引入新的Processor mode——user mode,如果运行在user mode中,一进程无法发出I/O,如果坚持发出请求则导致处理器引发异常,OS可能杀死进程。另一个是kernel mode,OS运行的模式能使用特权指令。

如果user 进程想执行特权操作怎么办?线代硬件为用户程序提供执行系统调用(允许内核向user  process开放功能:访问文件系统,创建销毁进程,进程间通信,分配内存)的能力。

要执行系统调用,程序必须执行特殊的陷阱指令。该指令同时跳转到内核并将权限级别提升到内核模式;一旦进入内核,系统现在可以执行所需的任何特权操作(如果允许),从而为调用进程执行所需的工作(处理器将程序计数器,flags,registers放入每个程序内核栈)。完成后,操作系统会调用一个特殊的从陷阱返回指令(return-from-trap将值从堆栈中pop出并继续执行程序),正如您所料,该指令将返回到调用用户程序,同时将权限级别降低回用户模式。

Mechanism:Limited Direct Execution的更多相关文章

  1. Edge Intelligence: On-Demand Deep Learning Model Co-Inference with Device-Edge Synergy

    边缘智能:按需深度学习模型和设备边缘协同的共同推理 本文为SIGCOMM 2018 Workshop (Mobile Edge Communications, MECOMM)论文. 笔者翻译了该论文. ...

  2. Gartner 2018 年WAF魔力象限报告:云WAF持续增长,Bot管理与API安全拥有未来

    Gartner 2018 年WAF魔力象限报告:云WAF持续增长,Bot管理与API安全拥有未来 来源 https://www.freebuf.com/articles/paper/184903.ht ...

  3. System and method to prioritize large memory page allocation in virtualized systems

    The prioritization of large memory page mapping is a function of the access bits in the L1 page tabl ...

  4. Flexible implementation of a system management mode (SMM) in a processor

    A system management mode (SMM) of operating a processor includes only a basic set of hardwired hooks ...

  5. Awesome Go精选的Go框架,库和软件的精选清单.A curated list of awesome Go frameworks, libraries and software

    Awesome Go      financial support to Awesome Go A curated list of awesome Go frameworks, libraries a ...

  6. 附录:ARM 手册 词汇表

    来自:<DDI0406C_C_arm_architecture_reference_manual.pdf>p2723 能够查询到:“RAZ RAO WI 等的意思” RAZ:Read-As ...

  7. iOS多线程编程指南(一)关于多线程编程(转)

    原文:http://www.dreamingwish.com/article/ios-multi-threaded-programming-a-multi-threaded-programming.h ...

  8. .NET 介绍

    In order to continue our effort of being modular and well factored we don’t just provide the entire ...

  9. Life of an Oracle I/O: tracing logical and physical I/O with systemtap

    https://db-blog.web.cern.ch/blog/luca-canali/2014-12-life-oracle-io-tracing-logical-and-physical-io- ...

随机推荐

  1. http短连接与长连接简介

    1.HTTP协议与TCP/IP协议的关系 HTTP的长连接和短连接本质上是TCP长连接和短连接.HTTP属于应用层协议,在传输层使用TCP协议,在网络层使用IP协议.IP协议主要解决网络路由和寻址问题 ...

  2. riakKV 配置

    安装好riakKV之后, 我们需要将 riak.conf 文件中的 nodename修改为本机的 IP 地址. nodename = xx@xxx.xxx.xx.xx listener.http.in ...

  3. mybatis使用接口联合查询

    一.先建立两个实体类和配置文件 配置文件 <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE c ...

  4. apache-jmeter 使用记录

    1.显示中文 找到jmeter下的bin目录,打开jmeter.properties 文件将 #language=en 修改为 language=zh_CN以后打开就是中文界面了 2.jmeter报错 ...

  5. js截取固定长度字符串,多余字符显示...

    function cutstr(str, len) { var str_length = 0; var str_len = 0; str_cut = new String(); str_len = s ...

  6. 网络请求get和post的区别

    网络请求get和post的区别 其实本文更应该放在HTTP相关的分类,但是目前我并没有开设这一个分类专栏,so临时储存在HTML分类吧 Get和post是HTTP请求的两种基本方式 get是从服务器上 ...

  7. 洛谷P1073 最优贸易

    题面要求的是一个差值,即走过一条路径能找到的路径上最大值-最小值. 那么相当于跑一遍最长路和一遍最短路,当然不是概念上的最长路最短路,这里把dis[v]的松弛改成用路径上传递来的最大/最小值维护,而不 ...

  8. 网页Title加LOGO图标

    <link rel="icon" href="XXX.ico" type="image/x-icon"/> 只能放格式为.ico ...

  9. Python之路【目录】

    https://www.cnblogs.com/wupeiqi/articles/4938499.html

  10. LeetCode算法历程-02

    编写一个程序判断给定的数是否为丑数. 丑数就是只包含质因数 2, 3, 5 的正整数. 示例 1: 输入: 6 输出: true 解释: 6 = 2 × 3 示例 2: 输入: 8 输出: true ...