仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 1034|回复: 12
打印 上一主题 下一主题

[其他Linux] Linux制作之Linux假造内存完成道理仓酷云

[复制链接]
只想知道 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-18 11:30:10 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
文件处理命令:file、mkdir、grep、dd、find、mv、ls、diff、cat、ln
我们都晓得,MongoDB利用内存映照的体例来举行数据文件的存取操纵。本文的目标就在于形貌操纵体系假造内存的利用及内存映照的外部完成。
以下是译文
当你运转一个程序,程序中有很多工具必要存储,堆、栈和各类功效库。而这统统在你写程序时大概都不必要本人把持,Linux内核会帮你完成这些存储的调剂,你只必要告知它你必要做甚么,内核就会在符合的中央给你分派内存空间。本文次要经由过程几个实例程序的内存利用研讨,来为人人展现Linux的内存利用情况。
第一个例子:上面一段程序会打印出程序的pid(历程号)后挂起。
  1. #include<stdio.h>#include<unistd.h>#include<sys/types.h>intmain(){printf("run`pmap%d`
  2. ",getpid());pause();}
复制代码
将下面代码保留成文件mem_munch.c然后运转上面程序编译并实行:
  1. $gccmem_munch.c-omem_munch$./mem_munchrun`pmap25681`
复制代码
下面历程号是25681,大概你实验的了局会不太一样。
上面我们经由过程pmap命令来检察一下这个小程序的内存利用情形
  1. $pmap2568125681:./mem_munch00000000004000004Kr-x--/home/user/mem_munch00000000006000004Kr----/home/user/mem_munch00000000006010004Krw---/home/user/mem_munch00007fcf5af880001576Kr-x--/lib/x86_64-linux-gnu/libc-2.13.so00007fcf5b1120002044K-----/lib/x86_64-linux-gnu/libc-2.13.so00007fcf5b31100016Kr----/lib/x86_64-linux-gnu/libc-2.13.so00007fcf5b3150004Krw---/lib/x86_64-linux-gnu/libc-2.13.so00007fcf5b31600024Krw---[anon]00007fcf5b31c000132Kr-x--/lib/x86_64-linux-gnu/ld-2.13.so00007fcf5b51200012Krw---[anon]00007fcf5b53900012Krw---[anon]00007fcf5b53c0004Kr----/lib/x86_64-linux-gnu/ld-2.13.so00007fcf5b53d0008Krw---/lib/x86_64-linux-gnu/ld-2.13.so00007fff7efd8000132Krw---[stack]00007fff7efff0004Kr-x--[anon]ffffffffff6000004Kr-x--[anon]total3984K
复制代码
下面的了局是这个程序的内存利用情形,实在更切实的说是这个程序以为它利用内存的情形。从下面的了局我们能看到,当你会见libc库时,实践上是对内存地点00007fcf5af88000的会见,当你会见ld库时,实践上是对内存地点00007fcf5b31c000的会见。
下面的输入大概还对照笼统,上面我们修正一下下面的程序,我们在程序的堆和栈上各放一块数据。
  1. #include<stdio.h>#include<unistd.h>#include<sys/types.h>#include<stdlib.h>intmain(){inton_stack,*on_heap;//部分变量是放在栈上的,以是on_stack的地点就是栈的初始地点on_stack=42;printf("stackaddress:%p
  2. ",&on_stack);//malloc的内存是在堆上分派的on_heap=(int*)malloc(sizeof(int));printf("heapaddress:%p
  3. ",on_heap);printf("run`pmap%d`
  4. ",getpid());pause();}
复制代码
编译运转:
  1. $./mem_munchstackaddress:0x7fff497670bcheapaddress:0x1b84010run`pmap11972`
复制代码
然后再用pmap命令检察一下内存利用:
  1. $pmap1197211972:./mem_munch00000000004000004Kr-x--/home/user/mem_munch00000000006000004Kr----/home/user/mem_munch00000000006010004Krw---/home/user/mem_munch0000000001b84000132Krw---[anon]00007f3ec4d980001576Kr-x--/lib/x86_64-linux-gnu/libc-2.13.so00007f3ec4f220002044K-----/lib/x86_64-linux-gnu/libc-2.13.so00007f3ec512100016Kr----/lib/x86_64-linux-gnu/libc-2.13.so00007f3ec51250004Krw---/lib/x86_64-linux-gnu/libc-2.13.so00007f3ec512600024Krw---[anon]00007f3ec512c000132Kr-x--/lib/x86_64-linux-gnu/ld-2.13.so00007f3ec532200012Krw---[anon]00007f3ec534900012Krw---[anon]00007f3ec534c0004Kr----/lib/x86_64-linux-gnu/ld-2.13.so00007f3ec534d0008Krw---/lib/x86_64-linux-gnu/ld-2.13.so00007fff49747000132Krw---[stack]00007fff497bb0004Kr-x--[anon]ffffffffff6000004Kr-x--[anon]total4116K
