由于当时没存代码,只有实验文档代码截图,文末也可直接获取实验文档。

操作系统实验

实验一 Linux基本操作

1实验目的
1.熟悉在Linux操作系统下的基本操作,对Linux操作系统有一个感性认识。
2.学会使用vi编辑器编辑简单的C语言程序,并能对其编译和调试

2实验内容
(1)练习Linux的基本安装和配置;
(2)以root用户身份登陆,并使用“ls”,“cat”“cd”等常用命令来实现基本的文件操作并观察Linux文件系统的特点;
(3)使用vi编辑器编写一C程序,并用gcc命令进行编译和链接,并用a.out来进行输出结果。

3实验详细操作步骤及程序清单:
3.1常用命令练习
1.登录系统:login用户名称
2.注销(退出)系统:logout
3.关机命令:shutdownnow
4.使用man命令帮助,例如:manls(屏幕显示关于ls命令的帮助信息)
在这里插入图片描述
在这里插入图片描述
5.ls(显示目录内容)
格式:ls[选项][目录或是文件]
其中:-a显示指定目录下所有子目录和文件,包括隐藏文件
-l以长格式来显示文件的详细信息。
-R递归地显示指定目录的各个子目录中的文件
例如:
使用ls查看当前目录内容: l s 使用 l s 查看指定目录内容: ls 使用ls查看指定目录内容: ls使用ls查看指定目录内容:ls/etc
在这里插入图片描述

使用ls–al查看当前目录内容:$ls-al
在这里插入图片描述

使用dir查看当前目录内容:$dir
在这里插入图片描述

6.cd(改变工作目录)
格式:cd[路径名称]
如:cd…回到上层目录;cd/回到根目录
在这里插入图片描述

7.pwd(显示当前工作目录的绝对路径)
格式:pwd
在这里插入图片描述

8.mkdir(创建目录)
格式:mkdir[目录名称]
例如:mkdir/home/s2001/newdir
在这里插入图片描述

9.rmdir(删除空目录)
格式:rmdir[选项][目录名称]
在这里插入图片描述

10.cp(文件或目录的复制)
格式:cp[选项]源文件或目录目标文件或目录
例如:cp文件名1文件名2
在这里插入图片描述

11.mv(文件或目录更名或将文件由一个目录移到另一个目录中)
格式:mv[选项]源文件或目录目标文件或目录
在这里插入图片描述
12.rm(删除文件或目录)
格式:rm[选项]文件名|目录名
在这里插入图片描述
13.cat(显示文件)
格式:cat[选项]文件列表
例如:cat文件名
在这里插入图片描述
cat命令也可用来建立新文件:cat>文件名,ctrl+d结束输入
在这里插入图片描述
1.3.2vi编辑器的使用
vi提供二种工作模式:输入模式(insertmode)和命令模式(commandmode)。使用者进入vi后,即处在命令模式下,此刻键入的任何字符皆被视为命令,可进行删除、修改、存盘等操作。要输入信息,应转换到输入模式。
1.命令模式
在输入模式下,按ESC可切换到命令模式。
命令模式下,可选用下列指令离开vi:
:q!离开vi,并放弃刚在缓冲区内编辑的内容
:wq将缓冲区内的资料写入磁盘中,并离开vi
:ZZ同wq
:x同wq
:w将缓冲区内的资料写入磁盘中,但并不离开vi
:q离开vi,若文件被修改过,则要被要求确认是否放弃修改的内容,此指令可与:w配合使用。
2.输入模式
在命令模式下,按i或a,进入输入模式,此时可以编辑文件内容。
1.3.3gcc的使用
gcc由GNU之父Stallman所开发的linux下的编译器,全称为GNUCompilerCollection。在linux下可以直接编译c语言源程序,可生成可执行文件。
例如:gcchello.c编译hello.c源文件,若通过,会自动生成名称为a.out可执行文件。
例如:gcchello.c–ohello.exe编译hello.c源文件,若通过,会生成hello.exe可执行文件。
1.3.4使用vi编辑c语言源文件
(1)进入linux的文本模式之后,在命令行键入vifilename.c然后回车。下面作一些简单的解释:首先vi命令是打开vi编辑器。后面的filename.c是用户即将编辑的c文件名字,注意扩展名字是.c;当然,vi编辑器功能很强,可以用它来编辑其它格式的文件,比如汇编文件,其扩展名字是.s;也可以直接用vi打开一个新的未命名的文件,当保存的时候再给它命名,只是这样做不很方便。
在这里插入图片描述

(2)最基本的命令i:当进入刚打开的文件时,不能写入信息,这时按一下键盘上的i键(insert),插入的意思,就可以进入编辑模式了。如下图所示:
在这里插入图片描述

