操作系统实验

目录

文章末尾 见相关代码文档数据表格等资源的百度网盘阿里云盘提取链接

实验一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命令的帮助信息)

查看linux当前时间_linux查看当前时间_linux下怎么查看当前系统的版本

linux查看当前时间_linux下怎么查看当前系统的版本_查看linux当前时间

5.ls(显示目录内容)

格式:ls[选项][目录或是文件]

其中:-a显示指定目录下所有子目录和文件,包括隐藏文件

-l以长格式来显示文件的详细信息。

-R递归地显示指定目录的各个子目录中的文件

例如:

使用ls查看当前目录内容:ls

使用ls查看指定目录内容:ls/etc

linux下怎么查看当前系统的版本_查看linux当前时间_linux查看当前时间

使用ls–al查看当前目录内容:$ls-al

linux下怎么查看当前系统的版本_linux查看当前时间_查看linux当前时间

使用dir查看当前目录内容:$dir

linux下怎么查看当前系统的版本_查看linux当前时间_linux查看当前时间

6.cd(改变工作目录)

格式:cd[路径名称]

如:cd…回到上层目录;cd/回到根目录

linux下怎么查看当前系统的版本_linux查看当前时间_查看linux当前时间

7.pwd(显示当前工作目录的绝对路径)

格式:pwd

查看linux当前时间_linux查看当前时间_linux下怎么查看当前系统的版本

8.mkdir(创建目录)

格式:mkdir[目录名称]

例如:mkdir/home/s2001/newdir

查看linux当前时间_linux查看当前时间_linux下怎么查看当前系统的版本

9.rmdir(删除空目录)

格式:rmdir[选项][目录名称]

linux下怎么查看当前系统的版本_查看linux当前时间_linux查看当前时间

10.cp(文件或目录的复制)

格式:cp[选项]源文件或目录目标文件或目录

例如:cp文件名1文件名2

linux下怎么查看当前系统的版本_linux查看当前时间_查看linux当前时间

11.mv(文件或目录更名或将文件由一个目录移到另一个目录中)

格式:mv[选项]源文件或目录目标文件或目录

查看linux当前时间_linux下怎么查看当前系统的版本_linux查看当前时间

12.rm(删除文件或目录)

格式:rm[选项]文件名|目录名

linux下怎么查看当前系统的版本_linux查看当前时间_查看linux当前时间

13.cat(显示文件)

格式:cat[选项]文件列表

例如:cat文件名

linux查看当前时间_linux下怎么查看当前系统的版本_查看linux当前时间

cat命令也可用来建立新文件:cat>文件名,ctrl+d结束输入

查看linux当前时间_linux下怎么查看当前系统的版本_linux查看当前时间

1.3.2vi编辑器的使用

vi提供二种工作模式:输入模式(insertmode)和命令模式(commandmode)。使用者进入vi后,即处在命令模式下,此刻键入的任何字符皆被视为命令,可进行删除、修改、存盘等操作。要输入信息,应转换到输入模式。

1.命令模式

在输入模式下,按ESC可切换到命令模式。

命令模式下,可选用下列指令离开vi:

:q!离开vi,并放弃刚在缓冲区内编辑的内容

:wq将缓冲区内的资料写入磁盘中,并离开vi

:ZZ同wq

:x同wq

:w将缓冲区内的资料写入磁盘中,但并不离开vi

:q离开vi,若文件被修改过linux查看当前时间,则要被要求确认是否放弃修改的内容,此指令可与: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打开一个新的未命名的文件,当保存的时候再给它命名,只是这样做不很方便。

linux查看当前时间_查看linux当前时间_linux下怎么查看当前系统的版本

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

linux下怎么查看当前系统的版本_linux查看当前时间_查看linux当前时间

(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

查看linux当前时间_linux查看当前时间_linux下怎么查看当前系统的版本

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”等命令的使用方法linux查看当前时间,也使用了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”。

linux查看当前时间_linux下怎么查看当前系统的版本_查看linux当前时间

查看linux当前时间_linux下怎么查看当前系统的版本_linux查看当前时间

分析:从进程并发执行来看,输出bac,acb或bca都有可能。

原因:fork()创建进程所需要的时间要多于输出一个字符的时间,因此在主进程创建进程2的同时,进程1就输出了”b”,而进程2和主程序的输出次序是有随机性的,所以会出现多种可能结果。

3.2进程控制

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

linux查看当前时间_linux下怎么查看当前系统的版本_查看linux当前时间

linux下怎么查看当前系统的版本_查看linux当前时间_linux查看当前时间

分析:由于函数printf()输出的字符串之间不会被中断,因此,字符串内部的字符顺序输出时不变。但是,由于进程并发执行时的调度顺序和父子进程的抢占处理机问题,处处字符串的顺序和先后随着执行的不同而发生变化。

如果在程序中使用系统调用lockf()来给每一个进程加锁,可以实现进程之间的互斥,观察并分析出现的现象。

linux查看当前时间_linux下怎么查看当前系统的版本_查看linux当前时间

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

linux查看当前时间_查看linux当前时间_linux下怎么查看当前系统的版本

分析:因为上述程序执行时,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总结

这次实验加深了我对进程概念的理解,明确进程和程序的区别,进一步认识并发执行的实质,通过分析进程争用资源的现象,学习了解决进程互斥的方法。

实验过程中也到了代码方法不理解的情况,导致不明白实验结果的实际意义,但在仔细阅读代码和查找相关方法后明白了此次实验的目的内容。

linux下怎么查看当前系统的版本_查看linux当前时间_linux查看当前时间

linux下怎么查看当前系统的版本_查看linux当前时间_linux查看当前时间

其他公众号资源汇总可点击->聊天框菜单下资源汇总

CSDN资源汇总可点击以下链接:

计算机操作系统实验->百度网盘提取链接:https://pan.baidu.com/s/1zAtrvQz-rlt63-TmHKo7yQ?pwd=time提取码:time

计算机操作系统试卷->百度网盘提取链接:https://pan.baidu.com/s/1JvfUAcPRxoqVpM27mZTM5g?pwd=time 提取码:time

linux下怎么查看当前系统的版本_查看linux当前时间_linux查看当前时间

整理制作不易

如果感觉对您有帮助

如果感觉有所收获

感谢点击喜欢作者

或者

点点赞 收藏 在看也是对我们继续创作的鼓励

linux查看当前时间_linux下怎么查看当前系统的版本_查看linux当前时间

查看linux当前时间_linux查看当前时间_linux下怎么查看当前系统的版本

查看linux当前时间_linux下怎么查看当前系统的版本_linux查看当前时间

CSDN:Time木0101

B站公众号知乎小红书视频号:Time木