The IOP processor is a MIPS R3000 chip connected to the EE by the Sub-system Interface (SIF), which is just a couple of DMA channels. It is called the IOP because it is connected to all I/O devices such as CD/DVD, HDD, Memory Card, Controllers, Sound, USB, etc. Drivers for theses devices are made on the IOP and can then be used on the EE using a Remote Procedure Call (RPC) protocol called SIFRPC.
The IOP is quite an interesting part of the PS2, mostly because there is a lot of functionality available for it already in the BIOS, in the form of IOP modules (file extension .IRX). This is similar to PRX modules on the PSP. The IOP on startup sets up it own custom system for loading modules and importing and exporting functions from these. An IOP module is self contained and most of them have an import section where functions from other modules are defined and some also have section of exported functions.
All the IO drivers and the SIFRPC interface are not open source for licensed developers and therefor a lot of reverse engineering work has been done in order to make the IOP work in PS2DEV. The IO drivers and the SIFRPC library are the core part of PS2SDK, which is open source. Not all IOP modules have been reversed, such as modules for threading, interrupts and other “kernel” parts of the IOP. However, [RO]man had a website where he published some reversed IOP modules in pseudo-C code. A mirror for the files can be found here: http://lukasz.dk/playstation-2-programming/file-mirror/
As already mentioned the IOP is MIPS R3000, which is the same processor as the CPU in the PSOne and therefor this is used for executing PSOne games. Sony probably included the IOP for PSOne compatibility and then made it the processor for handling IO in PS2 mode afterwards. It is unconfirmed whither the Geometry Engine (GTE), which is the “3D” processor of the PSOne, also existed in earlier PS2 models and could be accessed the same way as on the PSOne.