虚拟化机制的几大挑战: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. python之路-----python操作 mysql

    ========================pymysql============================ 一.pymysql 基础 安装命令:pip3 install pymysql - ...

  2. python修炼第四天

    今天换了师傅.江湖人称景女神^o^. 女师傅讲的比较细,原理的比较多.初学者来说有些难.但是基本功是必须要打牢的.努力! 迭代器 迭代器,迭代的工具1 什么是迭代,指的是一个重复的过程,每一次重复称为 ...

  3. Python学习第四天

    一.数字 int 二.字符串 str #以下均为补充内容 #对于空字符串是假 #数字0是假 #数字和字符串可以相互转换 # a="123" # b=int(a) # a=123 # ...

  4. 在用单片机接受串口数据的时候,第一位是0x0A

    unsigned char data len=0; //命令字符串长度if(RI) //如果数据已经接收完,即RI=1{ RI=0; //对RI进行清零 cmd_buf[counter] = SBUF ...

  5. 获取百度地图POI数据二(准备搜索关键词)

    上篇讲到  想要获取尽可能多的POI数据 需要准备尽可能多的搜索关键字   那么这些关键字如何得来呢?   本人使用的方法是通过一些网站来获取这些关键词   http://poi.mapbar.com ...

  6. SpringCloud系列------Config-Server

    关于Config-Server的那些事&踩过的坑! 一.概述 在一个相对成熟,高可用的Spring cloud项目中,都会配置一个配置中心去管理各个服务的配置文件,而往往配置文件不会放到本地配 ...

  7. 棋盘(noip2017普及组)

    题目描述 有一个m \times mm×m的棋盘,棋盘上每一个格子可能是红色.黄色或没有任何颜色的.你现在要从棋盘的最左上角走到棋盘的最右下角. 任何一个时刻,你所站在的位置必须是有颜色的(不能是无色 ...

  8. 吴恩达机器学习笔记5-Octave基本操作

    1.逻辑运算 1==2 %false :注释用%,这句话意思是判断1是否等于2,false,输出0 1~=2 %true  1不等于2 为true,输出为1 1&&0 %and 1|| ...

  9. python之99乘法表

    #99乘法表 fir=1 while fir<=9: sec=1 while sec<=fir: print(str(fir)+'*'+str(sec)+'='+str(fir*sec)) ...

  10. java 中根据类的属性排序

    package edu.del; import java.util.ArrayList; import java.util.Collections; import java.util.List; im ...