(3)a与i是相同的用法
(4)当文件编辑完后,需要保存退出,这时需要经过以下几个步骤:1)按一下键盘上的Esc键;2)键入冒号(:),紧跟在冒号后面是wq(意思是保存并退出)。如果不想保存退出,则在第二步键入冒号之后,键入q(不带w,不保退出)。
(5)退出vi编辑器的编辑模式之后,要对刚才编写的程序进行编译。编译的命令是:gccfilename.c[-ooutputfilename],其中gcc是c的编译器。参数:filename.c是刚才编辑的c源文件(当然也可以是以前编写好的c文件);后面中括号里面的参数是可选的,它是一个输出文件。如果不选,默认的输出文件是a.out,选了之后输出文件就是outputfilename.out.
(6)最后一步是运行程序,方法如下:./outputfilename.out
在这里插入图片描述

4、问题
Linux系统在用户登陆和操作界面以及文件系统上有哪些特点?
linux是真正的多用户:同一时刻,可以有多个用户同时登录一台linux(可以远程,也可以本地,本地只能有一个(废话)),而且linux下的大多程序是支持多用户的,比如vim, A,B,C三个用户同时登录linux,则可以同时使用vim,只要不用他来编辑同一个文档就可以了。    
   Linux操作界面是命令行式的,黑底白字的DOS样子。  Linux最重要的特征之一就是支持多个不同的文件系统,前面我们已经看到,Linux目前支持的文件系统 多达十余种,随着时间的推移,这一数目还在不断增加。在Linux中,一个分离的文件系统不是通过设备标识 (如驱动器号或驱动器名)来访问,而是 把它合到一个单一的目录树结构中,通过目录来访问,这一点与Unix十分相似。Linux用 安装命令将一个新的文件系统安装到系统单一目录树的某一目录下,一旦安装成功,该目录下的所有内容将 被新安装的文件系统所覆盖,当文件系统被卸下后,安装目录下的文件将会被重新恢复。
5、总结
这部分Linux的基本操作,基本了解了”man”,”ls”,”cat”,”cp”,”mv”等命令的使用方法,也使用了vi编辑器进行C语言编辑,并用gcc进行了成功编译。
在实验过程中我也遇到了问题,例如不知道命令参数的具体含义,导致任务不能被命令正确执行,在创建目录时未进入root身份导致权限不够,创建不成功。但这些问题在查阅资料后都一一解决了,在之后的学习生活中会更注意实践的重要性。

实验二 进程管理
1实验目的
1.加深对进程概念的理解,明确进程和程序的区别。
2.进一步认识并发执行的实质。
3.分析进程争用资源的现象,学习解决进程互斥的方法。
2.实验内容
(1)进程的创建

编写一段源程序,使系统调用fork()创建两个子进程,当此程序运行时,在系统中有一个父进程和两个子进程活动。让每一个进程在屏幕上显示一个字符:父进程显示字符“a”;子进程分别显示字符“b”和字符“c”。试观察纪录屏幕上的显示结果,并分析原因。

(2)进程的控制

1)修改已编写的程序,将每个进程输出一个字符改为每个进程输出一句话,在观察程序执行时屏幕出现的现象,并分析原因。

2)如果在程序中使用调用lockf()来给每一个子进程加锁,可以实现进程之间的互斥,观察并分析出现的现象。
3实验详细操作步骤及程序清单:
3.1进程创建
编写一段程序,利用系统调用fork()创建两个进程。当此程序运行时,在系统中有一个父进程和两个子进程活动。让每一个进程在屏幕上显示一个字符:父进程显示字符“a”;子进程分别显示字符“b”和字符“c”。

分析:从进程并发执行来看,输出bac,acb或bca都有可能。
原因:fork()创建进程所需要的时间要多于输出一个字符的时间,因此在主进程创建进程2的同时,进程1就输出了”b”,而进程2和主程序的输出次序是有随机性的,所以会出现多种可能结果。
3.2进程控制
修改已经编好的程序,将每个进程输出一个字符改为每个进程输出一句话,再观察程序执行时屏幕上出现的现象,并分析原因。

分析:由于函数printf()输出的字符串之间不会被中断,因此,字符串内部的字符顺序输出时不变。但是,由于进程并发执行时的调度顺序和父子进程的抢占处理机问题,处处字符串的顺序和先后随着执行的不同而发生变化。
如果在程序中使用系统调用lockf()来给每一个进程加锁,可以实现进程之间的互斥,观察并分析出现的现象。

输出 child 块, son 块, daughter块的顺序可能不同,但是每个块的输出过程不会被打断。

分析:因为上述程序执行时,lockf(1,1,0)锁定标准输出设备,lockf(1,0,0)解锁标准输出设备,在lockf(1,1,0)与lockf(1,0,0)中间的for循环输出不会被中断,加锁与不加锁效果不相同。
4、相关问题及思考
(1)系统是怎样创建进程的?
首先,fork() 函数拷贝当前进程创建子进程。产生的子进程与父进程的区别仅在与 PID 与 PPID 以及某些资源和统计量,例如挂起的信号等。准备好进程运行的地址空间后,exec() 函数族负责读取可执行程序,并将其加载到相应的位置开始执行。
(2)可执行文件加载时进行了哪些处理?
可执行文件加载时首先是创建一个新进程的fork系统调用,然后用于实现进程自我终止的exit系统调用;改变进程原有代码的exec系统调用;用于将调用进程挂起并等待子进程终止的wait系统调用;获得进程标识符的getpid系统调用等处理过程。

