Are you arguably enjoying your intellectual fun with computer or just playing the mundane things of watching movies and listening songs?
Have you ever struck once or ever imagine, out of curiosity, how and why things work out inside a computer system?
Or, you simply think that it works like that, otherwise it won't incredibly be!
Are you not curious to know what's going at your computer system the moment you pass the 230 volt AC? Or, did you convict yourself pithily that the whole year of your life will be just going to keep on praising the discoveries of others?
Ken Thompson wrote the UNIX operating system in the 70s.
Richard Stallman started the GNU revolution in the 80's;
Bill Gates co-programmed the whole BASIC language then.
Larry Wall started Perl Language.
Linus Torvalds started writing the Linux operating system in the 90s.
Larry Page and Sergin Brin started the Google.
Tim O'rielly coined the web2.0 - the online networking system.
Mark Zuckerberg founded the 'FaceBook' in 2004.
What else could be next? - The coming of second life? My answer is straight and simple forward - You can do anything as innovative as these people are, as long as you're curious to know what's happening inside the computer box, at the same time, the eagerness to know why these people are doing those.
Simply raising curiosity on somebody's discovery doesn't make sense at all. Be a part of the discovery and then only going to feel a fun for being a part of it. I just make fun with Linux kernel.
Linux is incredibly a beautiful intimidating beast of a kind of operating system. It's evolving and its revolution has done it pompously already a decade ago. So often, I keep on wondering (and praising) why all the efficient algorithms and parameters of a known computer science paradigm are put on this open source kernel.
And frequently, I keep on asking myself, why the computer science students are not tempted to comprehend this beast instead of going through the despicable-cranky four year course. Every Linux kernel version assures to possibly deprecate the old concepts as much as scintillating the new efficient ones.
The x-86 assembly languages, the c data structures, the hardware dependency algorithms, the platform independent compilation techniques, the improving algorithms of CPU and hardware resource manager, the excusable borrowed concepts from contemporary operating systems and much more.
Where could you get such privilege to know all in one thing? Of course, the Linux kernel code is seriously intimidating. It is. But it's not written by an alien or Martian species. It's by our fellow being only. And even then, it's not written in cryptic zeroes and ones machine language - it's written in human readable form.
Why should be seriously find inexplicable excuse on the size of the subject? Why it shouldn't be fun? You got the opportunity to learn the assembly language while going through the booting phase - the process of loading the Linux kernel when the system is started first time.
While at the booting stage, you got the real mode assembly environment with the system BIOS calls and many possible things to interact with your basic hardware - CPU, mouse, disk, and adapter. These are seriously easy because the documentation is right there always at the finger of your tip - Google.
This in fact enforces you to learn the assembly language. Is this not practically a fun to learn one of your computer science courses - Assembly Language? Learning assembly language means learning underlying computer architecture - the Intel Microprocessor.
Now, your Microprocessor course is coming into picture. Interacting and configuring the hardware components through BIOS calls let you know why these damn BIOS is required during your computer start.
And BIOS is a read only memory implies the implication that all physical memory is not only RAM sticks but ROM stick also. Now you are going to know the concept of memory holes. Physical memory is not a contiguous addressable bytes but do contains a holes (a reserve space you cannot store user programs) - those region mapped by a system ROM and memory mapped devices.
Now the booting phase let the BIOS stores the interrupt vector table (an array of Interrupt service Routines) on the first part of the memory, letting you know the reason of "why my computer restarts on pressing 'CTRL-ALT-DEL' ".
During booting phase, you are required to know the Intel 8086 architecture and the 386 or Pentium architecture like real mode, protected mode, GDT, IDT, LDT (descriptor tables), cache mapping (n-way set-associative), paging, segmentation etc. Is this not the practical way of learning Microprocessor?
Now the booting phase is terminated (after basic initialization of the available hardware: Searching of hardware is done by a python script - anaconda.) by laying out the basic execution environment to run the c program. I'm describing a little bit to let you know how simple it is.
Linux kernel is nothing but a big c program with seemingly interspersed mingling of complex computer algorithms. At this first stage, no compiler/linker is there. The Linux kernel code has to manage itself to have its own execution environment.
It has defined its own stack (for any function/system call), page table (for mapping linear/virtual address to physical page), and Interrupt descriptor table (for any interrupt). These things imply that you've to define an efficient data structure for storing these kernel related data.
An algorithm is closely related with the underlying data structure which it's going to manipulate. The efficiency of the code depends on the complexity of the algorithm and this complexity is again a function of the data structure which it's going to handle.
For instance, you cannot apply quick sort algorithm on a large set of data. Because, worse case complexity is O(n square). That means the running time is at most the square of the size of input. The more the input, the horrible the running time will be. Choosing a better data structure implies knowing the algorithmic complexity of its associated algorithm.
For instance, sorting of a small set of data, people normally refer quick sort. But for large set of data, Heap sort is preferably use (complexity=O(nlogn)). Why not Merge sort? - the complexity equal to Heap-sort.
The space complexity of Heap sort is constant where as Merge sort is O(n). This is the reason. For your information, O(n) gives the time complexity (upper bound - ATMOST) and (n) gives the space-complexity(lower bound - ATLEAST).
All these pictures will be requiring painting if you seriously want to know why a particular thing or data structure is oriented or applied in Linux code. Linus Torvalds always ensures to use the best known algorithm at any point of Linux.
If a particular data structure is found to be incompatible with the real world, he will promise to deprecate it soon. One thing was happening at the scheduler of Linux version<=2.4. The complexity was O(n) - linearly dependent on the number of run able processes.
Whereas the latest running Linux version >=2.5 has O(1) - a constant time. O(1) (of Ingor Monar) implies that the running time is independent of the number of run able processes. Linux scheduler will execute at the same pace no matter how many run able processes are waiting on the processor queue.
Another conspicuous thing happens is on virtual region data structure. A virtual region is a homogeneous contiguous address space in a virtual address space like code segment, data segment or stack segment. Previously (24), the region is solely represented by AVL tree (balance binary tree of balance factor=1).
Now red-black tree also comes into picture at this structure. AVL is use for searching and red-black tree is use for insertion/deletion. The suddenly acceptation of Andrea Arcangeli's Red Black Tree implementation (of virtual regions) by Linus Torvalds is a noted one.
Linus has never been compromise on efficiency. Both the Binary Search Trees has the same efficiency theoretically (complexity of O(logn)) but practically, RB Tree shows good performance in the long run, because each tree requires rotation to balance itself.
The complexity of rotation in AVL Tree is more expensive (O(logn)) than the RB Tree (O(1)). When you come across here, you need to know the various possible operations of AVL and Red-Black Trees and how to implement them. Is this not a good way to learn computer science data structures? I bet you are.
Every data structure or code snippet gives the reason to think why it's like this and NOT that way. And the moments of knowing those REASONS are the real FUN to appreciate. Learning computer science subject theoretically is a real boredom. You learn it. You forgot it.
You start feeling computer as a multimedia kit. And finally, you start abusing the computer. And eventually, you end up in praising the innovations of others. And this loop continues forever. I'm saying from my point of experience. Learning Linux kernel is a FUN.
The only thing requires is the passion of learning. I know recently and exactly why Linus Torvalds said it so. Learning something is learning to help others. Today whole world is using Linux unbelievably at the cost of thousands of hackers. Knowledge sharing is the key to real happiness.
Knowledge sharing is again unbelievably easier these days at the cost of Google. I believe Google will always been inspire many generations to come. Hundreds of Linux hacker started migrating to Google. The use of Linux kernel in the recent Google Mobile OS, Android is a major step.
Ankit Fadia has properly coined today's generation - ICE AGE. ICE stands for Information Communication Entertainment. The coming of web 2.0 is the real boon of this running decade with social networking (Blogs) giving intense perspective.
We're started living at an environment where geography is the only barrier. Wikipedia and Face book have been the future promising web buzzwords. With all these tools and things, there is nothing sort of information a person can look for. The web is a learning platform.
There lies the real potential to search and discover your own talents. You might have stopped learning. But the web never stops.
If you're a serious programmer, come and join the real fun of learning new things. Among them, Linux is also waiting to play with you.
Playground: www.google.com
"If Linux is not FUN... why to DO it?" - Linus Torvalds
* sinuxs contributed this article to e-pao.net .
The writer can be contacted at sinuxs(at)yahoo(dot)com .
This article was webcasted on 21st December 2007.
|