Thursday, 31 January 2013

How exactly does a computer program work ?

In Other words, how do a series of lines of text tell a box of wires to do anything ?

You have to know a little bit of Computer architecture to fully understand what's going on.
Computers do operate in 0s and 1s.

Let me start from the very, very bottom.

  1. The central part of a computer is called CPU (Central Processing Unit). Modern CPUs include a lot of stuff, but simply explained, CPU is a bunch of microelectronics that can execute instructions.
  2. You can think of CPU as a bunch of Logical transistor gates. A lot of them. These gates consist of Transistors and other electronic parts that implement very simple logical operators: AND, OR and NOT. Very simple CPUs used to have thousands of transistors. To grasp the complexity of modern CPUs, consider that some of them have over 2.5 billion transistors. As you might have guessed, they're tiny. But here are some not-so-tiny ones:
    (note three connectors - two inputs, one output)
  3. Transistors operate on electric currents. This is where your 1s and 0s come from. Current exists - 1. No current - 0. Logical operations alter these currents. For example, AND means that the output will have current only if both its inputs have it (1 AND 1 = 1). OR means only one is enough (1 OR 0 = 1). NOT just reverses the existence of current (NOT 0 = 1).
  4. Believe it or not, these three logical operators, when you combine them, are enough to implement all logic, including arithmetic operations on integers (+, -, /, *), and consequently pretty much everything else. It's just that you have to have a lot of them combined together. You can think of it this way: numbers are represented as 1s and 0s in Binary numeral system, so addition is just a set of logical operations between 1s and 0s the two numbers consist of. Here's for example, a couple of transistors which add two bits together. Combine more of those and you can add large numbers.
  5. OK, this is CPU and its logic. But where do we get instructions from? Since we know how operations such as addition are implemented, we can now give them some sort of code. For example, we can agree that 45 means add two numbers, and 87 means divide them (of course, we should also specify exactly what).What CPU does is reads these numbers (code) and executes the corresponding instruction.
  6. In modern CPUs, what I just described is called Microcode, and microcode contains the most basic instructions. Microcode then is used to implement a more complicated set of instructions, which is called Machine code. Machine code is also numbers, it's just that the instructions are somewhat more complicated. Just as an imaginary example, let's say the machine code instruction is 76 2 3 4. It could mean "add together two numbers (opcode 76) from memory in positions 2 and 3, and write the result into position 4. Its implementation in microcode contains much simpler, atomic commands such as "retrieve number from position 2". Then the CPU executes them.
  7. Now that I mentioned memory. Memory is easier to understand - it just contains a lot of these 0s and 1s which can be changed. And it looks like nothing exciting, too:

    In almost all existing computer architectures (thanks to the guy named Von Neumann), the instruction code we discussed above is stored in memory, just like any other data. The instructions that I mentioned before (76 2 3 4) would also be stored in memory. To turn on the computer (CPU), you have to point it to some location in memory with instructions and say - Go! It will read instructions one by one and execute them in the manner I described above.
  8. Of course, since computers understand only electrical current or lack thereof (1s and 0s), all data including those instruction numbers is stored in Binary numeral system. Binary system is actually quite easy to understand. We're usingDecimal system, because we have 10 fingers. Each number can be one of 10 possible digits: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9. There's nothing special about ten. You can imagine some aliens with 8 fingers, could use a numeral system with only eight digits: 0, 1, 2, 3, 4, 5, 6, 7. 
    I use Octal (8) numeral system!

    You can think of binary as a numeral system which some very unfortunate ET with only two fingers would use. Here's an example of how to convert from binary to decimal:
  9. Phew! Now we're getting somewhere. But we're not nearly done yet. You see, writing numbers even in decimal system is very, very inconvenient and error prone. So, the first thing that appears is Assembly language. Assembly language is just mnemonic representation of machine code. For example, our favorite instruction 76 2 3 4, could be represented as something like:

            ADD [2], [3] -> [4]        (not real assembly code)
  10. The first Assembler (the program that translates assembly language into machine code) of course, had to be written in pure code (numbers). But it's relatively easy, because assembly commands map almost 1:1 to machine code.
  11. OK, now it's a little better, but assembly language is still way, way too verbose. Even simple programs, such as read user input, add 1 to it, and print it back contain a lot of commands in assembly language. It's very low level and lacks higher abstractions.
  12. Enter Programming languages. They are much more high level, and you can express complicated stuff very succinctly compared to assembly languages. You could write something like that:

       R = 2.0
       print "Square of circle with radius %f is %f" % (R, 3.14*R*R)

    This translates into a lot of commands in assembly language, which is exactly what a Compiler does. Compiler takes a program in a relatively high abstraction language like the example above, and converts it into a program in assembly language (in actuality, often times directly into machine code, but hey). The very first compiler, of course, had to be written in assembly language. But once you have your first version working, you can write future versions of your compiler in the same language it compiles from. After all, a compiler is just like any other computer program - it translates input into output.
  13. So now you have a compiler. And you can write programs and compile them into machine code. The end result is an Executable file. Remember we were talking about how machine code is just numbers in memory? So you have these numbers on disk somewhere in a file. To run your program, the computer loads this file in memory, points the CPU to the beginning of the program and says:Go!
  14. The last term you want to know to have a rough understanding of computer architecture is Operating system. The operating system is basically a program that starts when your computer starts, and it manages even more complicated concepts (such as disk, file, your monitor, your keyboard and your mouse, etc.) so that every program you write doesn't have to implement them over and over again. Instead of knowing how to talk to a keyboard, for example, a program just asks the operating system, say, for the last key you pressed, and the operating system takes over details of communicating with the keyboard (or any other hardware for that matter).

    Three most popular desktop operating systems

    Mobile operating systems

    It is the operating system that introduces such concepts as File and Folder. It is the operating system that loads your program from the executable file into memory, points the CPU to the beginning of it and says: Go!

