操作系统原理实验指导书_第1页
操作系统原理实验指导书_第2页
操作系统原理实验指导书_第3页
操作系统原理实验指导书_第4页
操作系统原理实验指导书_第5页
已阅读5页,还剩30页未读 继续免费阅读

下载本文档

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

文档简介

1、软件学院课程实验指导书课程名称 操作系统原理 任课教师 郭 伟 开课学期 辽宁工程技术大学软件学院软件工程系目 录实验一 Linux环境下进程管理.1实验二 银行家算法.9实验三 虚拟内存页面置换算法.12实验四 Spooling技术实现. . . . .15实验五 网络文件系统20实验六 linux文件系统及系统调用.26实验一 Linux环境下进程管理一、 实验属性实验性质: 验证性实验学时: 4学时实验要求: 必做二、实验目的1. 加深对进程概念的理解,明确进程和程序的区别;2. 进一步认识并发执行的实质;3. 分析进程争用资源的现象,学习解决进程互斥的方法;4. 了解Linux系统中进

2、程通信的基本原理。三、实验环境及知识准备1.实验环境: Linux系统开发环境2.知识准备:(1) Linux系统开发环境搭建;(2) Linux环境下GCC编译器的使用;(3)语言中函数定义与调用、指针和类型的定义与使用、结构的定义、动态内存的申请等预备知识。四、实验内容1. 进程的创建编写一段程序,使用系统调用fork()创建两个子进程。当此程序运行时,在系统中有一个父进程和两个子进程活动。让每一个进程在屏幕上显示一个字符:父进程显示字符“a”;子进程分别显示字符“b”和字符“c”。试观察记录屏幕上的显示结果,并分析原因。2. 进程的控制修改已编写的程序,将每个进程输出一个字符改为每个进程

3、输出一句话,再观察程序执行时屏幕上出现的现象,并分析原因。如果在程序中使用系统调用lockf()来给每一个进程加锁,可以实现进程之间的互斥,观察并分析出现的现象。3. 用fork( )创建一个进程,再调用exec( )用新的程序替换该子进程的内容;利用wait( )来控制进程执行顺序。五、实验步骤及指导1.进程的创建1.1 进程UNIX中,进程既是一个独立拥有资源的基本单位,又是一个独立调度的基本单位。一个进程实体由若干个区(段)组成,包括程序区、数据区、栈区、共享存储区等。每个区又分为若干页,每个进程配置有唯一的进程控制块PCB,用于控制和管理进程。PCB的数据结构如下:(1)进程表项(Pr

4、ocess Table Entry)。包括一些最常用的核心数据:进程标识符PID、用户标识符UID、进程状态、事件描述符、进程和U区在内存或外存的地址、软中断信号、计时域、进程的大小、偏置值nice、指向就绪队列中下一个PCB的指针P_Link、指向U区进程正文、数据及栈在内存区域的指针。(2)U区(U Area)。用于存放进程表项的一些扩充信息。每一个进程都有一个私用的U区,其中含有:进程表项指针、真正用户标识符u-ruid(read user ID)、有效用户标识符u-euid(effective user ID)、用户文件描述符

5、表、计时器、内部I/O参数、限制字段、差错字段、返回值、信号处理数组。由于UNIX系统采用段页式存储管理,为了把段的起始虚地址变换为段在系统中的物理地址,便于实现区的共享,所以还有:(3)系统区表项。以存放各个段在物理存储器中的位置等信息。系统把一个进程的虚地址空间划分为若干个连续的逻辑区,有正文区、数据区、栈区等。这些区是可被共享和保护的独立实体,多个进程可共享一个区。为了对区进行管理,核心中设置一个系统区表,各表项中记录了以下有关描述活动区的信息:区的类型和大小、区的状态、区在物理存储器中的位置、引用计数、指向文件索引结点的指针。(4)进程区表系统为每个进程配置了一张进程区表。表中,每一项

