操作系统课程设计实验报告

上传人:桔**** 文档编号:564643915 上传时间:2022-07-24 格式:DOCX 页数:18 大小:31.08KB
返回 下载 相关 举报
操作系统课程设计实验报告_第1页
第1页 / 共18页
操作系统课程设计实验报告_第2页
第2页 / 共18页
操作系统课程设计实验报告_第3页
第3页 / 共18页
操作系统课程设计实验报告_第4页
第4页 / 共18页
操作系统课程设计实验报告_第5页
第5页 / 共18页
点击查看更多>>
资源描述

《操作系统课程设计实验报告》由会员分享,可在线阅读,更多相关《操作系统课程设计实验报告(18页珍藏版)》请在金锄头文库上搜索。

1、操作系统课程设计实验报告学号:姓名:苏州大学计算机科学与技术学院2014年9月目录目 录 1一、实验环境 2二、实验报告总体要求 2实验一编译Linux内核3实验二观察 LINUX 行为 7实验三进程间通信 14一、实验环境Linux 平台硬件平台:普通PC机硬件环境。 操作系统:Linux环境,例如,红旗Linux或Red Hat Linux;启动 管理器使用 GRUB。编译环境:伴随着操作系统的默认gcc环境。 工作源码环境:一个调试的内核源码,版本不低于2.4.20。二、实验报告总体要求在 2013 年 11 月 25 日前提交实验报告。实验报告至少要求包含以下 内容:1. 引言:概述本

2、次实验所讨论的问题,工作步骤,结果,以及发现的意 义。2. 问题提出:叙述本篇报告要解决什么问题。注意不可以抄写实验要求 中的表述,要用自己的话重新组织我们这里所提出的问题。3. 解决方案:叙述如何解决自己上面提出的问题,可以用小标题 3.1,3.2等分开。这是实验报告的关键部分,请尽量展开来写。注意, 这部分是最终课程设计的基本分的部分。这部分不完成,本课程设计 不会及格。4. 实验结果:按照自己的解决方案,有哪些结果。结果有异常吗?能解 释一下这些结果吗?同别人的结果比较过吗?注意,这部分是实验报 告出彩的地方。本课程设计要得高分,应该在这部分下功夫。5. 结束语:小结并叙述本次课程设计的

3、经验、教训、体会、难点、收获、 为解决的问题、新的疑惑等。6. 附录:加了注释的程序清单,注释行数目至少同源程序行数目比1: 2,即10 行源程序,至少要给出5 行注释。实验一 编译 Linux 内核实验时间6 小时实验目的认识 Linux 内核的组成,掌握配置、编译、安装 Linux 内核的步骤。实验目标下载2.6.19或更新的Linux内核,配置该内核使其支持NTFS,并在新的内核 中修改其版本为Linux NameTestKernel x.x.x,其中,Name是你的名字(汉语拼音); X.X.X是新内核的版本号,最后在你的机器上编译安装这个新内核。背景知识参见Red Hat Enter

4、prise Linux 4入门与提高第20章。实验步骤1. 验证gcc的可用:在你自己的工作目录下,编译链接运行Hello World程序。2. 在http:/www.kernel.org上下载指定的内核,或者查找更新的稳定版内核并下 载之。3. 准备相关工具。提示:如当前运行的Linux内核是基于2.4版本的,则需要更新以下软件module-init-tools 和mkinitrd。具体更新信息可参见下载内核源代码中的ocumentation/Changes这个文件。4. 把源代码解压缩至/usr/src中,最终形成/usr/src/linux x.x.x/目录(x.x.x是新内 核的版本号

5、)。提示:这里的注意点是路径的选择一般要放在usr/src/linux x.x.x/目录下面,以满足Makefile 对路径设置的初始要求。5. 进入源代码的根目录(/usr/src/linux x.x.x),找到合适自己的内核配置方法,并 按照实验目标对其进行配置。注:如果没有这个文件,请执行命令:make include/linux/version.h编译内核。安装模块文件。6. 修改 /usr/src/linux x.x.x/include/linux/version.h 文件中的版本信息。7.8.9. 安装内核文件。10. 重新启动新内核。实验结果1. 实验步骤 1 中,编译链接运行程

6、序你下达了哪些命令?2. 实验步骤2中,你下载了哪个版本的内核文件?3. 实验步骤 3 中,你是否安装了相关工具?如安装,则写出安装过程。4. 实验步骤4中,你是用哪些命令解压缩内核文件的?5. 实验步骤5中,你用了哪种内核配置的方法?6. 你对实验步骤 6 中涉及的文件做了怎样的修改?7. 实验步骤 7-9的过程,是否出现错误?如有,你是如何解决的?&观察你机器中GRUB的配置文件,它在安装完新内核后发生了哪些变化?9. 新内核启动过程是否成功?如有错误,是哪些错误?你是如何消错的?如不够,可另附页)实验报告实验二 观察 Linux 行为实验时间6 小时实验目的学习 Linux 内核、进程、

7、存储和其他资源的一些重要特征。实验目标编写一个程序使用/proc机制检查反映机器平均负载、进程资源利用等方面的各 种内核值。在得到内核状态之后,将所观察到的行为在屏幕上输出。背景知识Linux、 Solaris 和其他版本的 UNIX 提供了一种非常有用的检查内核状态机制, 叫做/proc文件系统。这是可以用来完成本练习的关键机制。1. /proc 文件系统/proc 文件系统是一种操作系统机制,它的接口就像传统 UNIX 文件系统的一个 目录(在根目录中)。可以改变到/proc正如改变到任何其他目录,例如,bash$ cd /proc使/proc作为当前目录。一旦把/proc作为当前目录,就

