虚拟化机制的几大挑战: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. 保存cookie状态封装

    from urllib import request, parsefrom urllib.error import HTTPError,URLError#保存cookiefrom http impor ...

  2. UVa LA 4094 WonderTeam 构造 难度: 1

    题目 https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&page=show_pr ...

  3. 复杂xml格式报文和实体类之间的转化

    pom.xml中引入如下依赖: <dependency> <groupId>org.eclipse.persistence</groupId> <artifa ...

  4. javeEE第二周

    XML(可扩展标记语言) 1.什么是xml? 扩展标记语言 XML(Extensible Markup Language) 的规范定义:用于标记电子文件使其具有结构性的标记语言,可以用来标记数据.定义 ...

  5. js 统计字符串中字符出现的次数

    var str='abbcccdddd';var obj={};for(var i=0;i<str.length;i++){ var key=str.charAt(i); if(obj[key] ...

  6. R语言求根

    求根是数值计算的一个基本问题,一般采用的都是迭代算法求解,主要有不动点迭代法.牛顿-拉富生算法.割线法和二分法. 不动点迭代法 所谓的不动点是指x=f(x)的那些点,而所谓的不懂点迭代法是指将原方程化 ...

  7. C# 异常:索引超出了数组界限。

    数组如果只取到了三个元素, 而引用数组的时候引用了五个, 就会有此错误.

  8. DevExpress v18.2新版亮点——DevExtreme篇(二)

    行业领先的.NET界面控件2018年第二次重大更新——DevExpress v18.2日前正式发布,本站将以连载的形式为大家介绍新版本新功能.本文将介绍了DevExtreme Complete Sub ...

  9. 如何查看tomcat的支持的jdk、servlet、jsp的版本

    解压servlet-api 查看 可以看出,支持的servlet版本是4.0,jdk是1.8

  10. selenium+python启动浏览器出错,安装浏览器驱动

    WebDriver 支持 Firefox (FirefoxDriver).IE (InternetExplorerDriver).Opera (OperaDriver) 和 Chrome (Chrom ...