6、记录一个区的起始虚地址及指向系统区表中对应的区表项。核心通过查找进程区表和系统区表,便可将区的逻辑地址变换为物理地址。1.2 进程映像UNIX系统中,进程是进程映像的执行过程,也就是正在执行的进程实体。它由三部分组成:(1)用户级上、下文。主要成分是用户程序;(2)寄存器上、下文。由CPU中的一些寄存器的内容组成,如PC,PSW,SP及通用寄存器等;(3)系统级上、下文。包括OS为管理进程所用的信息,有静态和动态之分。1.3 所涉及的系统调用fork( )   创建一个新进程。系统调用格式:pid=fork( )参数定义:int fork(&#

7、160;)fork( )返回值意义如下:0:在子进程中,pid变量保存的fork( )返回值为0,表示当前进程是子进程。>0:在父进程中,pid变量保存的fork( )返回值为子进程的id值(进程唯一标识符)。-1:创建失败。如果fork( )调用成功,它向父进程返回子进程的PID,并向子进程返回0,即fork( )被调用了一次,但返回了两次。此时OS在内存中建立一个新进程,所建的新进程是调用fork( )父进程(parent process)的副本,称为子进程(child process)。子进程继承了父进程的许多特性,并具有与父进程完全相同的用户级上下文

8、。父进程与子进程并发执行。1.4 核心为fork( )完成以下操作(1)为新进程分配一进程表项和进程标识符进入fork( )后,核心检查系统是否有足够的资源来建立一个新进程。若资源不足,则fork( )系统调用失败;否则,核心为新进程分配一进程表项和唯一的进程标识符。(2)检查同时运行的进程数目超过预先规定的最大数目时,fork( )系统调用失败。(3)拷贝进程表项中的数据将父进程的当前目录和所有已打开的数据拷贝到子进程表项中,并置进程的状态为“创建”状态。(4)子进程继承父进程的所有文件对父进程当前目录和所有已打开的文件表项中的引用计数加1。(5)为子进程创建进程上、下文进程创建结束,设子进

9、程状态为“内存中就绪”并返回子进程的标识符。(6)子进程执行虽然父进程与子进程程序完全相同,但每个进程都有自己的程序计数器PC(注意子进程的PC开始位置),然后根据pid变量保存的fork( )返回值的不同,执行了不同的分支语句。1.5 参考程序#include <stdio.h>main( )int p1,p2;while(p1=fork( )= = -1);        /*创建子进程p1*/if (p1= =0) putchar('b'); 

10、0;     elsewhile(p2=fork( )= = -1);   /*创建子进程p2*/if(p2= =0) putchar('c');  else  putchar('a');    8<运行结果>bca(有时会出现abc的任意的排列)分析:从进程执行并发来看,输出abc的排列都是有可能的。原因:fork()创建进程所需的时间虽然可能多于输出一个字符的时间,但各个进程的时间片的获得

11、却不是一定是顺序的,所以输出abc的排列都是有可能的。2.进程的控制修改已编写的程序,将每个进程输出一个字符改为每个进程输出一句话,再观察程序执行时屏幕上出现的现象,并分析原因。如果在程序中使用系统调用lockf()来给每一个进程加锁,可以实现进程之间的互斥,观察并分析出现的现象。2.1 实验指导 (1)所涉及的系统调用lockf()lockf(files,function,size):用作锁定文件的某些段或者整个文件,本函数适用的头文件为:#include<unistd.h>参数定义:int lockf(files,function,size)int files,function

12、;long size;其中:files是文件描述符:function是锁定和解锁;1表示锁定,0表示解锁。size是锁定和解锁的字节数,若用0,表示从文件的当前位置到文件尾。(2)参考程序程序1#include <stdio.h>main( )int p1,p2,i;while(p1=fork( )= = -1);          /*创建子进程p1*/if (p1= =0) for(i=0;i<100;i+)printf("daughter %

13、d/n",i);else                while(p2=fork( )= = -1);   /*创建子进程p2*/if(p2= =0)                  for(i=0;i<100

14、;i+)                       printf("son %d/n",i);else                  for(i=0;i&

15、lt;100;i+)                       printf("parent %d/n",i);运行结果parentsondaughter.daughter.或 parentsonparentdaughter等分析:由于函数printf()输出的字符串之间不会被中断,因此,每个字符串内部的字符顺序输出时不变。但

