p.s 此文档针对西安交通大学的操作系统实验
1 实验目的
熟练掌握Linux操作系统的使用,掌握Linux的系统的进程管理相关内容,掌握进程之间的通信方式。
进程是操作系统中最重要的概念,贯穿始终,也是学习现代操作系统的关键。通过本次实验,要求理解进程的实质和进程管理的机制。在Linux系统下实现进程从创建到终止的全过程,从中体会进程的创建过程、父进程和子进程的关系、进程状态的变化、进程之间的同步机制、进程调度的原理和以信号和管道为代表的进程间通信方式的实现。
2 实验内容
(1)
在命令行新建多个普通用户,如tux,bob,Alice,lily等,给每个用户创建密码,并将这几个用户分到同一个组xjtuse中。再新建两个组coding和testing,使得某些用户也分别为其组用户。在root用户和新建用户之间切换,验证用户创建成功与否。(给出相关命令运行结果)
(2)
实现sudo 委托管理任务,给上述某一指定的普通用户赋予创建用户的权限。(给出相关配置文件和命令运行结果)
(3)
备份数据是系统应该定期执行的任务,请利用cron计划作业在每周五下午6:10对某用户(如tux)主目录下的文件进行备份(可使用tar 命令)。给出相关运行结果和邮件记录。
(4)编制实现软中断通信的程序
使用系统调用fork()创建两个子进程,再用系统调用signal()让父进程捕捉键盘上发出的中断信号(即按delete键),当父进程接收到这两个软中断的某一个后,父进程用系统调用kill()向两个子进程分别发出整数值为16和17软中断信号,子进程获得对应软中断信号,然后分别输出下列信息后终止:
Child process 1 is killed by parent !!
Child process 2 is killed by parent !!
父进程调用wait()函数等待两个子进程终止后,输入以下信息,结束进程执行:
Parent process is killed!!
多运行几次编写的程序,简略分析出现不同结果的原因。
(5)编制实现进程的管道通信的程序
使用系统调用pipe()建立一条管道线,两个子进程分别向管道写一句话:
Child process 1 is sending a message!
Child process 2 is sending a message!
而父进程则从管道中读出来自于两个子进程的信息,显示在屏幕上。
要求:父进程先接收子进程P1发来的消息,然后再接收子进程P2发来的消息。
3 题目分析及基本设计过程分析
3.1 题目所涉及知识点
3.1.1 useradd、passwd、groupadd、usermod
3.1.2 sudo与sudoers配置文件
3.1.3 cron、crontab与mail
3.1.4 fork、signal、kill、wait、pipe
3.2 实验设计过程分析
- 创建多个用户和组,将用户添加到组中。
- 使用
su
或sudo -u
切换用户,验证用户创建和组分配是否成功。 - 编辑
/etc/sudoers
文件,添加授权信息。 - 通过
sudo
执行授权的命令,验证用户是否能够成功执行。 - 编辑
crontab
,添加备份任务。 - 等待计划任务执行,验证是否按计划备份。
- 编写C程序,创建子进程,设置信号处理函数。
- 通过软中断信号进行通信,验证父子进程的交互。
- 编写C程序,创建管道,创建子进程。
- 子进程向管道写入消息,父进程从管道读取消息,验证通信的顺序。
4 实验过程
由于我使用的是Ubuntu系统,所以root用户在最开始是用不了的,我的默认账户是leon
可以看此篇blog参考如何在Ubuntu中获得root:
(1)
修改tux用户密码的图裂了,参照其他的即可
创建组,使用cat /etc/group来查看创建情况:
(2)
给leon添加root权限,利用vim修改sudoers:
注意在Ubuntu系统中,可能需要安装一些必要的插件,按照提示进行安装即可
拥有了权限leon添加用户时:
没拥有权限的bear添加用户时:
(3)
修改crontab文件:
我的图又裂了,这里就讲一下怎么写:
利用crontab -e来编辑定时任务,任务使用tar压缩
根据题目要求:
10 18 * * 5 (tar操作)
其中tar操作:
tar cvzf tux.tar.gz /tux
也可以同时添加一个离自己时间比较近的定时任务,然后看有没有邮件:
随后使用mail就可以知道具体内容
(4)编制实现软中断通信的程序
代码如下(虚拟机被我搞崩了,只能看之前截的图了)
(5)编制实现进程的管道通信的程序
5 实验过程中可能出现的问题
(1)vim不会编辑:
自己查询网络
(2)vim编辑时提示是read-only
保存时在wq后加上!
(3)查看定时任务列表
crontab -l
其他crontab操作请查看:Linux中Crontab(定时任务)命令详解及使用教程_linux定时任务命令-CSDN博客
6 实验体会
对于LINUX操作系统的用户,组,进程有了基本的了解,初步掌握了su、kill、fork等基本操作,对于操作系统的运行方式有了一些了解。
在进行这些Linux实验的过程中,我深刻体验到了操作系统的核心概念与实际应用。通过创建用户、分组、授权,我加深了对用户管理和权限控制的理解。使用cron进行定时备份任务的实践,让我更好地掌握了系统定时任务的配置。软中断通信和管道通信的程序设计,则锻炼了我对进程间通信的理解和实现。这些实验不仅提升了我的Linux操作技能,也增强了我对操作系统原理的认识,为今后深入学习和应用提供了坚实基础。