《操作系统》课程设计报告课程设计题目:操作系统课程设计 设计时间: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系统中boot什么意思说,Linux里boot什么意思相关推荐

  1. linux系统中删除一次性任务流程,Linux系统中的计划任务

    在系统的工作管理中,我们经常会有需要去告诉电脑某些特定的时间执行一些操作,比如定时提醒工作人员需要做什么事情,或者在每天凌晨进行文件备份等等.这就需要某些命令来达成计划任务. 计划任务可以大体上分成两 ...

  2. linux系统中如何查ip,在Linux系统中查看ip的命令是什么

    在Linux系统中查看ip的命令是什么 发布时间:2020-04-30 10:32:07 来源:亿速云 阅读:432 作者:小新 在排除网络问题,设置新连接或配置防火墙时,了解设备的 IP 地址非常重 ...

  3. Linux系统中的文件类型(Linux应用编程篇)

    windows系统下,操作系统识别文件类型一般是通过文件名后缀来判断 虽然Linux系统并不会通过后缀来识别文件,但是文件后缀也要规范.需要根据文件本身的功能属性来添加. LInux系统下一共分为 7 ...

  4. 在重启Linux系统中把内存,在重新启动Linux系统的同时把内存中的信息写入硬盘,应使用()...

    在重新启动Linux系统的同时把内存中的信息写入硬盘,应使用()由河北公务员考试网公务员行测试题栏目提供,更多关于国考银保监试题,河北公务员考试公务员行测试题的内容,请关注河北公务员考试网/河北人事考 ...

  5. linux系统中加密文件传输助手,Linux 下的安卓文件传输助手!

    如果你尝试在 Ubuntu 下连接你的安卓手机,你也许可以试试 Linux 下的安卓文件传输助手.本质上来说,这个应用是谷歌 macOS 版本的一个克隆.它是用 Qt 编写的,用户界面非常简洁,使得你 ...

  6. linux系统中list命令的含义,linux tasklist命令详解

    "Tasklist"命令是一个用来显示运行在本地或远程计算机上的所有进程的命令行工具,带有多个执行参数.那么它具体用法是怎样的呢?下面由学习啦小编为大家整理了linux taskl ...

  7. linux系统中tar命令的使用,Linux系统下正确使用tar命令的操作方法

    众所周知,Linux系统下tar命令打包文件,把几个不同的文件集合在同一个文件中,跟压缩软件的功能有点类似.但是很多用户不知道如何操作,下面,我们就一起来看看Linux系统下正确使用tar命令的操作方 ...

  8. linux系统中pwd命令的作用,Linux运维pwd命令有什么用途?linux系统

    Pwd命令用于显示当前所在的位置,是Linux运维工作人员需要掌握的Linux文件和目录操作命令之一.对于Linux运维工作,Linux命令是必不可少的.随着技术的发展,市场对于Linux运维人才的需 ...

  9. linux系统中扩展一个逻辑卷,Linux 创建及扩展逻辑卷

    标签:系统 实验01    创建逻辑卷 实验目标 从两块磁盘上各取10GB组成20GB的卷组 从卷组中划分一个16GB的逻辑卷 将此逻辑卷格式化并挂载到/mbox 实验步骤 一.为新添加的两块硬盘分区 ...

  10. linux系统中tar命令的使用,linux 系统的tar命令使用方法详解

    -j :是否同时具有 bzip2 的属性?亦即是否需要用 bzip2 压缩或解压?一般格式为xx.tar.bz2 -v :压缩的过程中显示文件!这个常用 -f :使用档名,请留意,在 f 之后要立即接 ...

最新文章

  1. 关于 RMAN 备份 数据块 一致性的讨论
  2. 爱我少一点,我请求你
  3. Python 数据类型--Bytes类型
  4. 水厂计算机知识,计算机信息在水厂中的管理与应用的探讨
  5. php案例纠错,PHP编程纠错指南
  6. 一个类中有一个参数,需要在另一个类中用到
  7. network 公网IP与私网IP的区别
  8. odp.net连接oracle9i 出错解决_架构师成长之路:Kafka连接器深度解读之错误处理和死信队列...
  9. express中 routes/index.js
  10. 模拟电路——晶体管基础
  11. 庆祝:黑客x档案官方二级域名转向
  12. 固态硬盘系统经常假死_使用固态硬盘装Win10经常假死怎么解决
  13. librosa.stft的输出
  14. 各种级数(调和、几何)总结
  15. 视频技术系列 - 分析业内数字版权管理DRM技术
  16. 01 | 时势与英雄:HTTP的前世今生
  17. 2020 高考英语高频短语
  18. 排列组合|分组和分配问题
  19. 【2023年电工杯数学建模竞赛】选题分析+A题B题完整思路+代码分享
  20. 你想成为一名核心开发者吗?

热门文章

  1. 4个最佳项目创意的代码片段和示例,旨在为Python和机器学习构建出色的简历!...
  2. 赣南师范大学考研c语言真题,赣南师范大学651C语言程序设计科目三考研真题详解...
  3. 白骨顶鸡优化算法(Coot Optimization Algorithm,COOT)
  4. 摩托罗拉GP68对讲机官方说明书下载,包含使用说明压音表和电路结构等
  5. 世界各国的会计年度、记账本位币
  6. python爬虫(登录豆瓣并修改签名)
  7. Vue Element UI 之富文本图片上传服务器 + 图片地址插入富文本
  8. 制作数据集(二)--为图片数据集打上标签并保存为txt文件
  9. redis映射的概念_搭建分布式Redis Cluster集群与Redis入门
  10. Kubernetes 核心组件 kubelet