《操作系统与虚拟化安全》
第一次作业(预备知识)本次作业要求:
1. 这是个人作业,每位同学独立完成和提交。
2. 提交时间10月13日24点。
3. 如果遇到问题,请联系助教。
一、操作系统设计技术
1. 操作系统的主要任务是什么?
管理好计算机全部软硬件资源,提高计算机的利用率;担任用户与计算机之间的接口,使用户通过操作系统提供的命令或菜单方便地使用计算机
2. 操作系统文件的内部表示有文件索引节点表、文件表、用户文件描述符表,请你描述一下这三者之间的关系如何?并举例说明。
每个文件都有一个索引节点,索引节点包括文件所有者、存取权限、及其存取时间等信息;文件表示一个全局表,每个活动的open,它都包含一个条目,每个文件系统表的条目都包含文件偏移量、访问模式以及指向它的文件描述表的条目计数。每个进程包含一个用户文件描述表,标志进程打开文件的文件。
如在Linux中,每个文件在内核中用索引节点表示,已打开的文件在内核中用file结构体表示,文件描述符表中的指针指向file结构体,每个进程用一个files_struct结构体记录文件描述符的使用情况,files_struct结构成为用户打开文件表。
3. 操作系统进程的数据结构的主要组成部分包括哪几部分?并请你重点解释一下进程标识、进程树关系、进程间通信机制等三个部分。
(1)共包括八部分:1.标识号2.状态信息3.调度信息4.有关进程间通信信息5.进程链接信息6.时间定时器7.文件系统信息8. 进程和相关的上下文信息
(2)进程标识:系统通过进程标识号(PID)唯一标识一个进程,进程标识号是线性增长的;进程树关系:0进程是一个特殊进程,它是在系统引导时被“手工”创建的,当它创建一个子进程(1进程-init进程,是系统中其他每个进程的祖先)之后,0进程就变成对换进程,除了0进程以外,每个进程都是被另外一个进程执行fork创建的,每个进程都有一个父进程,但一个父进程可有多个子进程;进程间通信机制:为了使进程能在同一项任务上协调工作,进程之间必须能进行通信。如信号Signals,管道Pipes,以及内存共享shared memory, 信号量semaphore, 消息队列 Message Queues等。
4. 请你描述一下操作系统I/O子系统中内核与驱动程序接口、系统调用与驱动程序接口的作用是什么?
内核与驱动程序接口:由块设备开关表(block device switch table)和字符设备开关表(characterdevice switch table)描述。每一种设备类型在表中有若干表项,这些表项在系统调用时引导内核转向适当的设备驱动程序接口。
系统调用与驱动程序接口:对于特殊设备文件的系统调用,内核通过文件描述符找到对应的索引节点,从索引节点中抽取主设备号和次设备号,使用主设备号作为索引值进入适当的开关表,根据用户的系统调用来调用驱动程序中的函数。
二、虚拟化技术
1. 系统虚拟化体系结构分为宿主型和独立监控型两种类型,请你分析一下这两种类型体系结构,并分别举例说明现有虚拟化软件的体系结构属于哪种类型。
宿主型:需要运行在HostOS 之上,由其提供驱动程序与硬件通信;
独立监控型:直接运行于硬件之上;
比如VMwareworkstation 是宿主型,需要运行在操作系统之上,比如windows,
Xen是独立监控型,可以直接运行在硬件上。
2. 请你分析一下系统虚拟化实现技术中全虚拟化、泛虚拟化和硬件辅助虚拟化技术,比较一下各自优缺点,并分别举例说明现有虚拟化软件实现技术属于哪种类型。
(1)全虚拟化:原本的操作系统调直接调用硬件接口,给底层硬件发送的指令是二进制指令,加了一层虚拟机之后,操作系统不能直接调用底层,但依然发送二进制指令,这时候,虚拟机要拦截下指令,由虚拟机完成调用,所以虚拟机要转换二进制指令。优点在于不需要修改原来的操作系统,且操作系统运行在1环上,安全性很高,缺点在于这种软件拦截机制开销比较大。
(2)泛虚拟化:操作系统仍然可运行在0环上,更改操作系统内核,以前的二进制指令变成了hypercall调用,只有特权指令需要虚拟化。优点在于降低了虚拟机的难度,不需要对二进制指令进行转换了。缺点在于:需要修改OS内核。
(3)硬件辅助虚拟化:优点在于特权指令调用之时,不需要半虚拟化更改操作系统内核,也不需要二进制转换,因为有了硬件的支持。缺点:需要有硬件支持(如Intel VT, AMD SVM)。
VMware workstation与KVM是全虚拟化,Xen是硬件辅助虚拟化。
3. 请你简要描述一下Xen虚拟化系统中基于额度的调度算法思想。
该算法有两个参数其中一个参数cap是指示占用多少个cpu。另一个参数是weight指示一个是cpu占多少时间。初始化时:weight=credit,若cap=100则 vcpu占一个物理cpu,cap=200vcpu占两个物理cpu,在算法中有三个队列:OVER(已获得),UNDER(等待),BOOST(某些虚拟机让出了cpu,下次调度放进boost,在调度时优先调度),每10毫秒运行一次后credit=credit-100+30/n,3次之后额度用完,让出cpu,保证每个vcpu运行时间,保证相对公平。
该算法曾经出现过bug:某cpu阻塞挂起,加入boost队列,下个周期优先调度,周期加长,但是可以利用,在每次结束时,主动挂起,则可以无限期使用cpu可占80-90%的时间。现已经修复。
4. 请你简要描述一下MMU泛虚拟化和影子页表技术,以及比较一下他们的异同处。
MMU泛虚拟化方法:VMM将映射关系 f•g 直接写入guest OS的页表中,并替换原来的映射 g,这实际上违背了“f-map对于虚拟机不可见”的原则。
影子页表方法:为guest OS的每个页表维护一个影子页表,并将合成后的映射关系 f•g 写入到“影子”中,guest OS的页表内容保持不变。最后,VMM将影子页表交给MMU进行地址转换。
相同点:都是由VMM根据映射f和g生成符合映射f•g 并直接将这个映射关系交给MMU,从而利用现有的MMU机制实现虚拟地址到机器地址的高效转换。
不同点:虚拟地址到机器地址的转换执行者不同,一个是Guest OS,一个是VMM。