16、是 , 由于进程并发执行时的调度顺序和父子进程的抢占处理机问题,输出字符串的顺序和先后随着执行的不同而发生变化。这与打印单字符的结果相同。程序2#include<stdio.h>#include<unistd.h>main()int p1,p2,i;while(p1=fork()=-1);if(p1=0)lockf(1,1,0);for(i=0;i<50;i+)printf("child %d/n",i);lockf(1,0,0);elsewhile(p2=fork()=-1);if(p2=0)lockf(1,1,0);for(i=0;i<

17、;50;i+)printf("son %d/n",i);lockf(1,0,0);elselockf(1,1,0);for(i=0;i<50;i+)printf("daughter %d/n",i);lockf(1,0,0);<运行结果输出parent块,son块,grandchild块的顺序可能不同,但是每个块的输出过程不会被打断。分析:因为上述程序执行时,lockf(1,1,0)锁定标准输出设备,lockf(1,0,0)解锁标准输出设备,在lockf(1,1,0)与lockf(1,0,0)中间的for循环输出不会被中断,加锁与不加锁效果不

18、相同。六、注意事项本课程每个实验为LINUX环境下进行实验,要求使用GCC编译器,能够熟练使用VIM编辑器进行文件编辑和代码开发,使用操作系统RedHat Enterprise 6 以上操作系统。七、实验报告内容及要求1.实验的程序源码;2.运行程序,给出运行结果截图;3.分析实验结果,给出实验结论。实验二 银行家算法一、 实验属性实验性质: 验证性实验学时: 4学时实验要求: 必做二、实验目的1.进一步理解利用银行家算法避免死锁的问题;2.在了解和掌握银行家算法的基础上,编制银行家算法通用程序,将调试结果显示在计算机屏幕上,再检测和笔算的一致性;3.理解和掌握安全序列、安全性算法。三、实验环

19、境及知识准备 1.实验环境: Linux系统开发环境2.知识准备:(1)银行家算法基本算法概念;(2)C语言基本语法及设计理念。四、实验内容1. 了解和理解死锁;2. 理解利用银行家算法避免死锁的原理;3. 会使用某种编程语言。五、实验步骤及指导1.安全状态指系统能按照某种顺序如<P1,P2,Pn>(称为<P1,P2,Pn>序列为安全序列),为每个进程分配所需的资源,直至最大需求,使得每个进程都能顺利完成。2. 银行家算法假设在进程并发执行时进程i提出请求j类资源k个后,表示为Requestij=k。系统按下述步骤进行安全检查:(1)如果RequestiNeedi则继续

20、以下检查,否则显示需求申请超出最大需求值的错误。(2)如果RequestiAvailable则继续以下检查,否则显示系统无足够资源,Pi阻塞等待。(3)系统试探着把资源分配给进程Pi,并修改下面数据结构中的数值:Availablej=Availablej-Requestij;Allocationi,j=Allocationi,j+Requestij;Needi,j=Needi,j-Requestij;(4)系统执行安全性算法,检查此次资源分配后,系统是否处于安全状态。若安全,才正式将资源分配给进程Pi,以完成本次分配;否则, 将本次的试探分配作废,恢复原来的资源分配状态,让进程Pi等待。3.安

21、全性算法(1)设置两个向量: 工作向量Work: 它表示系统可提供给进程继续运行所需的各类资源数目,它含有m个元素,在执行安全算法开始时,Work=Available; Finish: 它表示系统是否有足够的资源分配给进程,使之运行完成。开始时先做Finishi=false; 当有足够资源分配给进程时, 再令Finishi=true。(2)从进程集合中找到一个能满足下述条件的进程: Finishi=false; Needi,jWorkj; 若找到, 执行步骤(3), 否则,执行步骤(4)。(3)当进程Pi获得资源后,可顺利执行,直至完成,并释放出分配给它的资源,故应执行:Workj=Worki

22、+Allocationi,j;Finishi=true;go to step 2; (4)如果所有进程的Finishi=true都满足, 则表示系统处于安全状态;否则,系统处于不安全状态4. 实验步骤(1)参考图2-1所示流程图编写安全性算法。Y所有finish都为true?输出安全序列NYN存在Finishi =false&&Needij< Availablej初始化Work和FinishFinishi=true,Workj=Workj+ Allocationj所有进程都找完了?Y开始 图2-1 安全性算法流程图(2)编写统一的输出格式。每次提出申请之后输出申请成功与否

