進程管理(一)

進程: 是指一個具有獨立功能的程序在一個數據集合上的一次運行活動,即每個程序模塊和它執行時所處理的數據,組成了進程。

進程與程序的區別

         1.  進程是動態的,程序是靜態的

         2.  進程有生命週期的,程序是永久的

         3.  一個程序可以包含多個進程,一個進程也可以包含多個程序(調用其它程序)

一個程序是由指令加數據組成一個靜態的文件放在外部存儲上(如硬盤),在必要的時候,cpu運行這個程序,那麼由cpu的控制指令從外部存儲加載至內存,並且完成運算的這麼一個過程,叫做進程,進程是有生命週期的。

        線性內存:線性地址,在linux的32位系統中,邏輯上假設每個進程都是獨佔4G內存,其中 1G分配給內核使用,其餘的3G內存由進程使用。而在真實的內存中就是把內存本身劃分成一個個的頁框,每個頁框都是固定大小的存儲單元(4K),當進程使用內存時,根據需要會分配給n個頁框對應給虛擬地址的頁面給進程使用,而且各個頁框之間可能是不相臨的,不連續的,但對進程本身來看,是連續的,保存存在數據結構中的內存。把線性地址中的頁面映身到真實的物理地址,是MMU(Merrory Management Unit內存管理單元)的功能,爲了改進虛擬地址到物理地址轉換的速率,把每個頁面轉換後保存到緩存中去,這個過程叫TLB(後備緩衝器,或叫頁面緩存)

         進程切換,上下文切換(Context Switch): 在單核單個cpu當中,一次只能有一個任務在cpu中運行,當一個進程沒有運行完成就進行任務切換。在切換時,一個進程存儲在處理器各寄存器中的中間數據叫做進程的上下文,所以進程的 切換實質上就是被中止運行進程與待運行進程上下文的切換。在進程未佔用處理器時,進程 的上下文是存儲在進程的私有堆棧中的。

         保存現場:在進程切換前,把進程A的當前運行信息,如程序執行到的當前位置,程序狀態字,所有的寄存器值保存到進程A的PCB(Process Control Block)中。

         恢復現場:從進程B的PCB中獲取進程的執行信息,將這些信息寫入相應的寄存器中,程序計數器指向進程B將執行的下一條指令。進程B可能第一次開始執行,也可能是被中斷過的進程,恢復執行。不論是哪種情況,進程B的執行信息都能在其PCB中找到。

        進程切換與模式切換:  進程切換是作用於進程之間的一種操作。當分派程序收回前進程的CPU並把它分派給某個就緒進程時,叫進程切換。  模式切換是進程內部所引用的一種操作。當用戶程序轉入系統調用如I/O操作,或系統調用轉入程序時,叫模式切換。進程切換一定會有模式切換,模式切換就不一定有進程切換。

        

       進程所擁有的常見狀態:

             Stopped :  停止狀態

             Ready    :    就緒狀態,準備運行

             Running(Executing)  :  正在運行(執行)狀態

             Sleeping  :  睡眠狀態,睡眠狀態有兩種;

                      Uninterruptible   Sleeping: 不可中斷睡眠狀態    當一個進程需要調用額外的I/O資源(硬盤資源)時,由於I/O資源速度太慢,進程一定會轉入睡眠狀態,當I/O沒有執行完時,進程不可以再被調入CPU執行,叫不可中斷睡眠狀態

                       Interruptible   Sleeping : 可中斷睡眠狀態     當一個進程不是由於額外I/O進入睡眠狀態,而時處於隨時可以喚醒狀態,叫可中斷睡眠狀態

               Zombie :  僵死進程,正常執行完成的進程,但內存沒有被釋放的進程。除了INIT進程外,每個進程都有其父進程,當進程結束時由父進程負責回收其子進程的資源,如果當父進程意外終止時,子進程無法釋放其所佔的資源,叫做Zombie。

 

         進程優先級:在linux中有0-139共140個優先級,數字越小,優先級越高。其中0-99的優先級是由內核調整的,100-139可以由用戶調整 nice(-20 -- 19)值來調整優先級,普通用戶只能調大nice值用來降低其優先級,root用戶可以調整 對應的nice值來提高或降低進程的優先級。一般默認進程的nice值是0。

        進程管理命令:

        pstree :  進程樹,顯示以樹結構的進程列表。用這個命令可以瞭解進程的層次結構。image如圖所示,init進程是第一個進程

          ps : Process Stat 顯示系統當前進程狀態的命令;

                 PID : 進程ID,進程開始後指派給此進程的唯一標識符。PPID:父進程ID,創建了當前進程的父進程的PID。

                 COW : copy on write 寫時複製,父進程創建子進程時,爲了推遲甚至避免拷貝數據的技術,內核此時並不複製整個進程的地址空間,而是讓父子進程共享同一個地址空間。只 用在需要寫入的時候纔會複製地址空間,從而使各個進程擁有各自的地址空間。也就是說,資源的複製是在需要寫入的時候纔會進行,在此之前,只有以只讀方式共 享。這種技術使地址空間上的頁的拷貝被推遲到實際發生寫入的時候。

               ps命令的參數:                             

                            a : 顯示所有跟終端有關的進程

                            u:顯示用戶信息,以用戶爲中心顯示進程的想在關信息

                            x: 顯示所有跟終端無關的進程

