操作系统为应用程序提供了n台虚拟机,有几个进程就有几台虚拟机,实际上计算机在最初发明的时候并没有指望运行多个进程,直到后来分时系统出来后,多道程序设计才成为可能,才有了多个进程分时共享cpu的概念。理解任何问题都要返朴归真地从原始定义理解,这样草能理解到其精髓,所以我们就认为进程实际上就等同于最开始的计算机上运行的计算任务,只不过原始的计算任务运行在硬件计算机上而现在的进程却运行在操作系统上,这个进程并不知道其它进程的信息,就好 像它们在不同的计算机上一样,实际上它们运行在不同的虚拟机上,至于操作系统直接支持的线程,实际上就是操作系统提供的多道程序设计的分时虚拟机而已,很简单,故不讨论(可以参看我以前的文章)。 
虚拟机被抽象出来了,那么既然进程可以直接运行于其上,虚拟机就应该提供接口,这些接口应该和真实的硬件机器一样,这些接口实际上就是一些硬件指令,比如 mov,add,jmp之类的指令,如果进程直接在真实的机器上执行这些指令无疑可以得到正确的结果,为了使得操作系统提供的虚拟机更加真实,在操作系统上运行的进程也必须可以直接执行这些指令,正是这样的,不过如果仅仅理解到这个层次的话稍微一深究,很多问题都不好解释了。实际上还有更多隐含的意义。 
上面提到的“机器”实际上应该说成cpu,机器的概念太广泛了,还包括io设备和电源等。我们说操作系统提供的虚拟机必须支持的指令就是cpu指令而不包括io指令,这是为什么呢?因为操作系统本身由cpu执行,cpu发展到当代早就有了分时功能,人们更加关注cpu而忽略了io设备,cpu其实已经成了 一个仲裁设备,一个负责管理的设备,而io设备就是一些提供特定功能的设备,功能强大并且单一,这个意义上说,分时特性是cpu提供的而非io设备,这样 的话,cpu指令完全可以提供给操作系统的虚拟机,因为不会造成混乱,前面说过,操作系统本身在cpu上运行,cpu具有分时特性,cpu完全可以仲裁好各个进程即虚拟机之间的时间分配,以使得各个虚拟机的指令好像它们单独在cpu上执行一样;但是io设备并没有很好的分时特性,它们很多都是只认命令,然 后执行,虽然有的真的可以并行执行,但是设备本身对时间片的分配并没有多少机制也不能设置什么策略,因此操作系统提供的虚拟机支持的指令中不可能直接支持 io指令,这怎么办呢?不能因为这就不能让进程不能执行io操作了啊,这很好办,让cpu仲裁就可以了,因此操作系统就提供了专门进行io的系统调用。 
因此操做系统必须提供一种io系统调用,让操作系统来处理cpu和io设备的差异,而不能直接让虚拟机来支持io指令。如果没有io设备这一说或者io设备也有分时特性,那么操作系统的设计就简单多了,就不需要什么read,write等系统调用了,可是事情不是那样,因此cpu和io设备的差异导致了操 作系统设计成这样。 
前面说过,cpu的地位和io设备的地位是平等的,因此cpu和io的通信就是一种设备间通讯,对仲裁cpu的操作系统来说是一种主外的行为,cpu搜集 所有虚拟机即进程的io操作请求,然后统一发送给io设备,io设备完成请求的时候会通知cpu事情的完成(中断),当然cpu也可以主动查询操作状态 (轮询,另外还有DMA),操作系统除了主外之外还要主内,主内的任务怎么说呢,其实很简单,就是进程调度,内存管理之类的,当然这些属于操作系统的职责,因此这些操作也不能直接提供给虚拟机,最终操作系统提供了两种系统调用,一种是主内的管理系统调用,另一种是主外的io系统调用。

这就是操作系统的虚拟机观点。

本文转自 dog250 51CTO博客,原文链接:http://blog.51cto.com/dog250/1273528