23、的结果。如果成功还需要输出变化前后的各种数据,并且输出安全序列。(3)参考图1-2所示流程图编写银行家算法。(4)编写主函数来循环调用银行家算法。六、注意事项1.在本实验中,我们的重点是在通过Linux操作系统为平台,以代码的方式来是先银行家算法,本质在于如何理解银行家算法;2.注意函数参数传递,赋值参数和引用参数的使用。七、实验报告内容及要求1.实验的程序源码;2.运行程序,给出运行结果截图;3.分析实验结果,给出实验结论。实验三 虚拟内存页面置换算法一、 实验属性实验性质: 设计性实验学时: 2学时实验要求: 必做二、实验目的通过这次实验,加深对虚拟内存页面置换概念的理解,进一步掌握先进先

24、出FIFO、最佳置换OPI和最近最久未使用LRU页面置换算法的实现方法。结合Linux的内层的分析方法查看内存的分配过程及linux kernel的内存管理机制。三、实验环境及知识准备1.实验环境: C与C+程序设计学习与实验系统2.知识准备:(1)使用Linux的基本命令;(2)了解Linux vmstat、free、top等命令查看linux系统的内存分配情况;(3) 掌握虚拟内存页面置换算法FIFO等基本算法理论。四、实验内容假设有n个进程分别在T1, ,Tn时刻到达系统,它们需要的服务时间分别为S1, ,Sn。分别采用先来先服务FCFS和短作业优先SJF进程调度算法进行调度,计算每个进

25、程的完成时间、周转时间和带权周转时间,并且统计n个进程的平均周转时间和平均带权周转时间。五、实验步骤及指导通过已知最小物理块数、页面个数、页面访问序列、及采用置换方式可以得出页面置换的缺页次数和缺页率,及每次缺页时物理块中存储。1输入的形式 int PageOrderMaxNumber;/页面序列int PageNum,LackNum=0,BlockNum;/页面个数,缺页次数,最小物理块数2. 输出的形式double LackPageRate/缺页率缺页个数每次缺页时物理块中存储 程序所能达到的功能模拟先进先出FIFO、最佳置换OPI和最近最久未使用LRU页面置换算法的工作过程。假设内存中分

26、配给每个进程的最小物理块数为m,在进程运行过程中要访问的页面个数为n,页面访问序列为P1, ,Pn,分别利用不同的页面置换算法调度进程的页面访问序列,给出页面访问序列的置换过程,计算每种算法缺页次数和缺页率。测试数据,包括正确的输入及其输出结果和含有错误的输入及其输出结果。程序中用到的所有抽象数据类型的定义、主程序的流程以及各程序模块之间的层次(调用)关系。int PageOrderMaxNumber;/页面序列int PageCountMaxNumber=0;/计算内存内数据离下一次出现的距离int PageNum,LackNum=0,BlockNum;/页面个数,缺页次数,最小物理块数do

27、uble LackPageRate=0;bool found=false;六、提高内容1. 使用linux 2.6.32的内核,取得Linux kernel关于内核实现内存分配的源代码,结合代码理解当前的linux的内存管理机制和算法;2. 根据linux使用的内存管理机制,对系统内存做优化调优。七、实验报告内容及要求1. 实验的程序源码;2. 运行程序,给出运行结果截图;3. 分析实验结果,给出实验结论。实验四 Spooling 技术实现一、 实验属性 实验性质: 验证性实验学时: 2学时实验要求: 必做 二、实验目的:1加深对SPOOLing (Simultaneaus Periphern

28、al Operating OnLine)系统组成与基本工作原理的理解;2使用客户/服务器模式进行程序设计;3使用Linux进程技术,模拟SPOOLing系统中输出进程的工作;4使用Linux进程通信技术,模拟SPOOLing系统工作进程与输出进程的数据输出;5使用Linux文件技术,模拟SPOOLing系统输出井的工作过程。三、实验环境及知识准备 1.实验环境:Linux系统环境 2.知识准备:(1)阅读Linux进程通信技术(消息和管道)的使用方法;(2)阅读Linux文件操作技术,掌握文件的基本处理方法。四、实验内容:假脱机打印是SPOOLing系统的典型应用。本次实验的内容就是以客户/服

