操作系统B-上机实验-内存

上传人:da****ge 文档编号:76124925 上传时间:2022-04-17 格式:DOC 页数:6 大小:107KB
收藏 版权申诉 举报 下载
操作系统B-上机实验-内存_第1页
第1页 / 共6页
操作系统B-上机实验-内存_第2页
第2页 / 共6页
操作系统B-上机实验-内存_第3页
第3页 / 共6页
资源描述:

《操作系统B-上机实验-内存》由会员分享,可在线阅读,更多相关《操作系统B-上机实验-内存(6页珍藏版)》请在装配图网上搜索。

1、实验三 Linux 内存实验一、 实验内容A. 使用命令实现反汇编,查看目标文件虚拟地址;B. 使用free命令实现内存查看;C. 实现example.c查看用户进程空间地址分布。 二、 实验目的理解内存虚拟地址概念,掌握查看系统内存使用情况,理解用户进程空间的地址分布。三、 实验环境登陆Linux虚拟机,进入Linux shell, 提示符为 $,表示普通用户提示符。四、 实验题目本次实验,需在在以用户名为名字的目录下创建“labmemory”目录,在该目录下实现A、B、C三题。A 【题目】使用objdump -d命令实现hello.o的反汇编【要求】1、使用命令gcc -c hello.c

2、实现对hello.c的编译(注:-c 只实现编译不链接),形成hello.o目标代码。 使用objdump -d hello.o命令实现对hello.o的反汇编,并回答相应问题。【问题】(1)hello.o文件的地址是虚地址还是物理实地址?虚地址(2)hello.o文件大小为多少? 1K(3)hello.o文件包含几条机器指令? 8(4)hello.o文件中第四条机器指令的地址是多少? 62、使用gcc hello.c o hello实现对hello.c的编译和链接,objdump -d hello命令实现对hello的反汇编,并回答相应问题。【问题】(1)hello文件的地址是虚地址还是物理

3、实地址? 物理实地址(2)hello文件大小为多少? 7195B(3)hello文件中第四条机器指令的地址是多少? 80482b9(4)编译形成的hello.o与编译和链接形成的hello文件谁大谁小?为什么? hello文件大,因为其链接进去了一些库函数。B 【题目】实现example.c查看用户进程空间地址分布【要求】基于预备知识的基础上,创建example.c文件,对文件的执行结果加以说明,并回答相应问题。【预备知识】1、虚拟内存线性空间在32位平台上为4 GB的固定大小,也就是Linux的虚拟地址空间也这么大。Linux内核将这4G字节的空间分为两部分。最高的1G字节(从虚地址0xC0

4、000000到0xFFFFFFFF)供内核使用,称为“内核空间”。而较低的3G字节(从虚地址0x00000000到0xBFFFFFFF),供各个进程使用,称为“用户空间”。用户进程通常情况下只能访问用户空间的虚拟地址,不能访问内核空间。例外情况是用户进程通过系统调用访问内核空间。因为每个进程可以通过系统调用进入内核,因此,Linux内核空间由系统内的所有进程共享。于是,从具体进程的角度来看,每个进程可以拥有4G字节的虚拟地址空间(也叫虚拟内存) 。每个进程有各自的私有用户空间(03G),这个空间对系统中的其他进程是不可见的。最高的1GB内核空间则为所有进程以及内核所共享。用户空间对应进程,所以

5、每当进程切换,用户空间就会跟着变化。每个进程的用户空间都是完全独立,互不相干的。把同一个程序同时运行10次,会看到10个进程使用的线性地址一摸一样。创建进程fork( ),程序载入execve( ),动态内存分配malloc( )等进程相关操作都需要分配内存给进程。这时进程申请和获得的不是物理地址,仅仅是虚拟地址。实际的物理内存只有当进程真的去访问新获取的虚拟地址时,才会由请页机制产生缺页异常,从而进入分配实际页框的程序。该异常是虚拟内存机制赖以存在的基本保证-它会告诉内核去为进程分配物理页,并建立对应的页表,这之后虚拟地址才实实在在的映射到了物理地址上。在应用程序中,常用malloc函数进行

