Linux基本环境_实验日志_第1页
Linux基本环境_实验日志_第2页
Linux基本环境_实验日志_第3页
Linux基本环境_实验日志_第4页
Linux基本环境_实验日志_第5页
已阅读5页,还剩20页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、指导教师: 姓 名: 学 院: 专 业: 班 级: 学 号: - 25 - Linux基本环境 实验日志指导教师 实验时间 年 月 日学院 计算机科学与技术学院 专业 信息安全 班级 学号 姓名 实验室 实验题目:Linux基本环境实验目的:1.熟悉Linux下的基本操作,学会使用 各种Shell命令去操作Linux,对Linux有一个感性的认识;2.学会使用vi编辑器编辑简单的C语言程序,并能对其编译和调试。实验要求:1.参阅相关Linux操作系统的安装手册,熟悉Linux的基本安装和配置;2.参阅相关Linux的命令参考手册,熟悉Linux下的操作命令。实验内容: 以普通用户身份登陆,并使

2、用“ls”,“cat”“cd”等命令来实现基本的文件操作并观察Linux文件系统的特点;使用vi编辑器编写一个C程序,并用gcc命令进行编译和链接,并用a.out来进行输出结果。实验步骤及结果:1.到学校软件中心下载一个名叫putty的软件2.用putty登录到远程linux服务器IP:172.23.26.105  (172.23.26.10备用)   用户名:student  密码:student1233.进行如下常用命令练习:n 练习使用命令ls(注意Linux命令区分大小写。)u 使用ls 查看当前目录内容;使用ls 查看指定目录内容,如/目录,/

3、etc目录u 使用ls all 查看当前目录内容;使用dir 查看当前目录内容n 使用cd改变当前目录u cd . 回到上层目录 ;cd / 回到根目录n pwd 显示当前路径 n 建立目录mkdiru mkdir 目录名 ; mkdir /home/s2001/newdir n 删除目录:rmdir;n 复制文件cp: 如 cp 文件名1 文件名2n 移动文件或目录: mv n 删除文件 rmn 显示文件内容:more (分页显示); n 显示文件:cat 文件名 建立文件:cat >文件名,ctrl+d结束输入4.使用编辑器vi 编辑文件心得体会: 通过本次实验,我熟悉了在Linux

4、下的基本操作,学会了使用各种Shell命令去操作Linux,并且对Linux有一个感性的认识;同时也学会了怎样使用vi编辑器编辑简单的C语言程序,并能对其编译和调试。 进程管理(上) 实验日志指导教师 刘锐 实验时间:2011年10月27日学院 计算机科学与技术学院 专业 信息安全 班级0440901学号 2009211868姓名 游丽 实验室S331实验题目:进程管理(上)实验目的:1.加深对进程概念的理解,明确进程和程序的区别。2.进一步认识并发执行的实质。实验主要步骤及结果: 编写一段程序,使用系统调用fork( )创建两个子进程。当此程序运行时,在系统中有一个父进程和两个子进程活动。让

5、每一个进程在屏幕上显示一个字符;父进程显示字符“a”,子进程分别显示字符“b”和“c”。试观察记录屏幕上的显示结果,并分析原因。1.源程序:#include<stdio.h>#include<unistd.h>int main(void)int p1,p2;Int i;If(p1=fork() for(i=0;i<500;i+) printf("you"); wait(0); exist(0);else if(p2=fork() for(i=0;i<500;i+) printf("are"); wait(0); exi

6、st(0); else for(i=0;i<500;i+) printf("beautiful!"); exist(0); 2.实验结果:心得体会: 通过本次实验,我加深了对进程概念的理解,进一步认识并发执行的实质。并且通过编写一段程序,使系统调用fork( )创建两个子进程,当此程序运行时,在系统中有一个父进程和两个子进程活动,让每一个进程在屏幕上显示一个字符;在第二个实验中之所以会出现顺序混乱,是由于进程并发执行时的调度顺序和父子进程的抢占处理机问题,输出字符串的顺序和先后随着执行的不同而发生变化。 进程管理(下) 实验日志指导教师 刘锐 实验时间: 2011 年

7、 11 月 3 日学院 计算机科学与技术学院 专业 信息安全 班级 04490901 学号 2009211868 姓名 游丽 实验室 s331B 实验题目:进程管理(下)实验目的 1.加深对进程概念的理解,明确进程和程序的区别。 2.进一步认识并发执行的实质。 3.分析进程竞争资源现象,学习解决进程互斥的方法。 4.了解Linux系统中进程通信的基本原理。实验要求 1.阅读Linux中fork,signal,lockf等系统调用的功能和用法。 2.了解什么是管道,了解进程间通信的常用方法。 3.编写一段程序,使其现实进程的软中断通信。4.编制一段程序,实现进程的管理通信。 实验主要步骤及结果:

