14-15(2)实验指导书

2018-12-03 18:40

《操作系统》实验讲义

计算机科学与工程学院

2015年3月

实验一 Linux初步

实验预备知识

一、 创建实验平台

如果实验室里的计算机安装了Windows操作系统,则可以先安装VMWare软件(一般使用工作站版本)并启动它,来创建一个虚拟机,然后在其中安装Linux操作系统。这样就可以从虚拟机中启动Linux系统,并完成相应的实验。

VMWare软件和Linux操作系统的安装十分简单,这里就不做介绍。

二、 Linux下的proc文件系统

在Linux操作系统中,提供了一套非常有用的在用户态检查内核状态和系统特征的机制,这就是proc文件系统。该文件系统安装在 /proc 目录中。比起Windows的任务管理器来,proc文件系统的功能更强大:它能提供更多的系统信息,能修改部分系统信息,还能通过编程来扩充其中的内容。

该文件系统将进程的地址空间、系统的硬件信息(包括CPU、内存状态以及网卡等各种硬件设备)、系统相关机制(中断、I/O)等内容全部设置成虚拟的Linux文件。它以一种特殊的文件系统的方式,为访问系统内核数据的操作提供接口。也就是说,这个文件系统中所有的文件都是特殊文件,这些特殊文件一般与外部设备无关,所涉及到的介质通常室内存和CPU。当从一个特殊文件“读”出时,所读出的数据都是由系统内部按一定的规则临时生成的,或从内存中收集、加工出来的,反之亦然。换言之,这些文件的内容都不存在任何存储设备上,而是在读/写的时候才根据系统中的有关信息生成出来,或映射到系统中的有关变量或数据结构中。

/proc 目录中的每个文件都有一组分配给它的非常特殊的文件许可权,并且每个文件属于特定的用户标识,这里面的文件仅仅包含以下几种权限(除非root用户特别授权):

? 只读 任何用户都不能更改该文件,它用于表示系统信息。

? root写 /proc 目录中的一些文件是可写的,但通常只能由root用户来写。 ? root读 有些文件对一般系统用户是不可见的,而对root用户是可见的。 ? 其他:三种许可权的组合

在Linux的/proc的目录中,除了/proc/sys目录下的文件外,其余大部分的属性都属于root,并且对全部用户是只读的。/proc/sys目录下则存放的是内核参数,并设计成为运行时可修改的。

下表列出/proc目录下的一些重要文件。

目录/文件名 apm cmdline cpuinfo devices filesystems interrupts ioports

描述

高级电源管理 内核命令行 CPU信息 可用设备信息

系统支持的文件系统 中断信息 端口使用信息

kcore kmsg meminfo modules mounts partions stat swap version uptime sys 内核映象 内核消息 内存信息

内核加载模块列表 已加载文件信息 系统识别的分区表 全面信息统计状态表 交换分区使用情况 内核版本

系统正常运行时间 内核参数

在/proc目录下你会发现一些以数字命名的子目录,它们是进程目录。系统中当前运行的每一个进程都有一个对应的目录在/proc目录下,以进程ID号为目录,他们就是读取进程信息的接口,每个进程中包含的文件如下表所示:

子目录名 cmdline enviroment Fd Mem stat cwd root maps statm exe

包含内容

该进程的命令行参数 进程环境变量的值

进程打开的文件的描述符 进程的内存使用情况 进程状态

进程的当前目录 进程的根目录 内存映象

进程内存状态信息

当前进程的可执行文件(链接)

在/proc目录下,有一个特殊的子目录sys,该目录下的文件记录了内核各方面的运行参数。用户可更改这些文件的值,结果是直接修改内核中的相应参数。在修改之前,最好确切地了解这些内核的参数的作用,以及安全的取值范围。下面举几个例子:

1、/proc/sys/kernel/acct

该文件有3个可配置值,根据包含日志的文件系统上可用空间数量(百分比表示),这些值控制何时开始进行进程记帐:

第一个值:如果可用空间低于这个百分比值,则停止记帐; 第二个值:如果可用空间高于这个百分比值,则开始记帐; 第三个值:检查上面2个值的频率(以秒为单位)。

