Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android系統開發(8)——linx進程基本概念

Android系統開發(8)——linx進程基本概念

編輯:關於Android編程

一、proc文件系統

傳統意義上的文件系統是用於塊設備上信息的存儲,/proc這個目錄是一個虛擬文件系統,它放置的數據都是在內存當中,所以這個目錄本身不占用任何硬盤空間。主要包含如下系統信息:內存管理系統進程特征數據文件系統設備驅動程序系統總線電源管理終端系統控制參數\

用戶和應用程序可以通過proc得到系統的信息,並可以改變內核的某些參數。由於系統的信息,如進程,是動態改變的,所以用戶或應用程序讀取proc文件時,proc文件系統是動態從系統內核讀出所需信息並提交的。下面列出的這些文件或子文件夾,並不是都是在你的系統中存在,這取決於你的內核配置和裝載的模塊。另外,在/proc下還有三個很重要的目錄:net,scsi和sys。 Sys目錄是可寫的,可以通過它來訪問或修改內核的參數,而net和scsi則依賴於內核配置。例如,如果系統不支持scsi,則scsi 目錄不存在。<喎?/kf/ware/vc/" target="_blank" class="keylink">vcD48cD6z/cHL0tTJz73pydy1xNXi0KmjrLu509C1xMrH0rvQqdLUyv3X1sP8w/u1xMS/wryjrMv8w8fKx734s8zEv8K8oaPPtc2z1tC1scew1MvQ0LXEw7/Su7j2vfizzLa809C21NOmtcTSu7j2xL/CvNTaL3Byb2PPwqOs0tS9+LPMtcQgUElEusXOqsS/wrzD+6Osy/zDx8rHtsHIob34s8zQxc+itcS907/aoaO2+HNlbGbEv8K81PLKx7bByKG9+LPMsb7J7bXE0MXPor3Tv9qjrMrH0ru49mxpbmuhozwvcD48aDM+tv6hosqyw7TKx734s8w8L2gzPr34s8zNqLOjsbu2qNLlzqrSu7j21f3U2tTL0NC1xLPM0PLKtcD9o6zL/NPJwb249rK/t9bX6bPJo7rSu7j21+mzybK/t9bKx7LZ1/fPtc2z08PAtLncwO2zzNDytcTE2rrLttTP86GjxNq6y7bUz/PKx8+1zbPTw8C0tOa3xbnY09q9+LPMzbO8xtDFz6K1xLXYt72ho8Ht0ru49tfps8myv7fWyse12Na3v9W85KOsy/yw/Lqsy/nT0L/J1rTQ0MSjv+m78kRMTMSjv+m1xLT6wuu6zcr9vt2ho8v8u7mw/Lqstq/MrMTatOa31sXktcS/1bzkoaPI58/fs8y20dW7us220dW7t9bF5L/VvOSho734s8zUy9DQuf2zzKOsxuTKtb7Nysew0bTFxcy1xLb+vfjWxs7EvP6809TYo6jTs8nko6m1vcTatOa/1bzk1tCjrLKix9LWuNL9Q1BVyKXE2rTm1tDRsNa3o6zIu7rzvMbL46OssqLH0re1u9ijqEkvT6OptcS5/bPMoaO/ydLUy7y/vNXi0fnSu7j2zsrM4qOsz9bU2s7Sw8fTssXMyc/T0Mj9uPbOxLz+eHh4LmV4ZSx4eHguYXBrLHh4eKOsstnX98+1zbPKx8jnus7WqrXAxMTQqc7EvP7Kx7/J1rTQ0M7EvP7E2KO/stnX98+1zbPKtrHwv8nWtNDQzsS8/rXEt73KvdPQwb3W1qOs0rvW1srH1NrPtc2zxNq6y7340NDKtrHwo6ixyMjnbGludXi6zXdpbmRvd3OjqaOswe3Su9bWysfU2s+1zbPE2r/isuPKudPD0OnE4rv6wLTKtc/WoaPKudPD0OnE4rv6vs23x7Ojt72x46OsztLDx7/J0tTU2rK70N64xMTausu1xMfpv/bPwtDeuMS6zcCp1bnQ6cTiu/q+zb/J0tTKtc/Wv+fGvcyooaM8aDM+yP2hor34s8y1xNTL0NC5/bPMPC9oMz4xoaK9q7PM0PLXsNTYtb3E2rTmo6izzNDytcTKtcD9u6+jqTMyzru2/r341sbPtc2z1+6089Gw1rfE3MGmyscgMl4zMiA9IDJeMTAgKiAyXjIgPSAxRyAqIDQgPSA0RyzL+dLUztLDx7XEzu/A7cTatObX7rTzv8nS1Mq508M0Ry682cjnztLDx8/W1NrNrMqxv6rByzEwMLj2vfizzLKlt8W159Owo6zV1dH5v8nS1NX9s6OypbfFo6zV4srHzqrKssO0xNijv8rCyrXJz7P9wcvO78DtxNq05s3io6y7udPQ0ru49tDpxOLE2rTmIDxpbWcgc3JjPQ=="/uploadfile/Collfiles/20140831/2014083109370882.png" alt="\" />
虛擬存儲器是一個抽象的概念,它為每一個進程提供了一個假象,每個進程都在獨占使用主存(硬盤) \虛擬地址空間如下:\(注:圖摘自《深入理解計算機系統》)
地址空間最底部存放用戶進程定義的代碼和數據,對於所有的進程來說,代碼是從同一個固定地址開始。接著就是全局變量和對應的數據位置,堆、共享庫、棧。最上面是內核虛擬存儲器,內核總是駐留在內存中,是操作系統的一部分,地址空間頂部的區域是為內核保留的,不允許應用程序讀寫這個區域的內容或者直接調用內核代碼定義的函數。
2、讀取內存中的程序段內容,給變量分配空間,在調用的時候尋址操作進程運行過程其實就是把磁盤的二進制文件映射到內存空間中並且指引CPU去內存中尋址,然後計算並且返回(I/O)的過程。

 #include 
#include 
#include 

int main(){
        printf("hello PID:%d\n", getpid());
        printf("hello ppid:%d\n", getppid());
        char *p;
        scanf("%s", p);

        return 0;
}
啟動這個程序(進程)\
可以看到這個進程的ID是1634,進程的父ID是1617,下面我們使用命令ps -aux來查看一下當前的進程,該進程的父進程是shell進程。首先二進制程序getpid被linux系統識別,將該二進制文件放到內存中,處理器尋址並給變量分配內存空間(將函數和變量放到不同的區域),最後將結果輸出。

四、進程運行過程中的兩個特點

1、多任務,多進程“並發我們的linux是多任務,分時的,一個獨立的邏輯控制流,好像我們的程序獨占的使用處理器,下面是CPU的進程調度圖。\
進程1,2,3,4,5,6......在運行過程中由CPU分配時間片段,上圖的處理器就像轉盤一樣,當指向某個進程後就給該進程分配時間片,開始執行該進程,如此反復。2、彼此獨立、所處的內存隔絕使用虛擬內存,每個進程都有一個私有的地址空間,好像我們的程序獨占和使用內存。

五、進程的生命周期

對程序而言,進程有三大狀態:運行、掛起、消亡。 1、建立任務(創建進程)2、准備運行(等待CPU分配時間片)3、正在運行(在實際的運行狀態中,如果沒有分配到cpu實際片,繼續等待)4、掛起(分為可打擾的和不可打擾的),比如scanf等待用戶輸入就是可打擾中斷。5、消亡(當任務終止,或者被父進程回收)

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved