《操作系统》课程设计报告课程设计题目:操作系统课程设计 设计时间:2016/1/10一、 课程设计目的与要求需要完成的内容:(1) 安装虚拟机:Vmware、Vmware palyer (free)(推荐)、Virtualbox(推荐)、VMLite、Xen、Virtuozzo、KVM(2) 安装和使用Linux(推荐SUSE)(注意包含内核源码和内核开发工具等)(3) Linux内核源代码配置和重编(4) 找到VFS和一个具体文件系统的源代码(ext3或ext4)(5) 读懂VFS和具体文件系统如何关联(如何体现virtual file switch)(6) 找到具体文件系统的read或write函数,使用printk(使用方法和printf一样)向后台打印文件读写信息。(read或write函数选一个即可)(7) 使用dmesg –c查看后台的输出。可以附加的功能(8) 复制ext3或ext4的源代码(注意与当前使用的文件系统有区别),修改Makefile文件,使用模块编译方式(9) 修改ext3或ext4的源代码,实现新的文件系统。(至少需要修改文件系统的名称,最好能对文件写操作向系统后台打印出信息。)(10) 动态加载和卸载新的文件系统。二、 课程设计内容(1) 安装虚拟机(2) 安装和使用Linux(3) Linux内核源代码配置和重编(4) 提取并动态加载和卸载新的文件系统三、 课程设计设备与环境设备信息:PC

虚拟机:VM11

四、 设计正文(包括分析与设计思路、各模块流程图、带注释的主要算法源码、内核编译过程以及动态模块加载过程等,如有改进或者拓展,请重点用一小节进行说明)(1) 安装虚拟机(2) 安装和使用Linux(推荐SUSE)(注意包含内核源码和内核开发工具等)安装OpenSUSE,并下载相近版本的内核源码

初始内核版本

下载的源代码包

(3) Linux内核源代码配置和重编利用vmtools(虚拟机提供的可以在宿主机和虚拟机之间自由复制文件的工具)将内核源码包复制进虚拟机,解压到/home/a123/linux-3.12.51

*因为分配的磁盘空间比较小,所以没有按照惯例把内核源码放在/usr/src目录下(如果放在这里,会出现空间不足的情况)附:磁盘分配情况/swap(交换分区) 2.4G/(根目录) 11G/home(用户目录) 13G

解压好的内核源码文件在编译前需要稍作修改(6),并且缺乏一个config文件告诉编译器编译哪些功能。Config文件可以用make menuconfig命令生成,但是需要自己选择相应的功能,太过复杂,这里有一个简便的方法因为下载的内核源码是相近的版本,所以可以使用现有版本的config文件,该文件在/boot目录下使用cp /boot/config-3.11.6-4-desktop .config命令将此文件复制过来

注意:应当在内核所在的文件目录下使用此命令复制成功

执行 make menuconfig命令,进入选择界面,直接保存退出即可虽然新版本的Linux可以直接执行make一步完成所有的编译工作,但此次课程设计仍然采用以前的编译的方式

执行 make bzImage命令——编译压缩的内核编译完成

执行 make modules命令——编译模块

执行 make modules_install命令——安装模块

注:

在make menuconfig时我在General setup中把版本号改过

执行 make install命令——安装新内核

Reboot重启

说明内核修改安装完毕,成功(4) 找到VFS和一个具体文件系统的源代码(ext3或ext4)VFS:虚拟文件系统,顾名思义。它为应用程序员提供一层抽象,屏蔽底层各种文件系统的差异。Linux的文件系统采用面向对象的方式设计,这使得Linux的文件系统非常容易扩展,我们可以非常容易将一个新的文件系统添加到Linux中。在此主要对象之一super_block位于中

代码量巨大,此为部分代码Ext4在fs文件夹下的ext4文件夹内

此处打开file.c用vim打开file.c部分代码如下

(5) 读懂VFS和具体文件系统如何关联(如何体现virtual file switch)在(4)中已经提到,VFS是C语言写的一个面向对象的设计,比如我们要调用alloc_inode方法:sb->s_op->alloc_inode(sb)。这里与面向对象语言的差别是,面向对象语言里实例方法可以访问到this,这样就可以访问到自身的所有成员,但是在C里却做不到,所以需要将自身作为参数传入到函数中、图一表示了对文件写操作的调用过程

(6) 找到具体文件系统的read或write函数,使用printk(使用方法和printf一样)向后台打印文件读写信息。(read或write函数选一个即可)因为Linux系统对文件的操作是通过函数调用来实现的,所以在此我修改的是vfs这一层,找到fs,目录下的read_write.c并打开找到do_sync_read函数,在其返回前加入printk语句

(7) 使用dmesg –c查看后台的输出。

(8) 复制ext3或ext4的源代码(注意与当前使用的文件系统有区别),修改Makefile文件,使用模块编译方式

(9) 修改ext3或ext4的源代码,实现新的文件系统。(至少需要修改文件系统的名称,最好能对文件写操作向系统后台打印出信息。)

使其在加载和卸载的时候能够printk到buffer缓冲中(10) 动态加载和卸载新的文件系统。使用insmod语句加载使用lsmod语句加载

加载成功接下来使用dmesg 查看缓冲区内容

成功接下来使用rmmod语句卸载模块

成功五、 课程设计结果及分析课程设计结果:成功分析:Linux文件系统使用了面向对象的设计方法,保证了其对用户的透明,VFS层实现了系统与文件系统的无关性,增加了系统对不同文件系统的兼容性。六、 总结与进一步改进设想总结:1.编译内核的时候,可以使用make XXX –j8这样可以开启多线程编译(我的虚拟机分配的是8核心),加快编译速度2.printk语句我写的是printk(”””DoingRead”);本意是利用printk的优先级,将其输出到用户态的控制台,结果语法错误,并没有输出到控制台改进设想:修改的文件前加上语句,实现对控制台的输出

define KERN_EMERG 0(因为缺少这个宏,导致系统并没有理解我的0是什么意思)

七、 答辩(或汇报)记录(包括问题和答案,每个人不少于3个)

显示内核版本

使用dmesg –c命令

加载新模块

八、 参考文献

鸟哥的Linux私房菜

百度百科:printk概述http://baike.baidu.com/link?url=Kv5e2xb9thGENkIvSQmjpkYb8kbKoNvEhmt2oICTmDAn0wj2YADVf8dsrzBtz2fRt0uwa_3joQ-o40wKwwL68a

Linux虚拟文件系统(VFS)http://www.cnblogs.com/yuyijq/archive/2013/02/24/2923855.html

LinuxEXT4文件系统分析http://wenku.baidu.com/link?url=Wi-vyrROUIJqRk4eSsuwOwRe0Sf-ydXamWNR0H2HCrN9CPHJg80lXpu0Gi_ZGT-X5yKnknl86ooHdckHhJxybmyBR2szWsPDOV0IPJ6fJXO

linux kvm 时间,查看KVM虚拟机时间相关推荐

  1. 如何查看linux重启时间,Linux系统怎么查看最后重启时间

    平常我们不会去注意系统的最后重启时间,但在特殊的情况下我们还是会去查看的,那么Linux系统怎么查看最后重启时间呢?就让学习啦小编来告诉大家Linux系统查看最后重启时间的方法吧,希望对大家有所帮助. ...

  2. 查看日期命令linux,linux date命令查看和设置时间详解(图文)

    date命令 date命令的功能是显示和设置系统日期和时间. 该命令的一般格式为: date [选项] 显示时间格式(以+开头,后面接格式) date 设置时间格式 命令中各选项的含义分别为: 复制代 ...

  3. Linux(Ubuntu)同步互联网时间(ntpdate)

    <用 ntpdate从(互联网)时间服务器同步系统时间> 1.安装ntpdate(时间服务客户端) 如果系统没有 ntpdate 命令,可在线安装: sudo apt-get instal ...

  4. openstack的qcow2镜像制作、linux系统中安装kvm虚拟机并导出为qcow2虚拟机、virt-manager制作qocw2镜像和转为raw格式——2.6w字超详细说明所有流程。

    文章目录 说明 环境准备 虚拟机中安装kvm虚拟机 1.确保支持cpu虚拟化 2.安装qemu-kvm.libvirt.virt-install包和权限调整 3.开启libvirtd服务病开机自启 4 ...

  5. linux kvm安装win7,详解在 KVM 上安装 Win7 虚拟机

    详解在 KVM 上安装 Win7 虚拟机 发布时间:2017-04-04 21:09 来源:互联网 当前栏目:web技术类 之前都是在用Linux 虚机,现在有需要用到Win7 虚机,才发现在 KVM ...

  6. linux 快照备份导出,KVM之虚拟机几种备份方法(快照/克隆/导出)

    为了方便区分宿主主机与虚拟,我们修改主机的hostname. [root@localhost ~]# hostnamectl set-hostname kvm #修改宿主主机的主机名为kvm [roo ...

  7. linux 内存查看 kvm,Linux虚拟化KVM-Qemu分析(五)之内存虚拟化

    原标题:Linux虚拟化KVM-Qemu分析(五)之内存虚拟化 背景 Read the fucking source code! --By 鲁迅 A picture is worth a thousa ...

  8. linux ps查看完整时间,Linux ps 命令查看进程启动及运行时间

    引言 同事问我怎样看一个进程的启动时间和运行时间,我第一反应当然是说用 ps 命令啦. ps aux或ps -ef不就可以看时间吗? ps aux选项及输出说明 我们来重新复习下ps aux的选项,这 ...

  9. 虚拟机桌面linux系统,KVM - Linux下三大免费桌面虚拟机评测_Linux教程_Linux公社-Linux系统门户网站...

    KVM KVM(基于内核的虚拟机)是一个x86 Linux全虚拟化解决方案,需要硬件支持虚拟化扩展(Intel VT 或AMD-V),它由一个载入时内核模块kvm.ko(提供核心虚拟化基础设施)和一个 ...

最新文章

  1. Node.js 报语法错误 SyntaxError: Unexpected identifier
  2. 科大星云诗社动态20210827
  3. kafka消息消费原理演示
  4. idea集成Activiti Designer插件
  5. Moody Photoshop Panel for mac(ps专业色彩调色扩展面板)
  6. ctype库中关于字符串的常用函数汇总
  7. 华为服务器报错信息,厂商 push 不通排查指南
  8. U盘做启动盘之后容量变小
  9. λ^n |λI−AB|= λ^m |λI−BA|
  10. 如何在 React Native 中使用 NFC 标签
  11. Flutter 不是真正的跨平台框架
  12. USB协议详解第20讲(USB包-帧首包SOF)
  13. 站内信通知数据表设计
  14. java 写入excel 追加,Java - 追加excel
  15. 网易有数永久免费开放BI能力 普惠让技术更有温度
  16. GPU 编程与CG 语言之阳春白雪下里巴人——CG学习读书笔记之数学函数(之一)。
  17. 汽车百科系列之(七): 你喜欢什么样的车身颜色
  18. netdata安装方式
  19. JS小游戏_能坚持几秒
  20. nhibernate mysql配置_NHibernate 连接多数据库怎么配置?

热门文章

  1. Python之warnings模块忽略warning警告错误
  2. 「群体遗传学实战」第三课: 如何对SNP位点进行过滤
  3. YOLO的cfg文件说明
  4. 晋丰佳创:抖音短视频里的版面内容复杂吗?这样设计的原因是什么
  5. 人工智能岗位薪资与对应要求
  6. C的编译链接及Makefile学习
  7. 任建新照常去办公室领取工资
  8. 查看mysql版本的方法
  9. java分页打印_谷歌Chrome打印分页
  10. VTK源码阅读--vtkObject类-观察者/命令模式