操作系统实验报告
- 格式:doc
- 大小:362.00 KB
- 文档页数:13
西安邮电学院
院系:理学院
班级:信息0702 姓名:康超(22)
实验1 Linux基本环境
1、实验目的
(1)熟悉Linux下的基本操作,学会使用各种Shell命令去操作Linux,对Linux有一个感性认识。
(2)学会使用vi编辑器编辑简单的C语言程序,并能对其编译和调试。
2、实验预备内容
(1)参阅相关Linux操作系统的安装手册,熟悉Linux的基本安装和配置;
(2)参阅相关Linux的命令参考手册,熟悉Linux下的操作命令。
3、实验内容
(1)以root用户身份登陆,并使用“ls”,“cat”“cd”等命令来实现基本的文件操作并观察Linux文件系统的特点;
(2)使用vi编辑器编写一C程序,并用gcc命令进行编译和链接,并用a.out来进行输出结果。
(3)基本操作如下:
显示Linux联机手册
使用man who命令查看结果如下:
以长格式列出文件,其中包括文件中的字符个数以及最近修改的日期和时间
-t 以最近修改时间的顺序列文件,
-r将-t选择的的列表顺序变反
--a显示隐藏文件
创建目录kc并进入目录kc显示目录中的文件 . .. 是系统初始默认文件
创建目录kc进入目录kc
从当前目录退出,退回到父目录
删除目录中文件,删除文件nano.save 删除目录kkk
Copy文件test.c并重新命名为kc.c
mv文件其实质相当于复制文件,只是文件名改了创建目录kk并将文件kc.c移动到此目录下
移动目录,当两个目录内容相同时相当于将一个目录移动到另一个目录下
直接显示文件内容,使用cat命令查看文件内容
4、思考
(1)Linux系统在用户登陆和操作界面以及文件系统上有哪些特点?
linux是真正的多用户:同一时刻,可以有多个用户同时登录一台linux(可以远程,也可以本地,本地只能有一个(废话)),而且linux下的大多程序是支持多用户的,比如vim,
A,B,C三个用户同时登录linux,则可以同时使用vim,只要不用他来编辑同一个文档就可以了。
Linux操作界面是命令行式的,黑底白字的DOS样子。
Linux最重要的特征之一就是支持多个不同的文件系统,前面我们已经看到,Linux目前支持的文件系统多达十余种,随着时间的推移,这一数目还在不断增加。在Linux中,一个分离的文件系统不是通过设备标识(如驱动器号或驱动器名)来访问,而是把它合到一个单一的目录树结构中,通过目录来访问,这一点与Unix十分相似。Linux用安装命令将一个新的文件系统安装到系统单一目录树的某一目录下,一旦安装成功,该目录下的所有内容将被新安装的文件系统所覆盖,当文件系统被卸下后,安装目录下的文件将会被重新恢复。
实验2 进程管理
1、实验目的
(1)加深对进程概念的理解,明确进程和程序的区别。
(2)进一步认识并发执行的实质。
(3)分析进程竞争资源现象,学习解决进程互斥的方法。
(4)了解Linux系统中进程通信的基本原理。
2、实验预备内容
(1)阅读Linux的sched.h源文件,加深对进程管理概念的理解。
(2)阅读Linux的fork.c源文件,分析进程的创建过程。
3、实验内容
(1)进程的创建
编写一段源程序,使系统调用fork()创建两个子进程,当此程序运行时,在系统中有一个父进程和两个子进程活动。让每一个进程在屏幕上显示一个字符:父进程显示字符“a”;子进程分别显示字符“b”和字符“c”。试观察纪录屏幕上的显示结果,并分析原因。
运行结果:
(2)进程的控制
修改已编写的程序,将每个进程输出一个字符改为每个进程输出一句话,在观察程序执
行时屏幕出现的现象,并分析原因。
如果在程序中使用调用lockf()来给每一个子进程加锁,可以实现进程之间的互斥,观察并分析出现的现象。
运行结果:
加锁后的程序:
运行结果:
大致与未上锁的输出结果相同,也是随着执行时间不同,输出结果的顺序有所不同。
(3)①编写一段程序,使其现实进程的软中断通信。
要求:使用系统调用fork()创建两个子进程,再用系统调用signal()让父进程捕捉键盘上来的中断信号(即按DEL键);当捕捉到中断信号后,父进程用系统调用Kill()向两个子进程发出信号,子进程捕捉到信号后分别输出下列信息后终止:
Child Processll is Killed by Parent!
Child Processl2 is Killed by Parent!
父进程等待两个子进程终止后,输出如下的信息后终止
Parent Process is Killed!
②在上面的程序中增加语句signal (SIGNAL, SIG-IGN) 和signal (SIGQUIT, SIG-IGN), 观察执行结果,并分析原因。
(4)进程的管道通信
编制一段程序,实现进程的管理通信。
使用系统调用pipe()建立一条管道线;两个子进程P1和P2分别向管道中写一句话: Child 1 is sending a message!
Child 2 is sending a message!
而父进程则从管道中读出来自于两个子进程的信息,显示在屏幕上。
要求父进程先接收子进程P1发来的消息,然后再接收子进程P2发来的消息。
4、思考
(1)系统是怎样创建进程的?
Init程序以/etc/inittab为脚本文件来创建系统的新进程的。新进程还克以创建新进程。创建新进程是通过克隆老进程或当前进程来创建的。新进程的创建实用系统调用sys_fork()或sys_clone(),并且在内核模式下完成。在系统调用结束时,系统从物理内存中分配一个心的task_struct()数据结构和进程堆栈,同时获得一个唯一的标示此进程的标识符。
通过FORK函数调用促使内核创建一个新的进程,该进程是调用进程的一个精确的副本。新创建的进程为子进程,调用的FORK进程为父进程,而且创建出来的是两个副本,即,两个进程,但他们互不干扰。
(2)可执行文件加载时进行了哪些处理?
将源代码转换为机器可认识代码的过程。编译程序读取源程序(字符流),对之进行词法和语法的分析,将高级语言指令转换为功能等效的汇编代码,再由汇编程序转换为机器语言,并且按照操作系统对可执行文件格式的要求链接生成可执行程序。具体经过以下几个处理:C源程序->编译预处理->编译->优化程序->汇编程序->链接程序->可执行文件