In information technology, a write-only memory (WOM) is a memory location or register that can be written to but not read. In addition to its literal meaning, the term may be applied to a situation when the data written by one circuit can be read only by other circuitry. The most common occurrence of the latter situation is when a processor writes data to a write-only register of hardware the processor is controlling. The hardware can read the instruction but the processor cannot. This can lead to problems in producing device drivers for the hardware.
Write-only memories also find applications in security and cryptography as a means of preventing data being intercepted as it is being decrypted.
In 1972, WOM, an antithesis of read-only memory (ROM), was introduced as an inside practical joke perpetrated by Signetics.[1] However, it was soon recognized that this concept actually describes certain functionalities in microprocessor systems.[2]
The most frequent occurrences of write-only memories are where the memory locations are registers or an integrated circuit being used to control, or pass information to, hardware outside the processor. A central processing unit (CPU) can write to these locations, and thus control the hardware, but cannot read back the information and discover the current state of the hardware. The memory is write-only relative only to the CPU's point of view. Such arrangements are common on small embedded microcontroller systems to save costs and can cause difficulties for authors of device driver software.[3] When the current hardware state is unknown to the CPU it can only put it into a known state by sending a new command, which may result in the state changing.[4][5] To alleviate this difficulty, the content of the WOM may be mirrored by the CPU in the regular memory.[6] However, this strategy is only reliable if the register is read-only from the perspective of the hardware. If the external hardware is able to change its own state independently of the CPU then the hardware state is able to diverge from the image of that state being mirrored in CPU memory.
An example of this kind of use concerned access to memory on early PCs. The original PCs used 8086 or 8088 processors which had the ability to address only 1 MB of memory. A large part of this was occupied by the BIOS and the video card, resulting in only 640 kB of contiguous addressable RAM being available. The memory requirement of many applications soon surpassed this figure. One method of overcoming the limitation was by the use of bank-switched RAM. A number of banks of RAM are provided, but are not permanently assigned to a memory location. In a particular implementation, a special board is added to a computer, which controls the allocation of banks to memory space. The control board has its own memory chip. A computer can write data into this chip, but only the control board itself can read the chip,[note 1] hence it is dubbed "write only" memory.[7]: 200–202
Another example concerns some functions carried out by graphics processing units (GPUs). For instance, a GPU might be carrying out shader processing on the contents of graphics memory. It can be faster and more efficient for the GPU to take input for the shader process from read-only locations and write the shader output to different write-only locations without having to copy data between the read and write buffers after each iteration.[8]
An example that is still of contemporary relevance can be found in the 16550 UART, whose derivatives are still in widespread use. To add a data FIFO without breaking compatibility with the 8250 UART's eight configuration registers, the write-only "FIFO control register" was assigned the same port address as the read-only "interrupt identification register". Writes to that address program the FIFO control register, but there is no way to read it back.
The term is also used to describe the computer view of certain display devices such as the e-ink screens used in e-readers.[9]
Locking the frame buffer of a GPU to effectively turn it into a write-only memory can be useful in protecting encrypted data. When encrypted data arrives at its destination, it needs to be decrypted before it can be displayed to the user. The existence of unencrypted material in memory where it can be accessed by the CPU or peripheral devices is a potential security weakness. This weakness may be alleviated by carrying out the decryption within the GPU and writing the unencrypted data directly to display memory. Nothing else can read the data while the frame buffer is locked, and when it is unlocked it will be displaying something else.[10] All modern smart cards that feature a chip can also be said to rely on WOM technology, because they are programmed at a factory with certain encryption keys that can not directly be read by a card reader. Instead the keys are indirectly used by algorithms that validate passwords or decrypt certain content. Nintendo had a patent describing using hard disk portions as temporary write only storage for game code that is kept write only until that partition has been verified with an authorizing digital signature.[11]
In computability theory, adding a WOM to some models of computation can increase their computational power.[12]
/dev/null
, another "write-only" concept