• Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 238
  • 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
Cloud Class® Course: Ruby Fundamentals

This course will introduce you to Ruby, as well as teach you about classes, methods, variables, data structures, loops, enumerable methods, and finishing touches.

 
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
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

Join & Write a Comment

Featured Post

Cloud Class® Course: Certified Penetration Testing

This CPTE Certified Penetration Testing Engineer course covers everything you need to know about becoming a Certified Penetration Testing Engineer. Career Path: Professional roles include Ethical Hackers, Security Consultants, System Administrators, and Chief Security Officers.

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