On Thu, 20 Dec 2007, Martin Peach wrote:
a buffer is First In First Out, like a train in a tunnel.
Well, no. Perhaps some uses of the word "buffer" assume that, but most don't. "buffer" is a very vague word. If you want to say FIFO, you just say FIFO or you say queue.
Pd processes messages in the order they are sent, it uses a buffer.
Oh no it doesn't. Pd's immediate message processing is LIFO ("depth first"); Pd's delayed message processing is FIFO ("breadth first"). Look at the execution order for a normal patch, then replace each connection by a delay with a pair of connections. You will observe a change from depth first to breadth first.
I think the machine would not be useful with the stack on the hard drive, it would be much too slow.
So what. It can do it anyway, and if it happens, it won't be any slower than if you had allocated the same arrays in heap instead, as the OS would also have to swap parts of the stack out, to make enough heap fit in.
SIGSTKFLT is thrown by the cpu when the stack overflows, and registering a handler amounts to modifying the interrupt table, so its the same thing.
So why didn't you just talk about SIGSTKFLT instead of going on about how ring 0 can do stuff a user mode process can't?
Well obviously you're supposed to do it before the stack is too big.
If the stack is not too big, then you don't get a STKFLT.
If as you say the OS starts out with no stack and waits for trouble, it would have the same problem. I would have thought that a stack overflow requires a restart, unless the exception kicks in before the absolute end of the stack.
I hope so. If it does, then surely it gives at least a full 4k extra (you can't wait for non-4k boundaries unless you're in very slow debug mode like what valgrind does).
_ _ __ ___ _____ ________ _____________ _____________________ ... | Mathieu Bouchard - tél:+1.514.383.3801, Montréal QC Canada