smlnj交互系统:致命错误

smlnj交互系统:致命错误,sml,smlnj,google-chrome-os,crouton-os,Sml,Smlnj,Google Chrome Os,Crouton Os,在apt get install smlnj并试图从终端调用sml后,Chromebook上的Crouton chroot出现了一个奇怪的错误,我在其他任何地方都找不到这个错误: $ sml /usr/lib/smlnj/bin/sml: Error -- unable to map 1179648 bytes, errno = 1 /usr/lib/smlnj/bin/sml: Fatal error -- unable to allocate memory object for BIBOP

apt get install smlnj
并试图从终端调用
sml
后,Chromebook上的Crouton chroot出现了一个奇怪的错误,我在其他任何地方都找不到这个错误:

$ sml
/usr/lib/smlnj/bin/sml: Error -- unable to map 1179648 bytes, errno = 1
/usr/lib/smlnj/bin/sml: Fatal error -- unable to allocate memory object for BIBOP

有什么指导吗?

编辑:这个问题(bug 120)在SML/NJ版本110.77()中通过启用MAP_ANONYMOUS得到了修复,这在Linux中以前是不受支持的。安装最新版本的SMLNJ比下面的解决方案更可取,因为它不需要削弱系统的安全性。如果通过修改
/dev
的权限继续,建议在每次会话后删除
exec
权限


这个问题主要在运行ChrUbuntu或Crouton的Chromium OS环境中重现,但也可能发生在其他环境中有类似问题的其他用户身上

sml
上运行
strace
会在错误输出之前执行此(尝试的)操作:

open("/dev/zero", O_RDONLY)             = 4
mmap2(NULL, 1245184, PROT_READ|PROT_WRITE|PROT_EXEC, MAP_PRIVATE, 4, 0) = -1 EPERM (Operation not permitted)
根据文档,
EPERM
表示系统正试图在标记为
noexec
的目录中分配具有执行权限的内存

实际上,
mount
提供:

...
devtmpfs on /dev type devtmpfs (rw,nosuid,noexec,relatime,size=960456k,nr_inodes=240114,mode=755)
...
因此,解决方案是使用
exec
权限重新安装
/dev

$ sudo mount -o remount,exec /dev
$ sml
Standard ML of New Jersey v110.75 [built: Thu May  9 05:41:01 2013]
- 

它是一个什么样的系统,
free-m
显示了什么?@barti_ddu我正在chromebook上的Chromoot中运行Xubuntu,内存只有2GB。在任何时候都有大约100-500 MB的空闲空间。这对sml是禁止的吗?AFAIR,32MB对于小脚本应该足够了;然而,操作系统似乎拒绝了sml的进程来分配这一数量的内存。您是否尝试临时增加/启用交换?是的,我的系统当前启用了~2GB交换。你知道为什么操作系统会拒绝这个吗?嗯,你能试着运行sml/nj如下:
sml@SMLalloc=128k
(或者更小的alloc大小,比如说64/32/16/8k)<代码>运行sml脚本可能只是对(赛扬?)CPU进行了不正确的猜测。