Skip to main content

Kernel Data Structures

Task Structure

The fundamental entity of any operating system is the task or a process. The task structure is defined in the linux/sched.h and it is the important data structure and following are some of its parameters.
struct task_struct {
volatile long state; //determines the current state of the process like unrunnable, runnable and stopped
unsigned long flags; // various flags for accounting purpose like PF_STARTIN, PF_MEMALLOC

unsigned long ptrace; // process is being monitored by other process.

int sigpending; //define when the signals must be handed over to this process

mm_segment_t addr_limit;

struct exec_domain *exec_domain; //domain other than x86

long need_resched; //flag indicates that scheduling must be executed

int lock_depth; //structure is protected before simulataneous access can take place

long counter; //dynamic priority of a process

long nice; //static priority of a process

unsigned long policy; //scheduling policy like SCHED_RR, SCHED_FIFO, SCHED_OTHER

unsigned long rt_priority;

Process Relations

This data structure describes the relation between processes lilke child process, parent process, etc.
struct task_struct *p_opptr; //original parent process
struct task_struct *p_pptr; //Parent Process
struct task_struct *p_cptr; //child process
struct task_struct *p_ysptr; //youngest sibling process
struct task_struct *p_osptr; //old sibling process
the following diagram depicts the relationship between the process.

Process ID

Every process has its own process ID called pid defined as follows:
pid_t pid, pgrp, session, tgid; //pgrp – process group, session in which the process runs and tgid is thread group id

int leader; //there will be a leader process among the process

apart from the above, there are two other parameters like uid and gid referred namely as user identification and group identification, which enables to create the access right.


Times are measured in ticks. usually the timing signals are generated by the hardware timer every10ms which is captured by the timer interrupt.
there are different timing parameters are specified like
long per_cpu_utime[NO OF CPUS]; //user mode
long per_cpu_stime[NO OF CPUS]; //system mode
struct tms times; //the timing values are added for all the child processes and other processes
unsigned long start_time; //time at which the process was generated.


Files and inodes represent the file structures.
Files defines the attributes of file like mode of operation, position of the cursor, flags, reference count, directory entry, etc
inodes defines the information about the files like owner of the file, device in which the file is located, access rights of the file, size of the file, last access time, last modification time, etc
struct file {
mode_t f_mode; // mode of operation like read, write, append, etc
loff_t f_pos; //position of the read/write cursor
atomic_t f_count; //reference count like how many times the file has been opened by the system call
unsigned int f_flags; //access control
struct dentry *fs_dentry;// file descriptor
struct inode {
kdev_t i_dev:// device id in which the file is located
unsigned long i_ino;//file within device
umode_t i_mode; //mode of operation
uid_t i_uid; //user id which is the owner of the file
gid_t i_gid; //group id, the file can be accessed by a group
off_t i_size; //size of the file in bytes
time_t i_mtime; //last modification time
time_t i_atime; //last accessed time


Popular posts from this blog

Installing ns-3.34 in Ubuntu 20.04

This post shows how to install ns 3.34 in Ubuntu 20.04 LTS Prerequisites: Fresh installation of Ubuntu Version 20.04 LTS  ns3.34 can be downloaded from here Follow the video link for complete step by step instructions on the installation.  This version fixes the compilation issues of (bug in ns3.33)  Issue the following commands after opening a terminal  $ sudo apt update $ sudo apt install g++ python3 python3-dev python-dev pkg-config sqlite3 python3-setuptools git qt5-default gir1.2-goocanvas-2.0 python3-gi python3-gi-cairo python3-pygraphviz gir1.2-gtk-3.0 ipython3 openmpi-bin openmpi-common openmpi-doc libopenmpi-dev autoconf cvs bzr unrar openmpi-bin openmpi-common openmpi-doc libopenmpi-dev tcpdump wireshark libxml2 libxml2-dev Unzip or untar the ns-allinone-3.34.tar.bz2 in the home folder (in my case its /home/pradeepkumar) $ cd ns-allinone-3.34/ $ ./ --enable-examples --enable-tests  Once the installation is completed, you may get an output show

Installation of ns3 in Windows 10 and Windows 11 OS using WSL (Windows Subsystem for Linux)

This post shows how to install ns-3.33 in Windows 10 through WSL (Windows Subsystem for Linux) This posts works for Windows 11 also (I have tested it on a Windows 11 ISO and it works the Same way as mentioned in the following post.) This post will work for ns-3.3x version. Prerequisites : Install Windows Subsystem for Linux with GUI: Please refer the following video  System Information: OS used: Windows 10 and WSL (Ubuntu 20.04) GUI: XServer for Windows NS3 Version: ns-3.33 See the following complete video on how to install ns3 in Windows 10 Step 0 : Open XLaunch Step 1 :  Open WSL using PowerShell and open it as Administrator Command:/  wsl $ xfce4-session The GUI of Ubuntu Opens within Windows 10 OS. Step 2 : Download ns3 from website through Mozilla Firefox browser Step 3: Open a Terminal  $ sudo apt update $ sudo apt install build-essential autoconf automake libxmu-dev python3-pygraphviz cvs mercurial bzr git cmake p7zip-full python3-matplotlib python-tk python3-dev qt5-q

Installing NS-3.32 in Ubuntu 20.04

This is about installing ns version 3.32 in Ubuntu 20.04 LTS. #ns3 #ns3 .32 #networksimulation The commands used in the video are given here. $] sudo apt update $] sudo apt install build-essential autoconf automake libxmu-dev python3-pygraphviz cvs mercurial bzr git cmake p7zip-full python3-matplotlib python-tk python3-dev qt5-qmake qt5-default gnuplot-x11 wireshark Download the ns-allinone-3.32.tar.bz2 package from and copy it to /home/ folder See the full video for detailed instructions Extract it either in GUI or using command $] tar jxvf ns-allinone-3.32.tar.bz2 $] cd ns-allinone-3.32/ $] ./ --enable-examples --enable-tests The above command will take some time to install all the packages  You can see the output as shown below ns3 To check whether ns3 installed successfully, use the following commands. $] cd ns-3.32/ $] ./waf --run hello-simulator You should get the output as Hello Simulator $] ./waf --run first This is the example from the ns-3.32/exa