i dont know why im bothering to try to sort this out...but here goes:
everyone is on the right track...its bad programming practices, and is related to a process writing to memory its not supposed to. modern OSes try to use the concept of "protected memory" to keep from completely dieing when this happens. this means the kernel keeps track of what memory belongs to what app, and stops an app if it attempts to write to memory that doesnt belong to it (aka writing off the end of its stack). it actually does happen in unix and other OSes also, and is the technique used in most *nix security exploits.
the reason why it can cause 9x to crash more than NT, is that dos gives programs (more) direct access to hardware, in order to speed up things like graphics. it is much more difficult for the OS to keep hardware drivers from doing anything they want. a driver writing to memory willy nilly can really screw things up.
anyway, the point is that GPFs are not really bad things, its the OS trying to keep itself from getting screwed up by a program that is writing to memory it doesnt own. this can often happend from writing off the end of an array, or having a memory allocation fail, not checking the result, then trying to write to the resulting pointer (which will be null [= 0]).
of course, these things can happen if parts of the OS is poorly coded also....9x is kind of notorious for that

, but more often its a poorly coded app or driver that is responsible.
(andy, dont slam me for this not being a completely correct explaination, im trying to explain it in a way that newbies can understand, and i dont have time to really do it right

)