29、务器模式模拟假脱机打印的工作过程。工作原理见图4-1。整个系统的工作是先启动打印服务器,初始化客户/服务器间的通信、准备输入缓存区、打印队列和输出井。然后启动请求打印的客户机程序(如命令:printmn file.dat),将要打印的文件(如:file.dat)读入客户机系统,包装成客户机和服务器之间通信的基本信息单位,放入输出缓存区,然后启动进程间通信机制,向打印服务器发出请求。服务器通过进程间的通信机制,将客户机传送的数据放入输出缓存区,并向打印队列申请打印,填写打印清单,然后将数据放入输出井中。打印服务器输入缓存区打印队列输出井客户机1请求打印打印文件输出缓存区数据传输客户机n请求打印数

30、据传输.图4-1模拟假脱机打印工作原理五、实验步骤及指导1进程间的通信可以选择:消息队列、管道和共享内存实现。2输出井可以通过一个文件进行模拟。 3下面是一个通过Linux消息队列实现的模拟假脱机打印系统。(1)消息的结构struct msglong pid;/进程号int id;/消息号int uid;/用户号int allpage;/总页数int size;/页长char nameMAX_NAME_LENGTH;/文件名char textMAX_MSG_SIZE;/消息内容(2)打印队列typedef struct int pid;int uid;char filenameMAX_NAME

31、_LENGTH; int allpage; WaitQueueMAX_ARRAY_LEN;(3)程序执行结果服务器启动服务器通过命令行启动:./spooling。启动界面如图4-2所示。图4-2 服务器界面(4)客户机请求打印客户机通过命令行启动:./printmn test.dat。分别启动两个客户机,进行文件test.dat和t.dat的打印输出。如图4-3和4-4所示。图4-3 客户机1界面 图4-4 客户机2界面(5)执行结果服务器和客户机模拟的结果如图4-5所示。图4-5 模拟结果(6)输出并打印结果放入输出井中(如:pool.dat),文件内容如图4-6所示。图4-6 输出井数据六

32、、注意事项重点理解栈的算法思想,能够根据实际情况选择合适的存储结构。七、实验报告内容及要求1.实验的程序源码;2.运行程序,给出运行结果截图;3.分析实验结果,给出实验结论。 实验五 网络文件系统一、 实验属性实验性质: 验证性实验学时: 2学时实验要求: 选做二、实验目的1. 通过对加密的理论基础上,明确加密和解密的过程;2. 学会利用PGP工具实现安全通讯;3. 理解安全通信实现过程。三、实验环境及知识准备1.实验环境: C与C+程序设计学习与实验系统2.知识准备:(1)linux下的软件GNUPG工具使用和安装;(2)基本的加密算法的和概念的理解。四、实验内容1 生成公私密钥(1)本机单

33、击实验平台“GnuPG”工具按钮,进入工作目录,键入命令:gpg -gen-key开始生成公私钥对。期间gpg会依次询问如下信息:欲产生密钥种类(默认选择1)密钥大小(默认大小2048字节)密钥有效期限(默认选择0永不过期)(2)生成用户标识,期间gpg会依次询问如下信息:Real name(用户名,请按本机的组编号和主机编号确定你的用户名)Email address(Email地址,如user2DCServer.Netlab)Common(注释信息,建议与用户名相同)确定上述输入后,gpg会提示你将要生成的USER-ID。键入“O”确定以上信息后,gpg需要一个密码来保护即将生成的用户私钥,

34、为了方便记忆,我们选择密码与用户名相同。(3)接下来gpg会根据以上信息生成公私密钥对,并将它们存放在 C:Documents and SettingsAdministratorApplication Datagnupg目录下,名字分别为:pubring.gpg和secring.gpg。2 导出公钥本机在gpg工作目录键入命令:gpg -a -o D:WorkPGPuserGXpubkey.asc -export userGX (userGX) (userGXCServer.Netlab),gpg会将公钥导入到D:WorkPGP这个指定目录的userGXpubkey.asc文件中。将userG

