操作系统实验0.docx
《操作系统实验0.docx》由会员分享,可在线阅读,更多相关《操作系统实验0.docx(15页珍藏版)》请在冰豆网上搜索。
![操作系统实验0.docx](https://file1.bdocx.com/fileroot1/2023-5/15/61b90655-c7ee-4614-b62d-b3018110c44e/61b90655-c7ee-4614-b62d-b3018110c44e1.gif)
操作系统实验0
操作系统实验
各位读友大家好,此文档由网络收集而来,欢迎您下载,谢谢
并键入回车,则系统接收并记住新口令。
如果用户在登录时忘记了密码,则只能找系统管理员解决(取消用户密码:
passwd-d用户名)。
2.退出、注销与关机
当用户不再使用Linux时,在离开前,通常应键入“logout”命令或Ctrl+D来退出帐号。
在Linux下,涉及到关机或重启的命令有:
(1)halt命令。
这是最常用的关机方式。
(2)reboot命令。
用户只是想退出操作系统,并不想关机,还想再进入其他操作系统。
(3)shutdown命令。
在多用户系统中,系统管理员在关机前,通知各用户即将关机,以便给各用户留下一定的时间作保存和退出工作。
3.建立用户账号,设置相应密码
在超级用户命令提示符#下,教师根据需要建立适当数量的账号,以便学生上机登录使用。
建立账号的命令:
#adduser(如用户名:
B080101)
#passwd(初始为空)
4.远程登录命令telnet的使用
telnet命令的使用形式如下:
telnet如:
telnet
从安装了Windows操作系统的机器登录到Linux服务器,telnet会话过程的具体操作如下:
单击“开始”,选择“程序”,选择“MS-DOS”方式(或“附件”-“命令提示符”或“开始”,选择“运行”);
在提示符C:
>下输入telnet;或“运行”中键入IP地址。
如果连接成功,则会出现登录界面,通过用户账号和口令登录。
5.Linux的基本使用命令
使用passwd命令修改用户密码。
使用who命令查看当前登录在系统中的用户列表。
熟练使用帮助信息,使用man命令获得ls命令的使用手册。
熟悉cat、ls、cd、pwd、rm、mv、cp、mkdir、rmdir、more等命令的使用。
查看并记录所在机器Linux操作系统目录结构。
Linux常用命令,如表1-1所示。
表1-1Linux常用命令
命令名
功能
使用举例
adduser
创建新用户
#adduser↙
cp
复制文件
$cp源文件目标文件↙
rm
删除文件
$rm文件名
mkdir
创建新目录
$mkdir目录名↙
rmdir
删除目录
$rmdir目录名↙
pwd
显示当前目录
$pwd↙
ps
显示进程状态
$ps↙
ls
显示当前目录下内容
$ls-l↙
cat
显示文件内容
$cat文件名↙
cd
转换当前目录
$cd路径名↙
mv
移动文件
$mv源文件目标文件
more
分页显示
$ls–l|more↙
chmod
改变文件权限
$chmod777文件名↙
clear
清屏
$clear↙
输入的字符
功能
说明
Esc
进入命令模式
i
在光标前输入文字
A
在光标后输入文字
X
删除光标后输入的文字
Dd
删除当前行
删除后内容自动进入剪贴板
/abc
向前查找字符字符串
然后输入n,则继续向前查
?
abc
向后查找字符字符串
Yw
将光标所在单词拷入剪贴板
Yy
将光标所在行拷入剪贴板
P
将剪贴板内容贴在光标后
:
q
不保存退出……..0
:
q!
表示强制退出
:
w
保存
:
w!
表示强制保存
:
wq
保存退出
:
x
保存退出
:
3,7co9
将第3行至第7行拷到第9行
:
3,7m9
将第3行至第7行移到第9行
u
取消前次命令
:
g/abc/s//123/g
将全部的abc替换成123
7.编译工具gcc的使用
RedHatLinux的编译器是gcc。
gcc软件包支持C、C++。
gcc的可执行文件在/usr/bin/gcc下,/lib和/usr/lib目录下是库文件。
/usr/include目录下是头文件。
gcc编译常用格式为:
$gcc源文件名↙
例如:
$gcc↙,将生成默认可执行文件
或者$gcc-o目标文件名源文件名↙
例如:
$gcc–oaaa或$cc–o
8.程序的运行
$./可执行文件名↙
三、实验内容
1.熟悉开机后登录Linux系统和退出系统的过程。
2.熟悉Linux字符界面,练习并掌握常用的Linux操作命令。
3.学习使用Linux的在线求助系统,如man和help命令等。
例程:
#include
intmain()
{
inti=getuid();
printf(‘Helloworld!
Thisismyuid:
%d\n’,i);
}
6.使用搜索引擎、、回答下列问题。
什么是操作系统?
你买回一台新计算机后,要装的第一个软件是什么?
为什么必须在计算机上安装操作系统?
目前市场上常见的操作系统有哪些类型?
有哪些应用?
请尽可能多地罗列出目前市场上已有的操作系统产品,分别给出这些操作系统所取得的成就,采用的新技术,以及这些操作系统的特点、特色和不足,指明它们的开发公司和开发年代。
推动操作系统发展的主要动因有哪些?
列举出保证操作系统每次革命性发展的支撑技术。
Linux与Windows系统的主要区别是什么?
四、实验报告
1.实验目的与实验内容。
2.实验主要步骤。
3.实验结果。
实验2进程控制
一、实验目的
1.了解和熟悉Linux进程控制常用的系统调用。
2.掌握系统调用的简单编程。
3.进一步掌握C语言程序的开发方法,阅读、调试C程序并编写简单的进程创建程序。
4.通过有关进程控制的应用实例,深刻理解进程的管理过程。
二、相关知识准备
1.进程状态命令
表2-1Linux中的进程状态命令
ps命令
ps输出中的标题
命令
作用
字段
解释
ps
显示所有正在执行的进程
PID
进程标识号
ps-x
列出当前正在运行的进程的基本信息
TTY
开始这个进程的终端
ps-au
列出所有用户的基本信息
TIME
进程的累计执行时间,以分和秒表示
COMMAND
正在执行的命令名
2.进程控制命令
kill,向进程发送终止信号,撤消进程。
nice命令用于改变进程的优先级,使用格式为:
$nicen。
创建后台进程:
在命令后输入后台命令符&,如$sleep50&,表示要创建一个睡眠时间为50秒的进程。
3.进程控制相关的系统调用
fork()。
创建一个子进程,用它创建的子进程是fork调用者进程的复制品,即进程映象。
除了进程标识符以及与进程特性有关的一些参数外,其它与父进程相同,与父进程共享文本段和打开的文件,并都受进程调度程序的调度。
如果创建进程失败,则fork()返回值为-1;如果创建进程成功,则在父进程中返回值是子进程号,子进程中返回的值是0。
m=fork()。
wait()。
父进程处于阻塞状态,等待子进程执行完成终止后继续工作。
其返回值为子进程号。
n=wait()。
exit()。
子进程自我终止,释放所占资源,通知父进程可以删除自己。
此时它的状态变成P_state=SZOMB。
getpid()。
获得进程的进程号,为正整数。
p=getpid()。
Linux中与进程控制相关的几个主要系统调用如表2-2所示。
表2-2Linux中与进程控制相关的几个主要系统调用
使用形式
功能
返回值的解释
fork()
创建一个子进程
对父进程:
返回子进程号
对子进程:
返回0
错误:
返回-1
#include
execve(char*file,char**argv,char**envp)
用指定程序覆盖当前程序代码
正确:
0
错误:
-1
#include
#include
pid_twait(int*statloc)
等待进程终止
正确:
子进程的ID
错误:
-1
getpid()
获得进程号
#include
voidexit(intstatus)
进程正常结束
三、实验内容
1.在Windows下,使用性能监视器来观察进程运行情况和CPU工作情况。
2.在Linux下,用top命令显示进程动态执行时的系统变化情况。
3.在Linux下,熟悉进程状态命令的使用;用pstree观察系统进程层次、分析进程状态。
4.在Linux下,熟悉进程的控制命令的使用。
5.在Linux下,分析程序的功能与运行结果,熟悉Linux进程控制常用的系统调用。
分析下列程序的功能与程序的运行结果。
#include
main()
{intp1,p2;
while((p1=fork())==-1);
if(p1==0)
putchar(‘b’);
else
{while((p2=fork())==-1);
if(p2==0)putchar(‘c’);
elseputchar(‘a’);
}
}
分析使用wait()和exit()控制进程的程序功能与运行结果。
#include
#include
#include
main()
{intpid;
if(pid=fork())
{wait();
printf(‘itisparentprocessn’);}
else
{printf(‘itischildprocessn’);
exit();}
printf(‘itisendn’);
}
写出下列程序的功能,并分析程序的运行结果。
#include
main()
{intp1,p2,i;
while((p1=fork())==-1);
if(p1==0)
for(i=0;i即可。
mesg命令:
设定是否允许其他用户用write命令给自己发送信息。
如果允许别人给自己发送信息,输入命令:
#mesgy,否则,输入:
#mesgn。
对于超级用户,系统的默认值为n;而对于一般用户系统的默认值为y。
如果mesg后不带任何参数,则显示当前的状态是y还是n。
2.进程的“软中断”通信
它可用于同一用户的进程之间通信。
其方式是:
一个进程通过系统调用kill(pid,sig)向同一用户的其它进程pid发送一个软中断信号:
另一进程通过系统调用signal(sig,func)捕捉到信号sig后,执行予先约定的动作func,从而实现这两个进程间的通信。
发送信号kill(pid,sig),本进程将指定信号sig发送给指定进程pid,其中参数为pid进程号,pid与sig均为整数值。
接收信号signal(sig,func),本进程接收到其它进程发送给它的信号后,完成指定的功能func,其中参数func一般是函数。
3.进程管道的通信
建立进程间的管道,格式为:
pipe(fd);
intfd;
其中,fd是写端,向管道中写入;fd是读端,从管道中读出。
本质上将其当作文件处理。
进程间可通过管道,用write与read来传递数据,但write与read不可以同时进行,在管道中只能有4096字节的数据被缓冲。
三、实验内容
1.分析程序的功能,并写出程序的运行结果。
#include
#include
intfunc();
main()
{inti,j;
signal(17,func);
if(i=fork())
{printf(‘Parent:
Signal17willbesendtoChild!
n’);
kill(i,17);
wait(0);
printf(‘Parent:
finished!
n’);}
else
{sleep(10);
printf(‘Child:
AsignalfrommyParentisreceived!
n’)
exit(0);}
}
func()
{printf(‘Itissignal17processingfunction!
n’;)
}
2.分析程序的功能,并写出程序的运行结果。
#include
#include
main()
{intp1,p2,i;
while((p1=fork())==-1);
if(p1==0)
{lockf(1,1,0);
for(i=0;i0)
for(;;)
{printf(‘thisis‘);
sleep
(1);}
if(iUid0;leave--)
{_put_user(1,buf,1);
buf++;
}
returncount;
}
函数
write()
intwrite(structinode*inode,structfile*filp,constchar*buf,intcount)
{
returncount;
}
4.模块的测试
在该模块程序编译加载后,再在/dev目录下创建模块设备文件moduledev,使用命令:
#mknod/dev/moduledevcmajorminor
其中“c”表示moduledev是字符设备,“major”是moduledev的主设备号。
使用如下程序可对加载模块进行测试
#include
#include
#include
#include
main()
{inti,testmoduledev;
charbuf;
testmoduledev=open(‘/dev/moduledev’,O_RDWR);
if(testmoduledev==-1)
{
printf(‘Can’topenthefile!
n’);
exit(0);
}
read(testmoduledev,buf,10);
for(i=0;i<10;i++)
printf(“%dn”,buf);
close(testmoduledev);
return0;
}
四、实验报告
1.实验目的与实验内容。
2.实验主要步骤。
3.实验程序的功能与结果分析。
各位读友大家好,此文档由网络收集而来,欢迎您下载,谢谢