今天给各位分享linuxbss是什么的知识,其中也会对进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!
本文目录一览:
- 1、用linux如何测量BBS和ESS
- 2、Linux进程内存如何管理?
- 3、问个问题啊,嵌入式开发所谓的bss段,data段,text段属于哪方面知识,有没有书推荐
- 4、分析下面程序,指出其中变量是属于栈堆还是数据段,bss段
- 5、请教高手,linux C GNU,.bss与.data段的区别是.bss段是不占存储空间,原理是怎样的,应该怎么理解??
用linux如何测量BBS和ESS
BSS和ESS的区别就是BSS都具有相同的BSSID,而BSSID一般就是MAC地址
通过简单ping方法就能看到MAC地址,即BSSID,即可比对。
Linux进程内存如何管理?
Linux系统提供了复杂的存储管理系统,使得进程所能访问的内存达到4GB。在Linux系统中,进程的4GB内存空间被分为两个部分——用户空间与内核空间。用户空间的地址一般分布为0~3GB(即PAGE_OFFSET,在Ox86中它等于OxC0000000),这样,剩下的3~4GB为内核空间,用户进程通常只能访问用户空间的虚拟地址,不能访问内核空间的虚拟地址。用户进程只有通过系统调用(代表用户进程在内核态执行)等方式才可以访问到内核空间。每个进程的用户空间都是完全独立、互不相干的,用户进程各自有不同的页表。而内核空间是由内核负责映射,它并不会跟着进程改变,是固定的。内核空间的虚拟地址到物理地址映射是被所有进程共享的,内核的虚拟空间独立于其他程序。Linux中1GB的内核地址空间又被划分为物理内存映射区、虚拟内存分配区、高端页面映射区、专用页面映射区和系统保留映射区这几个区域。对于x86系统而言,一般情况下,物理内存映射区最大长度为896MB,系统的物理内存被顺序映射在内核空间的这个区域中。当系统物理内存大于896MB时,超过物理内存映射区的那部分内存称为高端内存(而未超过物理内存映射区的内存通常被称为常规内存),内核在存取高端内存时必须将它们映射到高端页面映射区。Linux保留内核空间最顶部FIXADDR_TOP~4GB的区域作为保留区。当系统物理内存超过4GB时,必须使用CPU的扩展分页(PAE)模式所提供的64位页目录项才能存取到4GB以上的物理内存,这需要CPU的支持。加入了PAE功能的Intel Pentium Pro及以后的CPU允许内存最大可配置到64GB,它们具备36位物理地址空间寻址能力。由此可见,对于32位的x86而言,在3~4GB之间的内核空间中,从低地址到高地址依次为:物理内存映射区隔离带vmalloc虚拟内存分配器区隔离带高端内存映射区专用页面映射区保留区。
问个问题啊,嵌入式开发所谓的bss段,data段,text段属于哪方面知识,有没有书推荐
你好,你提到的bss段,data段,text段是计算机(不一定是pc机,也可能是嵌入式开发板)的引导程序的汇编部分,对于pc来说就是bios,而对于嵌入式产品就是 bootloader的 startup.s汇编程序,当然启动引导程序在机器里面会以二进制文件形式出现,也就是.bin文件,亦称可执行文件,并且把可执行文件分为两种情况:分别为存放态和运行态。下面分两部分来讲解:
1、存放态是指在存储介质(flash或磁盘)上的分布. 此时可执行文件一般由两部分组成:分别是代码段和数据段。代码段又分为可执行代码段(.text)和只读数据段(.rodata),数据段又分为初始化数据段(.data)和未初始化数据段(.bss)。分布见下图
+-------------+-----------
| .bss |
+-------------+-- 数据段
| .data |
+-------------+-----------
| .rodata |
|_____________| 代码段
| .text |
+-------------+-----------
2、当可执行文件(也就是.bin文件)被拷贝到flash等之类的外部存储器时,接下来要做的就是把可执行文件搬运到cpu内部的ram中,这个过程叫装载,也就是可执行文件从存放态到运行态的转变。当然,搬过去的时候可执行文件在结构上将发生变化,下面是装载前后的变化:
| ... |
+-------------+-----------
| .bss | ZI 段
+-------------+-- 数据段
| .data | RW 段
+-------------+-----------
| .rodata |
|_____________| 代码段(RO 段)
| .text |
+-------------+-----------
| ... |
装载前
当可执行文件装载后, 在RAM中的分布如下:
| ... |
+-------------+-- ZI段结束地址
| ZI 段 |
+-------------+-- ZI段起始地址
| 保留区2 |
+-------------+-- RW段结束地址
| RW 段 |
+-------------+-- RW段起始地址
| 保留区1 |
+-------------+-- RO段结束地址
| RO 段 |
+-------------+-- RO段起始地址
| ... |
装载后
好了,我说的也许太含糊,那就推荐几本书给你:《linux系统移植》、《linux内核全注释》,如果看不懂那就说明你的基础还有待提高,多看一些基础的书籍:《arm汇编》、《c语言》、《嵌入式系统设计》
希望对你有帮助,欢迎追问!!!
分析下面程序,指出其中变量是属于栈堆还是数据段,bss段
5个数据段
进程(执行的程序)会占用一定数量的内存,它或是用来存放从磁盘载入的程序代码,或是存放取自用户输入的数据等等。不过进程对这些内存的管理方式因内存用途 不一而不尽相同,有些内存是事先静态分配和统一回收的,而有些却是按需要动态分配和回收的。对任何一个普通进程来讲,它都会涉及到5种不同的数据段。
Linux进程的五个段
下面我们来简单归纳一下进程对应的内存空间中所包含的5种不同的数据区都是干什么的。
BSS段:BSS段(bss segment)通常是指用来存放程序中未初始化的全局变量的一块内存区域。BSS是英文Block Started by Symbol的简称。BSS段属于静态内存分配。
数据段:数据段(data segment)通常是指用来存放程序中已初始化的全局变量的一块内存区域。数据段属于静态内存分配。
代码段:代码段(code segment/text segment)通常是指用来存放程序执行代码的一块内存区域。这部分区域的大小在程序运行前就已经确定,并且内存区域通常属于只读, 某些架构也允许代码段为可写,即允许修改程序。在代码段中,也有可能包含一些只读的常数变量,例如字符串常量等。
堆(heap):堆是用于存放进程运行中被动态分配的内存段,它的大小并不固定,可动态扩张或缩减。当进程调用malloc等函数分配内存时,新分配的内存就被动态添加到堆上(堆被扩张);当利用free等函数释放内存时,被释放的内存从堆中被剔除(堆被缩减)
栈(stack):栈又称堆栈, 是用户存放程序临时创建的局部变量,也就是说我们函数括弧“{}”中定义的变量(但不包括static声明的变量,static意味着在数据段中存放变量)。除此以外,在函数被调用时,其参数也会被压入发起调用的进程栈中,并且待到调用结束后,函数的返回值也会被存放回栈中。由于栈的先进后出特点,所以栈特别方便用来保存/恢复调用现场。从这个意义上讲,我们可以把堆栈看成一个寄存、交换临时数据的内存区。
它是由操作系统分配的,内存的申请与回收都由OS管理。
PS:
全局的未初始化变量存在于.bss段中,具体体现为一个占位符;全局的已初始化变量存于.data段中;而函数内的自动变量都在栈上分配空间。.bss是不占用.exe文件空间的,其内容由操作系统初始化(清零);而.data却需要占用,其内容由程序初始化,因此造成了上述情况。
bss段(未手动初始化的数据)并不给该段的数据分配空间,只是记录数据所需空间的大小。
data(已手动初始化的数据)段则为数据分配空间,数据保存在目标文件中。 数据段包含经过初始化的全局变量以及它们的值。BSS段的大小从可执行文件中得到 ,然后链接器得到这个大小的内存块,紧跟在数据段后面。当这个内存区进入程序的地址空间后全部清零。包含数据段和BSS段的整个区段此时通常称为数据区。
请教高手,linux C GNU,.bss与.data段的区别是.bss段是不占存储空间,原理是怎样的,应该怎么理解??
在linux下 需要加载一个可执行程序到内存时会调用exec函数 exec函数会读取可执行文件的头部信息 其中就包括各段(code data bss)的起始地址和结束地址 因为bss时未初始化的数据段 exec函数就会把bss段【起始地址-结束地址】映射到一个全0的页(叫什么名字我忘记了 反正linux有专门的这么一页内存4K,所以程序(不只你的程序)未初始化的数据都映射到此页),至于linux为什么要这样,其实你可以自己想想,你未初始化一个数据(好比你定义一个 Int a (全局的 或 静态的)) 你以后可能不会再程序中用它(因为你编程失误) 这样因为没有跟它分配内存(而只是映射了一下) 所以不会浪费宝贵的内存 如果以后再程序中用到此变量 如果是读则是0(此映射不会变) 但是如果你写此变量 他就会分配一页内存存放你的bss段(this is call copyonwite)
,并且将此页全清零 好了 不说了 我也是菜鸟
linuxbss是什么的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于、linuxbss是什么的信息别忘了在本站进行查找喔。