35、Xpubkey.asc文件发送到同组主机PGP共享目录中。3导入同组主机公钥本机从同组主机发送来的userGYpubkey.asc文件中,将对方公钥导入至本机gpg库,其命令如下:gpg -import D:WorkPGPuserGYpubkey.asc。 4利用对方公钥进行加密(1)在“D:WorkPGP”目录中新建一文本文件“userGX.txt”。(2)利用对方公钥对userGX.txt加密,并对其进行签名在gpg工作目录键入如下命令:gpg -sea -r userGYCServer.Netlab 加密文件绝对路径,其中userGYCServer.Netlab为USER-ID。加密完成

36、后,gpg还要对其进行签名表明这个密文文件是“我”发出的,而不是“其它人”,在提示处输入前面设置的用于保护本机私钥的密码即可。最后在原文件所在目录下,生成一个名为“userGX.txt.asc”的文件,将该文件发送到同组主机PGP目录中。 5 解密密文在gpg工作目录下键入命令:gpg -d 加密文件绝对路径 > 解密后文件路径,此时gpg要求输入前面设置的用于保护本机私钥的密码,输入密码,解开私钥。在存放加密文件的目录下就生了一个解密后的文件,打开解密文件,浏览正文,与同组主机确定其正确性。五、实验步骤及指导1. 实验原理RSA公钥体系的特点使它非常适合用来满足两个要求:保密性(pri

37、vacy)和认证性(authentication)。PGP(Pretty Good Privacy),是一个基于RSA公钥加密体系的邮件加密软件,它提供了非对称加密和数字签名。其创始人是美国的Phil Zimmermann,他把RSA公钥体系的方便和传统加密体系的高速结合起来,并且在数字签名和密钥认证管理机制上有巧妙的设计,因此PGP成为目前非常流行的公钥加密软件包。PGP有以下主要功能:(1)使用PGP对邮件加密,以防止非法阅读;(2)能给加密的邮件追加上数字签名,从而使收信人进一步确信邮件的发送者,而事先不需要任何保密的渠道用来传递密钥;(3)可以实现只签名而不加密,适用于发表公开声明时证

38、实声明人身份,也可防止声明人抵赖,这一点在商业领域有很大的应用前景;(4)能够加密文件,包括图形文件、声音文件以及其它各类文件;(5)利用PGP代替Unicode生成RADIX64(就是MIME的BASE 64格式)的编码文件。PGP给邮件加密和签名的过程是这样的:首先甲用自己的私钥将上述的128位值加密,附加在邮件后,再用乙的公钥将整个邮件加密(要注意这里的次序,如果先加密再签名的话,别人可以将签名去掉后签上自己的签名,从而篡改了签名)。这样这份密文被乙收到以后,乙用自己的私钥将邮件解密,得到甲的原文和签名,乙的PGP也从原文计算出一个128位的特征值来和用甲的公钥解密签名所得到的数进行比较

39、,如果符合就说明这份邮件确实是甲寄来的。这样两个安全性要求都得到了满足。2. 实验步骤2.1 生成公私密钥(1)本机单击实验平台“GnuPG”工具按钮,进入工作目录,键入命令:gpg -gen-key开始生成公私钥对。期间gpg会依次询问如下信息:欲产生密钥种类(默认选择1)密钥大小(默认大小2048字节)密钥有效期限(默认选择0永不过期)(2)生成用户标识,期间gpg会依次询问如下信息:Real name(用户名,请按本机的组编号和主机编号确定你的用户名)Email address(Email地址,如user2DCServer.Netlab)Common(注释信息,建议与用户名相同)确定上述

40、输入后,gpg会提示你将要生成的USER-ID。键入“O”确定以上信息后,gpg需要一个密码来保护即将生成的用户私钥,为了方便记忆,我们选择密码与用户名相同。(3)接下来gpg会根据以上信息生成公私密钥对,并将它们存放在 C:Documents and SettingsAdministratorApplication Datagnupg目录下,名字分别为:pubring.gpg和secring.gpg。2.2 导出公钥本机在gpg工作目录键入命令:gpg -a -o D:WorkPGPuserGXpubkey.asc -export userGX (userGX) (userGXCServer

41、.Netlab),gpg会将公钥导入到D:WorkPGP这个指定目录的userGXpubkey.asc文件中。将userGXpubkey.asc文件发送到同组主机PGP共享目录中。2.3 导入同组主机公钥本机从同组主机发送来的userGYpubkey.asc文件中,将对方公钥导入至本机gpg库,其命令如下:gpg -import D:WorkPGPuserGYpubkey.asc。2.4 利用对方公钥进行加密(1)在“D:WorkPGP”目录中新建一文本文件“userGX.txt”。(2)利用对方公钥对userGX.txt加密,并对其进行签名在gpg工作目录键入如下命令:gpg -sea -r

