免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 5197 | 回复: 12
打印 上一主题 下一主题

[NetBSD] 如何直接运行被压缩的文件 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-04-11 14:22 |只看该作者 |倒序浏览
假如一个可执行文件被某种方式压缩存储在文件系统下,
我想直接执行它,主要是想在此程序运行期间,不愿意有一个解压缩的中间文件长期放在文件系统下面占空间。各位大牛,有什么方法可以实现吗?是不是必须修改bsd内核文件系统?

论坛徽章:
0
2 [报告]
发表于 2006-04-11 14:49 |只看该作者
我想了一个投机的方式:
做了一个实验:
先用mkfifo 建立一个命名管道kkfifo
并且chmod +x kkfifo

然后在程序里用fopen fgetc fputc 等函数把一个可执行文件如/bin/ls 写入命名管道,
然后 execlp("./kkfifo",NULL);
结果是 Permission denied
失败

论坛徽章:
0
3 [报告]
发表于 2006-04-11 19:01 |只看该作者
看看windows 怎么弄的,
它好象是先解压到临时文件夹里,然后再打开,使用完删除

[ 本帖最后由 kylints 于 2006-4-11 19:02 编辑 ]

论坛徽章:
0
4 [报告]
发表于 2006-04-12 09:15 |只看该作者
原帖由 kylints 于 2006-4-11 19:01 发表
看看windows 怎么弄的,
它好象是先解压到临时文件夹里,然后再打开,使用完删除


我就是想避免出现中间临时的解压缩文件。因为临时文件在运行期间始终占着空间。我这里空间很有限。不然我还压缩它干啥?

论坛徽章:
2
亥猪
日期:2014-03-19 16:36:35午马
日期:2014-11-23 23:48:46
5 [报告]
发表于 2006-04-12 09:26 |只看该作者
看看这样行不行,解压缩以后,将进程代码全部读入内存执行,同时设置该进程的代码区内存是驻留内存,即,不能交换(我记得虚拟内存中有这样的支持)。然后删除临时文件。
如果临时文件也不想要,看看可不可以弄一个什么内存文件系统,直接解压缩到内存里。

论坛徽章:
0
6 [报告]
发表于 2006-04-12 18:04 |只看该作者
一个失败的试验:
因为要一个地方存解开的临时文件,又不能把它放到flash里面,因为flash更小。
所以就做了一个内存文件系统
mount_mfs –s 32m malloc  /mnt/mem
成功后就可以把解开的临时文件放到内存文件系统上,然后运行,然后删除这个临时文件,这时候都正常。
不过当我umount -f /mnt/men 时候正在运行的程序就死翘翘了.
为什么要umount 内存文件系统呢,因为我的内存资源也有限,我不愿意它又始终占据32M内存。
这样就和不删除临时文件的效果差不多了。
所以失败。

gvim 说的代码区驻留内存我没找到资料,是在程序代码中设置吗?还是其他,给点提示吧。

[ 本帖最后由 ljoolj 于 2006-4-12 18:05 编辑 ]

论坛徽章:
2
亥猪
日期:2014-03-19 16:36:35午马
日期:2014-11-23 23:48:46
7 [报告]
发表于 2006-04-12 18:59 |只看该作者
这个问题我帮你留心下解决方案,除了使用别的文件系统,比如cramfs可能适合你的需求。
除此之外,我现在也没有什么想法。

论坛徽章:
2
亥猪
日期:2014-03-19 16:36:35午马
日期:2014-11-23 23:48:46
8 [报告]
发表于 2006-04-12 19:44 |只看该作者
我试了试,mount_mfs –s 32m malloc  /mnt/mem 并不像你认为的那样会占据内存的32m空间。

我在vmware虚拟机里面的试验,虚拟机分配的内存是128m,而命令mount_mfs –s 2048m md  /mnt并没有使我的机器crash。相反,top和ps显示内存消耗并没有增加(当然/mnt里面什么也没有放)。
往/mnt里面cp -R /usr/sys ,内存需求不断增大。这个文件空间会根据需求,向物理内存申请空间。并不是一开始就分配出来空间。(有一个reverse选项可以完成这个工作,但是明显不是你希望的)。

也就是说一个空的md文件系统并不增加内存的消耗。
在你失败的试验的基础上,删除临时文件,保留md文件系统,使md成为一个空文件系统。
因此LZ在没有合适的替换方案之前,可以利用这个特性达到你的任务要求。

论坛徽章:
2
技术图书徽章
日期:2013-09-04 15:21:51酉鸡
日期:2013-11-01 21:20:20
9 [报告]
发表于 2006-04-13 12:43 |只看该作者
如果你将程序编译成a.out方式,内核支持a.out的压缩运行,网上有特定版本的elf压缩补丁

论坛徽章:
0
10 [报告]
发表于 2006-04-13 18:20 |只看该作者
多谢大家关注哈。
givm:
  先说明一下我的测试系统是vmware上安装的 netbsd3.0 特殊一点是没有给它分配swap分区,因为我模拟的系统没有硬盘。
   我又做了测试,开始的空内存磁盘的确几乎不占空间,只有在给它写入了文件,系统才给它实际分配了内存空间。问题是当删空了那些写入的文件后,内存盘似乎不能很容易地释放空间,比如当我又做了一个内存盘,又copy许多文件进去,使得内存处于临界状态,此时以前哪个空的内存盘也不能及时释放已经分配给它的资源(也会释放一点,但会有很大保留),这是个问题。

mirnshi
  我这里只支持elf格式。也没有找到netbsd关于elf相关的压缩补丁。你有更多的资料吗?

[ 本帖最后由 ljoolj 于 2006-4-13 18:22 编辑 ]
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP