分享
分享赚钱 收藏 举报 版权申诉 / 11

类型操作系统课程设计报告64746.doc

  • 上传人:dzzj200808
  • 文档编号:2255709
  • 上传时间:2018-09-07
  • 格式:DOC
  • 页数:11
  • 大小:139.50KB
  • 配套讲稿:

    如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。

    特殊限制:

    部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。

    关 键  词:
    操作系统课程设计报告64746.doc
    资源描述:

    1、操作系统课程设计实验报告姓 名: 曾 林学 号: 0905020107班 级: 网络一班指导老师: 李艳军完成时间:2012 年 3 月 4 日任务一 I/O 系统调用开销比较一、实验目的:本任务主要目的在于了解 I/O 系统调用的特点并通过性能测试对此有直接的认识。二、 任务要求:在 LINUX 平台用 C 编程逆序一个文本文件,注意显示逆转结果的必须是原文件名。如文件原内容为“abcd” ,处理后内容应为“ dcba”。请分别使用三种方法1) 标准 C 的 I/O 库函数:fopen、fread 和 fwrite2) Unix 的 I/O 函数:open、read、write3) open

    2、 和 mmap要求尽量考虑效率,比较三种方法的性能。三、 设计思路实验的主要是提供一个缓冲区,从而供库函数方便进行读写。首先申请一个缓存区,然后把文件的内容读出到缓存区中,通过逆序函数把文件的内容逆序,再把缓存区中的内容写入到原文件中,从而达到逆序的目的。针对 read 和fread 每次读取数据大小有要求,主要在于读取或写入时缓冲区的大小,动态定义缓冲区的大小实现每次读取或写入数据的大小控制。为实现测试文件的内容能完整地存入中间容器,即字符串数组,需要动态申请文件大小的数组,存取文件中的内容。Mmanp 指 memory-mapped(存储映射)其将文件内容映射到进程地址空间,相比传统的方法

    3、而言,减少了系统调用和内容拷贝,无需进行文件内容的读取和写入,减少了完成所需要的时间,提高了整体的效率,从而提高了性能。主要在于数据的重新排序。四、 设计内容1. 使用标准 C 的 I/O 库函数:fopen、fread 和 fwrite 的设计代码如下:#include#include #include int main(int argc,char *argv)int i,j,filelen;char *buffer;char temp;FILE *fp;if(argc!=2)printf(“error!n“);exit(0);if(fp=fopen(argv1,“r“)=NULL)prin

    4、tf(“open %s error!“,argv1);exit(0);fseek(fp,0L,SEEK_END);filelen=ftell(fp);buffer= (char *)malloc(sizeof(char)*filelen); /申请缓存区fseek(fp,0L,SEEK_SET);printf(“文件大小为:%d 字节n“,filelen);fread(buffer,1,filelen,fp); /第二个参数为每次读数据的大小fclose(fp);j=filelen-1;for(i=0;i#include#include#include#include#include#incl

    5、ude#define BUFFSIZE 256*1024;int main(int argc,char *argv)int i,j,n,src;char temp;char *buffer;char path20;size_t fz;struct stat statbuf;if (argc != 2 )printf(“请输入要打开的文件路径n“);scanf(“%s“,path);else strcpy(path,argv1);n=open(path,O_RDWR);if(src=open(path,O_RDWR)#include #include #include #include #inc

    6、lude #include #define LENGTH 100int main(int argc,char *argv)int src;int i;char * buffer;char path20;struct stat statbuf;size_t fz;char temp;if (argc != 2 )printf(“请输入要打开的文件路径n“);scanf(“%s“,path);else strcpy(path,argv1);if(src=open(path,O_RDWR)0 对应相应进程要释 放 sem_op 数目的共享资源;sem_op=0 可以用于对共享资源是否已用完的测试;s

    7、em_op0 相当于进程要申请-sem_op 个共享资源。再联想操作的原子性,更不难理解该 系统调用何时正常返回,何 时 睡眠等待。调用返回:成功返回 0,否则返回 -1。3) int semctl(int semid,int semnum,int cmd,union semun arg)该系统调用实现对信号灯的各种控制操作,参数 semid 指定信号灯集,参数 cmd 指定具体的操作类型;参数 semnum 指定对哪个信号灯操作,只对几个特殊的 cmd 操作有意义;arg 用于设置或返回信号灯信息。该系统调用详细信息请参见其手册页,这里只给出参数 cmd 所能指定的操作。IPC_STAT 获

    8、取信号灯信息,信息由 arg.buf 返回;IPC_SET 设置信号灯信息,待设置信息保存在 arg.buf 中(在 manpage 中给出了可以设置哪些信息) ;GETALL 返回所有信号灯的值,结果保存在 arg.array 中,参数 sennum 被忽略;GETNCNT 返回等待 semnum 所代表信号灯的值增加的进程数,相当于目前有多少进程在等待 semnum 代表的信号灯所代表的共享资源;GETPID 返回最后一个对 semnum 所代表信号灯执行 semop 操作的进程 ID;GETVAL 返回 semnum 所代表信号灯的值;GETZCNT 返回等待 semnum 所代表信号灯的值变成0 的进程数;SETALL 通过 arg.array 更新所有信号灯的值;同时,更新与本信号集相关的semid_ds 结构的 sem_ctime 成员;SETVAL 设置 semnum 所代表信号灯的值为 arg.val;调用返回:调用失败返回-1,成功返回与 cmd 相关:实验结果:实验体会:通过这个实验更加了解了上个学期学习操作系统课程中对于线程进程的知识,把课本上的知识通过实践表达出来是一件有成就感的事情,通 过动手也对操作系统知识更加深刻。

    展开阅读全文
    提示  道客多多所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。
    关于本文
    本文标题:操作系统课程设计报告64746.doc
    链接地址:https://www.docduoduo.com/p-2255709.html
    关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

    道客多多用户QQ群:832276834  微博官方号:道客多多官方   知乎号:道客多多

    Copyright© 2025 道客多多 docduoduo.com 网站版权所有世界地图

    经营许可证编号:粤ICP备2021046453号    营业执照商标

    1.png 2.png 3.png 4.png 5.png 6.png 7.png 8.png 9.png 10.png



    收起
    展开