Linux os concepts internals applications in a nutshell


Article contents

Linux Operating System

Why Linux operating system?

Linux is the most commonly used open source operating system today. As an operating system, it sits underneath all of the other software, receiving requests from other software programs and relaying these requests to the computer's hardware.

In this article we will go through linux operating systems concepts and applications. You will get guidance with relevant theory and practical source code programs, illustrations to understand how linux is practically used in the system to implement project requirements.

Online courses related to this article


Course description

Learn to develop embedded systems, interfacing electronic peripherals through real time projects and get required practical skills for software jobs



Course description

Learn to develop software solutions for linux environment, implement requirements through real time projects and get required practical skills for software jobs

Hardware

Hardware basics.

An operating system works closely with the hardware system. The operating system acts as the interface between user and hardware. So in order to fully understand the Linux operating system, you need to understand the basics of the underlying hardware. At minimum a computer system consists of a CPU or microprocessor, the memory and a number of slots for the peripheral controllers.

CPU calculates, performs logical operations and manages data flows by reading instructions from memory and then executing them. CPU operates on binary data where each digit represents a power of 2. Generally numbers are represented by hexadecimal where each digit represents a power of 16. So 8 is written in binary as 0b1000 and in hex as 0x08. Similary 14 is written in binary as 0b1110 and in hex as 0x0E.

The CPU execution is driven by the system clock(e.g. 100MHz) which generates regular clock pulses to the processor and at each clock pulse, the cpu does some work. For example an instruction can be to read the contents of memory at location A into register B. So CPU executes one or more instruction every clock pulse. Registers are the CPU's internal storage, used for storing data and performing operations on it and can be 32 bit/64 bit wide.

Most CPUs have special purpose registers such as Program Counter which points to the next instruction to be executed, Stack pointer which helps in accessing, saving and restoring large amount of external read/write RAM for facilitating temporary storage of data, processor status to hold information like the current state of the processor(e.g. kernel mode and user mode).

