an operating system based on a modified Linux 2.6 with a Java programming
interface. Also several drivers and libraries have been modified to allow
Android to run efficient on mobile devices.
It provides tools, e.g. a compiler, debugger and a device emulator as well as its own Java Virtual machine (Dalvik Virtual Machine - DVM). Android is created by the Open Handset Alliance which is led by Google.
Dalvik is Android’s Java virtual machine. It allows Android to run the byte-code generated from Java-based apps and Android’s own system components and provides both with the required hooks and environment to interface with the rest of the system, including native libraries and the rest of the native user-space.
Android runs on Linux. Linux provides as well as:
· Hardware abstraction layer
· Memory management
· Process management
Android Native Libraries
Bionic-: Bionic, a super-fast and small license-friendly libc library optimized for embedded use. The Bionic libc is a derivation of the BSD's standard C library code that was originally developed by Google for their Android  operating system based on the Linux kernel
Surface Manager-: Surface Manager for composing window manager with off-screen buffering.
2D and 3D graphics hardware support or software simulation.
Media codecs offer support for major audio/video codecs.
WebKit library for fast HTML rendering.
What runs before android code-:
During startup of the Android system the Linux kernel first calls the process "init". init reads the files "/init.rc" and "init.device.rc". "init.device.rc" is device specific, on the virtual device this file is called "init.goldfish.rc".
init.rc starts the process "Zygote" via the program "/system/bin/app_process". Zygote loads the core Java classes and performs initial processing of them. These classes can be reused by Android application and therefore this step makes them faster to start. Once the initial work of Zygote is done, the process listens to a socket and waits for requests.
A special driver called Binder allow an efficient interprocess communications (IPC) in which allow references to objects are passed between processes. The real objects are stored in Shared Memory. This way the communication between the processes is optimized as less data must be transferred.
Android does not provide a swap space like other Linux systems therefore the amound of available memory is limited to the memory on the device.
Androids uses a special C library "Bionic" instead of the standard Glibc. This library is not compatible with Glibs but requires less memory. Bionic contains a special thread implementation which optimizes the memory consumption of each thread and reduces the start time of new threads.
As of Android 2.3 the Android system uses Ext4, the standard file system for Linux. Before that it used the YAFFS file system. Some vendors replaces the standard file system by their own one.