淺談linux線程切換問題
處理器總處于以下狀態(tài)中的一種:
1、內(nèi)核態(tài),運行于進程上下文,內(nèi)核代表進程運行于內(nèi)核空間;
2、內(nèi)核態(tài),運行于中斷上下文,內(nèi)核代表硬件運行于內(nèi)核空間;
3、用戶態(tài),運行于用戶空間;
一個進程的上下文可以分為三個部分:用戶級上下文、寄存器上下文以及系統(tǒng)級上下文。
用戶級上下文: 正文、數(shù)據(jù)、用戶堆棧以及共享存儲區(qū);
寄存器上下文: 通用寄存器、程序寄存器(IP)、處理器狀態(tài)寄存器(EFLAGS)、棧指針(ESP);
系統(tǒng)級上下文: 進程控制塊task_struct、內(nèi)存管理信息(mm_struct、vm_area_struct、pgd、pte)、內(nèi)核棧。
當發(fā)生進程調(diào)度時,進行進程切換就是上下文切換(context switch).操作系統(tǒng)必須對上面提到的全部信息進行切換,新調(diào)度的進程才能運行。而系統(tǒng)調(diào)用進行的模式切換(mode switch)。模式切換與進程切換比較起來,容易很多,而且節(jié)省時間,因為模式切換最主要的任務只是切換進程寄存器上下文的切換。系統(tǒng)中的每一個進程都有自己的上下文。一個正在使用處理器運行的進程稱為當前進程(current)。當前進程因時間片用完或者因等待某個事件而阻塞時,進程調(diào)度需要把處理器的使用權從當前進程交給另一個進程,這個過程叫做進程切換。此時,被調(diào)用進程成為當前進程。在進程切換時系統(tǒng)要把當前進程的上下文保存在指定的內(nèi)存區(qū)域(該進程的任務狀態(tài)段TSS中),然后把下一個使用處理器運行的進程的上下文設置成當前進程的上下文。當一個進程經(jīng)過調(diào)度再次使用CPU運行時,系統(tǒng)要恢復該進程保存的上下文。所以,進程的切換也就是上下文切換。在系統(tǒng)內(nèi)核為用戶進程服務時,通常是進程通過系統(tǒng)調(diào)用執(zhí)行內(nèi)核代碼,這時進程的執(zhí)行狀態(tài)由用戶態(tài)轉換為內(nèi)核態(tài)。但是,此時內(nèi)核的運行是為用戶進程服務,也可以說內(nèi)核在代替當前進程執(zhí)行某種服務功能。在這種情況下,內(nèi)核的運行仍是進程運行的一部分,所以說這時內(nèi)核是運行在進程上下文中。內(nèi)核運行在進程上下文中時可以訪問和修改進程的系統(tǒng)數(shù)據(jù)。此外,若內(nèi)核運行在進程上下文中需要等待資源和設備時,系統(tǒng)可以阻塞當前進程。
Linux下的線程實質(zhì)上是輕量級進程(light weighted process),線程生成時會生成對應的進程控制結構,只是該結構與父線程的進程控制結構共享了同一個進程內(nèi)存空間。 同時新線程的進程控制結構將從父線程(進程)處復制得到同樣的進程信息,如打開文件列表和信號阻塞掩碼等。創(chuàng)建線程比創(chuàng)建新進程成本低,因為新創(chuàng)建的線程使用的是當前進程的地址空間。相對于在進程之間切換,在線程之間進行切換所需的時間更少,因為后者不包括地址空間之間的切換。
線程切換上下文切換的原理與此類似,只是線程在同一地址空間中,不需要MMU等切換,只需要切換必要的CPU寄存器,因此,線程切換比進程切換快的多。
以上就是小編為大家?guī)淼臏\談linux線程切換問題全部內(nèi)容了,希望大家多多支持腳本之家~
相關文章
Apache和Tomcat有什么區(qū)別_動力節(jié)點Java學院整理
Apache 和 Tomcat 都是web網(wǎng)絡服務器,兩者既有聯(lián)系又有區(qū)別。下面通過本文給大家介紹Apache和Tomcat的區(qū)別,感興趣的朋友一起看看吧2017-08-08
linux corosync+pacemaker+drbd+mysql配置安裝詳解
這篇文章主要介紹了corosync+pacemaker+drbd+mysql配置安裝詳解,需要的朋友可以參考下2016-05-05
在Apache服務器上利用Varnish優(yōu)化移動端訪問的方法
這篇文章主要介紹了在Apach服務器上利用Varnish優(yōu)化移動端訪問的方法,包括清除緩存等常用操作的介紹,需要的朋友可以參考下2015-06-06
嵌入式Linux重啟QT應用程序的簡單辦法(基于QT4.8 qws)
今天小編就為大家分享一篇關于嵌入式Linux重啟QT應用程序的簡單辦法(基于QT4.8 qws),小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧2018-12-12
BT寶塔Linux服務器管理助手架設VPS面板(安裝及初始設置應用)
這篇文章主要介紹了BT寶塔Linux服務器管理助手架設VPS面板也是就是BT寶塔助手安裝及初始設置應用演示,需要的朋友可以參考下2017-04-04

