当前位置:  技术问答>linux和unix

关于linux内核地址分配问题

    来源: 互联网  发布时间:2016-08-17

    本文导语:      最近看关于linux内核方面的书,一直有个问题,就是linux内核加载到内存之后,它的各个详细部分是什么,     比如,开始的是内存页目录,页表,内核代码段,数据段,然后就是内存管理啊,文件系统啊,还...

    最近看关于linux内核方面的书,一直有个问题,就是linux内核加载到内存之后,它的各个详细部分是什么,
    比如,开始的是内存页目录,页表,内核代码段,数据段,然后就是内存管理啊,文件系统啊,还有一些基本数据结构  比如进程描述的,tss等。疑问就是这些部分详细的物理内存地址多少,谢谢。

|
你问的确实太广了 试着回答你最后的问题
首先 所有无力内存都是内核来调度的。假定你板子的内存物理地址是0x00000000(一般是),那么从这个头到最大内存地址(其实不是最大地址,有另外的限制,常见的板子可以这么认为),都是内核可以直接管的物理地址,内核本身处在内存从开头(或离开头某个偏移处),包括内核的代码,数据等等。
内核的虚地址固定位于0xC0000000开始,然后就有一个值定义从物理地址到虚拟地址的偏移,这个板子那就是0xC0000000,任何一个物理地址x的虚拟地址就是x+0xC0000000 = 0xC000000x.
如果物理地址不是从0开始比如某些TI板子,如内存物理地址是0x80000000,那这个偏移就是0xC0000000-0x80000000=0x40000000.

|
你可以看system.map  这个编译内核的时候会产生的
各个函数的地址
各个segment的分布 
都有

如果想了解很清楚  建议可以看下赵炯的 linux内核注释 系列(再版了很多次 名字都不一样)
讲的很全面 而且很细  不过是争取低版本的

|
本帖最后由 wenxy1 于 2010-04-06 11:14:16 编辑
[root@localhost proc]# cat iomem
00000000-0009f7ff : System RAM
0009f800-0009ffff : reserved
000a0000-000bffff : Video RAM area
000c0000-000c7fff : Video ROM
000ca000-000cafff : Adapter ROM
000f0000-000fffff : System ROM
00100000-0feeffff : System RAM
  00100000-00375ab5 : Kernel code
  00375ab6-004223ff : Kernel data
0fef0000-0fefefff : ACPI Tables
0feff000-0fefffff : ACPI Non-volatile Storage
0ff00000-0fffffff : System RAM
e8000000-e87fffff : 0000:00:0f.0
e8800000-e8800fff : 0000:00:11.0
e8801000-e880101f : 0000:00:10.0
e8900000-e8900fff : 0000:02:02.0
  e8900000-e8900fff : ehci_hcd
f0000000-f7ffffff : 0000:00:0f.0
fec00000-fec0ffff : reserved
fee00000-fee00fff : reserved
fffe0000-ffffffff : reserved


System.map文件也描述了内核函数的逻辑地址。

|
工作量挺大的,搞懂了也就不要在中国呆了,呵呵。startup函数描述的内核启动过程就是这些空间分配建立的过程。以x86为例,内核加到0x1000000处,临时分配页目录在0x10001000和0x10002000。。。。。太多了,说不清了

|
觉得这个没什么大的意义
你要真想得到内核空间的虚拟地址的物理地址,一个__pa()宏就搞定了

|
呵呵!其实这个问题主要在setup.s文件中建立起来的,setup.s文件主要是对内存初始化,初始化了段页式存储管理,建立起了页表和段表。GDT和IDT,这里面的东西好多的哦!段描述符又分为全局和局部的,再细分为数据段,代码段和状态段...这些东西在赵炯老师的那本linux内核中有详细讲解,楼主要细学的话可以参考一下那本书!

|
学习学习。

|
哦,学习学习,学无止境……

    
 
 

