On Tue, Nov 10, 2009 at 6:32 AM, Ognjen Bezanov <ogn...@mailshack.com> wrote: > Hey, > > Thanks for all the responses guys. In hindsight I probably should have > explained why on earth I'd need the physical address from an interpreted > language. > > I'm trying to see if there is any way I can make Python share data between > two hosts using DMA transfers over a firewire connection, so avoiding the > need for another layer on top such as IPv4 + Python sockets. > > Thanks to some old python bindings which I updated to python 2.6, I can read > any write to the RAM of any firewire connected host within python. Because > it uses DMA (the cpu is not involved in this at all), I can only specify a > physical address within the 4GB ram limit to read from and write to. > > Now what I've done so far is on the remote host I run python and set a > variable as so: > > a = "foo" > print a > 'foo' > > Then on the local host I run a python script that scans the entire RAM > looking for the string "foo", and replaces it with the string "oof". I have > had success with this method. Once it's done and I do "print a" on the > remote host, I get "oof" as the variable value, so in theory it can work. > > Problem is that it's slow. Scanning 3GB of RAM every time you want to do > this is not a good method. I thought that if I could get python to return > the physical address of where the value of a variable is, then I can just > jump to that address and write the data. > > From what I've been told so far, it's not possible to do this without some > OS-specific (Linux in this case) syscall. Is this correct? > > Thanks! > > > Ognjen
If all you need is a memory buffer, array.array provides a buffer_info() method that tells you the current (virtual) address. For DMA, I think there are dma_map_* functions in linux that you may be able to call through ctypes. - Max -- http://mail.python.org/mailman/listinfo/python-list