When people use the word "bidirectional" while describing buses, what are the two "directions" that are being talked about?

Also, why is the address bus unidirectional, as opposed to the data bus?

Edit: If all these buses are just connecting wires, what is the meaning of a 16 bit address bus? Does it mean that the wire can carry 16bits of information at a time?

Buses usually connect the central processing unit (CPU) with peripheral devices, like memory or other Input/Output devices.

To activate a memory you need to do two things:
- specify the cell in the memory you want to write to / read from (that would be the address)
- give the data to write to the memory, or take the data from the memory (this information would go over the data bus)
- control the memory: tell the memory if this is a read or a write, etc.

So as you can see, in both READ and WRITE you must specify the address you want to write to, or to read from. So the address bus is uni-directional: from the CPU to the MEMORY.

The information itself goes in both directions. In a READ it goes from the memory to the CPU, and in a WRITE it goes from the CPU to the memory. Hence, the data bus is bi-directional.

The control bus is usually uni-directional: the CPU is the master and the peripherals are slaves. "Controlling" in the other direction goes via the interrupts mechanism.

Finally, as you mention, buses are just connected wires. 16bit means that there are 16 wires connected in parallel. So an address bus of 16bits can specify any address between 0 (=16 times 0) to $$2^{16}-1=65535$$ (=16 times 1). The data bus is capable of carrying 16bit of information, etc.

• Wouldn't 16 wires running in parallel take up too much space? – noorav Apr 19 at 6:30
• @noorav what is "too much"? they will take some space, sure, but usually this should be fine. Nowdays computers feature buses with up to 64-bit. Where space is a concern, serial bus is sometimes used (e.g., USB) – Ran G. Apr 19 at 9:48