minos 0 前(废)言(话)
- 首发公号:Rand_cs
minos 0 前(废)言(话)
从今天开始开启一个新的系列,讲述虚拟化的那些事儿。时隔上次发文又隔了好几个月了,主要是平时工作比较忙,没太多时间精力维护博客之类的。
前一个系列 SELinux 没写完,但也不算太监,比较重要的基本都介绍了。剩下的就是 Linux 中关于 SELinux 驱动以及 libselinux 中的代码,关键部分的代码我基本捋了一遍,有些多,我也就懒得花时间整理了,我估计这玩意儿也没多少人感兴趣,懂这原理后实际用处也不大,感兴趣的可以去瞅瞅这代码,有问题的可以找我交流。SELinux 这东西应用是最重要的,就是策略,策略才是核心。这个在 Android 可能用的比较多,添加服务,应用,cts 测试等等可能都会遇到过 SELinux 策略的问题。从接触到现在,我也解决过许多 SELinux 兼容性的问题,简单的问题网上解决方式一大堆,比较复杂的 case,碍于公司事项,也不好实际拿出来讲,所以 SELinux 应用方面也就先不讲述了,这个系列就先到此为止,后面有缘再续。
回到虚拟化,虚拟化一直是我感兴趣的方向,工作之余一直有慢慢抽时间去了解学习。从课堂上接触到操作系统的时候,那是还是一个小菜鸟,对于操作系统课程各种抽象的说辞很是不解,为此去仔细研究了 xv6,基本做到了每行代码细细研究,终于对于操作系统有了一个比较直观的认识。至少说,虚拟内存、进程线程、上下文切换、shell 程序等等这些当时对我来说特别抽象的名词有了清晰的认识,并且从硬件到软件明白了它们是如何工作的。我印象最深的就是 shell 程序,当时书上还有老师给来了一句抽象的解释,shell,壳儿嘛,包裹着内核,通过 shell 程序我们执行命令程序,进入内核。当时我就直接懵逼了,,,这,这,这,可以这么解释的嘛。
又扯了太多,深夜写文章就是话多哈哈哈哈,再次回到虚拟化。虚拟化的话题也很大,而这个系列主要集中在 type1 类型的虚拟化。对于虚拟化相关的文章,网页上很多,写得很好的不计其数,我印象很深的,知乎上有个叫兰新宇大佬的博客,写得很好,推荐:https://www.zhihu.com/people/lan-xin-yu;
但总的来说,还是抽象了,没有落到实际的代码,有些东西终究模糊。源码之下,了无秘密,还是得看代码去学习虚拟化的一些知识。平时精力有限,一些耳熟能详的虚拟化方案太复杂,不太适合直接上手阅读学习。在网上搜索了一番,终于找到了一款小巧功能完整的 type1 类型的虚拟化方案。
此项目地址:https://github.com/minosproject/minos/tree/master 。看名字应该是一位叫做 乐敏 的大佬的项目,感谢这位大佬的项目,让我们有机会更加深入的接触到虚拟化的世界。
此项目的代码关键部分基本看完了,可以拿出来和大家分享分享。这次讲述可能不会像之前 xv6 那样详细到每行代码,大部分只是捋一下流程,有代码的那种比较清晰的流程。主要包括以下几个方面:
1. 内存虚拟化,也就是 hyp 如何对内存进行管理的
2. CPU 虚拟化,也就是 hyp 如何对进程进行管理的
3. 中断虚拟化,捋清楚在有虚拟化的情况下,各种中断是如何路由与处理的
4. IO 虚拟化,也就是虚拟机之间,虚拟机与 hypervisor 之间,虚机与物理硬件之间等等如何进行数据交互的
核心的大概就上面这些,其他的随缘,后面看时间精力来吧。目前这个系列前半部分——主要讲述上述虚拟化流程,基本已经写完了,这也是为什么搁了那么久才发文的一个原因,想着自己对 minos 有个整体把握,相关文章初稿都写完后,再慢慢发出来。
- 首发公号:Rand_cs
minos 0 前(废)言(话)的更多相关文章
- 写在OI退役后和高中毕业前的一些话
更新日志: 2017.02.13 开坑 2017.02.13 更新[零][壹] 2017.02.14 更新[贰] 2017.02.26 更新[叁][肆] 2017.03.04 锅多如狗,停更一周 20 ...
- appcompat v21: 让 Android 5.0 前的设备支持 Material Design
1. 十大Material Design开源项目 2. appcompat v21: 让 Android 5.0 前的设备支持 Material Design 主题 AppCompat已经支持最新的调 ...
- 【Vuejs】301- Vue 3.0前的 TypeScript 最佳入门实践
前言 我个人对更严格类型限制没有积极的看法,毕竟各类转类型的骚写法写习惯了. 然鹅最近的一个项目中,是 TypeScript+ Vue,毛计喇,学之...-真香! 1. 使用官方脚手架构建 npm i ...
- 【vue&ts开发】Vue 3.0前的 TypeScript 最佳入门实践
1.使用官方脚手架构建 新的 VueCLI工具允许开发者 使用 TypeScript 集成环境 创建新项目. 只需运行 vue createmy-app. 然后,命令行会要求选择预设.使用箭头键选择 ...
- ios计算内容的高度 (含7.0前及以后的版本的用法)
+ (CGFloat)heightForContent:(MyMsgTextModel *)content withWidth:(CGFloat)width { CGSize contentSize; ...
- ASP.NET MVC 4.0 学习2-留言板實現
新增專案實現留言板功能,瞭解MVC的運行機制 1,新增專案 2,添加數據庫文件message.mdf Ctrl+W,L 打開資料庫連接,添加存放留言的Atricle表 添加字段,後點擊&quo ...
- Thinkphp5.0+Vue2.0前后端分离框架Vuethink
VueThink是一套基于Vue全家桶(Vue2.x + Vue-router2.x + Vuex)+ Thinkphp的前后端分离框架. 脚手架构建也可以通过vue官方的vue-cli脚手架工具构建 ...
- 【译】Optaplanner开发手册本地化: (0) - 前言及概念
在此之前,针对APS写了一些理论性的文章:而对于Optaplanner也写了一些介绍性质,几少量入门级的帮助初学者走近Optaplanner.在此以后,老农将会按照Optaplanner官方的用户手册 ...
- 可遇不可求的Question之MySql4.0前版本不支持union与批量SQL提交
批量SQL提交 参考 21.2.6. Connector/NET Connection String Options Reference . Allow Batch true When true, m ...
- 学python之路前的一些话
为什么学python: 这些年一直从事运维相关的工作.但做下来感觉都是些很基础的东西,无非就是对一些命令或者问题处理很熟练而已,混的都是经验.曾很羡慕会写shell脚本,会自动化安装程序的运维组组长, ...
随机推荐
- 力扣610(MySQL)-判断三角形(简单)
题目: 表: Triangle 写一个SQL查询,每三个线段报告它们是否可以形成一个三角形. 以 任意顺序 返回结果表. 查询结果格式如下所示. 示例1: 解题思路: 判断是否形成三角形的准则是:两 ...
- C++ 访问说明符详解:封装数据,控制访问,提升安全性
C++ 访问说明符 访问说明符是 C++ 中控制类成员(属性和方法)可访问性的关键字.它们用于封装类数据并保护其免受意外修改或滥用. 三种访问说明符: public:允许从类外部的任何地方访问成员. ...
- EMR StarRocks 极速数据湖分析原理解析
简介:数据湖概念日益火热,本文由阿里云开源大数据 OLAP 团队和 StarRocks 数据湖分析团队共同为大家介绍" StarRocks 极速数据湖分析 "背后的原理. [首月9 ...
- Flink 如何实时分析 Iceberg 数据湖的 CDC 数据
简介: 数据湖的架构中,CDC 数据实时读写的方案和原理 本文由李劲松.胡争分享,社区志愿者杨伟海.李培殿整理.主要介绍在数据湖的架构中,CDC 数据实时读写的方案和原理.文章主要分为 4 个部分内容 ...
- [FE] Quasar BEX 热加载区别: Chrome vs Firefox
Chrome 浏览器加载扩展程序时指定的是 src-bex 目录.Firefox 指定的是 manifest.json. Quasar 提供的热加载特性是 修改 src/ 目录里的文件,src-bex ...
- [Docker] 使 Volume 独立于容器运行时的方式 - 让容器引擎去处理
在单纯使用 run 命令运行一个容器时,通常会使用 -v 挂载的方式来实现宿主机数据卷映射到容器内. 使用命令: $ docker run --name mysql-con -v /my/custom ...
- [Contract] web3.eth.getAccounts, web3.eth.getCoinbase 使用场景区别
web3.eth.getAccounts() 返回节点控制的账号列表(Promise returns Array) web3.eth.getCoinbase() 返回挖矿奖励所归集的地址(Promis ...
- dotnet 6 已知问题 获取 CultureInfo.NumberFormat 可能抛出 IndexOutOfRangeException 异常
本文记录一个 dotnet 6 已知问题,准确来说这是一个在 dotnet 5 引入的问题,到 dotnet 6.0.12 还没修.在获取 CultureInfo.NumberFormat 属性时,在 ...
- Fiddler 将插件放在独立子文件夹
我的 Fiddler 安装了许多插件,有一些插件存在 DLL 名冲突问题,比如多个不同的插件都存在名为 PluginCore.dll 但实际实现逻辑完全不相同的程序集.这就导致了多个插件的安装之间,如 ...
- RT-Thread 运行时常见错误
一.空线程栈较小 现象: 现象一: 现象二: 原因: 从RT-Thread文章中心可知,空闲线程是不能被挂起的,官方文档说明如下图所示: 注意:必须保证空闲线程的栈空间足够,否则空闲线程内存溢出后,也 ...