版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、 bca(有时会出现abc的任意的排列)分析:从进程执行并发来看,输出abc的排列都是有可能的。原因:fork()创建进程所需的时间虽然可能多于输出一个字符的时间,但各个进程的时间片的获得却不是一定是顺序的,所以输出abc的排列都是有可能的。2.进程的控制修改已编写的程序,将每个进程输出一个字符改为每个进程输出一句话,再观察程序执行时屏幕上出现的现象,并分析原因。如果在程序中使用系统调用lockf()来给每一个进程加锁,可以实现进程之间的互斥,观察并分析出现的现象。2.1 实验指导 (1)所涉及的系统调用lockf()lockf(files,function,size):用作锁定文件的某些段或
2、者整个文件,本函数适用的头文件为:#include参数定义:int lockf(files,function,size)int files,function;long size;其中:files是文件描述符:function是锁定和解锁;1表示锁定,0表示解锁。size是锁定和解锁的字节数,若用0,表示从文件的当前位置到文件尾。(2)参考程序程序1#include main( )int p1,p2,i;while(p1=fork( )= = -1);/*创建子进程p1*/if (p1= =0)for(i=0;i100;i+)printf(daughter%d/n,i);elsewhile(p2
3、=fork( )= = -1);/*创建子进程p2*/if(p2= =0)for(i=0;i100;i+)printf(son%d/n,i);elsefor(i=0;i100;i+)printf(parent%d/n,i);运行结果parentsondaughter.daughter.或parentsonparentdaughter等分析:由于函数printf()输出的字符串之间不会被中断,因此,每个字符串内部的字符顺序输出时不变。但是 , 由于进程并发执行时的调度顺序和父子进程的抢占处理机问题,输出字符串的顺序和先后随着执行的不同而发生变化。这与打印单字符的结果相同。程序2#include#
4、includemain()int p1,p2,i;while(p1=fork()=-1);if(p1=0)lockf(1,1,0);for(i=0;i50;i+)printf(child %d/n,i);lockf(1,0,0);elsewhile(p2=fork()=-1);if(p2=0)lockf(1,1,0);for(i=0;i50;i+)printf(son %d/n,i);lockf(1,0,0);elselockf(1,1,0);for(i=0;i50;i+)printf(daughter %d/n,i);lockf(1,0,0);运行结果输出parent块,son块,grand
5、child块的顺序可能不同,但是每个块的输出过程不会被打断。分析:因为上述程序执行时,lockf(1,1,0)锁定标准输出设备,lockf(1,0,0)解锁标准输出设备,在lockf(1,1,0)与lockf(1,0,0)中间的for循环输出不会被中断,加锁与不加锁效果不相同。六、注意事项本课程每个实验为LINUX环境下进行实验,要求使用GCC编译器,能够熟练使用VIM编辑器进行文件编辑和代码开发,使用操作系统RedHat Enterprise 6 以上操作系统。七、实验报告内容及要求1.实验的程序源码;2.运行程序,给出运行结果截图;3.分析实验结果,给出实验结论。实验二 银行家算法实验属性
6、实验性质: 验证性实验学时: 4学时实验要求: 必做二、实验目的1.进一步理解利用银行家算法避免死锁的问题;2.在了解和掌握银行家算法的基础上,编制银行家算法通用程序,将调试结果显示在计算机屏幕上,再检测和笔算的一致性;3.理解和掌握安全序列、安全性算法。三、实验环境及知识准备 1.实验环境: Linux系统开发环境2.知识准备:(1)银行家算法基本算法概念;(2)C语言基本语法及设计理念。四、实验内容1. 了解和理解死锁;2. 理解利用银行家算法避免死锁的原理;3. 会使用某种编程语言。五、实验步骤及指导1.安全状态指系统能按照某种顺序如(称为序列为安全序列),为每个进程分配所需的资源,直至
7、最大需求,使得每个进程都能顺利完成。2. 银行家算法假设在进程并发执行时进程i提出请求j类资源k个后,表示为Requestij=k。系统按下述步骤进行安全检查:(1)如果RequestiNeedi则继续以下检查,否则显示需求申请超出最大需求值的错误。(2)如果RequestiAvailable则继续以下检查,否则显示系统无足够资源,Pi阻塞等待。(3)系统试探着把资源分配给进程Pi,并修改下面数据结构中的数值:Availablej=Availablej-Requestij;Allocationi,j=Allocationi,j+Requestij;Needi,j=Needi,j-Request
8、ij;(4)系统执行安全性算法,检查此次资源分配后,系统是否处于安全状态。若安全,才正式将资源分配给进程Pi,以完成本次分配;否则, 将本次的试探分配作废,恢复原来的资源分配状态,让进程Pi等待。3.安全性算法(1)设置两个向量: 工作向量Work: 它表示系统可提供给进程继续运行所需的各类资源数目,它含有m个元素,在执行安全算法开始时,Work=Available; Finish: 它表示系统是否有足够的资源分配给进程,使之运行完成。开始时先做Finishi=false; 当有足够资源分配给进程时, 再令Finishi=true。(2)从进程集合中找到一个能满足下述条件的进程: Finish
9、i=false; Needi,jWorkj; 若找到, 执行步骤(3), 否则,执行步骤(4)。(3)当进程Pi获得资源后,可顺利执行,直至完成,并释放出分配给它的资源,故应执行:Workj=Worki+Allocationi,j;Finishi=true;go to step 2; (4)如果所有进程的Finishi=true都满足, 则表示系统处于安全状态;否则,系统处于不安全状态4. 实验步骤(1)参考图2-1所示流程图编写安全性算法。YY所有finish都为true?输出安全序列NYN存在Finishi =false&Needij 解密后文件路径,此时gpg要求输入前面设置的用于保护本
10、机私钥的密码,输入密码,解开私钥。在存放加密文件的目录下就生了一个解密后的文件,打开解密文件,浏览正文,与同组主机确定其正确性。五、实验步骤及指导1. 实验原理RSA公钥体系的特点使它非常适合用来满足两个要求:保密性(privacy)和认证性(authentication)。PGP(Pretty Good Privacy),是一个基于RSA公钥加密体系的邮件加密软件,它提供了非对称加密和数字签名。其创始人是美国的Phil Zimmermann,他把RSA公钥体系的方便和传统加密体系的高速结合起来,并且在数字签名和密钥认证管理机制上有巧妙的设计,因此PGP成为目前非常流行的公钥加密软件包。PGP
11、有以下主要功能:(1)使用PGP对邮件加密,以防止非法阅读;(2)能给加密的邮件追加上数字签名,从而使收信人进一步确信邮件的发送者,而事先不需要任何保密的渠道用来传递密钥;(3)可以实现只签名而不加密,适用于发表公开声明时证实声明人身份,也可防止声明人抵赖,这一点在商业领域有很大的应用前景;(4)能够加密文件,包括图形文件、声音文件以及其它各类文件;(5)利用PGP代替Unicode生成RADIX64(就是MIME的BASE 64格式)的编码文件。PGP给邮件加密和签名的过程是这样的:首先甲用自己的私钥将上述的128位值加密,附加在邮件后,再用乙的公钥将整个邮件加密(要注意这里的次序,如果先加
12、密再签名的话,别人可以将签名去掉后签上自己的签名,从而篡改了签名)。这样这份密文被乙收到以后,乙用自己的私钥将邮件解密,得到甲的原文和签名,乙的PGP也从原文计算出一个128位的特征值来和用甲的公钥解密签名所得到的数进行比较,如果符合就说明这份邮件确实是甲寄来的。这样两个安全性要求都得到了满足。2. 实验步骤2.1 生成公私密钥(1)本机单击实验平台“GnuPG”工具按钮,进入工作目录,键入命令:gpg -gen-key开始生成公私钥对。期间gpg会依次询问如下信息:欲产生密钥种类(默认选择1)密钥大小(默认大小2048字节)密钥有效期限(默认选择0永不过期)(2)生成用户标识,期间gpg会依
13、次询问如下信息:Real name(用户名,请按本机的组编号和主机编号确定你的用户名)Email address(Email地址,如user2DCServer.Netlab)Common(注释信息,建议与用户名相同)确定上述输入后,gpg会提示你将要生成的USER-ID。键入“O”确定以上信息后,gpg需要一个密码来保护即将生成的用户私钥,为了方便记忆,我们选择密码与用户名相同。(3)接下来gpg会根据以上信息生成公私密钥对,并将它们存放在 C:Documents and SettingsAdministratorApplication Datagnupg目录下,名字分别为:pubring.g
14、pg和secring.gpg。2.2 导出公钥本机在gpg工作目录键入命令:gpg -a -o D:WorkPGPuserGXpubkey.asc -export userGX (userGX) (userGXCServer.Netlab),gpg会将公钥导入到D:WorkPGP这个指定目录的userGXpubkey.asc文件中。将userGXpubkey.asc文件发送到同组主机PGP共享目录中。2.3 导入同组主机公钥本机从同组主机发送来的userGYpubkey.asc文件中,将对方公钥导入至本机gpg库,其命令如下:gpg -import D:WorkPGPuserGYpubkey.
15、asc。2.4 利用对方公钥进行加密(1)在“D:WorkPGP”目录中新建一文本文件“userGX.txt”。(2)利用对方公钥对userGX.txt加密,并对其进行签名在gpg工作目录键入如下命令:gpg -sea -r userGYCServer.Netlab 加密文件绝对路径,其中userGYCServer.Netlab为USER-ID。最后在原文件所在目录下,生成一个名为“userGX.txt.asc”的文件,将该文件发送到同组主机PGP目录中。2.5 解密密文(1)在gpg工作目录下键入命令:gpg -d 加密文件绝对路径 解密后文件路径,此时gpg要求输入前面设置的用于保护本机私
16、钥的密码,输入密码,解开私钥。在存放加密文件的目录下就生了一个解密后的文件,打开解密文件,浏览正文,与同组主机确定其正确性。六、注意事项1实验指导书中的截图和操作均为windows平台下操作,使用的软件为GNUPG工具,在windows操作的步骤和过程和linux操作十分相似,需要学生将此实验移植到linux平台下;2在实验中加密的位数保持在1024上下,确保实验机器的内存足够用。七、实验报告内容及要求1.实验的程序源码;2.运行程序,给出运行结果截图;3.分析实验结果,给出实验结论。 实验六 linux文件系统及系统调用实验属性 实验性质: 验证性实验学时: 2学时实验要求: 选做二、实验目
17、的在linux系统中共享文件,通过网络使得远程的客户端能够顺利的加载服务器的文件系统,在加载的过程中观察操作系统的驱动变化。三、实验环境及知识准备 1.实验环境: Linux系统环境 2.知识准备: (1)了解Linux文件系统;(2)了解NFS文件系统的服务端和客户端。四、实验内容掌握本地文件系统及网络网络文件系统之间的区别;了解网络文件系统存储过程;了解网络文件系统在读取或者存储时的驱动加载。五、实验步骤及指导NFS网络文件系统,服务端完成文件的共享,控制权限和限制地域使用,客户端使用Linux 系统自带的工具软件挂载网络文件系统形成本地的文件系统,在挂载的同事观察网络文件系统的驱动加载及
18、vfs文件系统层面的驱动加载变化。1.配置Linux NFS的服务端,共享文件2.检查Linux文件系统VFS接口的关联情况3.检查VFS层面驱动加载情况4.在文件读写操作发生时,调用系统底层的系统调用数目记录(1)Linux Kernel VFS 文件系统超级块代码:struct super_block struct list_head s_list; /*指向超级块链表的指针*/*包含该具体文件系统的块设备标识符。*例如,对于 /dev/hda1,其设备标识符为 0 x301 kdev_t s_dev;/*该具体文件系统中数据块的大小,以字节为单位*/ unsigned long s_bl
19、ocksize;/*块大小的值占用的位数,例如,如果块大小为1024字节,则该值为10*/ unsigned char s_blocksize_bits; unsigned char s_dirt; /*修改标志*/ unsigned long long s_maxbytes; /*文件的最大长度*/ struct file_system_type *s_type;/*指向某个特定的具体文件系统的用于超级块操作的函数集合的指针*/ struct super_operations *s_op;struct dquot_operations*dq_op;/*指向磁盘限额方法的指针*/ unsign
20、ed long s_flags; /*魔数,即该具体文件系统区别于其它文系统的一个标志*/ unsigned long s_magic; struct dentry *s_root; struct rw_semaphore s_umount; struct semaphore s_lock; ints_count; atomic_t s_active;structlist_head s_dirty; /*已修改索引节点的链表*/struct list_head s_locked_inodes;/*涉及I/O的索引节点的链表*/struct list_heads_files; /*分配给超级的文
21、件对象的链表*/ struct block_device *s_bdev; struct list_head s_instances; struct quota_mount_options s_dquot; /*磁盘限额的选项*/*一个共用体,其成员是各种文件系统的fsname_sb_info数据结构*/ union struct minix_sb_info minix_sb; struct ext2_sb_info ext2_sb; struct ext3_sb_info ext3_sb; struct hpfs_sb_info hpfs_sb; struct ntfs_sb_infontf
22、s_sb; struct msdos_sb_info msdos_sb; struct isofs_sb_info isofs_sb; struct nfs_sb_infonfs_sb; struct sysv_sb_info sysv_sb; struct affs_sb_info affs_sb; struct ufs_sb_info ufs_sb; struct efs_sb_info efs_sb; struct shmem_sb_info shmem_sb; struct romfs_sb_info romfs_sb; struct smb_sb_info smbfs_sb; str
23、uct hfs_sb_info hfs_sb; struct adfs_sb_info adfs_sb; struct qnx4_sb_infoqnx4_sb; struct reiserfs_sb_info reiserfs_sb; struct bfs_sb_info bfs_sb; struct udf_sb_infoudf_sb; struct ncp_sb_infoncpfs_sb; struct usbdev_sb_info usbdevfs_sb; struct jffs2_sb_info jffs2_sb; struct cramfs_sb_info cramfs_sb; vo
24、id *generic_sbp; 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; /*指向哈希链表的指针*/ struct list_head i_list; /*指向索引节点链表的指针*/ struct list_head i_dentry; /*指向目录项链表的指针*/ struct list_head i_d
25、irty_buffers; struct list_head i_dirty_data_buffers;/*描述文件信息的域*/ unsigned long i_ino; /*索引节点号*/ atomic_t i_count; /*引用计数器*/ kdev_t i_dev; /*设备标识号 */ umode_t i_mode; nlink_t i_nlink; uid_t i_uid; /*文件拥有者标识号*/ gid_t i_gid; /*文件拥有者所在组的标识号*/ kdev_t i_rdev; /*实际设备标识号*/ loff_t i_size; time_t i_atime; /*文件
26、的最后访问时间*/ time_t i_mtime; /*文件的最后修改时间*/ time_t i_ctime; /*节点的修改时间*/ unsigned int i_blkbits;/*块的位数*/ unsigned long i_blksize; /*块大小*/ unsigned long i_blocks; /*该文件所占块数*/ unsigned long i_version; /*版本号*/ struct semaphore i_sem; struct semaphore i_zombie; /*僵死索引节点的信号量*/ struct inode_operations*i_op; /*
27、索引节点的操作*/ struct file_operations *i_fop; /*指向缺省的文件操作*/ struct super_block*i_sb; /*指向该文件系统超级块的指针 */ wait_queue_head_t i_wait; /*指向索引节点等待队列的指针*/ struct file_lock *i_flock; /*指向文件加锁链表的指针*/*用于分页机制的域*/ struct address_space *i_mapping;/*把所有可交换的页面管理起来*/ struct address_space i_data; struct dquot *i_dquotMAX
28、QUOTAS; /*以下几个域应当是联合体*/ struct list_head i_devices; /*设备文件形成的链表*/ struct pipe_inode_info *i_pipe; /*指向管道文件*/ struct block_device *i_bdev; /*指向块设备文件的指针*/ struct char_device *i_cdev; /*指向字符设备文件的指针*/ unsigned long i_dnotify_mask; /*目录通知事件标志*/ struct dnotify_struct *i_dnotify; unsigned long i_state; /*索引节点的状态标志*/ unsigned int i_flags; /*文件系统的安装标志*/ unsigned char i_sock; /*如果是套接字文件则为真*/ atomic_t i_writecount; /*写进程的引用计数*/ unsigned int i_attr_flags; /*文件创建标志*/ _u32 i_generation;/*类似于超级块的一个共用体,其成员是各种具体*文件系统的fsname_inode_info数据结
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年度汽车修理厂信息化建设合同2篇
- 2024年度保险合同解析及常见问题2篇
- 二零二四年度活动摄影独家合作协议
- 2024年度农业技术推广与种植服务合同
- 2024年度环保工程合同:工业废气处理设施建设2篇
- 2024年度企业与云计算公司云计算服务合同
- 不动产赠与合同模板范本完整版
- 2024年度环保企业废物处理服务合同
- 2024年度电影发行与营销服务合同
- 2024年度电子商务平台用户体验优化服务合同
- 打印版大学生择业效能感量表龙燕梅
- 国家开放大学财务报表分析形成性考核
- 工程施工现场应急方案
- 人教版小学道德与法治感受生活中的法律教学设计省一等奖
- 【大数据时代个人隐私保护的法律对策6200字(论文)】
- 平行四边形面积的计算课件(共27张PPT)五年级上册数学人教版
- 监理日常安全巡视要点监理日常安全巡视要点
- 法律顾问服务职业发展研究报告
- 展厅设计布展投标方案(完整技术标)
- 静脉中等长度导管临床应用专家共识-
- 企业内部控制风险清单模版
评论
0/150
提交评论