Parity error messages are caused by the generation of nonmaskableinterrupts (NMIs). A clean, uncorrupt installation of Windows cannotgenerate an NMI, therefore it is not possible for a clean, uncorruptinstallation of Windows to cause a parity error.
Parity is a very basic check of information integrity. Each byte (8 bits)of RAM storage actually takes nine bits of information. Eight bits are usedfor the data and the last bit (the "parity bit") is used to store theparity of the data.
The processor is in charge of checking the accuracy of the parity bit, andthe processor generates an NMI if it determines that the parity bit is setincorrectly. In Windows 386 enhanced mode, this is captured by a VirtualDevice Driver (VDD), *parity, which displays an error message. In WindowsStandard Mode, NMIs are ignored and passed to the default parity handler.This either does nothing or generates a TTY (full screen) error message. Inboth cases, the machine is in an unstable state and is halted.
Parity errors can seem to be resolved if you remove a memory-resident item,such as a device driver or terminate-and-stay-resident (TSR) program. Thisonly changes the memory location of load code. If you change the locationor remove an item, then the code no longer resides on the faulty memory andyou may no longer receive a parity error. If data resides the suspectmemory, you might not see a parity error at all. Unfortunately, since dataand code in Windows changes memory locations constantly, the parity errormight appear (or reappear) later.
In Windows, memory is commonly allocated with a flag to initialize thememory to zero. This makes the parity even (zero ones set in the databyte). If there is a faulty memory chip where the value of a bit is alwaysset to zero, then everything functions normally as nothing is written tothat memory (because the parity bit is correct). If the faulty memoryaddress falls in a code segment (that is, the memory is going to storeactual, executable code) it is likely that the bit will be used and aparity error will be generated.
A parity error can be caused by different circumstances but it is almostalways a hardware problem.
Common Causes of Parity Errors
One cause of parity errors is faulty memory. The most foolproof way toresolve this problem is to swap out each piece of memory until the problemdisappears. Make sure you are using good, quality memory and the memory isproperly seated in the computer. Memory checking programs are not adequatebecause they don't test the memory the way that Windows uses it. Most, ifnot all, memory checkers use read/write cycles when scanning memory. SinceWindows is executing code from the memory, it uses execute cycles. Executecycles are physically different from read/write cycles and are morevulnerable to parity errors. It is possible for memory checking programs tofind parity errors if the memory is extremely faulty.
Sometimes parity errors are caused by mismatched memory speeds. The CPUmight be accessing the memory faster than the memory is capable of handlingrequests. A possible workaround is to increase the number of wait states inthe CMOS setup. This option is not available on all machines and doesn'talways work. In short, increasing the number of wait states directs the CPUto wait for a predetermined amount of time between memory reads. This slowsthe machine down because it now takes longer to access memory. Generally,this option can be set to Zero, One, or Two wait states. The higher thenumber, the longer it waits between memory cycles. In addition, try to keepthe same speed of RAM installed in your computer. If you have to mixspeeds, make sure that you have the same speed RAM installed in each Bank.Banks are usually sets of four memory chips on the motherboard.
Supporting hardware, like video cards, can often cause parity errors.Because the devices occupy memory in the UMB, read/write data to thesedevices can also cause parity errors. The best way test this is to replacethe device with one that is working correctly. Also faulty power suppliescan cause parity errors.
Another known cause for parity errors is the PARITY BOOT B Virus.
What is Parity?
There are two versions of Parity: Odd and Even. The Parity BIT is set onor off depending on the count of ON bits, or 1's, in the data, usually abyte.
11011010 (Parity would be set to 1 to make the number of ones even.)
11110111 (Parity would be set to 0 to make the number of ones odd.)
Memory for the PC is designed such that there is an extra chip, or extraBIT, set aside for parity. This chip will hold the parity for a byte ofmemory. This is why there is often 9 chips on a memory SIMM, or the chipsthemselves are labeled 256x9's or 1Megx9's, and so on.
A parity error will be generated when a piece of code is executed in afaulty memory address. During the fetch or pre-fetch cycle of the CPU, thepoint where the CPU receives an instruction from memory to execute, thehardware checks the fetched code for parity. If that fetch fails, anexception error is generated. This is done to safe-guard the CPU fromexecuting an instruction that is not viable.
During a regular memory fetch, that is, data reads, parity is not checked.This is why a memory checker will normally be unable to find parity errors.The only program that will check memory for parity problems correctly is aprogram that executes code in the RAM addresses in question. Windows 3.0and 3.1 are such programs. In Windows 3.0, the mechanism for checkingparity errors did not function correctly and instead generated UAE's. TheseUAE's were a result of the parity errors not being caught and the codecontinuing to run in the faulty memory.
NOTE: You cannot check memory for parity problems by creating a RAMDRIVE,copying a program to it, and executing the program. The program is stillstored as data in the RAMDRIVE. When run, the program is copied intoconventional memory before it is executed. For information on how to use aRAMDRIVE to troubleshoot memory, please see the following article(s) in theMicrosoft Knowledge Base:
How to Use a RAM Drive to Troubleshoot Memory