42、 userGYCServer.Netlab 加密文件绝对路径,其中userGYCServer.Netlab为USER-ID。最后在原文件所在目录下,生成一个名为“userGX.txt.asc”的文件,将该文件发送到同组主机PGP目录中。2.5 解密密文(1)在gpg工作目录下键入命令:gpg -d 加密文件绝对路径 > 解密后文件路径,此时gpg要求输入前面设置的用于保护本机私钥的密码,输入密码,解开私钥。在存放加密文件的目录下就生了一个解密后的文件,打开解密文件,浏览正文,与同组主机确定其正确性。六、注意事项1实验指导书中的截图和操作均为windows平台下操作,使用的软件为GNUPG

43、工具,在windows操作的步骤和过程和linux操作十分相似,需要学生将此实验移植到linux平台下;2在实验中加密的位数保持在1024上下,确保实验机器的内存足够用。七、实验报告内容及要求1.实验的程序源码;2.运行程序,给出运行结果截图;3.分析实验结果,给出实验结论。 实验六 linux文件系统及系统调用一、 实验属性 实验性质: 验证性实验学时: 2学时实验要求: 选做二、实验目的在linux系统中共享文件,通过网络使得远程的客户端能够顺利的加载服务器的文件系统,在加载的过程中观察操作系统的驱动变化。三、实验环境及知识准备 1.实验环境: Linux系统环境 2.知识准备: (1)了

44、解Linux文件系统;(2)了解NFS文件系统的服务端和客户端。四、实验内容1 掌握本地文件系统及网络网络文件系统之间的区别;2 了解网络文件系统存储过程;3 了解网络文件系统在读取或者存储时的驱动加载。五、实验步骤及指导NFS网络文件系统,服务端完成文件的共享,控制权限和限制地域使用,客户端使用Linux 系统自带的工具软件挂载网络文件系统形成本地的文件系统,在挂载的同事观察网络文件系统的驱动加载及vfs文件系统层面的驱动加载变化。1.配置Linux NFS的服务端,共享文件2.检查Linux文件系统VFS接口的关联情况3.检查VFS层面驱动加载情况4.在文件读写操作发生时,调用系统底层的系

45、统调用数目记录(1)Linux Kernel VFS 文件系统超级块代码:struct super_block struct list_head       s_list;             /*指向超级块链表的指针*/*包含该具体文件系统的块设备标识符。*例如,对于 /dev/hda1,其设备标识符为 0x301      kdev_t  

46、          s_dev;/*该具体文件系统中数据块的大小,以字节为单位*/      unsigned long        s_blocksize;/*块大小的值占用的位数,例如,如果块大小为1024字节,则该值为10*/      unsigned char     

47、0;  s_blocksize_bits;      unsigned char          s_dirt;          /*修改标志*/      unsigned long long s_maxbytes;       /*文件的最大长度*/ 

48、     struct file_system_type   *s_type;/*指向某个特定的具体文件系统的用于超级块操作的函数集合的指针*/      struct super_operations   *s_op;struct dquot_operations *dq_op; /*指向磁盘限额方法的指针*/      unsigned long    

49、    s_flags;   /*魔数,即该具体文件系统区别于其它文系统的一个标志*/      unsigned long        s_magic;      struct dentry        *s_root;      struct rw_s

50、emaphore    s_umount;      struct semaphore    s_lock;      int            s_count;      atomic_t      &#

51、160;  s_active;structlist_head       s_dirty;            /*已修改索引节点的链表*/struct list_head     s_locked_inodes;     /*涉及I/O的索引节点的链表*/struct list_head    

52、 s_files;          /*分配给超级的文件对象的链表*/      struct block_device *s_bdev;      struct list_head       s_instances;      struct quota_mount_options s

53、_dquot;        /*磁盘限额的选项*/*一个共用体,其成员是各种文件系统的fsname_sb_info数据结构*/      union              struct minix_sb_info  minix_sb;          

54、   struct ext2_sb_info ext2_sb;             struct ext3_sb_info ext3_sb;             struct hpfs_sb_info hpfs_sb;         

55、60;   struct ntfs_sb_info ntfs_sb;             struct msdos_sb_info msdos_sb;             struct isofs_sb_info isofs_sb;       

56、60;     struct nfs_sb_info nfs_sb;             struct sysv_sb_info sysv_sb;             struct affs_sb_info  affs_sb;     

57、60;       struct ufs_sb_info   ufs_sb;             struct efs_sb_info   efs_sb;             struct shmem_sb_info  shmem_sb;&#

58、160;            struct romfs_sb_info  romfs_sb;             struct smb_sb_info smbfs_sb;             struct hfs_sb_info&

59、#160;  hfs_sb;             struct adfs_sb_info adfs_sb;             struct qnx4_sb_info  qnx4_sb;           &#

60、160; struct reiserfs_sb_info    reiserfs_sb;             struct bfs_sb_info   bfs_sb;             struct udf_sb_info udf_sb;    &#

61、160;        struct ncp_sb_info ncpfs_sb;             struct usbdev_sb_info   usbdevfs_sb;             struct jffs2_sb_info jffs2_s

62、b;             struct cramfs_sb_info   cramfs_sb;             void           *generic_sbp;     

63、 u;      struct semaphore s_vfs_rename_sem;      struct semaphore s_nfsd_free_path_sem;(2)Linux Kernel VFS 文件系统索引节点对象代码 struct inode /*描述索引节点高速缓存管理的域*/      struct list_head       i_hash; &#

64、160;    /*指向哈希链表的指针*/      struct list_head       i_list;       /*指向索引节点链表的指针*/      struct list_head       i_dentry;    /*指向目录项链表

65、的指针*/           struct list_head       i_dirty_buffers;      struct list_head       i_dirty_data_buffers;/*描述文件信息的域*/      unsigned long

66、0;       i_ino;     /*索引节点号*/      atomic_t         i_count;         /*引用计数器*/      kdev_t      

67、;             i_dev;     /*设备标识号 */      umode_t                i_mode;      nlink_t  

68、;                i_nlink;      uid_t                     i_uid;      /*文件拥有

69、者标识号*/      gid_t                     i_gid;      /*文件拥有者所在组的标识号*/      kdev_t        

70、;           i_rdev;     /*实际设备标识号*/      loff_t                    i_size;      time_

71、t                   i_atime;    /*文件的最后访问时间*/      time_t                   i_mtime;&

72、#160;   /*文件的最后修改时间*/      time_t                   i_ctime;    /*节点的修改时间*/      unsigned int       

73、    i_blkbits;   /*块的位数*/      unsigned long        i_blksize;    /*块大小*/      unsigned long        i_blocks;    /*该文件所占

74、块数*/      unsigned long        i_version;    /*版本号*/      struct semaphore    i_sem;      struct semaphore    i_zombie;   /*僵死索引节点的信号量*

75、/      struct inode_operations *i_op;   /*索引节点的操作*/      struct file_operations     *i_fop;    /*指向缺省的文件操作*/      struct super_block *i_sb;     /*指向该文

76、件系统超级块的指针 */      wait_queue_head_t i_wait;    /*指向索引节点等待队列的指针*/      struct file_lock       *i_flock;   /*指向文件加锁链表的指针*/*用于分页机制的域*/      struct address_space  &

77、#160;    *i_mapping; /*把所有可交换的页面管理起来*/      struct address_space       i_data;      struct dquot           *i_dquotMAXQUOTAS;    &

78、#160; /*以下几个域应当是联合体*/      struct list_head       i_devices;     /*设备文件形成的链表*/      struct pipe_inode_info   *i_pipe;   /*指向管道文件*/      struct block_device

79、 *i_bdev;      /*指向块设备文件的指针*/      struct char_device   *i_cdev;      /*指向字符设备文件的指针*/       unsigned long        i_dnotify_mask;    /*目

80、录通知事件标志*/      struct dnotify_struct       *i_dnotify;      unsigned long        i_state;          /*索引节点的状态标志*/      unsigned int           i_flags;        /*文件系统的安装标志*/      unsigned char         i_soc

温馨提示

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

评论

0/150

提交评论