Unix is designed to give the independence of the device on the applications running over it by considering each I/O device as a special type of file which are handled by the file system and are treated the same way as the user data files
Unix is designed to give the independence of the device on the applications running over it by considering each I/O device as a special type of file which are handled by the file system and are treated the same way as the user data files. The devices installed in a UNIX system is given a name which is related to the given name of any other file, these descriptors are called iodes which identifies the devices that contains the information about them and saved in the device directory. The transmission of data between the peripheral units and the main memory are called device drivers. During the configuration of the system, incorporation of a device driver into the kernel is performed. And it has a program called config which contains the specification that control resources such as the swap space sizes and the number of internal buffers for the kernel. The file contains two tables, bdevsw (block device switch) and cdevsw (character device switch), that gives the system kernel of UNIX the capacity to adapt easily to the different hardware configurations through installing different driver modules. There are two types of I/O in a UNIX system, the buffered and unbuffered. The buffered cache is actually a disk cache that is managed through the buffer cache. Transmission of data between buffer cache and user process space happens using Direct Memory Access. It is utilized to be able to execute a memory-to-memory copy. Buffered I/O uses two types of buffers which is the character queues and system buffer caches. Unbuffered I/O is the direct memory access between the process and the device. This method is fast and swapping out can’t be performed since the process is already locked in the main memory. In addition, the device is fixed to the process and it is unavailable to other processes. The I/O system of UNIX is divided into two parts, which is the block I/O system and the character I/O system. Each of the device is classified by a major and minor device number and a class which is either block or character. Each of the class owns a configuration table that has an array of access points to the device drivers.