要更改这个文件的某个值,应该回送用空格隔开,默认设置为2 4 30,表示如果包含日志的文件系统上只有少于2%的可用空间,则这些值会使记帐停止;如果有高于4%的可用空间,则再次启动记帐;每30秒做一次检查。

2、/proc/sys/fs/file-max

该文件指定了可以分配的文件句柄的最大数目。如果用户得到错误信息,说明由于打开文件数已经达到了最大值,而不能打开更多的文件,则可能需要增加该值。可将这个值设置为任意多个文件,并且能通过将一个新数字值写入该文件来更改该值。

3、/proc/sys/kernel/domainname

该文件允许配置网络域名。它没有默认值;可能已经设置了域名,也可能没有。 4、/proc/sys/kernel/hostname

该文件允许配置网络主机名。同样,它也没有默认值;可能已经设置了主机名,也可能没有。

5、/proc/sys/kernel/printk

该文件有四个数字值,它们根据日志记录消息的重要性,定义将其发送到何处。关于不同日志级别的更多信息。该文件的四个值依次为:

·控制台日志级别:优先级高于该值的消息将被打印至控制台。 ·默认的消息日志级别:将用该优先级来打印没有优先级的消息。

·最低的控制台日志级别:控制台日志级别可被设置的最小值(最高优先级)。 ·默认的控制台日志级别:控制台日志级别的默认值。 ·默认设置为6 4 1 7。 6、/proc/sys/kernel/shmall

该文件是在任何给定时刻系统上可以使用的共享内存的总量(以字节为单位)。默认设置为2097152。

7、/proc/sys/kernel/shmax

该文件指定内核所允许的最大共享内存段的大小(以B(字节)为单位)。默认设置为33554432。

8、/proc/sys/kerneI/shmmni

该文件表示用于整个系统共享内存段的最大数目。

如上所述,/proc/sys目录不仅提供了内核信息,而且可以通过它修改内核参数。但是必须很小心,因为不当的修改可能会造成系统崩溃。最好是先找一台无关紧要的计算机,测试成功后,再应用到读者自己的系统上。要改变内核的参数,只要用vi编辑或echo参数重定向到文件即可。

实验部分

一、 实验目的与要求

通过proc文件系统观察整个Linux内核和系统的一些重要特征,并编写一个程序,使用proc文件系统获得以及修改系统的各种配置参数。

本实验需要学生具有Linux的基本操作技能,以及采用C语言编写程序的能力。

二、 实验内容

以超级用户的身份登录Linux系统,并进入/proc目录,键入“ls”命令,查看该目录下的内容,同时查看每个文件的读写权限。

1、 请回答下列问题:

·CPU的类型和型号。 ·所使用的Linux的版本。

·从启动到当前时刻所经过的时间。 ·当前内存状态。

2、编写一个程序getinfo.c,编译后并在命令行带命令参数来运行该程序,获得内核参数 (例如网络主机名、共享内存容量、文件句柄的最大参数等) 在屏幕上显示出来。

运行过程实例如下(获取文件句柄最大参数): [root@Linux / ]# ./getinfo filemax filemax :18626

3、编写一个程序setsys.c,编译后并在命令行带命令参数来运行该程序,用来修改内核参数(任意的参数均可(例如网络主机名、共享内存容量、文件句柄的最大参数等)。

运行过程实例如下:

[root@Linux / ]# ./setsys filemax Input filemax parameter:21545 注释:实例中加波浪线的部分为键盘输入内容。通过运行getinfo filemax来确认是否修改成功。

三、 解决方案

本实验完全不涉及任何的内核编程,而完全使用标准c库中的函数。事实上,只需要编写一个简单的读文本文件的程序,就可以直接用于读proc文件系统中的文件。下面给出一个简单的程序框架,读者可以在这个基础上添加自己的代码,从而完成上述的实验。

# include # include # include # include ??

int main(int argc,char* argv[ ]) { ??

int fd=open(argv[1],FLAG,MODE); // 文件名作为参数传入。FLAG和

// MODE的值由打开的功能决定

if (fd!=-1) {

?? // 读/写相应的内核参数 close(fd); } else {

?? //做错误处理 } ?? return EXIT_SUCCESS; }


14-15(2)实验指导书.doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:银行信贷知识题库(超全)

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: