[squeak-dev] Setting Memory pointer for bitmap object.. is it possible without plugin?

Eliot Miranda eliot.miranda at gmail.com
Fri Mar 31 15:24:59 UTC 2023


Hi Marcel,


> On Mar 31, 2023, at 12:49 AM, Marcel Taeumel via Squeak-dev <squeak-dev at lists.squeakfoundation.org> wrote:
> 
> 
> Hi L --
> 
> > The real question is about setting a pointer to the memory used by a Bitmap object.
> 
> I would not do that, I don't think it is possible as each project has its own address space. Virtual memory and so on... You cannot simply share pointers between processes. Thus, allocate some inter-process memory and copy initial data (from any Squeak object memory) to there. Then read/write it there.

While sharing pointers between processes imposes vi strainers it isn’t necessarily impossible.  As long as the memory being shared is shared at the same addresses in all processes then it is safe to use pointers to this memory.

This is the basis of VisualWorks’ perm space, they shares most of the image file between processes (shared, when it worked; it stopped working at some point).

Imagine the image file is loaded at startup by memory mapping, and that it is mapped at the same address. Note that to do so one does NOT have to defeat address space randomization, which is about where the executable is loaded, but where the image file is mapped, which could be at a very high or very low address to avoid ASR collisions with the executable.  And if all objects in the mapped space are marked, and the GC leaves them alone if marked, then this can effectively share an image which is used to run a canned application between multiple instances.  I believe the Pharo team are rifling on this for (their fork of) Spur.

So this exercise should be considered more generally.  What is most useful?  IMO being able to share objects is best.  Given that sharing arbitrary objects can be difficult I’ll settle for being able to share large non-pointer objects, e.g. ByteArrays, and accessing them directly.

> 
> Best,
> Marcel
>> Am 31.03.2023 00:30:05 schrieb LawsonEnglish <lenglish5 at cox.net>:
>> 
>> Thanks. I’ve used FFI before, and have several references to shared memory on the Mac (other OS’s have similar facilities). The real question is about setting a pointer to the memory used by a Bitmap object.
>> 
>> Getting FFI to work with the latest version of Mac OS X is often quite painful due to all the security-related hoops you must jump through to give  permission to an app to access libraries outside the app’s own set. I *think* that Apple’s built in shared memory API won’t be as covoluted to use via FFI as other libraries are, but haven’t tested it on Mac OS X 13.x (Ventura).
>> 
>> The real question is about setting the pointer that a Bitmap (in two or more images) uses. ELiot kindly offered to mentor me through the process of writing plugins. The real question is: am I up for that?
>> 
>> L
>> 
>>> 
>>> 
>>> Hi --
>>> 
>>> I would use SqueakFFI and through that interface a system library for memory shared between processes. Maybe through memory-mapped files or similar...
>>> 
>>> [URLS deleted to satisfy my malfunctioning ISP mailing system]
>>> 
>>> Once you have your ExternalAddress for that shared memory region, you can start reading and writing bytes from multiple Squeak images. Watch out for synchronization/locking etc.
>>> 
>>> Best,
>>> Marcel
>> 
> 
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20230331/8042698b/attachment.html>


More information about the Squeak-dev mailing list