兰州大学操作系统实验七存储管理题目和答案.docx
《兰州大学操作系统实验七存储管理题目和答案.docx》由会员分享,可在线阅读,更多相关《兰州大学操作系统实验七存储管理题目和答案.docx(12页珍藏版)》请在咨信网上搜索。
实验七 实验报告 实验名称:7 存储管理 实验目的: 1. 观察系统存储器使用情况 2. 观察进程使用存储器的情况 3. 掌握通过内存映像文件提高性能的方法 4. 掌握动态内存分配技术 实验时间 3学时 预备知识: 1. 存储相关的命令 free 显示系统使用和未被使用的内存数量(可以实时执行) 输出包含的标题有 3 行信息: Mem。此行包含了有关物理内存的信息。包括以下详细内容: total。该项显示可用的物理内存总量,单位为 KB。该数字小于安装的物理内存的容量,是因为内核本身也要使用一小部分的内存。 used。该项显示了用于应用程序超速缓存数据的内存容量。 free。该项显示了此时未使用且有效的内存容量。 Shared/buffers 缓冲区/cached。这些列显示了有关内存如何使用的更为详细的信息。 -/+ buffers/cache。Linux 系统中的部分内存用来为应用程序或设备高速缓存数据。这部分内存在需要用于其他目的时可以释放。 free 列显示了调整的缓冲区行,显示释放缓冲区或高速缓存时可以使用的内存容量。 Swap。该行显示有关交换内存利用率的信息。该信息包含全部、已使用和释放的可用内存容量。 vmstat 报告进程、内存、分页、IO等多类信息(使用手册页) size 列出目标文件段大小和总大小(使用手册页) 2. /proc文件系统(使用手册页man 5 proc) /proc/meminfo 内存状态信息 /proc/stat 包含内存页、内存对换等信息。 /proc/$pid/stat 某个进程的信息(包含内存使用信息) /proc/$pid/maps某个进程的内存映射区信息,包括地址范围、权限、偏移量以及主次设备号和映射文件的索引节点。 /proc/$pid/statm 某个进程的内存使用信息,包括内存总大小、驻留集大小、共享页面数、文本页面数、堆栈页面数和脏页面数。 3. 内存映像文件 内存映像文件是指把一个磁盘文件映像到内存中,二者存在逐字节的对应关系。这样做可以加速I/O操作,并可以共享数据。 3.1 mmap(建立内存映射) 表头文件 #include <unistd.h> #include <sys/mman.h> 定义函数 void *mmap(void *start,size_t length,int prot,int flags,int fd,off_t offsize); 函数说明 mmap()用来将某个文件内容映射到内存中,对该内存区域的存取即是直接对该文件内容的读写。参数start指向欲对应的内存起始地址,通常设为NULL,代表让系统自动选定地址,对应成功后该地址会返回。参数length代表将文件中多大的部分对应到内存。 参数 prot代表映射区域的保护方式有下列组合 PROT_EXEC 映射区域可被执行 PROT_READ 映射区域可被读取 PROT_WRITE 映射区域可被写入 PROT_NONE 映射区域不能存取 参数 flags会影响映射区域的各种特性 MAP_FIXED 如果参数start所指的地址无法成功建立映射时,则放弃映射,不对地址做修正。通常不鼓励用此旗标。 MAP_SHARED对映射区域的写入数据会复制回文件内,而且允许其他映射该文件的进程共享。 MAP_PRIVATE 对映射区域的写入操作会产生一个映射文件的复制,即私人的“写入时复制”(copy on write)对此区域作的任何修改都不会写回原来的文件内容。 MAP_ANONYMOUS建立匿名映射。此时会忽略参数fd,不涉及文件,而且映射区域无法和其他进程共享。 MAP_DENYWRITE只允许对映射区域的写入操作,其他对文件直接写入的操作将会被拒绝。 MAP_LOCKED 将映射区域锁定住,这表示该区域不会被置换(swap)。 在调用mmap()时必须要指定MAP_SHARED 或MAP_PRIVATE。参数fd为open()返回的文件描述词,代表欲映射到内存的文件。参数offset为文件映射的偏移量,通常设置为0,代表从文件最前方开始对应,offset必须是分页大小的整数倍。 返回值 若映射成功则返回映射区的内存起始地址,否则返回MAP_FAILED(-1),错误原因存于errno 中。 错误代码 EBADF 参数fd 不是有效的文件描述词 EACCES 存取权限有误。如果是MAP_PRIVATE 情况下文件必须可读,使用MAP_SHARED则要有PROT_WRITE以及该文件要能写入。 EINVAL 参数start、length 或offset有一个不合法。 EAGAIN 文件被锁住,或是有太多内存被锁住。 ENOMEM 内存不足。 3.2 munmap(解除内存映射) 表头文件 #include<unistd.h> #include<sys/mman.h> 定义函数 int munmap(void *start,size_t length); 函数说明 munmap()用来取消参数start所指的映射内存起始地址,参数length则是欲取消的内存大小。当进程结束或利用exec相关函数来执行其他程序时,映射内存会自动解除,但关闭对应的文件描述词时不会解除映射。 返回值 如果解除映射成功则返回0,否则返回-1,错误原因存于errno中错误代码EINVAL 参数 start或length 不合法。 4. 动态内存分配 4.1 malloc(配置内存空间) 表头文件 #include<stdlib.h> 定义函数 void * malloc(size_t size); 函数说明 malloc()用来配置内存空间,其大小由指定的size决定。 返回值 若配置成功则返回一指针,失败则返回NULL。 4.2 free(释放原先配置的内存) 表头文件 #include<stdlib.h> 定义函数 void free(void *ptr); 函数说明 参数ptr为指向先前由malloc()、calloc()或realloc()所返回的内存指针。调用free()后ptr所指的内存空间便会被收回。假若参数ptr所指的内存空间已被收回或是未知的内存地址,则调用free()可能会有无法预期的情况发生。若参数ptr为NULL,则free()不会有任何作用。 4.3 calloc(配置内存空间) 表头文件 #include <stdlib.h> 定义函数 void *calloc(size_t nmemb,size_t size); 函数说明 calloc()用来配置nmemb个相邻的内存单位,每一单位的大小为size,并返回指向第一个元素的指针。这和使用下列的方式效果相同:malloc(nmemb*size);不过,在利用calloc()配置内存时会将内存内容初始化为0。 返回值 若配置成功则返回一指针,失败则返回NULL。 5. 其他 getpagesize(取得内存分页大小) 4096个字节 表头文件 #include<unistd.h> 定义函数 size_t getpagesize(void); 函数说明 返回一分页的大小,单位为字节(byte)。此为系统的分页大小,不一定会和硬件分页大小相同。 返回值 内存分页大小。附加说明在Intel x86 上其返回值应为4096bytes。 实验要求: 1. 分别使用命令和/proc文件系统列出系统当前内存的使用情况。 Free 2. 启动几个耗时较长的后台进程(多个grep),分别使用free和vmstat连续实时观察内存的使用情况。寻找字符串模式匹配 3. 用size工具观察三个不同的可执行文件的大小以及它们段的大小。 4. 启动一个耗时较长的后台进程,通过/proc文件系统查看该进程所有内存使用相关信息,并列出。 5. 编写一个程序,打印系统的页面大小。 6. 阅读并编译运行以下程序,总结内存映象文件的使用方法。 范例 /* 利用mmap()来读取/etc/passwd 文件内容*/ #include<sys/types.h> #include<sys/stat.h> #include<fcntl.h> #include<unistd.h> #include<sys/mman.h> main() { int fd; void *start; struct stat sb; fd=open(“/etc/passwd”,O_RDONLY); /*打开/etc/passwd*/ fstat(fd,&sb); /*取得文件大小*/ start=mmap(NULL,sb.st_size,PROT_READ,MAP_PRIVATE,fd,0); if(start= = MAP_FAILED) /*判断是否映射成功*/ return; printf(“%s”,start); munmap(start,sb.st_size); /*解除映射*/ closed(fd); } 7. 编写一个程序,利用内存映象文件,实现less工具的功能。manp到内存中 实验要求: 8. 分别使用命令和/proc文件系统列出系统当前内存的使用情况。 9. 启动几个耗时较长的后台进程(多个grep),分别使用free和vmstat连续实时观察内存的使用情况。寻找字符串模式匹配 10. 用size工具观察三个不同的可执行文件的大小以及它们段的大小。 Size命令的输出不包括stack和heap的部分。只包括文本段(text), 代码段(data),未初始化数据段(bss)三部分。 11. 启动一个耗时较长的后台进程,通过/proc文件系统查看该进程所有内存使用相关信息,并列出。 第一个启动的后台进程是上个实验最后一题的读写程序。此程序耗时较长 第二个启动的是xeyes进程。 12. 编写一个程序,打印系统的页面大小。 代码非常简单,只用到了getpagesize()语句的应用 13. 阅读并编译运行以下程序,总结内存映象文件的使用方法。 范例 /* 利用mmap()来读取/etc/passwd 文件内容*/ #include<sys/types.h> #include<sys/stat.h> #include<fcntl.h> #include<unistd.h> #include<sys/mman.h> main() { int fd; void *start; struct stat sb; fd=open(“/etc/passwd”,O_RDONLY); /*打开/etc/passwd*/ fstat(fd,&sb); /*取得文件大小*/ start=mmap(NULL,sb.st_size,PROT_READ,MAP_PRIVATE,fd,0); if(start= = MAP_FAILED) /*判断是否映射成功*/ return; printf(“%s”,start); munmap(start,sb.st_size); /*解除映射*/ close(fd); } 总结内存映象文件的使用方法: 内存映像其实就是在内存中创建一个和外存文件完全相同的映像,用户可以将整个文件映射到内存,也可以部分映射。通过内存映像实现对外存文件的操作。 首先Mmap申请虚拟内存,再次调用file指针所指映射函数对其进行映射。判断是否映射成功。进行操作。最后解除映射。 14. 编写一个程序,利用内存映象文件,实现less工具的功能。manp到内存中 #include<stdio.h> #include<sys/stat.h> #include<fcntl.h> #include<unistd.h> #include<sys/mman.h> #include<string.h> #include<memory.h> #include<stdlib.h> #include<stdio.h> int lastrow(char * s,int d); int nextrow(char * s,int d); int onepage(char * s,int d); int main() { int fd,play=0; char lab; char *start; struct stat sb; fd=open("test.txt",O_RDONLY); /*打开*/ fstat(fd,&sb); /*获取文件大小*/ start=mmap(NULL,sb.st_size,PROT_READ,MAP_PRIVATE,fd,0); if(start==MAP_FAILED) /*判断是否映射成功*/ return(1); play=onepage(start,play)+1; lab=getchar(); while(lab!='q'&&lab!='Q') { if(play<40||play>sb.st_size) { lab=getchar(); break; } else if(lab==' ') play=play+1+onepage(start,play); else if(lab=='D'||lab=='d') play=play+1+nextrow(start,play); else if(lab=='U'||lab=='u') play=1+lastrow(start,play); lab=getchar(); } munmap(start,sb.st_size); /*解除映射*/ close(fd); return 0; } int onepage(char * s,int d) { int i,count=0; char * buffer=malloc(2048);//配置内存空间,由buffer指向该空间 s+=d; /*每10行作为一页输出*/ for(i=0;i<2048;i++) { if(s[i]=='\n') count++; if(count==10) break; } memcpy(buffer,s,i); buffer[i]='\0'; printf("%s\n",buffer); return i; } /*输出下一行*/ int nextrow(char * s,int d) { int i; char * buffer=malloc(100); s+=d; for(i=0;i<100;i++) if(s[i]=='\n') break; memcpy(buffer,s,i); buffer[i]='\0'; printf("%s\n",buffer); return i; } /*输出上一行*/ int lastrow(char * s,int d) { int i,count=0; char * buffer=malloc(100); int py=d; for(;d>0;d--) { if(s[d]=='\n') count++; if(count==2) break; } memcpy(buffer,s+d+1,py-d-2); buffer[py-d-2]='\0'; printf("%s\n",buffer); return d; } 认识和体会: 1.要的体会是,通过内存映像文件可以提高速度,提高性能。Mmap建立内存映射 munmap解除内存映射。动态分配内存空间用malloc free calloc 还有其他的如getpagesize()方法得到页面大小等。 2. linux 内核映像文件有两种:一种是非压缩版本,叫Image;另一种是它的压缩版本,叫zImage。zImage是Image经过压缩形成的,所以它的大小比Image小。为了能使用zImage这个压缩版本,必须在它的开头加上解压缩的代码,将zImage 解压缩之后才能执行,因此它的执行速度比Image要慢。但考虑到嵌入式系统的存储空容量一般都比较小,内核要常驻内存,采用zImage可以占用较少的存储空间,因此牺牲一点性能上的代价也是值得的,所以一般嵌入式系统均采用压缩的内核映像文件,即zImage。 党的基层组织建设有了新突破,党的作风建设有了新加强,为全镇发展经济、提高人民生活永平提供了坚实基础和强大动力carried out; 4) for spring hangers (included simple spring, hangers and constant support hangers) it should also be recognized as setting and locking of loads. 5) check the surface quality, folded layering and without cracks, rust and other defects. 5) after completion of the test and control drawing number one by one, by series baled. Color alloy steel parts, the parts marking installation location and rotation about the direction you want. 7.3.14. hangers installation 7.3.14.1 hanger layout a. a clear design of hanger should be installed strictly in accordance with the drawings and designs shall not be installed wrong, missing, etc. B. own arrangement of piping support and hanger set and selection should be based on comprehensive analysis of general layout of piping systems; cold installation of steam pipe with particular attention reserved for compensation of thermal expansion displacement and orientation. C. support systems should be rational to withstand pipe loads, static load and incidental load; reasonable piping displacement; guaranteed under various conditions, stress are within the allowed range. Strength, stiffness, and meet requirements to prevent vibration and soothing water, without affecting the adjacent equipment maintenance and other piping installation and expansion. D. equipment connected to the interface to meet pipeline thrust (torque) limit requirements; increase the stability of piping systems to prevent pipeline ... C. welding elbow should be not less than 1.5 times the pipe diameter. D. Press elbow should be not smaller than the outside diameter of the pipe.- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 兰州大学 操作系统 实验 存储 管理 题目 答案
咨信网温馨提示:
1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前自行私信或留言给上传者【快乐****生活】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时私信或留言给本站上传会员【快乐****生活】,需本站解决可联系【 微信客服】、【 QQ客服】,若有其他问题请点击或扫码反馈【 服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【 版权申诉】”(推荐),意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4008-655-100;投诉/维权电话:4009-655-100。
1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前自行私信或留言给上传者【快乐****生活】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时私信或留言给本站上传会员【快乐****生活】,需本站解决可联系【 微信客服】、【 QQ客服】,若有其他问题请点击或扫码反馈【 服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【 版权申诉】”(推荐),意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4008-655-100;投诉/维权电话:4009-655-100。
关于本文