操作系统就是虚拟机--主内又主外相关推荐

  1. 解决虚拟机Linux(一个内网一个外网)不能上网问题

    记得在我刚接触虚拟机的时候,什么都不懂.最开始初学的时候,用的图形化界面学习Linux还好,连网比较轻松,可是在最小化的时候,我的虚拟机总是出现不能上网的情况,特别是一开始就弄的两个网卡,我就更不会了 ...

  2. 【MySQL】主键约束和外键约束

    目录 1.PRIMARY KEY 2.FOREIGN KEY 3.表的设计 3.1 一对一 3.2 一对多 3.3 多对多 1.PRIMARY KEY 上期我们讲述了 not null 和 uniqu ...

  3. sql 主键表与外键表的区分

    主键 表和外建表是相对来说的,简单的说就是一个表的 主键 是另外一张表的 外键 . 例如 class 班级表 主要字段如下: classId PRIMARY KEY( 主键 )班级ID classNa ...

  4. 虚拟机双网卡设置(外网+内网)

    [摘要]:本文主要介绍了在开发过程中,实现开发板利用网线直连电脑实现开发工作,而电脑又可以通过另一个无线或有线网卡正常连接互联网. [硬件开发环境]:开发主机--惠普笔记本(带无线网卡+有线网卡).开 ...

  5. Mysql完整性约束详解(字段唯一,非空,主键primary key,外键foreign key,自增长auto_increment)

    引入 1.什么是完整性约束, 为什么使用 为了规范数据格式, 在用户进行插入.修改.删除等操作时,DBMS(数据库管理系统(Data Base Management System))自动按照约束条件对 ...

  6. 数据库的主键表和外键表

    想写这个是因为自己刚好在尝试建一个数据库,而数据库的各个表之间的关系不是很清楚,没有形成一个整体的关系,所以就尝试着将数据库形成一个整理的关系表,我 敢说很多跟我一样的同学原来做课程设计,肯定就是随便 ...

  7. 操作系统例题:某文件系统中,针对每个文件,用户类别分为4类:安全管理员、文件主、文件主的伙伴、其他用户;访问权限分为5种:完全控制、执行、修改、读取、写入。若文件控制块中用二进制位串表示文件权限,为表

    题目 某文件系统中,针对每个文件,用户类别分为4类:安全管理员.文件主.文件主的伙伴.其他用户:访问权限分为5种:完全控制.执行.修改.读取.写入.若文件控制块中用二进制位串表示文件权限,为表示不同类 ...

  8. 死磕数据库系列(二十六):MySQL 高可用之单主、双主模型组复制配置实践

    点关注公众号,回复"1024"获取2TB学习资源! 前面我们学习:MySQL 高可用之组复制(MGR)技术的相关原理知识,今天我将详细的为大家介绍 MySQL 高可用技术组复制的单 ...

  9. uboot 如何设置网关地址_两种网络地址段,如何设置内网和外网一起上?

    一般企业都会有自己内部专用业务网络.及对外的互联业务两个网络,在具体使用过程中,根据业务类型的不同.部门职能的不同而分开使用两种网络. 但在使用过程中总会有特殊情况,就是一台电脑要同时使用两种业务网络 ...

  10. json中怎么去掉[]外的引号_SEO优化中怎么做站内和站外的锚文本

    在影响排名的所有SEO因素中,我们把最重要的因素献给了锚文本链接! 做站内和站外锚文本的技巧,包括基础的操作. 1.所有锚文本,都尽量采用绝对地址. 这样,当你的文章被转载.被采集.或Rss阅读器抓取 ...

最新文章

  1. 一、查看MVC4还是MVC5
  2. TF之DD:利用Inception模型+GD算法生成带背景的大尺寸、高质量的Deep Dream图片——五个架构设计思维导图
  3. mutli-lane情况
  4. mysql cmake 参数详解
  5. 双11万亿流量下的分布式缓存
  6. Spring07----Bean的作用域
  7. 图解Python多修饰器时哪个先起作用
  8. mysql 5.6 之 GTID 复制介绍
  9. 知道ip地址如何进入电脑_如何防止局域网电脑IP地址冲突
  10. python下载微信公众号文章_Python 抓取微信公众号文章
  11. 自然语言处理技术之准确率(Precision)、召回率(Recall)、F值(F-Measure)简介
  12. VSC/SMC(二)——基于趋近律的滑模鲁棒控制(白嫖程序模型)
  13. linux 的截屏软件下载,Linux 截屏软件 Shutter
  14. PHP 格式化字节大小
  15. 三星手机性能测试软件,Exynos4210处理器性能测试_三星 I9100 GALAXY SII(16GB/黑色)_手机Android频道-中关村在线...
  16. Win2008下IIS7不显验证码解决方案
  17. 对称加密非对称加密混合加密
  18. div+css静态网页设计——迪斯尼公主滚动特效(7页) HTML5网页设计成品_学生DW静态网页设计代做_web课程设计网页制作
  19. 关于IntelliJ IDEA有时候快捷键无效的说明
  20. teamviewer出现无法连接伙伴问题

热门文章

  1. java vector 实现二维数组
  2. proteus微型计算机梯形波,接口芯片dac0832的应用 三角波、梯形波两种波形.doc
  3. 64位userdata.dll丢失_因为计算机中丢失OCI.dll尝试重新安装该程序以解决此问题
  4. go标准库的学习-net
  5. 上海译文公布2019年“新书目录” 名家名译作品结集出版
  6. 使用PowerShell 导出Exchange中的用户中用户信息到Office 365
  7. Bash之正则表达式
  8. VS2010 asp.net development server 无法展示svg图片
  9. 查看oracle数据库是否归档和修改归档模式(转)
  10. NoSQL之【MongoDB】学习(三):配置文件说明