日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

20135302魏静静——linux课程第六周实验及总结

發布時間:2024/1/17 linux 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 20135302魏静静——linux课程第六周实验及总结 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

linux課程第六周實驗及總結

實驗及學習總結

1.進程描述符task_struct數據結構?

  • 進程的作用:

    將信號、進程間通信、內存管理和文件系統聯系起來

  • 操作系統的三大功能:

    進程管理、內存管理、文件系統

  • 內核通過唯一的進程標識PID來區別每個進程

  • Linux為每個進程分配一個8KB大小的內存區域,用于存放該進程兩個不同的數據結構:Thread_info和進程的內核堆棧
  • task_struct結構的大體框架:

  • 進程描述符中的state域描述了進程的當前狀態:
    • task_running
    • task_interruprtion
    • task_uninterruption
    • task_traced
    • task_stopped

2.進程的創建

fork、vfork和clone三個系統調用都可以創建一個新進程,而且都是通過調用do_fork來實現進程的創建
1號進程是所有用戶態進程的祖先,0號進程是所有內核線程的祖先
  • 進程的創建大致步驟:
  • 調用dup_task_struct()為新進程分配內核棧,task_struct等,其中的內容與父進程相同。
  • check新進程(進程數目是否超出上限等)
  • 清理新進程的信息(比如PID置0等),使之與父進程區別開。
  • 新進程狀態置為 TASK_UNINTERRUPTIBLE
  • 更新task_struct的flags成員。
  • 調用alloc_pid()為新進程分配一個有效的PID
  • 根據clone()的參數標志,拷貝或共享相應的信息
  • 做一些掃尾工作并返回新進程指針
    • 從堆棧來看:
???????????
  • ?那么上圖中的schedule_tuil做了什么呢?我們可以從實驗中看到:

???????

  • 建一個新進程在內核中的執行過程
  • 復制一個PCB——task_struct,見copy_process內部
    • err?=?arch_dup_task_struct(tsk,?orig);

  • 給新進程分配一個新的內核堆棧

    • ti?=?alloc_thread_info_node(tsk,?node);

    • tsk->stack?=?ti;

    • setup_thread_stack(tsk,?orig);?//這里只是復制thread_info,而非復制內核堆棧

  • 從用戶態的代碼看fork():函數返回了兩次,即在父子進程中各返回一次

      • *childregs?=?*current_pt_regs();?//復制內核堆
      • childregs->ax?=?0;?//為什么子進程的fork返回0,這里就是原因!
      • p->thread.sp?=?(unsigned?long)?childregs;?//調度到子進程時的內核棧頂
      • p->thread.ip?=?(unsigned?long)?ret_from_fork;?//調度到子進程時的第一條指令地址

?

轉載于:https://www.cnblogs.com/20135302wei/p/5329518.html

總結

以上是生活随笔為你收集整理的20135302魏静静——linux课程第六周实验及总结的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。