Congratulations! Now you have a rough understanding of computer architecture!

Source : Quora
 eBay Ad:
  Let's Take A Look at  Online Mega Store;
ebay    ebay   ebay

Read More

Wednesday, 30 January 2013

How Malloc is Implemented ?

Malloc is require to do 2 Things

1.   Request more Virtual Address space from The Kernel if needed.--  

      It is operating system dependent,but on Linux and probably most Unixes
      the system call is  "sys_brk" which adjusts the size of a process's data segment.
      Most mallocs will do this in the same way. 

2.  To find enough Contiguous space in the Virtual Address Segment to return to
     the calling thread.

     It is Completely implementation dependent,Linux malloc, tcmalloc and jemalloc
     (amongst others) will have potentially entirely different approaches.
     These will trade off speed of allocation against the amount of fragmentation
     (and therefore unusable address space).

 eBay Ad:
  Let's Take A Look at  Online Mega Store;  ebay
Read More

Thursday, 24 January 2013

What Developers Think ... ???

Mad shit from movies:
  • You can't zoom in on photos beyond their actual resolution
  • We're not all fat
  • We're not all fat lazy geniuses
  • We ACTUALLY DO know how to talk in human, non-techie language... our jobs depend on it!
  • Computers don't make high pitched beeps and chirps when displaying data.
  • If they did, that would be the first setting disabled by any developer
  • Programmers are not electrical engineers... most don't own a soldering iron.
  • I have no idea how to hack. Neither do my colleagues.

Developers in your workplace:
  • We are not a necessary evil. 
  • Don't tell us what you think the solution is, give us the symptoms of the problem or requirement... you'll get a lot further much, much quicker
  • Code-freeze means: that bug is staying, so live with it.
  • I can see that you deleted the record. There is an audit trail!! Stop trying to blame my code and man up!
  • I genuinely do not know how long it will take until I look at it properly - this is not a lazy stalling tactic
  • If it gives unwanted results after passing UAT, its YOUR FAULT!
  • Non-techie management should never pick platforms. Ever. Every time... every bloody time they get pitched a bunch of rubbish by guys with big smiles in sharp suits with a shiny box of promises. They then make an executive decision and a million dollars disappears along with what remains of my work place happiness!
  • Agile/Scrum means: If you don't turn up to stand up meetings your work will not get done. Your fault.
  • We're more creative than your marketing department.

Developers in real life:
  • Yes, I can develop web sites... but no, I won't do it for the contents of your penny jar, so don't ask as refusal may offend.
  • I don't know specifically why your home computer is slow/broken/won't print/can't get online... it could be any one of a thousand million things. I'm a programmer, go talk to an infrastructure guy. Look: there's one over there hiding behind the curtains!
  • I don't care about your daughter/brother/aunt/long-lost-friend who "works with computers"
  • Don't glaze over because I said "Database" when you asked me the question

 eBay Ad:
  Let's Take A Look at  Online Mega Store; ebay
Read More