understanding how threads are created inside linux operating system












0















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:




  1. When and how is this TCB and thread stack created?


  2. 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?


  3. 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.


  4. 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?


  5. 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?











share|improve this question





























    0















    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:




    1. When and how is this TCB and thread stack created?


    2. 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?


    3. 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.


    4. 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?


    5. 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?











    share|improve this question



























      0












      0








      0








      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:




      1. When and how is this TCB and thread stack created?


      2. 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?


      3. 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.


      4. 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?


      5. 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?











      share|improve this question
















      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:




      1. When and how is this TCB and thread stack created?


      2. 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?


      3. 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.


      4. 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?


      5. 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






      share|improve this question















      share|improve this question













      share|improve this question




      share|improve this question








      edited Feb 18 at 11:07









      Kusalananda

      134k17255418




      134k17255418










      asked Feb 18 at 11:02









      michaelmichael

      32




      32






















          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
          });


          }
          });














          draft saved

          draft discarded


















          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
















          draft saved

          draft discarded




















































          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.




          draft saved


          draft discarded














          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





















































          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







          Popular posts from this blog

          How to make a Squid Proxy server?

          第一次世界大戦

          Touch on Surface Book