8、可以用ls命令列出它的 内容。其内容看起来像普通的文件和目录。但是, /proc 或者其子目录中的文件实际 上是读取内核变量并以 ASCII 字符串方式报告它们的程序。这些例程中的一些仅在 伪文件打开时读取内核表,而其他例程在每次文件被访问时读表。因此各种读函数 的工作方式可能与预期的有所不同,因为它们并没有在真正操作文件。Linux提供的/proc实现可以读取很多不同的内核表。/proc中包含一些目录和 文件,每个文件读取一个或多个内核变量。而具有数字名称的子目录包括更多的伪 文件读取其进程ID和目录名相同的进程的有关信息。self目录包含了正在使用/proc 进程的特定进程信息。 /pro

9、c 目录树的确切内容随 Linux 的版本而不同,所以必须对 伪文件进行实验查看所提示的信息。/proc 中的文件可以像普通的 ASCII 文件一样进行读取。例如,向 shell 敲入以 下命令:bash$ cat /proc/version将得到打印到stdout的类似下面的信息:Linux version 2.2.12 (gcc version egcs-2.91.6619990314/Linux (egcs-1.1.2 release) #1 Mon Sep 27 10:40:35EDT 1999为了读取一个伪文件的内容,可以打开文件然后使用 stdio 程序库中的例程如 fgets()

10、或者fscanf()来读取文件。所读的确切文件(和表)依赖于所使用的特定Linux 版本。想要知道到底有些什么文件接口通过/proc对你可用,请查看系统上的proc 使用手册页。2使用 argc 和 argv在程序的B部分和C部分,需要从shell向程序传递参数。Linux中,C主程序 依然可以采用 argc 和 argv 来传递参数。具体用法这里不再赘述。问题陈述1. 编写一个程序,通过检查内核状态报告Linux内核行为。程序在stdout上打印以 下信息: CPU类型和型号。 内核版本 从系统最后一次启动以来的时间,形式为dd:hh:mm:ss (例如,3天13小时46 分 32秒应该写出

11、 03:13:46:32)。2. 改写A部分程序,加入命令行参数,在stdout上再打印以下信息: CPU 花费在用户态、系统态和空闲态的时间。 系统接收到的磁盘请求。 内核执行的上下文转换的次数。 系统最后启动的时间。 从系统启动开始创建的进程数。3. 改写B部分程序,根据不同的命令行参数,在stdout上再打印以下信息:计算机配置的内存数量。当前可用的内存数量。 平均负载列表(至上一分钟的平均数)。该信息将使另外的程序可以查看各个时间的这些值,因此用户可以了解平均负 载如何随时间间隔而变化。对于本程序,提供两个命令行参数:(1) 一个表明应该以什么样的频率从内核读取平均负载。(2) 一个表

12、明应该以多长的时间间隔读取平均负载。A部分程序可以叫做ksamp, B部分程序ksamp -s, C部分程序ksamp -l 2 60, 表示平均负载观察将运行60秒,每隔2秒取样一次。为了观察系统上的负载,需要 确保计算机正在做一些其他的工作而不是仅仅运行你的程序。例如,打开和关闭窗 口、移动窗口,甚至在其他窗口运行一些程序。组织方案对于B部分和C部分,程序必须在命令行上有不同的参数。因此最先的动作之 一应该是解析调用程序的命令行以确定通过argv数组传递到它的shell参数。可参 考如下代码:int main( int argc, char *argv ) char repTypeName

13、16;/ 决定报告类型reportType = STANDARD;strcpy( repTypeName, “Standard” );if ( argc 1) sscanf( argv1, “%c%c”, &c1, &c2 );if ( c1 != “-“ ) fprintf( stderr, “usage: observer -s -l int dur n” ); exit(1);if ( c2 = s ) reportType = SHORT;strcpy( repTypeName, “Short” );if ( c2 = l ) reportType = LONG;strcpy( rep

14、TypeName, “Long” ); internal = atoi( argv2 );duration = atoi( argv3 );在得到今天的当前时间并打印出一个包含你所检查机器名字的问候之后,就完 成了初始化工作。#include / 完成初始化 gettimeofday( &now, NULL );/得到当天时间printf( “Status report type %s at %sn”, repTypeName, ctime( &( now.tv_sec ) ) );/ 得到主机文件名并打印它 thisPorcFile = fopen( “/proc/sys/kernel/ho

15、stname”, “r” ); fgets( lineBuf, LB_SIZE+1, thisPorcFile );printf( “Machine hostname: %s”, lineBuf ); fclose( thisPorcFile );现在可以准备开始工作,也就是说,通过使用各种/proc文件开始读取内核变量。 上述代码段包含一个如何读取/proc/sys/kernel/hostname文件的例子。可以用它作 为原型通过读取其他的伪文件来完成练习,这需要对/proc进行一些探索以及在研究 不同的目录时对各种伪文件进行检查。在 C 部分中将要计算平均负载。对于这个问题,代码需要睡眠一段时间,醒来 后采样当前平均负载,然后再返回睡眠状态。这里是一段可以完成该工作的代码:while( iteration duration) sleep( interval );sampleLoadAvg(); iteration += interval;实

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 学术论文 > 其它学术论文

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号