虚拟化机制的几大挑战: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. 将VS项目提交至SVN时,怎样忽略bin和obj目录中的文件

    方法一: 通过设置SVN的Global ignore pattern值. 使用下面的设定值: *.o *.lo *.la *.al .libs *.so *.so.[0-9]**.a *.pyc *. ...

  2. virtualenv与virtualenvwrapper的配置

    virtualenv是用来创建python虚拟环境的一个工具(python的Scripts目录下virtualev.exe文件),virtualenvwrapper是用来 便于管理virtualenv ...

  3. 转:LRU算法

    LRU是Least Recently Used的缩写,即最近最少使用页面置换算法,是为虚拟页式存储管理服务的,是根据页面调入内存后的使用情况进行决策了.由于无法预测各页面将来的使用情况,只能利用“最近 ...

  4. 关于基于LinphoneSDK通话项目开发中遇到的相关问题

    在之前小学期的项目开发当中,我们小组进行的是使用网上开源的LinphoneSDK来开发一款Android端的VOIP电话APP. 因为网上关于这个SDK在安卓端的开发文档相当少,所以我们只能根据少量的 ...

  5. 第六次作业———numpy数据集练习

    1. 安装scipy,numpy,sklearn包 2. 从sklearn包自带的数据集中读出鸢尾花数据集data 3.查看data类型,包含哪些数据 4.取出鸢尾花特征和鸢尾花类别数据,查看其形状及 ...

  6. ecplise的Jsp红叉错误消除

    当做项目的时候,引入的jsp文件可能会出现红叉的情况,重新输入任意字符再删除,保存后恢复正常. 原因是由于jsp中的方法还没有实现,等方法写完之后,再使jsp文件重新处于编译状态,保存后恢复正常.

  7. 2018工业信息安全技能大赛华东赛区初赛 第2题 writeup

    2018工业信息安全技能大赛华东赛区初赛 第2题 解题思路 本题主要考察点是对常见工控协议的理解(modbus/tcp和s7comm),题目目标是寻找出报文中某条异常报文流量.很让人疑惑的是,题目中并 ...

  8. web语言发展史

    引用自CSDN,地址:https://blog.csdn.net/moshenglv/article/details/51590830 提到Web,不得不提一个词就是“互联网”.Web是World W ...

  9. .NET复习笔记-泛型

    1.yield关键字用于返回迭代器具体的值,如下框代码所示 /// 返回0~9整数集合 public static IEnumerable<int> yieldSampleMethod() ...

  10. GoGland 快捷键说明

    关于Gogland一些常用快捷键的说明,我在网上没有搜索到,于是乎,我找到了官网中的视频介绍,然后将其中的一部分摘录了出来,希望能帮住大家... Gogland——使用说明前面是苹果|后面是linux ...