As I know linux kernel threads do not have their own address space as compare to user space threads/process. Kernel threads do not context switch into user space but kernel threads are schedulable and preemptable. So my question is that if the kernel thread do not have the address space then how the switching/preemption of kernel thread works?
How the scheduling or preemption of Linux kernel thread works?
1.5k Views Asked by Ritesh At
1
There are 1 best solutions below
Related Questions in LINUX
- How do I recursively find and replace only in files named index.php on Linux webserver?
- passing text with \n as one argument in shell
- kernel module does not print packet info
- How to send ESC/POS commands to thermal printer in Linux
- (x64 Nasm) Writeline function on Linux
- How do I set the Hive user to something different than the Spark user from within a Spark program?
- Default priority of thread with SCHED_FIFO
- Calling a python function with options from shell script
- How to split a directory into parts without compressing or archiving?
- Cross compile simple standard C program on Linux for Mac
- How to offload NAPI poll function to workqueue
- python netifaces - How to get currently used network interface
- Unexpected output from function
- mingw-64 conflicting declarations when cross-compiling
- Different behavior of async with Visual Studio 2013(Windows8.1) and GCC 4.9(Ubuntu14.10)
Related Questions in MULTITHREADING
- new thread blocks main thread
- WPF MessageBox Cancel checkbox check
- How to avoid concurrent access to a resource?
- run oncomplete event in async
- Threading Segfault when reading members
- Function timeouts in C and thread
- How are multiple requests to Task.Run handled from a resource management standpoint?
- Acumatica perfomance with threads
- Wait and Notify in Java threads for a given interval
- Different behavior of async with Visual Studio 2013(Windows8.1) and GCC 4.9(Ubuntu14.10)
- How to return blocking queue to the right object?
- background thread using Task.Run
- deletion and cleanup of worker thread in Qt crashes
- Pipeline-like operation using TChan
- implementing in app purchase on android
Related Questions in KERNEL
- Are Berkeley Packet Filter opcode values implementation defined?
- Raspberry PI Compute Module - SPI1
- Is there any way to get a lru list in Linux kernel?
- Android Studio - HAX kernel Module not installed
- How to determine system value for _POSIX_PATH_MAX
- Different privileges in kernel module execution
- Buildroot custom kernel under 1MB
- Add/remove process from kernel runqueue
- Is it possible to limit data traffic in kernel USB drivers?
- "Segmentation fault" when `rmmod` or `modprobe -r`
- Intercept ELF loader in linux kernel: fs/binfmt_elf.c file via loadable kernel module
- Best way to handle ERESTARTSYS in kthread?
- Purpose and usage of firmware packages on Linux
- In linux every process is given a 4GB of virtual address space considering a 32-bit architecture
- How to make a scanf() type function in a 32bit os in c?
Related Questions in SCHEDULING
- How do I know the last sched time of a process
- rm scheduling - calculation
- Scheduling multiple instance of a single java process
- How to Schedule a job run at multiple time intervals
- What's the purpose of `on_rq` field in `task_struct`?
- How to schedule job in Jenkins at particular timings
- Run code at a certain time
- AJAX disabledDates Fullcalendar Machines/Users
- Cron like scheduling using Apache Oozie
- SQL Server grouping interval
- Why is response time important in CPU scheduling?
- What are the differences between "recursion", "a non-terminating procedure that happens to refer to itself", and "repeated scheduling"?
- Thread creation using pthread_create with SCHED_RR scheduling fails
- cpu scheduling SRTF
- Scheduled scaling of Azure VMSS (via Runbook)
Related Questions in PREEMPTION
- Meaning of atomicity of POSIX pipe write
- why spin_lock_irqsave needs to disable preemption on multiprocessor
- RTOS : Disabling the task preemption
- Why in linux kernel radix_tree_preload returns with preemption disabled
- How does linux detect a process which is hogging the CPU and should be removed rather than preempting?
- Why disabling interrupts disables kernel preemption and how spin lock disables preemption
- How to use gurobipy to implement a job scheduling with SRT preemption?
- Forced preemption in Linux kernel
- Process non-preemptable on Linux (2.6.32)
- Snakemake: Job preemption can interrupt running jobs on clusters, how to make sure that the task is not considered as failed?
- How does a scheduler regain control when wanted?
- Why linux disables kernel preemption after the kernel code holds a spinlock?
- forced preemption on windows (occurs or not here)
- mount and loop0 preempting user processes for long time
- attach preempt_notifier to user process in linux
Trending Questions
- UIImageView Frame Doesn't Reflect Constraints
- Is it possible to use adb commands to click on a view by finding its ID?
- How to create a new web character symbol recognizable by html/javascript?
- Why isn't my CSS3 animation smooth in Google Chrome (but very smooth on other browsers)?
- Heap Gives Page Fault
- Connect ffmpeg to Visual Studio 2008
- Both Object- and ValueAnimator jumps when Duration is set above API LvL 24
- How to avoid default initialization of objects in std::vector?
- second argument of the command line arguments in a format other than char** argv or char* argv[]
- How to improve efficiency of algorithm which generates next lexicographic permutation?
- Navigating to the another actvity app getting crash in android
- How to read the particular message format in android and store in sqlite database?
- Resetting inventory status after order is cancelled
- Efficiently compute powers of X in SSE/AVX
- Insert into an external database using ajax and php : POST 500 (Internal Server Error)
Popular Questions
- How do I undo the most recent local commits in Git?
- How can I remove a specific item from an array in JavaScript?
- How do I delete a Git branch locally and remotely?
- Find all files containing a specific text (string) on Linux?
- How do I revert a Git repository to a previous commit?
- How do I create an HTML button that acts like a link?
- How do I check out a remote Git branch?
- How do I force "git pull" to overwrite local files?
- How do I list all files of a directory?
- How to check whether a string contains a substring in JavaScript?
- How do I redirect to another webpage?
- How can I iterate over rows in a Pandas DataFrame?
- How do I convert a String to an int in Java?
- Does Python have a string 'contains' substring method?
- How do I check if a string contains a specific word?
Kernel threads basically executes a function. They are created using the
kernel_thread()function which receives the address of the function to execute, the arguments to that function and some clone flags as arguments.This function essentially invokes a common
do_fork()passing it the address of the Kernel Mode stack wherecopy_thread()will find the initial values of the CPU registers for the kernel thread.Basically
kernel_thread()builds the stack in a way that:ebxandedxregister will be set bycopy_thread()to the valuesfnandargeipwill be set to a small routine that will load the arguments andcall fnThis way the new kernel thread starts executing
fn(arg).As you can see, a kernel thread knows about what code to execute by the address of
fn. This function normally is already defined somewhere inside the kernel, by settingeipto point there, this way the kernel thread knows the instructions to execute. No need fortext segmentbecause there's no need to map an executable file to a memory region.