jame.z
驱动牛犊
驱动牛犊
  • 注册日期2001-08-07
  • 最后登录2004-05-11
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1602回复:11

关于linux上的内存分配(内存管理)的问题:

楼主#
更多 发布于:2002-11-15 09:30
请问有谁知道什么函数可以做到:
1> 在linux用户进程中分配内核空间内存
2> 在linux内核模块中分配用户空间内存
-----------------------------------------  :)
unix1998
驱动老牛
驱动老牛
  • 注册日期2002-05-08
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分6分
  • 威望2点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2002-11-15 09:33
1,在上层用ioctl,下层在ioctl程序里kmalloc。
2,下层分配的buf供上层用,应该就是你要的内存吧!
jame.z
驱动牛犊
驱动牛犊
  • 注册日期2001-08-07
  • 最后登录2004-05-11
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2002-11-15 13:29
这种方法是我现在采用的,问题是它们具有相关性:
--------------------------------------------------
互相依赖性太强,比较被动,我想知道有没有更加主动点的方法可以减少这种以来关系,现在的方法是可行的,这个我承认,不过我想用更好的方法,高手请赐教。
--------------------------------------------------
Target Functions Work on RedHat Linux 7.3
--------------------------------------------------  :)
unix1998
驱动老牛
驱动老牛
  • 注册日期2002-05-08
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分6分
  • 威望2点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2002-11-15 13:47
想必你也知道,在用户空间只能访问PAGE_OFFSET分界线以下的内存。
你想分配分界线以下的内存?
为了稳定性考虑,我估计不会有你想要的函数的。
jame.z
驱动牛犊
驱动牛犊
  • 注册日期2001-08-07
  • 最后登录2004-05-11
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2002-11-15 13:54
恩~,我也知道机会比较少,不过我的重点并不是应用,而是内核,
在内核模块里自己分配用户空间的内存,把数据往应用发,呵呵~
我只是随便把两个方向的方法都问上而已--- :)
jame.z
驱动牛犊
驱动牛犊
  • 注册日期2001-08-07
  • 最后登录2004-05-11
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2002-11-15 13:59
而且就内核模块来说,我估计它应该具有分配用户空间内存的权限,所以就先请教一下,因为我在linux上编程的时间不长。
------------------------------------------------------------
多想点怪主意也不是坏事吧--- :)
unix1998
驱动老牛
驱动老牛
  • 注册日期2002-05-08
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分6分
  • 威望2点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2002-11-15 14:40
多想点怪主意也不是坏事吧---
当然不是坏事。

 :D

为了保持稳定性,linux上下层的接口做的很好,比如
file_operation指针。
其实你在编程序的时候无需考虑过多的内存问题,linux提供了几个函数,供你使用。你只要知道内存映射是怎么回事就差不多了。
你看看这个函数:
copy_from_user
实际内核把数据存在某个地址,上层来取得,不是说你送到上面的。

jame.z
驱动牛犊
驱动牛犊
  • 注册日期2001-08-07
  • 最后登录2004-05-11
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2002-11-16 08:48
你说的那个函数的参数是两个地址和一个长度吧,不过在事前也要先分配空间,是吧?谢谢,你的回答,你回答很耐心,谢谢。 :)
unix1998
驱动老牛
驱动老牛
  • 注册日期2002-05-08
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分6分
  • 威望2点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2002-11-18 08:40
你说的那个函数的参数是两个地址和一个长度吧,不过在事前也要先分配空间,是吧?谢谢,你的回答,你回答很耐心,谢谢。 :)


对。内部调用了access_ok函数。
int access_ok(int type,const void *addr,unsigned long size)
jame.z
驱动牛犊
驱动牛犊
  • 注册日期2001-08-07
  • 最后登录2004-05-11
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2002-11-18 16:49
虽然我的问题还是没有得到解决,但是还是谢谢你的回答 :)
unix1998
驱动老牛
驱动老牛
  • 注册日期2002-05-08
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分6分
  • 威望2点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2002-11-18 17:04
虽然我的问题还是没有得到解决,但是还是谢谢你的回答 :)

没帮上你。 :(
不好意思。
jame.z
驱动牛犊
驱动牛犊
  • 注册日期2001-08-07
  • 最后登录2004-05-11
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
11楼#
发布于:2002-11-18 19:33
哪里哪里~~谢了 :)
游客

返回顶部