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

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

ID:11838073

大小:107.00 KB

页数:6页

时间:2018-07-14

操作系统b-上机实验-内存_第1页
操作系统b-上机实验-内存_第2页
操作系统b-上机实验-内存_第3页
操作系统b-上机实验-内存_第4页
操作系统b-上机实验-内存_第5页
资源描述:

《操作系统b-上机实验-内存》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

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

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

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

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

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

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

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

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。