Linux內核分析06

進程的描述和進程的創建

一,進程的描述

進程控制塊PCB——task_struct (進程描述符),為了管理進程,內核必須對每個進程進行清晰的描述,進程描述符提供了內核所需了解的進程信息。

struct task_struct數據結構很龐大,進程的標示pid。

Linux進程的狀態與操作系統原理中的描述的進程狀態有所不同,task_running代表就緒和運行兩種狀態,取決于它是否獲得CPU的控制權

在這個龐大的數據結構里,所有進程鏈表struct list_head tasks,一個雙向鏈表

程序創建的進程具有父子關系,在進程調度中會用到,進程描述符中會有幾個域用來表示這樣的關系。

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

二,進程的創建

fork、vfork和clone三個系統調用都可以創建一個新進程,而且都是通過調用do_fork來實現進程的創建。 ? ?

fork在父進程和子進程之間各返回一次。

fork出的子進程從哪里開始執行? fork的進程給了一個系統調用,和傳統系統調用創建進程過程時不同。ret_from_fork

?

p指向的是ret_from_fork,所以是從這里開始執行的。
復制內核堆棧的時候是復制的pt_regs,即只復制了SAVE_ALL相關的那一部分,即系統調用壓棧的那一部分。
pt_regs里面內容有:
Entry(ret_from_fork):
最終會跳轉到syscall_exit,這之前的內核堆棧狀態和syscall_call的一致,然后返回用戶態,變成子進程的用戶態。

?

創建新進程通過復制已有進程來實現,子進程的許多數據結構需要修改,需要一個新的內核堆棧,該內核堆棧一部分也是從父進程復制過來的,以為需要返回進程。

子進程的fork返回0,因為“childregs->ax?=?0;?”。

系統調用內核處理函數:sys_fork,sys_clone,sys_vfork

復制的內核堆棧時只復制了內核堆棧最棧底的部分,例如:SAVE_ALL,int指令等。

使用gdb跟蹤創建新進程的過程

各種函數:

?

進程創建的分析

  1. 復制一個PCB——task_struct
  2. 要給新進程分配一個新的內核堆棧

  3.要修改復制過來的進程數據,比如pid、進程鏈表等,見copy_process內部。

系統調用內核處理函數sys_fork,sys_vfrok,sys_clone,其實最終執行的都是do_fork

do_fork里有:

三,心得

在Linux內核的分析里,線程被視作一種特殊的進程,和一般的操作系統里不同,進程的創建和調度都是關鍵的動作。

轉載于:https://www.cnblogs.com/KG35/p/5329850.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/255673.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/255673.shtml
英文地址,請注明出處:http://en.pswp.cn/news/255673.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【pyqt5學習】——pyqt5中.qrc資源文件的創建與編寫

目錄 一、說明 二、安裝pyqt5以及相關工具(pyqt5、pyuic、pqrcc) 三、創建.ui文件 1、選中文件右鍵-external-pyqt5 打開GUI設計界面 2、創建一個界面(內含四個等大label框) 3、CTRLS保存 4、找到ui文件,右鍵--e…

zabbix3.0.4通過jmx監控tomcat

jdk下載頁面http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.htmlhttp://download.oracle.com/otn-pub/java/jdk/8u91-b14/jdk-8u91-linux-x64.rpm?AuthParam1462948138_871b75d4b1dd7155e8cbe4f23e5cd2cd腳本[rootNFS-WEB1 latest]# vim /e…

C#學習筆記——25個經典問題

1.靜態成員和非靜態成員的區別? 2.const 和 static readonly 區別? 3.extern 是什么意思? 4.abstract 是什么意思? 5.internal 修飾符起什么作用? 6.sealed 修飾符是干什么的? 7.override 和 o…

PHP的學習--RSA加密解密

PHP服務端與客戶端交互或者提供開放API時,通常需要對敏感的數據進行加密,這時候rsa非對稱加密就能派上用處了。 舉個通俗易懂的例子,假設我們再登錄一個網站,發送賬號和密碼,請求被攔截了。 密碼沒加密,那攻…

Swift學習

1、Swift網址 http://swiftdoc.org/ 2、 https://github.com/ipader/SwiftGuide 轉載于:https://www.cnblogs.com/superbobo/p/5329876.html

【pyqt5學習】——最新版:配置external tools(designer、pyuic、pqrcc)

目錄 1、pip install PyQt5 2、pip install pyqt5-tools 3、file-settings-tools-external tool 點擊加號定義工具名字,名字隨意便于區分即可 雙擊每一個工具名字,配置路徑(注意每一個exe的路徑) designer.exe pyuic.exe py…

