understanding how threads are created inside linux operating system
I am currently studying on Linux operating system.
My problem is with threads inside Linux.
I know that every process has it own PCB of size 1KB inside the kernel and an additional 7KB stack space inside the kernel. In the PCB there are all the relevant data fields of this process i.e. FDT, Signal handlers Table...
Now, When I am doing fork(), I am creating a new PCB and kernel stack for the new process and copying to it everything that is in the father's PCB (that should be copied).
My problem with understanding starts when I am creating threads, I know that each thread has it own TCB and it's own kernel stack and everything else is shared between them.
My questions are:
When and how is this TCB and thread stack created?
Where is this TCB located? Is it also a part of the 1KB process PCB like the threads stacks are part of the process kernel stack?
How is the
clone()system call included when you creating thread? I know that it should receive entry function, user stack of the new thread, flags and additional arguments, therefore, it should be invoked after the TCB is already created.When the scheduler gets the next task (task_struct == next task PCB) to run from the run queue how does he know which thread should be running from this process?
And finally, are the run queues can be shared between the processors, meaning can every processor access to all of the run queues or they are unique per processor? And if so, how is the parallel method is working within many processors system?
linux thread
add a comment |
I am currently studying on Linux operating system.
My problem is with threads inside Linux.
I know that every process has it own PCB of size 1KB inside the kernel and an additional 7KB stack space inside the kernel. In the PCB there are all the relevant data fields of this process i.e. FDT, Signal handlers Table...
Now, When I am doing fork(), I am creating a new PCB and kernel stack for the new process and copying to it everything that is in the father's PCB (that should be copied).
My problem with understanding starts when I am creating threads, I know that each thread has it own TCB and it's own kernel stack and everything else is shared between them.
My questions are:
When and how is this TCB and thread stack created?
Where is this TCB located? Is it also a part of the 1KB process PCB like the threads stacks are part of the process kernel stack?
How is the
clone()system call included when you creating thread? I know that it should receive entry function, user stack of the new thread, flags and additional arguments, therefore, it should be invoked after the TCB is already created.When the scheduler gets the next task (task_struct == next task PCB) to run from the run queue how does he know which thread should be running from this process?
And finally, are the run queues can be shared between the processors, meaning can every processor access to all of the run queues or they are unique per processor? And if so, how is the parallel method is working within many processors system?
linux thread
add a comment |
I am currently studying on Linux operating system.
My problem is with threads inside Linux.
I know that every process has it own PCB of size 1KB inside the kernel and an additional 7KB stack space inside the kernel. In the PCB there are all the relevant data fields of this process i.e. FDT, Signal handlers Table...
Now, When I am doing fork(), I am creating a new PCB and kernel stack for the new process and copying to it everything that is in the father's PCB (that should be copied).
My problem with understanding starts when I am creating threads, I know that each thread has it own TCB and it's own kernel stack and everything else is shared between them.
My questions are:
When and how is this TCB and thread stack created?
Where is this TCB located? Is it also a part of the 1KB process PCB like the threads stacks are part of the process kernel stack?
How is the
clone()system call included when you creating thread? I know that it should receive entry function, user stack of the new thread, flags and additional arguments, therefore, it should be invoked after the TCB is already created.When the scheduler gets the next task (task_struct == next task PCB) to run from the run queue how does he know which thread should be running from this process?
And finally, are the run queues can be shared between the processors, meaning can every processor access to all of the run queues or they are unique per processor? And if so, how is the parallel method is working within many processors system?
linux thread
I am currently studying on Linux operating system.
My problem is with threads inside Linux.
I know that every process has it own PCB of size 1KB inside the kernel and an additional 7KB stack space inside the kernel. In the PCB there are all the relevant data fields of this process i.e. FDT, Signal handlers Table...
Now, When I am doing fork(), I am creating a new PCB and kernel stack for the new process and copying to it everything that is in the father's PCB (that should be copied).
My problem with understanding starts when I am creating threads, I know that each thread has it own TCB and it's own kernel stack and everything else is shared between them.
My questions are:
When and how is this TCB and thread stack created?
Where is this TCB located? Is it also a part of the 1KB process PCB like the threads stacks are part of the process kernel stack?
How is the
clone()system call included when you creating thread? I know that it should receive entry function, user stack of the new thread, flags and additional arguments, therefore, it should be invoked after the TCB is already created.When the scheduler gets the next task (task_struct == next task PCB) to run from the run queue how does he know which thread should be running from this process?
And finally, are the run queues can be shared between the processors, meaning can every processor access to all of the run queues or they are unique per processor? And if so, how is the parallel method is working within many processors system?
linux thread
linux thread
edited Feb 18 at 11:07
Kusalananda
134k17255418
134k17255418
asked Feb 18 at 11:02
michaelmichael
32
32
add a comment |
add a comment |
0
active
oldest
votes
Your Answer
StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "106"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});
function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: false,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: null,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});
}
});
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2funix.stackexchange.com%2fquestions%2f501325%2funderstanding-how-threads-are-created-inside-linux-operating-system%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
0
active
oldest
votes
0
active
oldest
votes
active
oldest
votes
active
oldest
votes
Thanks for contributing an answer to Unix & Linux Stack Exchange!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2funix.stackexchange.com%2fquestions%2f501325%2funderstanding-how-threads-are-created-inside-linux-operating-system%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown