actually, crucial is correct. parity/non parity/ecc (continuation of parity) use a 9th bit for error detection. essenctially, when info is passed into memory it checks that info. if it is odd (known as odd parity, weird huh?) then the 9th bit is assigned a 0. if it is even, then it is assigned a '1'. when data is passed from memory, this is checked by the system to make. it looks, sees a one. well, then the remaining 8 bits had better be of an odd numbered nature or there are problems. note that with the 9th bit, ALL will be of an odd number. for example, all 0's. add 1 for ECC = 1. 1 + 0 (due to odd number) = 1
2 (even) + 1 =3
3 + 0 = 3
4 + 1 = 5
5 + 0 = 5
and so on.
Now the correction comes like this. If ONLY one bit is wrong, then a halt command is given to the processor since it KNOWS something is amiss saving any possible corruption. How does it know this? Good question. Because when the info was passed from memory and checked, the bit was set high, or 1, for example. Well, that means it should be an even number (0110 0000 = 2 = even number). Well, the system sees the the bit that is set high. It now checks the data. Now lets say something happened and it read (0100 0000 = 1 = and odd number). Well, that doesn't coincide with the parity/ecc bit. I SHOULD be an even number, but it's not! Well, somethings wrong and it KNOWS it. So stop the processor so nothing gets corrupted. Now here's scenario number two:
2 bits have gone bad. Well, here's the problem with that. If you have info being passed to memory and its (0011 0110). Well, thats 4, an even number so the bit is set high, or at a one. Now when its passed OUT of memory, say something weird happens and now its read as (1101 1011). Well, as you can see the data has changed. Problem is ECC will NOT catch this. The reason is because you have 6 even, so when its passed from memory it sees the bit set high. It checks, says "okay, my information SHOULD be even" Well, it is even so it lets it go on. It's info, though is NOT correct. Its corrupted data and it never knew it because it was of an even number. Thats the problem. Of course the odds of this happening are not very high, but they do exist.
Also, this is only for error detection, I'll put more in on correction but have to run on a network call.