命令顯示效果如圖

image

PID 進程號                        VSZ  虛擬內存集                      RSS  常駐內存集   

TTY 顯示與終端相關的信息 ?表示與終端無關,            TIME  運行時長   

STAT  進程狀態                TIME  運行時長                       COMMAND 進程命令

          ps 的另外一組參數  -elf

image

   PRI  顯示的是進程的優先級                NI   nice值,可以調整nice值來更新進程的優先級

   PSR  運行在哪個CPU上

 

top 命令: 顯示正在運行的系統的進程的實時視圖,默認每隔5秒鐘刷新一次

image

top 前五行是統計信息區,是系統整體的統計信息

1. 第一行是任務隊列信息,和uptime 命令的執行結果,顯示當前時間,up 運行時間,user 當前登陸用戶,load average 系統負載,即任務隊列的平均長度。三個值爲1min 5min  15min 鍾前到現在的平均值。

2. 第二、三行爲進程和CPU信息,當有多個CPU時,這些內容會超過兩行,按數字1 可以展開每個CPU的信息,不展開顯示的是CPU的平均值。

Tasks 進程總數            running 正在運行的進程數          sleeping 睡眠的進程數  

stopped 停止的進程數       zombie   僵死的進程數       CPU(s):0.0%  us  用戶空間佔用的cpu百分比(平均值)       sy  內核空間佔用cpu百分比          ni  用戶進程空間內改變過優先級的進程佔用cpu百分比       id  空閒cpu 百分比    wa  等待I/O所未CPU時間百分比

hi  硬件中斷所佔cpu時間百分比    st   虛擬機所佔cpu 時間百分比

3.  第四、五行爲內存信息

Mem  物理內存總量     used  使用的物理內存總量   free  空閒內存總量   buffers 用做內核緩存的內存量

Swap  交換區總量    used  使用的交換區的總量      free 空閒交換區總量  cached 緩衝的交換區的問題。

 

進程信息:

PID  USER      PR(優先級)  NI  VIRT(虛擬內存級)  RES(常駐內存級) SHR(共享內存) S(狀態) %CPU %MEM    TIME+(進程所佔CPU的時間總計,單位是百分之1秒)  COMMAND (命令名/命令行)    

 

top命令參數

          -d # :  指定信息刷新時間間隔,單位是秒,top默認的刷時爲5秒, top –d 3表示每隔3秒種刷新一次。

           -s  :  使top命令在安全模式中運行,這將去除交互命令所帶來的潛在危險

           -b  :  批模式, 翻屏顯示信息,不再實時刷新,因爲實時刷新時有可能一屏顯示不會所有的進程。但會一直翻屏顯示,除非ctrl +c 終止

           -n # : 在批模式中,後面加-n # ,表示只顯示#屏,如top –b –n 3 只顯示top命令一共3屏的信息。

        

交互式命令

top :

       M :  根據駐留內存大小 進行排序

        P: 根據CPU使用百分比大小進行排序

        T: 根據時間/累計時間進行排序

 

         l  :  切換顯示平均負載和啓動時間信息。即顯示隱藏第一行的信息

        m: 切換顯示內存信息。即顯示隱藏內存行

        t : 切換顯示進程和CPU狀態信息。即顯示影藏CPU行

       

        c  :  是否顯示完整的命令行信息

        k  : 終止某個進程。系統將提示用戶輸入需要終止的進程PID,以及需要發送給該進程什麼樣的信號。

        q :   退出程序。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章