Inside Symbian OS… or better said inside Symbian kernel

Let’s discuss a little bit about Symbian OS internals, how are things passing under the user layer?

It is important to have in mind that when talking about Symbian Operting System there can be distinguished two types of kernels: EKA1 (first generation)
and EKA2 (second generation). EKA name comes from EPOC Kernel Architecture and is the predecessor of what was EPOC’s kernel at its beginnings.

Concerning their history or timeline it is not needed to dive too much in details but few things are worth mentioning. EKA1 was basically the kernel for the first EPOC-32 mobile OS, also the first one which was hardware variant (its predecessor EPOC16 being tied to Intel 80186 architecture).

EKA2 (EPOC Kernel Architecture 2) was conceived in 1998 and as already mention it was given this name in order to distinguish it from previous 32-bit EPOC
kernel. But how big was this “jump” ? Like its predecessor, EKA1, it has pre-emptive multithreading and full memory protection. The main differences in between them consisted in:

    * Real-time guarantees (each API call is quick, but more importantly, time-bound)
    * Multiple threads inside the kernel as well as outside
    * Pluggable memory models, allowing better support for later generations of ARM instruction set.
    * A nanokernel (I will try to cover as much as possible of it) which provides the most basic OS facilities upon which other personality layers can be built

Also few other things need to be added:

    – it is modular, functionality is provided in separate building blocks, not one monolithic unit (here an interesting discussion can take place about what is a monolithic kernel or a microkernel, or how differs a kernel from an OS, but not in this post)
    – is single user, there is no concept of multiple logins to a Symbian OS smartphone (actually I do not think there is some mobile OS which supports this)
    – it is multi-tasking, it switches CPU time between multiple threads, giving the user of the mobile phone the impression that multiple applications
    are running at the same time
    – it is a preemptive, EKA2 does not rely on one thread to relinquish CPU time to another, but provides the context switch automatically
    – it is a priority-based multi-tasking OS with “priority inheritance”, a new thread is created from an existing one, so the new one inherits the priority
    from its parent

Which functionalities has the nanokernel and what adds the EKA2 kernel ? Nanokernel just provides basic functionality for threads, this means three important things:

    1. supervisor mode
    2. their scheduling and
    3. their synchronization.

Someone having a basic background in RTOS (Real TIme Operating Systems) may see that this is less than in an RTOS kernel.
Nanokernel is also the initial handler for all interrupts, it provides basic timing functionality, necessary to pre-empt threads or to schedule them, and it
provides the API NKern::Sleep

Symbian OS kernel, on top of the nanokernel’s threads. builds more complex objects, such as user-mode threads, processes and reference-counted objects and it also handles dynamically loaded libraries, inter-thread communication and more. Besides the already mentioned objects it provides also more sophisticated ones as: semaphores and mutexes (more about those maybe in a later post).

That’s all folks … for now ! I’ll write a little bit more in detail about Symbian nanothreads in the next post.  Antway if you are , or you want to become, a passionate Symbian programmer or more, a Symbian developper dozen of resources can be found for free on the Internet. Those just presented here are partially extracted from here.

2 Responses to Inside Symbian OS… or better said inside Symbian kernel

  1. Pingback: Kernel vs Operating System « Bazzarrr 2.0

  2. Pingback: tow truck for sale

Leave a comment