Linux中vi命令詳解

最近vi用的多,很多技巧不知道,備注一份, vi編輯器是所有Unix及Linux系統下標準的編輯器,它的強大不遜色于任何最新的文本編輯器,這里只是簡單地介紹一下它的用法和一小部分指令。由于 對Unix及Linux系統的任何版本&…

C# 屬性和字段

以下的文章是摘錄的,作者已經不詳了。之所以摘錄,是因為這個概念很重要特別對于VFP程序員來說,這里構造屬性就與vfp的方法完全不同。c#的屬性融合了vfp的addproperty() 和屬性的access method和assign method 。不一而足使用屬性&#xff0c…

SEO優化---學會建立高轉化率的網站關鍵詞庫

想要優化好一個網站,行業的分析,以及關鍵詞的挖掘是必要的,有一定的關鍵詞排名了,但是轉化率和流量方面卻很不理想這種情況大部分是只注重了有指數的關鍵詞排名,而忽略了長尾關鍵詞和一些沒有指數但是可以帶來巨大流量的關鍵詞。 網站大部分的…

Monkey腳本編寫

腳本優勢:簡單、快捷、不需要借助任何工具,可以做簡單的性能測試 腳本缺點:只能簡單實現坐標、按鍵等基本操作,無邏輯性 腳本格式: 腳本API: 例子: 打開瀏覽器,輸入WWW.jikexueyuan.…

C#通過DllImport引入dll中的C++非托管類

首先從msdn了解到,DllImport是用來 將特性化方法由非托管動態鏈接庫 (DLL) 作為靜態入口點公開。 從以上語句我們可以理解出三點:1.C編寫的非托管dll可以通過DllImport引入到C#中;2.引入到C#中的只能是C方法(或者說函數&#xff0…

USB 設備類協議入門【轉】

本文轉載自:http://www.cnblogs.com/xidongs/archive/2011/09/26/2191616.html 一、應用場合USB HID類是比較大的一個類,HID類設備屬于人機交互操作的設備。用于控制計算機操作的一些方面,如USB鼠標,USB鍵盤,USB游戲操…

lucene之Field屬性的解釋

Field類 數據類型 Tokenized是否分詞 Indexed 是否索引 Stored 是否存儲 說明 StringField(FieldName, FieldValue,Store.YES)) 字符串 N Y Y或N 這個Field用來構建一個字符串Field,但是不會進行分析,會將整個串存儲在索引中,比如…

【機器視覺】——焦距計算物體實際尺寸計算

目錄 1.基本概念 2.像素尺寸(piex)轉為實際尺寸(mm) 3.焦距計算

Tableview中Dynamic Prototypes動態表的使用

Tableview時IOS中應用非常廣泛的控件,當需要動態的添加多條不同的數據時,需要用動態表來實現,下面給出一個小例子,適用于不確定Section的數目,并且每個Section中的行數也不同的情況,適合新手。首先&#xf…

c# - 聲明事件

1 事件是屬于一個特定的類的,其本質是只能在此類中調用的委托。 從面向對象的角度出發,事件是對象對某個消息的響應,因此其聲明必然只能在類的級別出現,且不可用static修飾。 2 事件其實和屬性差不多,是一種特殊的方法…

appium 環境搭建 java

1 安裝node.js 1.1 安裝node.js http://nodejs.cn/download/ 1.2、下載后直接點擊exe,按照提示一步一步的安裝 1.3 安裝成功后,運行cmd,輸入node –v,如果安裝成功,會輸出如下版本信息 2 eclipse android開發環境搭建 2.1 用eclip…

【數據庫bug修復】——Authentication plugin ‘caching_sha2_password‘ is not supported

目錄 原因 連接數據庫的時候出現這個問題的解決方法 創建數據庫連接池時解決方法 原因 使用客戶端鏈接mysql數據庫,如果數據庫版本高于8.0,可能出現以上問題,因為8.0以前默認使用mysql_native_password身份驗證機制,8.0以后使用…

javascript引用bug帶來的繼承

<!DOCTYPE html> <html> <head lang"en"><meta charset"UTF-8"><title>繼承</title> </head> <body> <script>function A(){this.abc 12;}A.prototype.show function(){alert(this.abc);}functio…

阿里巴巴Maven倉庫配置

<mirror><id>nexus-aliyun</id><mirrorOf>*</mirrorOf><name>Nexus aliyun</name><url>http://maven.aliyun.com/nexus/content/groups/public</url></mirror> 轉載于:https://www.cnblogs.com/simpleJokerKing/p…