14152实验指导书Word文档格式.docx
- 文档编号:18163198
- 上传时间:2022-12-13
- 格式:DOCX
- 页数:87
- 大小:249.75KB
14152实验指导书Word文档格式.docx
《14152实验指导书Word文档格式.docx》由会员分享,可在线阅读,更多相关《14152实验指导书Word文档格式.docx(87页珍藏版)》请在冰豆网上搜索。
kcore
内核映象
kmsg
内核消息
meminfo
内存信息
modules
内核加载模块列表
mounts
已加载文件信息
partions
系统识别的分区表
stat
全面信息统计状态表
swap
交换分区使用情况
version
内核版本
uptime
系统正常运行时间
sys
内核参数
在/proc目录下你会发现一些以数字命名的子目录,它们是进程目录。
系统中当前运行的每一个进程都有一个对应的目录在/proc目录下,以进程ID号为目录,他们就是读取进程信息的接口,每个进程中包含的文件如下表所示:
子目录名
包含内容
该进程的命令行参数
enviroment
进程环境变量的值
Fd
进程打开的文件的描述符
Mem
进程的内存使用情况
进程状态
cwd
进程的当前目录
root
进程的根目录
maps
内存映象
statm
进程内存状态信息
exe
当前进程的可执行文件(链接)
在/proc目录下,有一个特殊的子目录sys,该目录下的文件记录了内核各方面的运行参数。
用户可更改这些文件的值,结果是直接修改内核中的相应参数。
在修改之前,最好确切地了解这些内核的参数的作用,以及安全的取值范围。
下面举几个例子:
1、/proc/sys/kernel/acct
该文件有3个可配置值,根据包含日志的文件系统上可用空间数量(百分比表示),这些值控制何时开始进行进程记帐:
第一个值:
如果可用空间低于这个百分比值,则停止记帐;
第二个值:
如果可用空间高于这个百分比值,则开始记帐;
第三个值:
检查上面2个值的频率(以秒为单位)。
要更改这个文件的某个值,应该回送用空格隔开,默认设置为2430,表示如果包含日志的文件系统上只有少于2%的可用空间,则这些值会使记帐停止;
如果有高于4%的可用空间,则再次启动记帐;
每30秒做一次检查。
2、/proc/sys/fs/file-max
该文件指定了可以分配的文件句柄的最大数目。
如果用户得到错误信息,说明由于打开文件数已经达到了最大值,而不能打开更多的文件,则可能需要增加该值。
可将这个值设置为任意多个文件,并且能通过将一个新数字值写入该文件来更改该值。
3、/proc/sys/kernel/domainname
该文件允许配置网络域名。
它没有默认值;
可能已经设置了域名,也可能没有。
4、/proc/sys/kernel/hostname
该文件允许配置网络主机名。
同样,它也没有默认值;
可能已经设置了主机名,也可能没有。
5、/proc/sys/kernel/printk
该文件有四个数字值,它们根据日志记录消息的重要性,定义将其发送到何处。
关于不同日志级别的更多信息。
该文件的四个值依次为:
·
控制台日志级别:
优先级高于该值的消息将被打印至控制台。
默认的消息日志级别:
将用该优先级来打印没有优先级的消息。
最低的控制台日志级别:
控制台日志级别可被设置的最小值(最高优先级)。
默认的控制台日志级别:
控制台日志级别的默认值。
默认设置为6417。
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/]#./getinfofilemax
filemax:
18626
3、编写一个程序setsys.c,编译后并在命令行带命令参数来运行该程序,用来修改内核参数(任意的参数均可(例如网络主机名、共享内存容量、文件句柄的最大参数等)。
运行过程实例如下:
[root@Linux/]#./setsysfilemax
Inputfilemaxparameter:
21545
注释:
实例中加波浪线的部分为键盘输入内容。
通过运行getinfofilemax来确认是否修改成功。
三、解决方案
本实验完全不涉及任何的内核编程,而完全使用标准c库中的函数。
事实上,只需要编写一个简单的读文本文件的程序,就可以直接用于读proc文件系统中的文件。
下面给出一个简单的程序框架,读者可以在这个基础上添加自己的代码,从而完成上述的实验。
#include<
stdio.h>
sys/types.h>
Stdlib.h>
fcntl.h>
……
intmain(intargc,char*argv[])
{……
intfd=open(argv[1],FLAG,MODE);
//文件名作为参数传入。
FLAG和
//MODE的值由打开的功能决定
if(fd!
=-1)
{
……//读/写相应的内核参数
close(fd);
}
else
……//做错误处理
……
returnEXIT_SUCCESS;
}
附录A:
vi编辑器
vi编辑器是所有Unix及Linux系统下标准的编辑器,它的强大不逊色于任何最新的文本编辑器,这里只是简单地介绍一下它的用法和一小部分指令。
由于对Unix及Linux系统的任何版本,vi编辑器是完全相同的,因此您可以在其他任何介绍vi的地方进一步了解它。
Vi也是Linux中最基本的文本编辑器,学会它后,您将在Linux的世界里畅行无阻。
1、vi的基本概念
基本上vi可以分为三种状态,分别是命令模式(commandmode)、插入模式(Insertmode)和底行模式(lastlinemode),各模式的功能区分如下:
1)命令行模式commandmode)
控制屏幕光标的移动,字符、字或行的删除,移动复制某区段及进入Insertmode下,或者到lastlinemode。
2)插入模式(Insertmode)
只有在Insertmode下,才可以做文字输入,按「ESC」键可回到命令行模式。
3)底行模式(lastlinemode)
将文件保存或退出vi,也可以设置编辑环境,如寻找字符串、列出行号……等。
不过一般我们在使用时把vi简化成两个模式,就是将底行模式(lastlinemode)也算入命令行模式commandmode)。
2、vi的基本操作
a)进入vi
在系统提示符号输入vi及文件名称后,就进入vi全屏幕编辑画面:
$vimyfile
不过有一点要特别注意,就是您进入vi之后,是处于「命令行模式(commandmode)」,您要切换到「插入模式(Insertmode)」才能够输入文字。
初次使用vi的人都会想先用上下左右键移动光标,结果电脑一直哔哔叫,把自己气个半死,所以进入vi后,先不要乱动,转换到「插入模式(Insertmode)」再说吧!
b)切换至插入模式(Insertmode)编辑文件
在「命令行模式(commandmode)」下按一下字母「i」就可以进入「插入模式(Insertmode)」,这时候你就可以开始输入文字了。
c)Insert的切换
您目前处于「插入模式(Insertmode)」,您就只能一直输入文字,如果您发现输错了字!
想用光标键往回移动,将该字删除,就要先按一下「ESC」键转到「命令行模式(commandmode)」再删除文字。
d)退出vi及保存文件
在「命令行模式(commandmode)」下,按一下「:
」冒号键进入「Lastlinemode」,例如:
:
wfilename(输入「wfilename」将文章以指定的文件名filename保存)
wq(输入「wq」,存盘并退出vi)
q!
(输入q!
,不存盘强制退出vi)
3、命令行模式(commandmode)功能键
1).插入模式
按「i」切换进入插入模式「insertmode」,按"
i"
进入插入模式后是从光标当前位置开始输入文件;
按「a」进入插入模式后,是从目前光标所在位置的下一个位置开始输入文字;
按「o」进入插入模式后,是插入新的一行,从行首开始输入文字。
2).从插入模式切换为命令行模式
按「ESC」键。
3).移动光标
vi可以直接用键盘上的光标来上下左右移动,但正规的vi是用小写英文字母「h」、「j」、「k」、「l」,分别控制光标左、下、上、右移一格。
按「ctrl」+「b」:
屏幕往"
后"
移动一页。
按「ctrl」+「f」:
前"
按「ctrl」+「u」:
移动半页。
按「ctrl」+「d」:
按数字「0」:
移到文章的开头。
按「G」:
移动到文章的最后。
按「$」:
移动到光标所在行的"
行尾"
。
按「^」:
行首"
按「w」:
光标跳到下个字的开头
按「e」:
光标跳到下个字的字尾
按「b」:
光标回到上个字的开头
按「#l」:
光标移到该行的第#个位置,如:
5l,56l。
4).删除文字
「x」:
每按一次,删除光标所在位置的"
后面"
一个字符。
「#x」:
例如,「6x」表示删除光标所在位置的"
6个字符。
「X」:
大写的X,每按一次,删除光标所在位置的"
前面"
「#X」:
例如,「20X」表示删除光标所在位置的"
20个字符。
「dd」:
删除光标所在行。
「#dd」:
从光标所在行开始删除#行
5).复制
「yw」:
将光标所在之处到字尾的字符复制到缓冲区中。
「#yw」:
复制#个字到缓冲区
「yy」:
复制光标所在行到缓冲区。
「#yy」:
例如,「6yy」表示拷贝从光标所在的该行"
往下数"
6行文字。
「p」:
将缓冲区内的字符贴到光标所在位置。
注意:
所有与"
y"
有关的复制命令都必须与"
p"
配合才能完成复制与粘贴功能。
6).替换
「r」:
替换光标所在处的字符。
「R」:
替换光标所到之处的字符,直到按下「ESC」键为止。
7).回复上一次操作
「u」:
如果您误执行一个命令,可以马上按下「u」,回到上一个操作。
按多次"
u"
可以执行多次回复。
8).更改
「cw」:
更改光标所在处的字到字尾处
「c#w」:
例如,「c3w」表示更改3个字
9).跳至指定的行
「ctrl」+「g」列出光标所在行的行号。
「#G」:
例如,「15G」,表示移动光标至文章的第15行行首。
4、Lastlinemode下命令简介
在使用「lastlinemode」之前,请记住先按「ESC」键确定您已经处于「commandmode」下后,再按「:
」冒号即可进入「lastlinemode」。
A)列出行号
「setnu」:
输入「setnu」后,会在文件中的每一行前面列出行号。
B)跳到文件中的某一行
「#」:
「#」号表示一个数字,在冒号后输入一个数字,再按回车键就会跳到该行了,如输入数字15,再回车,就会跳到文章的第15行。
C)查找字符
「/关键字」:
先按「/」键,再输入您想寻找的字符,如果第一次找的关键字不是您想要的,可以一直按「n」会往后寻找到您要的关键字为止。
「?
关键字」:
先按「?
」键,再输入您想寻找的字符,如果第一次找的关键字不是您想要的,可以一直按「n」会往前寻找到您要的关键字为止。
D)保存文件
「w」:
在冒号输入字母「w」就可以将文件保存起来。
「E」离开vi
「q」:
按「q」就是退出,如果无法离开vi,可以在「q」后跟一个「!
」强制离开vi。
「qw」:
一般建议离开时,搭配「w」一起使用,这样在退出的时候还可以保存文件。
5、vi命令列表
1)下面列出命令模式下的一些键的功能:
h左移光标一个字符
l右移光标一个字符
k光标上移一行
j光标下移一行
^光标移动至行首
0数字"
0"
,光标移至文章的开头
G光标移至文章的最后
$光标移动至行尾
Ctrl+f向前翻屏
Ctrl+b向后翻屏
Ctrl+d向前翻半屏
Ctrl+u向后翻半屏
i在光标位置前插入字符
a在光标所在位置的后一个字符开始增加
o插入新的一行,从行首开始输入
ESC从输入状态退至命令状态
x删除光标后面的字符
#x删除光标后的#个字符
X(大写X),删除光标前面的字符
#X删除光标前面的#个字符
dd删除光标所在的行
#dd删除从光标所在行数的#行
yw复制光标所在位置的一个字
#yw复制光标所在位置的#个字
yy复制光标所在位置的一行
#yy复制从光标所在行数的#行
p粘贴
u取消操作
cw更改光标所在位置的一个字
#cw更改光标所在位置的#个字
2)下表列出行命令模式下的一些指令
wfilename储存正在编辑的文件为filename
wqfilename储存正在编辑的文件为filename,并退出vi
q!
放弃所有修改,退出vi
setnu显示行号
/或?
查找,在/后输入要查找的内容
n与/或?
一起使用,如果查找的内容不是想要找的关键字,按n或向后(与/联用)或向前(与?
联用)继续查找,直到找到为止。
附录B:
Linux系统源程序文件的编译示例
实验二进程的控制和通信
(Windows2000)
实验目的
通过对Windows2000编程,进一步熟悉操作系统的基本概念,并能较好地理解Windows2000的结构。
通过创建进程,观察进程的运行和终止程序以及调试操作,进一步熟悉操作系统的进程概念,理解Windows2000进程的生命周期。
三、应用程序基础
Windows2000可以识别的应用程序包括控制台应用程序、GUI应用程序和服务应用程序。
控制台应用程序可以创建GUI,GUI应用程序可以作为服务来运行,服务也可以向标准的输出流写入数据。
不同类型应用程序间的惟一重要区别是其启动方法。
Windows2000是以WindowsNT技术构建的,提供了创建控制台应用程序的能力,使用户可以利用标准的C++工具,如iostream库中的cout和cin对象,来创建小型应用程序。
当系统运行时,Windows2000的服务通常要向系统用户提供所需功能。
服务应用程序由服务控制管理器(SCM)加以调用。
SCM是操作系统的集成部分,负责响应系统启动以开始服务、指导用户控制或从另一个服务中来的请求。
其本身负责使应用程序的行为像一个服务。
当令C++编译器创建可执行程序时,编译器将源代码编译成OBJ文件,然后将其与标准库相链接。
产生的EXE文件是装载器指令、机器指令和应用程序等数据的集合。
装载器指令告诉系统从哪里装载机器代码。
在进行某些设置后,进入开发者提供的main()或WinMain()函数的低级入口点。
机器代码中包括有控制逻辑,所做的事包括跳转到WindowsAPI函数,进行程序计算或向磁盘写入数据等。
Windows允许开发人员将大型应用程序分为较小的、互相有关系的服务模块,即动态链接库(DLL)代码块,在其中包含应用程序所使用的机器代码和应用程序的数据。
1.GUI应用程序
在使用传统的C语言main()入口点的应用程序时,C++编译器知道,当用户在程序中包括这个方法时,就应该把编译结果的文件标志为EXE文件。
在例1-1中,C++编译器创建一个GUI应用程序,代码中包括了WinMain()方法,这是GUI类型的应用程序的标准入口点。
该函数的原型在winbase.h中声明。
函数调用格式:
intWINAPIWinMain(HINSTANCEhInstance,HINSTANCEhPreInstance,LPSTRlpCmdLine,
IntnShowCmd);
参数:
hInstance指定实例句柄,该句柄惟一地标识了这一应用程序,其他Windows函数可以通过将该句柄作为参数来调用该程序。
hPreInstance该参数只是为了与早期的版本相兼容,在32位Windows程序中,该概念已经不再被采用,所以总是设置为NULL。
lpCmdLine指定用于应用程序的命令行,可以通过它将文件在程序启动时载入内存。
nShowCmd指定该应用程序在运行时以何种方式显示(正常、最大化和最小化中选一)。
为了进一步理解应用程序的构造,下面给出一个简单的GUI应用程序。
例2-1GUI应用程序。
#include<
Windows.h>
//告诉连接器,与包括MessageBox()API函数的user32库进行连接
#pragmacomment(lib,"
user32.lib"
)
//这是一个可以弹出信息框然后退出的简单的应用程序
intAPIENTRYWinMain(HINSTANCE,HINSTANCE,LPSTR,int)
{
MessageBox(
NULL,//没有父窗口
"
Hello,Windows2000"
,//消息框中的文本信息
Greetings"
,//消息框标题
MB_OK);
//消息框中有一个OK按钮
return0;
//返回0以便通知系统不进入消息循环
在GUI应用程序中,首先需要Windows.h头文件,它向WinMain()和MessageBox()API函数提供所需的数据类型定义。
然后,pragma指令指示编译器/连接器找到user32.lib库文件并将其与产生的EXE文件连接起来。
如果没有pragma指令,则MessageBox()API函数就成为未定义的了。
这一指令是VisualStudioC++编译器特有的。
接下来是WinMain()方法。
其中有4个由实际的低级入口点传递来的参数。
hInstance参数用来装入与代码相连的图标或位图一类的资源,无论何时,都可用GetModuleHandle()API函数将这些资源提取出来。
系统利用实例句柄来指明代码和初始的数据装在内存的何处。
句柄的实际数值是EXE文件映像的基地址,通常为0x00400000。
下一个参数hPreInstance是为向下兼容而设的,现在系统将其设为NULL。
应用程序的命令行(不包括程序的名称)是lpCmdLine参数。
另外,系统利用nCmdShow参数告诉应用程序如何显示它的主窗口(选项包括最小化、最大化和正常)。
最后,程序调用MessageBox()API函数,之后退出。
如果在进入消息循环之前就结束运行的话,最后必须返回0。
2.进程对象
操作系统将当前运行的应用程序看作是进程对象。
利用系统提供的惟一的称为句柄(handle)的标识,就可与进程对象交互。
这一标识只对当前进程有效,因此正在系统中运行的任何进程都可调用GetCurrentProcess()API
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 14152 实验 指导书
![提示](https://static.bdocx.com/images/bang_tan.gif)