8、1. 编写一段程序,使其现实进程的软中断通信。 要求:使用系统调用fork()创建两个子进程,再用系统调用signal()让父进程捕捉键盘上来的中断信号(即按DEL键);当捕捉到中断信号后,父进程用系统调用Kill()向两个子进程发出信号,子进程捕捉到信号后分别输出下列信息后终止: Child Processll is Killed by Parent! Child Processl2 is Killed by Parent! 父进程等待两个子进程终止后,输出如下的信息后终止 Parent Process is Killed!(1)程序:#include <stdio.h> #in

9、clude <signal.h> #include <unistd.h> #include <stdio.h> #include <sys/types.h>   int wait_flag; void stop();   main() int pid1,pid2;   signal(3,stop); /or signal(14,stop); while(pid1=fork()=-1); if(pid1>0) while(pid2=fork()=-1); if(pid2>0) / wait_flag=1;

10、sleep(5); kill(pid1,16); kill(pid2,17); wait(0); wait(0); printf("Parent process is killed !n"); exit(0); else / wait_flag=1; signal(17,stop); printf("Child process 2 is killed by parent !n"); exit(0); else / wait_flag=1; signal(16,stop); printf("Child process 1 is killed by

11、 parent !n"); exit(0);   void stop() wait_flag=0; (2)运行结果:child process 1 is killed by parent! child process 2 is killed by parent! Parent process is killed! (3)分析: 上述程序中,实用函数signal()都放在一段程序的前面部位,而不是在其他接收信号处。这是因为signal()的执行只是为进程指定信号量16或17的作用,以及分配相应的与 stop()过程链接的指针。从而signal()函数必须在程序前面部分执行。

12、2.编制一段程序,实现进程的管理通信。 使用系统调用pipe()建立一条管道线;两个子进程P1和P2分别向管道中写一句话: Child 1 is sending a message! Child 2 is sending a message! 而父进程则从管道中读出来自于两个子进程的信息,显示在屏幕上。 要求父进程先接收子进程P1发来的消息,然后再接收子进程P2发来的消息。(1)程序:#include<unistd.h> #include<signal.h> #include<stdio.h> int pid1,pid2; main() int fd2; c

13、har OutPipe100,InPipe100; pipe(fd); while(pid1=fork()=-1); if(pid1=0) lockf(fd1,1,0); sprintf(OutPipe,"child 1 process is sending message!"); write(fd1,OutPipe,50); sleep(5); lockf(fd1,0,0); exit(0); else while(pid2=fork()=-1); if(pid2=0) lockf(fd1,1,0); sprintf(OutPipe,"child 2 proee

14、ss is sending message!"); write(fd1,OutPipe,50); sleep(5); lockf(fd1,0,0); exit(0); else wait(0); read(fd0,InPipe,50); printf("%sn",InPipe); wait(0); read(fd0,InPipe,50); printf("%sn",InPipe); exit(0); (2)运行结果:child 1 is sending message! child 2 is sending message! 心得体会:通过本次

15、实验,我加深了对进程概念的理解,更加明白了进程和程序之间的区别,也进一步认识并发执行的实质。同时我也学习到了解决进程互斥的方法。在编写程序方面,了解了Linux中fork,signal,lockf等系统调用的功能和用法。在以后的学习中我会更加努力的学习操作系统,逐步深入的了解操作系统。 信号量 实验日志指导教师 刘锐 实验时间:2011年11月10日学院 计算机科学与技术 专业 信息安全 班级 0490901 学号 2009211868姓名 游丽 实验室 S331B 实验题目:用信号量实现进程间通信实验目的 :1.了解和熟悉Linux中信号量机制在进程间通信的作用。2.进一步熟悉在Linux环

16、境下的编程。实验要求:1.熟读理论教材中关于信号量的基本原理和工作方式;2.stu用户用man命令查询信号量机制的相关函数semget,semctl,semop的使用方法。实验主要步骤及结果:1.分析代码sem1.c2.在代码中表示注释出写出代码段作用。 注释结果如下:/* 函数声明及信号量定义 */#include <unistd.h>#include <stdlib.h>#include <stdio.h>#include <sys/types.h>#include <sys/ipc.h>#include <sys/sem.

17、h>#include "semun.h"static int set_semvalue(void);static void del_semvalue(void);static int semaphore_p(void);static int semaphore_v(void);static int sem_id;int main(int argc, char *argv) int i; int pause_time; char op_char = 'O' srand(unsigned int)getpid(); sem_id = semget(key_

18、t)1234, 1, 0666 | IPC_CREAT); /*创建一个新的信号量*/ /*如果有参数,设置信号量,修改字符*/ if (argc > 1) if (!set_semvalue() fprintf(stderr, "Failed to initialize semaphoren"); exit(EXIT_FAILURE); op_char = 'X' sleep(2); /*执行p操作*/for(i = 0; i < 10; i+) if (!semaphore_p() exit(EXIT_FAILURE); printf(&qu

19、ot;%c", op_char);fflush(stdout); pause_time = rand() % 3; sleep(pause_time); printf("%c", op_char);fflush(stdout);/* 执行V操作 */if (!semaphore_v() exit(EXIT_FAILURE); pause_time = rand() % 2; sleep(pause_time); printf("n%d - finishedn", getpid(); if (argc > 1) sleep(10); del

20、_semvalue(); /*删除信号量*/ exit(EXIT_SUCCESS);/* 设置信号量 */static int set_semvalue(void) union semun sem_union; sem_union.val = 1; if (semctl(sem_id, 0, SETVAL, sem_union) = -1) return(0); return(1);/* 删除信号量 */static void del_semvalue(void) union semun sem_union; if (semctl(sem_id, 0, IPC_RMID, sem_union)

21、 = -1) fprintf(stderr, "Failed to delete semaphoren");/* 执行P操作 */static int semaphore_p(void) struct sembuf sem_b; sem_b.sem_num = 0; sem_b.sem_op = -1; /* P() */ sem_b.sem_flg = SEM_UNDO; if (semop(sem_id, &sem_b, 1) = -1) fprintf(stderr, "semaphore_p failedn"); return(0); r

22、eturn(1);/* 执行V操作*/static int semaphore_v(void) struct sembuf sem_b; sem_b.sem_num = 0; sem_b.sem_op = 1; /* V() */ sem_b.sem_flg = SEM_UNDO; if (semop(sem_id, &sem_b, 1) = -1) fprintf(stderr, "semaphore_v failedn"); return(0); return(1);3.分两次启动这个程序,第一次启动时加上一个参数,分析程序输出结果。运行结果:心得体会: 在这次

23、实验之前,我在理论教材中学习了关于信号量的基本原理和工作方式,以及用man命令查询信号量机制的相关函数semget,semctl,semop的使用方法。 通过本次实验,我了解和熟悉了Linux中信号量机制在进程间通信的作用,并且进一步熟悉了在Linux环境下的编程,本次试验使我收获了很多知识! 文件系统(上) 实验日志指导教师 梁峰 实验时间: 2011年11 月14 日学院 计算及科学与技术学院 专业 信息安全 班级 0440901 学号 2009211868 姓名 游丽 实验室 s331B 实验题目:文件系统(上)实验目的:1.理解文件系统2.掌握常见文件系统的文件目录操作的系统函数实验要

24、求:参照现代操作系统中文件系统章节中关于文件拷贝的代码范例,在理解吸收的基础上,自己编一个程序,能够实现在本用户目录下的跨目录之间的拷贝:比如,实现把/home/stu/123456目录下的一个文件拷贝到/home/stu/654321目录下实验主要步骤:(教材中的示范代码,如下:)2.用“mkdir”命令分别创建目录/home/student/youli和/home/student/youli,用“cat>hx321”创建一个名为you321的文件; 3.用命令cp you321 youli实现把/home/student/youli目录下的文件名为you321的文件拷贝到/home/

25、student/xxhh目录下实验结果如下:心得体会: 通过这次实验让我理解了文件系统的操作,并且掌握常见文件系统的文件目录操作的系统函数,以及在linux环境下,cp、mkdir、cat等文件系统相关的一些操作命令,我深刻的体会到只有理论知识是没有用的,只有将理论与实际相结合才能收获更多。 内存管理(上) 实验日志指导教师 刘锐 实验时间: 2011 年 11 月 17 日学院 计算机科学与技术学院 专业 信息安全 班级 04490901 学号 2009211868 姓名 游丽 实验室 s331B 实验题目:存储管理(上)实验目的: 本实验的目的是通过存储管理中FIFO页面置换算法模拟设计,

26、了解虚拟存储技术的技术特点,掌握请求页式存储管理的页面置换算法。实验要求:1.通过随机数产生一个指令序列,共320条指令。指令的地址按下述原则生成: 50%的指令是顺序执行的; 50%的指令是均匀分布在前地址部分; 50%的指令是均匀分布在后地址部分。 具体的实施方法是: 在 0,319 的指令之间随即选取一起点m; 顺序执行一条指令,即执行地址为m+1的指令; 在前地址0,m+1中随机选取一条指令并执行,该指令的地址为m; 顺序执行一条指令,其地址为 m+ 1; 在后地址m+ 2,319中随机选取一条指令并执行; 重复上述步骤-,直到执行320次指令。2.将指令序列变换为页地址流设:页面大小

27、为1k; 用户内存容量为4页到32页; 用户虚存容量为32k。在用户虚存中,按每k存放10条指令排在虚存地址,即320条指令在虚存中的存放方式为: 第0条-第9条指令为第0页(对应虚存地址为0,9); 第10条-第19条指令为第一页(对应虚存地址为10,19); 第310条第319条指令为第31页(对应虚地址为310,319)。 按以上方式,用户指令可组成32页。 3.计算并输出FIFO算法在不同内存容量命中率。命中率=(1-页面失效次数)/页地址流长度实验主要步骤:一、<程序设计> 本实验的程序设计基本上按照实验内容进行。即首先用Srand()和rand()函数定义和产生指令序列

28、,然后将指令序列变换成相应的页地址流,并针对不同的算法计算出相应的命中率。相关定义如下: 1.数据结构 (1)页面类型 : typedef struct int pn,pfn,counter,time; pl_type; 其中pn为页号,pfn为面号,counter为一个周期内访问该页面次数,time为访问时间。 (2)页面控制结构 : pfc_struct int pn,pfn; struct pfc_struct *next; ; typedef struct pfc_struct pfc_type; pfc_type pfctotal_vp,*freepf_head,*busypf_he

29、ad; pfc_type *busypf_tail; 其中pfctotal_vp定义用户进程虚页控制结构, *freepf_head为空页面头的指针, *busypf_head为忙页面头的指针, *busypf_tail为忙页面尾的指针。 2.函数定义 (1)void initialize():初始化函数,给每个相关的页面赋值。 (2)void FIFO():计算使用FIFO算法时的命中率。 3.变量定义 (1)int atatal_instruction:指令流数据组。 (2)int pagetotal_instruction:每条指令所属页号。 (3)int offsettotal_ins

30、truction:每页装入10条指令后取模运算页号偏移值。 (4)int total_pf:用户进程的内存页面数。 (5)int diseffect:页面失效次数。实验结果:1. .源代码memory.c已经给出部分代码,运行试验代码,运行结果截图如下,分析运行结果:从上述结果可知,在内存页面数较少(45页面)时,命中率差都是50左右。在内存页面为725个页面之间时, FIFO算法的访内命中率大致在52至87之间变化。在内存页面为2532个页面时,由于用户进程的所有指令基本上都已装入内存,从而命中率已增加较大。2. 在源代码memory.c中,分析源代码中用一连串问号所标示的语句的作用。(1)

31、srand(10*getpid():产生一个48位种子随机数,用来作为初始化随机数序列的“种子”,且该随机函数的种子参数是10*getpid()。(2)diseffect+=1:计算失效次数。(3)freepf_head->next=NULL:无空闲页面。心得体会:通过这次的实验,我了解了存储管理中FIFO页面置换算法模拟设计方法,并且了解到了虚拟存储技术的技术特点,初步掌握了请求页式存储管理的页面置换算法,此次试验又收获了不少!存储管理(下)实验日志指导教师 刘锐 实验时间 2011 年 11 月 17 日学院 计算机科学与技术 专业 信息安全 班级 0440901 学号 200921

32、1868 姓名 游丽 实验室 s331 实验题目:存储管理(下)实验目的:1.理解虚拟内存和物理内存的含义2.了解gcc编译器的-c和-o选项3.理解共享库的含义实验要求:1.用cat /proc/meminfo命令查看当前机器的内存大小2.运行如下virtual_memory.c的代码,并理解该段代码的含义/* virtual_memory.c*/#include <stdio.h> int main() int *p = malloc(10000); printf("p's address is 0x%pn", p); free(p); return

33、 0;3.观察把(2)的代码运行的结果和(1)中用命令查看到的机器内存大小,看看指针p的值是否超过机器的内存大小?并解释产生这种现象的原因。4.在编译程序virtual-memory.c过程中,分别观察源文件,obj文件,和可执行文件的小,并解释其中的原因。实验主要步骤及实验结果:1.用cat /proc/meminfo命令查看当前机器的内存大小2.运行如下virtual_memory.c的代码,并理解该段代码的含义/* virtual_memory.c*/#include <stdio.h> int main() int *p = malloc(10000); printf("p's address is 0x%pn", p); free(p); return 0;3.观察把(2)的代码运行的结果和(1)中用命令查看到的机器内存大小,看看指针p的值是否超过机器的内存大小?并解释产生这种

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论