6、动态内存分配,而在linux内核中,通常使用kmalloc来动态分配内存。进程虚拟地址空间物理地址与虚拟地址之间的位移量就是3GB(0xC0000000) ,在Linux代码中就叫做PAGE_OFFSET。对于内核空间而言,给定一个虚地址x,其物理地址为“x- PAGE_OFFSET”,给定一个物理地址x,其虚地址为“x+ PAGE_OFFSET”。这里再次说明, 这种映射关系只适应于内核空间,而用户空间的地址映射要复杂得多,它是通过分页机制完成的。2、进程的用户空间管理每个进程经编译、链接后形成的二进制映像文件有一个代码段和数据段 ,进程运行时须有独占的堆栈空间。进程的内存映像是指内核在内存

7、中如何存放可执行程序文件。在将程序转化为进程的过程中,操作系统将可执行程序由硬盘复制到内存中。从内存的低地址到高地址依次如下图所示。由下图可以看出,栈段安排在用户空间的顶部,运行时由顶向下延伸;代码段和数据段则在低部,运行时并不向上延伸,大小固定。从数据段的顶部到栈段地址的下沿这个区间是一个巨大的空洞,这就是进程在运行时调用malloc( )或new( )可以动态分配的空间,也叫动态内存或堆。l 代码段:即二进制机器代码,代码段是只读的,可被多个进程共享。如一个进程创建了一个子进程,父子进程共享代码段,此外子进程还获得父进程数据段、堆、栈的复制。l 数据段:存储已被初始化的变量,包括全局变量和

8、已被初始化的静态变量。l 未初始化数据段:存储未被初始化的静态变量,它也被称为BSS段。l 堆:用于存放程序运行中动态分配的变量。l 栈:用于函数调用,保存函数的返回地址、函数的参数、函数内部定义的局部变量。另外,高地址还存储了命令行参数和环境变量。可执行程序和内存映像的区别在于:可执行程序位于磁盘中而内存映像位于内存中:可执行程序没有堆栈,因为程序被加载到内存中才会分配堆栈;可执行程序是静态的、不变的,而内存映像随着程序的执行是在动态变化的,例如:数据段随着程序的执行要存储新的变量值,栈在函数调用时也是不断变化中。栈堆BSS数据段代码段低地址dataheapstacktext高地址 进程用户

9、空间的划分 example.c 源代码#include#include#nclude#include#includeint bss_var;int data_var0=1;int main(int agrc,char * argv) printf(below are addresses of types of processmemn); printf(text location:n); printf(taddress of main(code segment):%pn,main); printf(_n); int stack_var0=2; printf(stack location:n);

10、printf(tinitial end of stack:%pn,&stack_var0); int stack_var1=3; printf(tnew end of stack:%pn,&stack_var1); printf(_n); printf(data location:n); printf(taddress of data_var(data segment):%pn,&data_var0); static int data_var1=4; printf(tnew end of data_var(data segment):%pn,&data_var1); printf(_n); p

11、rintf(bss location:n); printf(taddrss of bss_var:%pn,&bss_var); printf(_n); char *b=sbrk(ptrdiff_t)0); printf(heap location:n); printf(tinitial end of heap:%pn,b); brk(b+4); b=sbrk(ptrdiff_t)0); printf(tnew end of heap:%pn,b); return 0; 【问题】1、给出example.c程序运行的结果?below are addresses of types of proces

12、smem text location: address of main(code segment):0x8048464 _ stack location: initial end of stack:0xbfa18064 new end of stack:0xbfa18068 _ data location: address of data_var(data segment):0x804a020 new end of data_var(data segment):0x804a024 _ bss location: addrss of bss_var:0x804a030 _ heap location: initial end of heap:0x9c6a000 new end of heap:0x9c6a004 2、int 类型占用几个B? 4B3、栈的增长方向是什么?堆的增长方向是什么?(提示:增长方向指从低地址到高地址还是从高地址到低地址?)栈的增长方向是从高地址到低地址,堆的增长方向是指从低地址到高地址C 【题目】使用free命令实现内存查看【要求】使用free命令(可上网查看使用方法)。【问题】使用free命令查看系统内存使用情况,并对结果意义加以说明解释?6

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

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!