Monday 24 October 2016

// // Leave a Comment

How c program runs in os?

Today we are going do discuss when you are going to run any user application or any program in Linux operating system. Here we are considering c program.
in the last post we seen how we are executing c program in Linux.
Now we are going to discuss how c program handled by operating system.
before starting with it. we need to go through some basic concepts of OS and kernel.
Basically there are two spaces in system
1) User space:- Where we are going to run user application. Most of the user program runs in this space.
2) Kernel space:- In the kernel space is reserved for kernel programs and device drivers.
In kernel space all file management , memory management and scheduling programs are executed.

In the following figure you can able to see the clear difference between user space and kernel space.
when you are going to run any user program its runs in user space.
Image result for user space and kernel space in linux
In the figure there is linkage present between user space and kernel space and that is system calls.
Now we will see what is use of system call in simple way.
user processes can directly communicated to kernel or access hardware due to security purpose.
so they communicated through the system calls.
you can say system call is systematic way for user process to request kernel service such as hard disk access or any other device access, creation of any new process or process scheduling.....
  In the Linux operating system the system calls are handled by POSIX libraries.

lets discuss briefly about POSIX.
POSIX is Portable Operating System Interface.
POSIX defines Application Programming Interface(API) and some command shell and utilities.
lets understands in easy way lets consider I want to develop application for Linux operating system so I have to follow posix standard so my application will able to communicate with kernel.

You can get detailed function set of POSIX here.
you will understand this concept after this example.

Let us consider you written down simple C program. Now in the c program you used c system function  printf("hello world") which is function of c.

So when you are going to execute c program you have to tell to the OS that you have to display hello world on terminal but c program is running in user space so c program dont have privilege to access the output window. only kernel can access that so C program requests to POSIX and the POSIX carry forward that request to kernel.
and then we are able to see hello world message on terminal.

printf()----> write()---->kernel code
C program Function----->POSIX fuction------->Kernel code for write()

to see how the system call works:
run the c program to create temporary file for the same refer previous post.
that is $gcc -save-temps -o hi.c
now open the file hi.s
that is assembly code.
the below code is for hi.s

.global _start

     

        .text
_start
_start:        # write(1, message, 13)        mov     $1, %rax                # system call 1 is write        mov     $1, %rdi                # file handle 1 is stdout        mov     $message, %rsi          # address of string to output        mov     $13, %rdx               # number of bytes        syscall                         # invoke operating system to do the write
        # exit(0)        mov     $60, %rax               # system call 60 is exit        xor     %rdi, %rdi              # we want return code 0        syscall                         # invoke operating system to exitmessage:        .ascii  "hi h r u"

In this you can understand from the comments.
This way you can able to see how c program runs by OS.








0 comments :

Post a Comment