复制代码
此次多出了下面白色的一行内容,白色内容就是堆的肇端地位:
  1. 0000000001b84000132Krw---[anon]
复制代码
在我们程序运转的输入里也有一行白色的输入,这是这个地点在程序中的内存地点:
  1. heapaddress:0x1b84010
复制代码
这两个地点基础上是一样的,个中的anon是Anonymous的缩写,标明这段内存是没有文件映照的。
我们再看下面绿色的两行,与下面绝对应,这两行分离是用pmap和使用程序看到的栈肇端地点:
  1. 00007fff49747000132Krw---[stack]
复制代码
  1. stackaddress:0x7fff497670bc
复制代码
下面说到的内存利用,都只是程序以为本人对内存的利用,实践上程序在分派内存是不晓得体系内存的形态的。以是下面的输入都只是从程序本人的角度看到的内存利用情况。好比在下面的例子中,我们看到程序的内存地点空间是从0
莫相离 该用户已被删除
沙发
发表于 2015-1-21 08:47:53 | 只看该作者
你需要提供精确有效的信息。Linux这并不是要求你简单的把成吨的出错代码或者数据完全转储摘录到你的提问中。
灵魂腐蚀 该用户已被删除
板凳
发表于 2015-1-21 09:36:12 | 只看该作者
linux鸟哥的私房菜,第三版,基础篇,网上有pdf下的,看它的目录和每章的介绍就行了,这个绝对原创!
兰色精灵 该用户已被删除
地板
发表于 2015-1-30 13:40:48 | 只看该作者
笔者五分钟后就给出了解决方法: “首先备份原文件到其他目录,然后删掉/usr/local/unispim/unispimsp.ksc,编辑 /usr/local/unispim/unispimsp.ini,最后重启动计算机
小女巫 该用户已被删除
5#
发表于 2015-1-30 13:40:48 | 只看该作者
Linux是参照Unix思想设计的,理解掌握Linux必须按照Unix思维来进行。思想性的转变比暂时性的技术提高更有用,因为他能帮助你加快学习速度。
活着的死人 该用户已被删除
6#
发表于 2015-1-30 13:40:48 | 只看该作者
把这个问题放在其他Linux社区请求帮助也是一种选择。如果Linux得不到答案,请不要以为我们觉得无法帮助你。有时只是看到你问题的人不知道答案罢了。这时换一个社区是不错的选择。
admin 该用户已被删除
7#
发表于 2015-1-31 20:48:38 | 只看该作者
Windows有MS-DOS?方式,在该方式下通过输入DOS命令来操作电脑;Linux与Windows类似,也有命令方式,Linux?启动后如果不执行?X-WINDOWS,就会处于命令方式下,必须发命令才能操作电脑。?
8#
发表于 2015-2-6 22:29:57 | 只看该作者
感谢老师和同学们在学习上对我的帮助。
若天明 该用户已被删除
9#
发表于 2015-2-9 02:42:21 | 只看该作者
随着Linux应用的扩展,出现了不少Linux社区。有一些非常优秀的社区往往是Linux高手的舞台,如果在探讨高级技巧的论坛张贴非常初级的问题经常会没有结果。
精灵巫婆 该用户已被删除
10#
发表于 2015-3-7 08:52:58 | 只看该作者
在学习linux的工程中,linux学习方法有很多种,这里是小编的学习心得,给大家拿出来分享一下。
小妖女 该用户已被删除
11#
发表于 2015-3-11 06:03:47 | 只看该作者
学习Linux系统在服务中的配置方法及使用方法。Linux在服务器中应用相当广,应对常用的apache,samba,ftp等服务器基本配置清楚了解。[重点,应巩固学习]
柔情似水 该用户已被删除
12#
发表于 2015-3-17 22:08:06 | 只看该作者
Windows有MS-DOS?方式,在该方式下通过输入DOS命令来操作电脑;Linux与Windows类似,也有命令方式,Linux?启动后如果不执行?X-WINDOWS,就会处于命令方式下,必须发命令才能操作电脑。?
只想知道 该用户已被删除
13#
 楼主| 发表于 2015-3-25 03:21:44 | 只看该作者
对于英语不是很好的读者红旗 Linux、中标Linux这些中文版本比较适合。现在一些Linux网站有一些Linux版本的免费下载,这里要说的是并不适合Linux初学者。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-12-23 10:03

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表