您可能感兴趣的文章:

  • Linux内核中影响tcp三次握手的一些协议配置
  • 我想学习linux桌面编程,那么有没有必要学习linux的内核以及内核的相关编程呢?
  • TCP协议四次断连过程介绍及Linux内核协议栈中相关设置项
  • 现有linux内核中共享内存机制如何移植到linux0.11内核中
  • Linux进程的内核栈和用户栈概念,相互关系及切换过程
  • 读懂 Linux 内核代码不难,难的是读懂 Linux 内核代码背后的哲学!
  • linux内核中的likely宏和unlikely宏介绍及用法
  • Linux中内核线程不访问内核态地址空间?
  • Linux下c/c++开发之程序崩溃(Segment fault)时内核转储文件(core dump)生成设置方法
  • linux为什么要升级内核?升级内核有何作用?
  • 请问linux中如何判断内核是否已经启动。(在内核中写程序)
  • 《Linux内核情景分析》值得推荐的内核学习参考两用资料
  • *******是不是对内核模块编程然后再重新编译内核就可以把此模块整合到linux系统中
  • Linux 编译内核之后 没办法选择内核版本
  • 想看linux内核源代码,另外手头上有一本《unix环境高级编程》,需要先把《unix环境高级编程》看完之后再看内核吗?
  • 请问重新编译LINUX内核是否能将没有用的外设的驱动程序删除并减少内核占有内存的资源?请好心人仕指教!
  • Linux内核工具包 TOMOYO Linux
  • 请问:构建嵌入式linux环境时,“Linux内核的移植”是达到什么目的啊?
  • 求教,Linux下键盘输入的所有数据都会经过Linux内核吗???
  • 高深问题:有了linux内核源代码如何做成一个linux操作系统
  • linux内核编译一定要在linux环境下么?
  • linux内核分配内存,及管理?
  • 问个LINUX内存分配的问题。
  • linux c 多线程问题任务分配问题
  • Linux 如何获得分配内存的起始地址
  • linux下具体分配组的访问目录
  • 请教Linux内存分配策略与Windows有何异同?
  • Linux下服务器端的线程分配
  • 偶托管了一管台linux主机,想分配一个用户出来自已用,请问该怎么做?
  • 我在linux下用GPRS拨号上网,拨号分配到的IP是10.98.*.*时为何访问不了公网呢?
  • 关于Linux内存分配函数的几点问题
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • linux/Centos下查看和修改网卡Mac地址(ifconfig命令)
  • Linux内存映射 物理地址映射到虚拟地址
  • linux内存管理虚拟地址 逻辑地址 交换分区(swp)
  • X86下linux虚拟地址向物理地址的转换
  • Linux 物理地址转化成虚拟地址及IO_ADDRESS的用法
  • 请教:linux下看网卡的IP地址,DHCP,DNS地址的命令是什么?
  • Linux下局域网内如何根据对方机器的IP地址获得对方机器网卡的MAC地址?
  • linux 中怎么根据MAC地址获得IP地址?(用C语言实现)
  • 《操作系统原理linux篇》逻辑地址,线性地址 物理地址
  • 有谁会用linux里面的wget?有一个参数是-i 后面加上url地址文件,我不明白什么叫url地址文件,那位大侠告诉我?
  • 如何在LINUX中获取进程中某个虚拟地址所在物理内存地址
  • linux在setup.s里将system代码从10000处移到地址0后,原来驻留在地址0的BIOS中断程序去哪了?
  • linux进程地址
  • Linux中有关内存地址的问题
  • 虚拟机linux访问本地windowsip地址
  • Linux的虚拟地址空间
  • linux0.11内核线性地址问题,请教!!
  • 怎样修改linux下网卡的MAC地址?
  • 跪求Linux系统下载地址
  • linux用户态内存的物理地址问题?
  • 如何让linux不自动接收服务器发来的ipv6地址
  • linux c/c++ IP字符串转换成可比较大小的数字
  • 在win分区上安装linux和独立分区安装linux有什么区别?可以同时安装吗?(两个linux系统)
  • linux哪个版本好?linux操作系统版本详细介绍及选择方案推荐
  • 在虚拟机上安装的linux上,能像真的linux系统一样开发linux程序么?
  • secureCRT下Linux终端汉字乱码解决方法
  • 我重装window后,把linux的引导区覆盖了,进不了linux怎么办?急啊,望热心的人帮助 (现在有linux的盘)
  • Linux c字符串中不可打印字符转换成16进制
  • 安装vmware软件,不用再安装linux系统,就可以模拟linux系统了,然后可以在其上学习一下LINUX下的基本操作 了?
  • Linux常用命令介绍:更改所属用户群组或档案属性
  • 红旗Linux主机可以通过127.0.0.1访问,但如何是连网的Win2000机器通过Linux的IP去访问Linux


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3