Instructions have to be fetched from memory as they are executed. Read only memory(ROM) are used to store permanent data and RAM is used for temporary storage of data. System bus is divided into three logical functions, the address bus which specifies the memory locations (addresses) for the data transfers, the data bus((bidirectional and allows data to be read into the CPU and written from the CPU) which holds the data transfered and the control bus contains various lines used to route timing and control signals throughout the system. Peripherals are real devices, such as graphics cards or disks controlled by controller chips on the system board or on cards plugged into it.

Linux command line interface

Linux commands usage illustrations.

Linux is a unix-like operating system. In linux all commands are run using a terminal provided by the linux system. The linux terminal can be used to do all administrative tasks. The linux commands are broadly divided into File System Commands, Process Management Commands, File Permission Commands, Searching commands, System Info Commands, File Compression Commands, Networking Commands, Process Management commands. All these category of commands are illustrated by examples.

Process, thread in linux

A process in linux.

A process is an active program i.e. a program that is under execution. It is more than the program code as it includes the program counter, process stack, registers, program code etc. Compared to this, the program code is only the text section. All the practical aspects of how to create different types of processes, running the process and observing the process in the linux process list are illustrated

A thread in linux.

A thread is a lightweight process that can be managed independently by a scheduler. It improves the application performance using parallelism. A thread has to be created by a parent process. All the practical aspects of how to create threads, managing threads are illustrated here

Difference between process and thread

Following are the difference between a linux process and thread.

  • A process is a program under execution i.e an active program. A thread is a lightweight process that can be managed independently by a scheduler.
  • Processes require more time for context switching as they are more heavy. Threads require less time for context switching as they are lighter than processes.
  • Processes are totally independent and don’t share memory. A thread may share some memory with its peer threads.
  • Communication between processes requires more time than between threads. Communication between threads requires less time than between processes.
  • If a process gets blocked, remaining processes can continue execution. If a user level thread gets blocked, all of its peer threads also get blocked.
  • Processes require more resources than threads. Threads generally need less resources than processes.
  • Individual processes are independent of each other. Threads are parts of a process and so are dependent.
  • Processes have independent data and code segments. A thread shares the data segment, code segment, files etc. with its peer threads.
  • All the different processes are treated separately by the operating system. All user level peer threads are treated as a single task by the operating system.
  • Processes require more time for creation and termination. Threads require less time for creation and termination.
  • IPC, Signals, Pipes, Queues, Semaphores, Shared memory, Sockets

    What is IPC mechanism?

    In linux Inter Process Communication(IPC) is a mechanism that allows processes to communicate with each other and synchronize their activities with other processes. Linux supports a number of Inter-Process Communication (IPC) mechanisms such as signals, pipes, message queues, semaphores, shared memory.

    Signals

    Signals are used to signal asynchronous events to one or more processes. A linux signal could be generated by a keyboard interrupt or an error condition such as the process attempting to access a non-existent location in its virtual memory.

    Pipes

    A pipe is a form of re-direction and is used to send the output of one command program or process to another command program or process.

    Message queues

    Message queues allow one or more processes to write messages, which will be read by one or more reading processes.

    Semaphores

    Semaphore is a location in memory whose value can be tested and set by more than one process. The test and set operation is, so far as each process is concerned, uninterruptible or atomic; once started nothing can stop it. The result of the test and set operation is the addition of the current value of the semaphore and the set value, which can be positive or negative. Depending on the result of the test and set operation one process may have to sleep until the semphore's value is changed by another process. Semaphores can be used to implement critical regions, areas of critical code that only one process at a time should be executing.

    Shared memory

    Shared memory allows one or more processes to communicate via memory that appears in all of their virtual address spaces. The pages of the virtual memory is referenced by page table entries in each of the sharing processes' page tables. It does not have to be at the same address in all of the processes' virtual memory. As with all System V IPC objects, access to shared memory areas is controlled via keys and access rights checking. Once the memory is being shared, there are no checks on how the processes are using it. A real application project using shared memory is implemented

    IP Sockets

    A socket is one endpoint of a two-way communication link between two programs running on the network. Client and server communicate using IP sockets over a common port. Normally, a server runs on a specific computer and has a socket that is bound to a specific port number. The server just waits, listening to the socket for a client to make a connection request. The client knows the hostname of the machine on which the server is running and the port number on which the server is listening. Client makes a connection request to server using TCP/IP, server port and server accepts the connection request. Upon acceptance, the server gets a new socket bound to the same local port and starts communicating with the client. A real application project using Internet protocol sockets is implemented

    User space vs Kernel space

    User space applications.

    The system bus connects the CPU with the main memory and is separate from the buses connecting the CPU with the system's hardware peripherals. Collectively the memory space that the hardware peripherals exist in is known as I/O space. The CPU can access both the system space memory and the I/O space memory, whereas the controllers themselves can only access system memory indirectly and then only with the help of the CPU. For example floppy disk controllers will see the address space of its own registers, not the system memory. CPU will have separate instructions for accessing the memory and I/O space.

    A Linux system is basically divided in three major components: Linux File System (LFS), Shell and Kernel. Kernel is the core program which manages system hardware devices. Shell provides user interface to run the commands. File system organizes the data in systematic way. User space programs don't have direct access to the system main memory. They get access to the main memory indirectly using system calls.

    There are times when controllers need to read or write large amounts of data directly to or from system memory. For example when user data is being written to the hard disk. In this case, Direct Memory Access (DMA) controllers are used to allow hardware peripherals to directly access system memory but this access is under strict control and supervision of the CPU.

    Share


    Articles


     Linux Software

     C Programming

     Embedded Systems

     Python Programming



     Online certificate courses

     Test your skills:online tests

     C Programming

     Python Programming

     Linux Software

     Quantitative Aptitude

     Embedded System Software