问个简单问题!

dongpy 2005-10-27 07:15:55
Linux内核中访问内存时,是直接通过物理地址,还是通过虚拟地址?
...全文
181 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhla1984 2005-11-08
  • 打赏
  • 举报
回复
配置文件的作用是什么,和编写可执行文件的源代码有什么区别?
数据文件呢?


sun的linux os 完全是利用公开的linux免费内核所提供的系统调用编写的吗?即编写一些
供其他应用程序调用的应用程序。
zhla1984 2005-11-07
  • 打赏
  • 举报
回复

一个应用程序就只有一个文件吗?那为什么安装一个应用程序后,会生成多个文件夹和文件?
IControlWorld 2005-11-07
  • 打赏
  • 举报
回复
当然理解是访问虚拟地址,操作系统有虚拟地址到物理地址的映射,最后访问到物理地址
tb01412 2005-11-07
  • 打赏
  • 举报
回复
我明白LZ的意思了,你是说一个软件到底会有多少文件,到底会在内存中建立多少个任务结构,这同样取决于你的软件,有些软件会同时运行多个程序,当然就有多个文件,而有些软件只会运行一个程序,并且这个程序中没有派生进程,它就只有一个任务结构,当然,它可能会有多个文件,不过只会有一个可执行文件,其它的文件有可能是动态运行库,配置文件等,还有可能是一些数据文件(比如你的程序中有可能会在运行过程中读写你的数据文件,具体就要看你的软件需要了),总之一句话,你需要先搞清楚什么是软件,什么是程序,什么是进程,什么是文件,你搞清楚了这些问题,就全部明白了!!!!其实这些概念跟WINDOWS下是一样的,你先弄懂在WINDOWS下的这些概念,再在LINUX去思考,它们仅仅是对这些概念的具体实现有些差异而已
bekars 2005-11-07
  • 打赏
  • 举报
回复
i386中内核是通过虚地址转换为实地址访问内存的,具体实现看保护模式内存管理的分页机制。
tb01412 2005-11-04
  • 打赏
  • 举报
回复
关于一个程序运行时产生几个任务的问题,主要是看你的程序内部了,LINUX对进程实现派生机制,也就是用FORK系统调用来实现,应运程序本身被加载时,是通过SHELL来为它派生一个进程的,如果你的程序内部用了fork函数之类的,它就会产生其它的进程,建议你查阅有关fork之类的资料

LINUX上的应用程序普遍采用ELF文件格式,至于是什么样的结构,你在网上搜一下ELF,资料多的是

一个可执行文件,除了它自身外,还会有什么文件呢??不明白你的意思!!!!



zhla1984 2005-11-03
  • 打赏
  • 举报
回复
那就是说,每运行一个应用程序或系统服务,os就会在内存gdt中新插入一个ldt描述符和一个tss描述符,
并建立相应的ldt 和tss.
一个应用程序运行时,可能创建多个进程吧?

运行在linux上的应用程序的可执行文件的文件头是什么样的结构?
一个应用程序除可执行文件外,还可能包含哪些文件?
tb01412 2005-10-31
  • 打赏
  • 举报
回复
你读一下LINUX内核完全注释和LINUX内核设计与实现就明白了
从虚拟地址到物理地址的转换需要CPU与操作系统协作,操作系统必须设置页目录,一级页表和二级页表,从实模式到保护模式的转换等操作

比如如果完全建立好了以上操作的时候,如果此时PC值是0x12345678,它实际上并不是去访问相应的物理地址,它会取高31位至20位当作页目录表和一级页表,去查找相应的二级页表,再根据19-2位取出页内偏移地址就得到了最终的物理地址,具体是怎么换算的我忘了,这个最终的计算是通过CPU的MMU单元完成的,操作系统负责建立页表等操作
tb01412 2005-10-31
  • 打赏
  • 举报
回复
系统本身就有很多种服务,而且大多是用户态下运行的,具体有多少就得看你机子到底运行了多少个进程了
关键是运行了多少个应用程序,而不是安装了多少个
至于WINDOWS嘛,你就只有去问微软了,呵呵
zhla1984 2005-10-31
  • 打赏
  • 举报
回复
假设在一台新机器上装了linux系统,而且没有安装其他应用程序,开机,内核初始化后,有多少个ldt?
tss?
如果安装了其他应用程序,结果一样吗?
如果安装的是windows2003 ,结果又是怎样?
dongpy 2005-10-28
  • 打赏
  • 举报
回复
谢谢 tb01412(tb)!

我指的是有MMU的(如i386处理器)。

内核的虚拟地址空间是3~4G,在内核空间访问内存,也是将虚拟地址转换为物理地址吗?

是的话,怎么转换,是通过软件还是硬件转换?
dongpy 2005-10-28
  • 打赏
  • 举报
回复
内核中定义的变量,虚拟地址3G~4G,访问过程是不是这样的:将虚拟地址减去3G,得到物理地址,然后访问这个物理地址。

还是通过硬件进行地址转换呢?

请大家帮忙解答一下!
tb01412 2005-10-27
  • 打赏
  • 举报
回复
跟处理器和操作系统相关,在一些无MMU的嵌入式处理器中,是通过物理地址访问的

4,436

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 内核源代码研究区
社区管理员
  • 内核源代码研究区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