A Windows XP help forum. PCbanter

If this is your first visit, be sure to check out the FAQ by clicking the link above. You may have to register before you can post: click the register link above to proceed. To start viewing messages, select the forum that you want to visit from the selection below.

Go Back   Home » PCbanter forum » Microsoft Windows 7 » Windows 7 Forum
Site Map Home Register Authors List Search Today's Posts Mark Forums Read Web Partners

How to allocate physically contiguous memory in user mode on windows 7



 
 
Thread Tools Rating: Thread Rating: 7 votes, 5.00 average. Display Modes
  #1  
Old March 12th 12, 03:36 PM posted to alt.windows7.general
rsyed
external usenet poster
 
Posts: 2
Default How to allocate physically contiguous memory in user mode on windows 7

Hello,

I want to allocate non paged physically contiguous memory in system memory in
"user mode". Can any one suggest me the API through which we can
achieve this, or the way we can achieve this.

FYI,
I know that we can achieve this in kernel mode using the API
"MmAllocateContiguousMemory".

Regards,
Rahim.
Ads
  #2  
Old March 12th 12, 07:39 PM posted to alt.windows7.general
Paul
external usenet poster
 
Posts: 18,275
Default How to allocate physically contiguous memory in user mode onwindows 7

rsyed wrote:
Hello,

I want to allocate non paged physically contiguous memory in system memory in
"user mode". Can any one suggest me the API through which we can
achieve this, or the way we can achieve this.

FYI,
I know that we can achieve this in kernel mode using the API
"MmAllocateContiguousMemory".

Regards,
Rahim.


In user space (ring 3), there is no such requirement. User space
uses virtual addresses, and the physical memory referenced by
a virtual address, doesn't have to be contiguous. Only a driver
writer would care to make the PA addresses contiguous (and only
for the benefit of some dumb DMA circuits). Ordinary program
writers, are "insulated" from hardware, and only care that the
virtual addresses are contiguous. In this example, my program
gets what looks like four contiguous storage locations, even though
there in two different areas of physical memory.

CPU -- VA TLB PA
0x01 0x23
0x02 0x24
0x03 0x58
0x04 0x59

You don't write drivers in user space. You write them in
kernel space (ring 0) and in there, the MmAllocateContiguousMemory
can help you define contiguous addresses, for hardware which
lacks scatter/gather DMA support. Perhaps something like
the AGP GART, would have been an example of an area needing
something like MmAllocateContiguousMemory.

