Minix was originated from the system UNIX. Andrew S. Tanenbaum created it for academic purposes to be taught in universities with the aim of illustrating the concepts of his book Operating Systems(Tanenbaum and Woodhull 2006), Design and Implementation. With his first appearance, many schools began to have laboratory courses in which students examined a real operating systemto see how it worked inside (Tanenbaum and Woodhull 2006) .
The original code of Minix was designed for an IBM PC with two-diskette drive and no hard disk. Also was based in UNIX version 7, evolving to support 32-bit protected mode machines with large memory capacity and hard disks. However, in its first 10 years Minix underwent many changes to being based on the international POSIX standard andmany others features were added, leading to the creation of LINUX. Minix was ported to others platforms, such as Macintosh, Amiga, Atari and SPARC, becoming widely used at universities.
Organization of the Source Code
The MINIX 3 was implemented for an IBM PC- type machine that uses Intel 32-bit processors.
The file named Makefile is present in every directory of source tree.
The functionof it is direct the operation of the UNIX-standard make utility. For summarize the main function of Makefile is to control compilation of files in its directory and may also direct compilation of files in one or more subdirectories.
The main source code directory can be observed below:
src/include/ contains a number of POSIX standard header files
src/include/sys/ - contain aditional POSIXheaders
src/include/minix/ - header files used by the MINIX 3 operating system
src/include/ibm/ - header files with IBM PC-specific definitions
src/kernel/ – layer 1 (scheduling, messages, clock and system tasks)
src/drivers/ - layer 2 (device drivers for disk, console, printer, etc.)
src/servers/ - layer 3 (process manager, file system, other services)
src/servers/init/ - fisrt userprocess, last process loaded as part of the boot image
src/servers/rs/ - reincarnation server
src/servers/inet/ - network server
src/lib/ - source code for library procedures (e.g., open, read)
src/tools/ - Makefile and scripts for building the MINIX 3 system
src/boot/ - the code for booting and installing MINIX 3
src/commands/ - for utility programs e.g.,cat, cp, date, ls, pwdStructure of MINIX 3
Minix 3 is structured in layers with specific functions.
4 Init User
process … User
processes User mode
Server … Server
driver … Device
1 Kernel Clock
task Kernel Kernel
Figure 1 - Structure ofMINIX 3
Starting from the bottom layer, kernel contains a number of specific functions, serving as the abstraction of the hardware and the interface to the layers above it. Also it supports access to I/O ports and interrupts, scheduling and memory management , the remainder services are in user space. That separation allows uninterrupted OS operation without problems to theentire system to run.
Furthermore, there are two modules in kernel itself that play similar roles to device drivers. These modules are clock task and system task. Clock task generates timing signals interacting with the hardware, but interfaces only whith the kernel. System task has some functions such as reading and writing I/O ports and copying data between address spaces.
Next, user layercontains almost all of the other services beyond their own user processes, but each one is limited to user mode instructions, scheduling to run by the kernel.
On the other hand, some of these processes have special privileges to make kernel calls, making the real difference between processes in layer 2, 3 and 4. Within the user mode, the layer 2 (device drivers) have the most privileges, those...