• Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 232
  • Last Modified:

Keeping a program loaded in RAM only.

Using VC++ 6 on WinNT40.
Is there a way to:
a) Load an application into RAM only and "lock" it so that it never gets pagged to disk?

b) Alloc RAM only?  i.e. if there is not enough RAM to load the entire program into, fail to alloc it.
0
snifong
Asked:
snifong
  • 2
  • 2
  • 2
  • +1
1 Solution
 
GlennDeanCommented:
snifong:
  I know for device driver code you can tell NT to lock it's code in memory (but that's because the driver executes in a kernel context).  BUT, for any 'ol application I seriously doubt you could do that.
   Glenn
0
 
ufolk123Commented:
a) Following function does that.
The VirtualLock Win32  function locks the specified region of the process’s virtual address space into memory, ensuring that subsequent access to the region will not incur a page fault.

BOOL VirtualLock( LPVOID lpAddress,
 // address of first byte of range to lock
 DWORD dwSize
 // number of bytes in range to lock );
 
b) VirtualLock() will give you an error if it can not allocate that much required for your address range from OS but definitely this can not be done at load time .

ufolk123
0
 
GlennDeanCommented:
ufolk123:
  I agree that VirtualLock guarantees that the specified pages will be in RAM when any thread from the app executes.  BUT this does NOT mean the pages are always in memory!  VirtualLock stores the pages into the app's Working Set, i.e. those pages the app requires to be in memory when any thread from the app executes.  BUT, if another process executes, NT is free to page out any page in the app's Working Set.
   Glenn  
0
What does it mean to be "Always On"?

Is your cloud always on? With an Always On cloud you won't have to worry about downtime for maintenance or software application code updates, ensuring that your bottom line isn't affected.

 
ufolk123Commented:
Sorry, Yeh I missed that point.
But  i do not feel applicaiton can do more than that from win32 layer.
Yes it is not possible for user app to control RAM that way.
0
 
nietodCommented:
>> VirtualLock guarantees that the specified pages
>>  will be in RAM when any thread from the app
>> executes.  BUT this does NOT mean the pages
>> are always in memory!
Are you sure about that?  Where did you find that?  That makes the function nearly useless.  (You are practicaly given that guarantee anyways.)

snifong, why do you want to do this?  Most people try this in order to speed up performance.  But there is a flaw in their thinking so they usually end up makeing performance worse!
0
 
snifongAuthor Commented:
The company that I am with is trying to figure out if they want to go to a web based configuration tool to configure firmware settings for Natural Microsystems boards.  Enable for this to happen there must be a web server on the box in order to connect.  The app we are configuring needs to be as close to realtime as possible.  We want to make sure when paging happens that it is the server and not the other app.
0
 
nietodCommented:
Locking memory can reduce performance, not improve it.  The system swaps memory based on its frequency of use.  So if you use the memory frequenly, it is not likely to be swapped out, if you use it less frequently it might be.  If you lock the memory it won't be.  Is that faster?  Well, if the OS needs to swap memory out it will, if it can't swap out yout memory it will swap out other memory.  This means it may swap out more frequently used memory and leave your less frequently used memory swapped in.  Do you think that will increase performance?  
0
 
snifongAuthor Commented:
GlennDean, you were right. Thanks.
nietod, Thanks as always for your comments.
ufolk123, Thanks for the push in the right direction.

Article ID: Q94996  
SUMMARY
VirtualLock() causes pages to be locked into an application's working set (virtual memory); it does not lock them absolutely into physical memory. VirtualLock() essentially means "this page is always part of the process's working set."

The system is free to swap out any virtually locked pages if it swaps out the whole process. And when the system swaps the process back in, the virtually locked pages (similar to any virtual pages) may end up residing in different real pages.

For part a) there is no way to do it 100%.  For b) VirtualLock() will return false if the pages cannot be locked.
0

Featured Post

Free Tool: Port Scanner

Check which ports are open to the outside world. Helps make sure that your firewall rules are working as intended.

One of a set of tools we are providing to everyone as a way of saying thank you for being a part of the community.

  • 2
  • 2
  • 2
  • +1
Tackle projects and never again get stuck behind a technical roadblock.
Join Now