Maybe I’m a bit confused here.
How do you ‘see’ 16 gigs of RAM in a 32 bit O/S (4 gig limit)?
The 16gigs is real memory. I only see 4gig virtual at a time. Where that is depends on the GDT or LDT tables.
There were two things we needed to do to run a program in the memory above 4gig.
- startup_apic needed a parameter, I think -x to look for the extra memory.
- There’s a flag one needs to use when spawning a program to allow it to use this extra memory. Running a program this way has the same affect
on -P mypgm
Once running the program doesn’t know where it’s real memory is (unless it looks hard). I think the reason for this flag requirement has to do with hardware drivers that could not deal with memory above 4gig. This is actually backwards for the way it should be implemented. A program that needs memory below 4gig should have to set a flag, not the other way around.
We’ve recently started using QNX 7.0 but only in 32 bit mode at the moment (to save on recompilation issues in 64 bit O/S land). On a machine with 8 gigs of RAM installed QNX 7 32 bit is only reporting 2 via ‘pidin in’. I can imagine via some flag to proc32 that it might be possible to report 4 but I don’t see how it could report 8.
Check out startup_apic.
Also doesn’t the CPU itself matter? If it’s only a 32 bit CPU the MMU would be limited to 4 gigs. You didn’t mention the CPU being used but I figured I might as well ask in case it’s a hardware limitation.
I’m not entirely sure about this. A Pentium is probably limited to 4gig. Even a 64 bit processor needs the extra hardware addressing lines to work. The processor we are using is 64bit i7 so no problem there.
Still curious to know how you expect to see 16 gigs in 32 bit land.
Simple, I don’t expect to see more than 4 at a time.