PA --- DMA hardware, PCI bus
0x23 (for architectures where the peripherals
0x24 chips don't have access to a mapper or TLB.)
0x25
0x26 A few processors now, have an IOMMU, to add
the ability to do translations here. But
since not all processors have an IOMMU, it's
not a feature the OS can rely on. Having an
IOMMU, avoids the need for bounce buffers.

HTH,
Paul
  #3  
Old March 13th 12, 07:22 AM posted to alt.windows7.general
rsyed
external usenet poster
 
Posts: 2
Default How to allocate physically contiguous memory in user mode on windows 7

Paul wrote on 03/12/2012 13:39 ET :
rsyed wrote:
Hello,

I want to allocate non paged physically contiguous memory in system memory in
"user mode". Can any one suggest me the API through which we can
achieve this, or the way we can achieve this.

FYI,
I know that we can achieve this in kernel mode using the API
"MmAllocateContiguousMemory".

Regards,
Rahim.



In user space (ring 3), there is no such requirement. User space
uses virtual addresses, and the physical memory referenced by
a virtual address, doesn't have to be contiguous. Only a driver
writer would care to make the PA addresses contiguous (and only
for the benefit of some dumb DMA circuits). Ordinary program
writers, are "insulated" from hardware, and only care that the
virtual addresses are contiguous. In this example, my program
gets what looks like four contiguous storage locations, even though
there in two different areas of physical memory.

CPU -- VA TLB PA
0x01 0x23
0x02 0x24
0x03 0x58
0x04 0x59

You don't write drivers in user space. You write them in
kernel space (ring 0) and in there, the MmAllocateContiguousMemory
can help you define contiguous addresses, for hardware which
lacks scatter/gather DMA support. Perhaps something like
the AGP GART, would have been an example of an area needing
something like MmAllocateContiguousMemory.

PA DMA hardware, PCI bus
0x23 (for architectures where the peripherals
0x24 chips don't have access to a mapper or TLB.)
0x25
0x26 A few processors now, have an IOMMU, to add
the ability to do translations here. But
since not all processors have an IOMMU, it's
not a feature the OS can rely on. Having an
IOMMU, avoids the need for bounce buffers.

HTH,
Paul

“We have a requirement to allocate a pinned memory(non swappable
physical
page memory) in user mode of windows 7, can someone suggest how this can be
achieved in user mode, which are the windows API’s available ”.
Little explanation and Links to the documents would be helpful.

Regards,
Rahim.
  #4  
Old March 13th 12, 12:02 PM posted to alt.windows7.general
Paul
external usenet poster
 
Posts: 18,275
Default How to allocate physically contiguous memory in user mode onwindows 7

rsyed wrote:
Paul wrote on 03/12/2012 13:39 ET :
rsyed wrote:
Hello,

I want to allocate non paged physically contiguous memory in system memory in
"user mode". Can any one suggest me the API through which we can
achieve this, or the way we can achieve this.

FYI,
I know that we can achieve this in kernel mode using the API
"MmAllocateContiguousMemory".

Regards,
Rahim.



We have a requirement to allocate a pinned memory(non swappable physical
page memory) in user mode of windows 7, can someone suggest how this can be
achieved in user mode, which are the windows API's available.
Little explanation and Links to the documents would be helpful.

Regards,
Rahim.


http://blogs.technet.com/b/markrussi...7/3155406.aspx

Keyword is virtualalloc.

*******

This answer doesn't seem to be right. The problem is, the virtual memory system
consists of the amount of physical memory in the system, plus the paging file.
Virtualalloc, by the nature of its name, would not be distinguishing between
those kinds of memory.

My guess is, a slightly different means will be needed.

http://www.windows-api.com/microsoft...ser-space.aspx

"VirtualAlloc can let you do this if you have the correct privilege enabled."

*******

This thread has a few suggestions.

http://social.msdn.microsoft.com/For...6-4df5e7a4d924

This one makes more sense. "AllocateUserPhysicalPages". That acquires physical
memory, but without virtual addresses being allocated for them. They still need
a virtual mapping, before being used.

http://msdn.microsoft.com/en-us/libr...28(VS.85).aspx

There is a code example here, linked from the previous page.

http://msdn.microsoft.com/en-us/libr...(v=vs.85).aspx

Article on AWE Extensions.

http://msdn.microsoft.com/en-us/libr...(v=vs.85).aspx

AWE relies on PAE mode, which is enabled on WinXP SP2 or SP3 as far
as I know. And probably on later OSes. Even if a machine has less
than 4GB of memory installed, PAE would still be enabled, because
on WinXP it is used for NX protection (No Execute). NX prevents
certain kinds of malware attacks.

http://en.wikipedia.org/wiki/Address...ing_Extensions

*******

So it can be done, but it isn't the simplest thing in the world.
As the user space program needs the privilege granted for
that function (SeLockMemoryPrivilege).

There is a claim here, that 7ZIP is setting that privilege :-)
And it requires a reboot, to take effect. That implies to me,
that if you had access to the source code of 7ZIP, you might
find a worked example of such a memory allocation.

http://sourceforge.net/projects/seve.../topic/4609502

And another example here for setting SeLockMemoryPrivilege.

http://www.tek-tips.com/viewthread.cfm?qid=1020893

I'm not a software programmer. You should consult a Windows
programming group, for the language you intend to use,
for a real answer.

Just a guess,
Paul
 




Thread Tools
Display Modes Rate This Thread
Rate This Thread:

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

vB code is On
Smilies are On
[IMG] code is On
HTML code is Off






All times are GMT +1. The time now is 11:33 AM.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Copyright ©2004-2024 PCbanter.
The comments are property of their posters.