《操作系统实验报告Linu操作、使用、编程).docx》由会员分享,可在线阅读,更多相关《操作系统实验报告Linu操作、使用、编程).docx(7页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、实 验 报 告 2023/ 2023 学年 其次学期课程名称试验名称试验时间指导单位操 作 系 统 ALinux 操作、使用、编程2023年5月6日计算机学院计算机科学与技术系指导教师徐小龙学生姓名学院(系)陈坤 通达学院班级学号专业10002924计算机通信实 验 报 告试验名称试验类型Linux 操作、使用、编程验证试验学时2+2指导教师试验时间徐小龙2023.5.6一、 试验目的和要求1、理解操作系统存储治理原理2、在 Linux 下,用 malloc函数实现 cat 或 copy 命令。3、深入理解操作系统中虚拟存储机制,并把握虚拟存储中页面调度算法实现方法。4、学习虚拟存储机制中页面
2、调度算法,通过编程模拟实现页面调度的相关算法FIFO、LRU 和 OPT 算法,比较各种算法的性能。5、OS 中的进程间通信二、试验环境(试验设备)Windows 2023 + VMWare + RedHat Linux 81三、试验原理及内容一内存的使用1、相关函数1) 内存动态安排函数#include void *malloc(size_t size)该函数安排指定大小 size 个字节的内存空间,成功时返回安排内存的指针即所安排内存的地址。该内存区域没有清空。2) void free(void * addr);该函数释放由 malloc安排的内存,addr 是要释放内存空间的起始地址,并
3、且addr 必需是被以前 malloc( )调用返回的。2、参考程序例程 1:申请内存、使用内存以及释放一块内存#include #include #include int main(void)char *str; if(str=(char*)malloc(10)=NULL)printf(“Not enough memory to allocate buffern“); exit(1);strcpy(str,“hello“); printf(“string is %sn“,str); free(str);return 0;该程序运行结果:实 验 报 告2例程 2:在翻开文件后,通过 fstat
4、获得文件长度,然后通过 malloc系统调用申请响应大小的内存空间,通过 read将文件内容完全读入该内存空间,并显示出来。#include #include #include #include #include mainint fd,len; char *tp; struct stat ps;fd=open(“/home/test/testing“,0); fstat(fd,&ps);len=ps.st_size; tp=malloc(len); read(fd,tp,len);printf(“%sn“,tp); close(fd);该程序运行结果:二、共享存储区通信1、fork两个子进程,
5、server 和 client,进展通信。2、server 端建立一个 key 为 75 的共享区,并将第一个字节置为-1,作为数据空的标志。等待其他进程发来的消息。当该字节的值发生变化时,表示收到了信息,进展处理。然后再次把它的值设为-1,假设遇到的值为 0,则视为为完毕信号,取消该队列,并退出server。server 每接收到一次数据后显示“(server)received”。3、client 端建立一个 key 为 75 的共享区,当共享取得第一个字节为-1 时,server 端空闲,可发送恳求。client 随即填入 9 到 0。期间等待 server 端的再次空闲。进展完这些操作后
6、,client 退出。client 每发送一次数据后显示“(client)sent”。4、父进程在 server 和 client 均退出后完毕。3应用实例: #include #include #include #defineSHMKEY75 intshmid,i;int*addr; voidclientint i;shmid=shmget(SHMKEY,1024,0777);/*翻开共享存储区*/ addr=shmat(shmid,0,0);/*获得共享存储区首地址*/ for (i=9;i=0;i-)while (*addr!=-1); printf(“(client) sentn“);
7、*addr=i;exit(0);voidservershmid=shmget(SHMKEY,1024,0777|IPC_CREAT); /*创立共享存储区*/ addr=shmat(shmid,0,0);/*猎取首地址*/do*addr=-1;while (*addr=-1); printf(“(server) receivedn“);while (*addr);shmctl(shmid,IPC_RMID,0);/*撤消共享存储区,归还资源*/ exit(0);mainwhile (i=fork)=-1);if (!i) server;system(“ipcs-m“);while (i=for
8、k)=-1);if (!i) client; wait(0);实 验 报 告4该程序运行结果:实 验 报 告5实 验 报 告四、试验小结包括问题和解决方法、心得体会、意见与建议等操作系统的进展使得系统完成了大局部的内存治理工作。对于程序员而言,这些内存治理的过程完全透亮不行见。因此,程序员开发时从不关心系统如何为自己安排内存, 而且永久认为系统可以安排给程序所需要的内存。在程序开发时,程序员真正需要做的就是:申请内存、使用内存、释放内存,其他一概无需过问。在试验过程中遇到很多错误的操作:1、在 vi 编辑器里想修改错误时确定要先切换模式,不然会消灭很多麻烦的多余行。2、在 vi 里编辑 C 语言时不像脚本语言,符号两边并不需要空格。3、在终端里创立用户必需是 root 用户,其他用户是没有权限的。4、假设 CPU 的执行速度够慢,上述程序中父进程、子进程 P1 和 P2 应当交替执行,daughter 和 son 、parent 应当交替消灭。5、在创立的用户里不能实现对文本的编译,我又切换到 root 用户下才能编译,不知道是怎么回事。通过这次试验激发了我对 linux 的学习兴趣!五、指导教师评语成 绩批阅人日 期6