真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

Java進程怎么理解

這篇文章主要介紹了Java進程怎么理解的相關(guān)知識,內(nèi)容詳細易懂,操作簡單快捷,具有一定借鑒價值,相信大家閱讀完這篇Java進程怎么理解文章都會有所收獲,下面我們一起來看看吧。

為尖山等地區(qū)用戶提供了全套網(wǎng)頁設(shè)計制作服務(wù),及尖山網(wǎng)站建設(shè)行業(yè)解決方案。主營業(yè)務(wù)為成都網(wǎng)站設(shè)計、成都網(wǎng)站制作、尖山網(wǎng)站設(shè)計,以傳統(tǒng)方式定制建設(shè)網(wǎng)站,并提供域名空間備案等一條龍服務(wù),秉承以專業(yè)、用心的態(tài)度為用戶提供真誠的服務(wù)。我們深信只要達到每一位用戶的要求,就會得到認可,從而選擇與我們長期合作。這樣,我們也可以走得更遠!

進程描述


廣義上講,所有進程信息被放在一個叫做進程控制塊的數(shù)據(jù)結(jié)構(gòu)中,可以理解為進程屬性的集合。

進程控制塊

每個進程在內(nèi)核中都有一個進程控制塊(PCB)來維護進程相關(guān)的信息,Linux內(nèi)核的進程控制塊是task_struct結(jié)構(gòu)體。

task_struct結(jié)構(gòu)體

task_struct是Linux內(nèi)核下的一種數(shù)據(jù)結(jié)構(gòu),它會被裝載到RAM里并且包含著進程的信息,每個進程把它的信息放在task_struct結(jié)構(gòu)體里task_struct包含了這些內(nèi)容:

標示符:描述本進程的唯一標示符

狀態(tài):任務(wù)狀態(tài),退出代碼,退出信息等。

優(yōu)先級:相對于其他進程的優(yōu)先級

程序計數(shù)器:程序中被執(zhí)行的下一條指令的地址。

內(nèi)存地址:包括程序代碼和進程相關(guān)的數(shù)據(jù)的指針,還有和其他進程共享內(nèi)存塊的指針

上下文數(shù)據(jù):進程執(zhí)行時處理的寄存器中的數(shù)據(jù)

I/O狀態(tài)信息:包括顯示的I/O請求,分配給進程的I/O設(shè)備和被進程使用的文件列表

記賬信息:包括處理器時間總和,使用時鐘數(shù)總和、時間限制、記賬信號等。

保存進程信息的數(shù)據(jù)結(jié)構(gòu)叫做task_struct,所有運行在系統(tǒng)里的進程都以task_struct鏈表的形式存在內(nèi)核中進程的信息可通過/proc系統(tǒng)文件夾查看,要獲取PID為400的進程信息,需要查看/proc/400這個文件夾。大多數(shù)進程同樣可以使用top和ps這些用戶級工具獲取。

進程標示符


進程id(PID)

父進程id(PPID)

進程位置

  1. 進程內(nèi)存映像

Linux下C程序生成主要由4個步驟組成:預編譯、編譯、匯編、鏈接。編譯器gcc經(jīng)過預編譯、編譯、匯編3個步驟將源程序文件轉(zhuǎn)換成目標文件。如果程序有多個目標文件或程序中使用了庫函數(shù),則編譯器還需要將所有目標文件及所需的庫文件鏈接起來,最后生成可執(zhí)行程序。當程序執(zhí)行時,操作系統(tǒng)將可執(zhí)行程序復制到內(nèi)存中。程序轉(zhuǎn)為進程通常需要以下幾個步驟:

*內(nèi)核將程序讀入內(nèi)存,為程序分配內(nèi)存空間;

*內(nèi)核為該進程保存PID及相應(yīng)的狀態(tài)信息,把進程放到運行隊列中等待執(zhí)行。程序轉(zhuǎn)化為進程后就可被操作系統(tǒng)的調(diào)度程序執(zhí)行了。
進程的內(nèi)存映像是指內(nèi)核在內(nèi)存中如何存放可執(zhí)行程序文件。在將程序轉(zhuǎn)化為進程的過程中,操作系統(tǒng)將可執(zhí)行程序從硬盤復制到內(nèi)存中。布局如下:

Java進程怎么理解

2.進程映像位置依賴于使用的內(nèi)存管理

3.可執(zhí)行程序與進程內(nèi)存映像的不同之處在于:

a.可執(zhí)行程序位于磁盤中而內(nèi)存映像位于內(nèi)存

b.可支持行程序沒有堆棧,因為程序程序被加載到內(nèi)存中才會分配堆棧。

c.可執(zhí)行程序雖然也有未初始化數(shù)據(jù)段但它并并不存儲于硬盤中的可執(zhí)行文件中。

d.可執(zhí)行程序是靜態(tài)的,不變的,而內(nèi)在映像隨著程序的執(zhí)行是靜態(tài)變化的,比如數(shù)據(jù)段隨著程序執(zhí)行要存儲的變量值,棧在函數(shù)調(diào)用時也是在不斷變化的。

#include 
#include 
int g_val = 100;
void test()
{
int a = 10;
int b = 10;
printf("test stack1 address : 0x%x\n", &a);
printf("test stack2 address : 0x%x\n", &b);
}
void (*fp)();
int main()
{
int a = 10;
int *heap = malloc(sizeof(int));
fp = test;
printf("code address : 0x%x\n", fp);
printf("data address : 0x%x\n", &g_val);
printf("heap address : 0x%x\n", heap);
printf("main stack0 address : 0x%x\n", &a);
fp();
return 0;
}

Java進程怎么理解

關(guān)于“Java進程怎么理解”這篇文章的內(nèi)容就介紹到這里,感謝各位的閱讀!相信大家對“Java進程怎么理解”知識都有一定的了解,大家如果還想學習更多知識,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。


本文名稱:Java進程怎么理解
網(wǎng)站鏈接:http://weahome.cn/article/ijcjgh.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部