(3)当首次调用新创建进程时,其入口在哪里?
在进程队列的ready状态下,由离自己最近的父进程执行调度,即入口在最近的父进程处。

5总结
这次实验加深了我对进程概念的理解,明确进程和程序的区别,进一步认识并发执行的实质,通过分析进程争用资源的现象,学习了解决进程互斥的方法。
实验过程中也到了代码方法不理解的情况,导致不明白实验结果的实际意义,但在仔细阅读代码和查找相关方法后明白了此次实验的目的内容。

实验二进程管理

实验二 进程管理
1实验目的
1.加深对进程概念的理解,明确进程和程序的区别。
2.进一步认识并发执行的实质。
3.分析进程争用资源的现象,学习解决进程互斥的方法。
2.实验内容
(1)进程的创建

编写一段源程序,使系统调用fork()创建两个子进程,当此程序运行时,在系统中有一个父进程和两个子进程活动。让每一个进程在屏幕上显示一个字符:父进程显示字符“a”;子进程分别显示字符“b”和字符“c”。试观察纪录屏幕上的显示结果,并分析原因。

(2)进程的控制

1)修改已编写的程序,将每个进程输出一个字符改为每个进程输出一句话,在观察程序执行时屏幕出现的现象,并分析原因。

2)如果在程序中使用调用lockf()来给每一个子进程加锁,可以实现进程之间的互斥,观察并分析出现的现象。
3实验详细操作步骤及程序清单:
3.1进程创建
编写一段程序,利用系统调用fork()创建两个进程。当此程序运行时,在系统中有一个父进程和两个子进程活动。让每一个进程在屏幕上显示一个字符:父进程显示字符“a”;子进程分别显示字符“b”和字符“c”。
在这里插入图片描述 在这里插入图片描述

分析:从进程并发执行来看,输出bac,acb或bca都有可能。
原因:fork()创建进程所需要的时间要多于输出一个字符的时间,因此在主进程创建进程2的同时,进程1就输出了”b”,而进程2和主程序的输出次序是有随机性的,所以会出现多种可能结果。
3.2进程控制
修改已经编好的程序,将每个进程输出一个字符改为每个进程输出一句话,再观察程序执行时屏幕上出现的现象,并分析原因。
在这里插入图片描述
在这里插入图片描述

分析:由于函数printf()输出的字符串之间不会被中断,因此,字符串内部的字符顺序输出时不变。但是,由于进程并发执行时的调度顺序和父子进程的抢占处理机问题,处处字符串的顺序和先后随着执行的不同而发生变化。
如果在程序中使用系统调用lockf()来给每一个进程加锁,可以实现进程之间的互斥,观察并分析出现的现象。
在这里插入图片描述输出 child 块, son 块, daughter块的顺序可能不同,但是每个块的输出过程不会被打断。
分析:因为上述程序执行时,lockf(1,1,0)锁定标准输出设备,lockf(1,0,0)解锁标准输出设备,在lockf(1,1,0)与lockf(1,0,0)中间的for循环输出不会被中断,加锁与不加锁效果不相同。
4、相关问题及思考
(1)系统是怎样创建进程的?
首先,fork() 函数拷贝当前进程创建子进程。产生的子进程与父进程的区别仅在与 PID 与 PPID 以及某些资源和统计量,例如挂起的信号等。准备好进程运行的地址空间后,exec() 函数族负责读取可执行程序,并将其加载到相应的位置开始执行。
(2)可执行文件加载时进行了哪些处理?
可执行文件加载时首先是创建一个新进程的fork系统调用,然后用于实现进程自我终止的exit系统调用;改变进程原有代码的exec系统调用;用于将调用进程挂起并等待子进程终止的wait系统调用;获得进程标识符的getpid系统调用等处理过程。

(3)当首次调用新创建进程时,其入口在哪里?
在进程队列的ready状态下,由离自己最近的父进程执行调度,即入口在最近的父进程处。

5总结
这次实验加深了我对进程概念的理解,明确进程和程序的区别,进一步认识并发执行的实质,通过分析进程争用资源的现象,学习了解决进程互斥的方法。
实验过程中也到了代码方法不理解的情况,导致不明白实验结果的实际意义,但在仔细阅读代码和查找相关方法后明白了此次实验的目的内容。
关注公众号:Time木
回复:操作系统实验
可获得相关代码,数据,文档
回复:操作系统试卷
可获取操作系统试卷整理
更多大学课业实验实训可关注公众号回复相关关键词
学艺不精,若有错误还望指点

GitHub 加速计划 / li / linux-dash
10.39 K
1.2 K
下载
A beautiful web dashboard for Linux
最近提交(Master分支:2 个月前 )
186a802e added ecosystem file for PM2 4 年前
5def40a3 Add host customization support for the NodeJS version 4 年前
Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