進程與線程(一) 進程的地址空間到底是什么


多年前的一個午后,那時陽光燦爛,正值青春,那天我第一次遇到了ta。--進程

1.什么是進程?

進行是程序的一次動態執行過程.(有動態性,和周期性)

進程是獨立擁有資源(什么資源呢)的基本單位很執行的基本單位。

2在計算機中,進程是什么?

進程是一個數據結構,數據結構中有個屬性是p_id,就是進程的id;ppid是該進程的父id,還有進程所處的狀態。運行?阻塞,僵屍(Z)等,以后細講。

3.如何查看進程?

windows先任務管理器,linux ps等命令。

4linux.進程之間是如何組織的?

 進程之間是一種樹結構,父子關系。使用pstree,就如同下面

init─┬─NetworkManager─┬─dhclient
     │                └─2*[{NetworkManager}]
     ├─accounts-daemon───{accounts-daemon}
     ├─acpid
     ├─apache2─┬─apache2
     │         └─2*[apache2───26*[{apache2}]]
     ├─at-spi-bus-laun───2*[{at-spi-bus-laun}]
     ├─atd
     ├─avahi-daemon───avahi-daemon
     ├─bluetoothd
     ├─colord───2*[{colord}]
     

 我們看到init進程是所有進程的祖宗,以后的孤兒進程和僵屍進程將會說。

剛才你說進程擁有的自己的資源,是指內存資源,也就是地址空間,每個進程都有自己的地址空間,那么這個地址空間都是什么呢?(C語言的經典例子)http://soft.chinabyte.com/os/51/12324551.shtml(參考)

 程序的一次執行過程就是進程,寫個C程序吧,然后運行它,我們就會發現多個進程了同時注意下面說的都是虛擬地址空間。

1、text:看名字知道是文本段,C里面就是代碼段,可以這么理解,其實存的是機器指令。

2.初始化段: 存的是初始化的變量,如果在代碼中 int a=5;說明a初始化了。

2.未初始化段:  int a[100],定義了,但是沒初始化,會被初始化為0;

3.堆和棧很重要,仔細講講,(java中的堆和棧是干啥的?)

1首先看圖,堆向上生長,棧向下生長。

2.我們知道在new 創建的對象一定要delete(java呢?),ta就分配在堆上,說白了,就是程序員自己分配的內存要自己釋放,他們可以沒有垃圾回收。

3.對於棧,是程序自己管理的,例如局部變量和臨時變量等,進程結束,全部自動釋放。(這個棧和數據結構中的棧有啥關系,還真有關系,有空會寫程序如何調用的,最后遞歸的實現原理)。

好了,那普通的的進程的地址空間什么樣呢?

其實大同小異。

http://blog.csdn.net/wangxiaolong_china/article/details/6844325(參考)

 

 

void print(char *str,intp)  
{  
    char *s1 = "abcde";//abcde在常量區,s1在棧上  
    char *s2 = "abcde";//abcde在常量區,s2在棧上 s2-s1=6可能等於0,編譯器優化了相同的常量,只在內存保存一份  
    //而&s1>&s2  
    char s3[] = "abcdeee";//abcdeee在常量區,s3在棧上,數組保存的內容為abcdeee的一份拷貝  
    long int *s4[100];  
    char *s5 = "abcde";  
    int a = 5;  
    int b =6;  
    int c;  
    int d;//a,b,c,d均在棧上,&a>&b>&c>&d地址反向增長  
    char *q=str;//  
    int m=p;//  
    char *r=(char *)malloc(1);  
    char *w=(char *)malloc(1);// r<w 堆正向增長  
  
    printf("s1=%p s2=%p s3=%p s4=%p s5=%p na=%p b=%pc=%p d=%pn   
            str=%pq=%p p=%p m=%p r=%p w=%pn",  
            s1,s2,s3,s4,s5,&a,&b,&c,&d,&str,q,&p,&m,r,w);  
}  
/* 棧和堆是在程序運行時候動態分配的,局部變量均在棧上分配。棧是反向增長的,地址遞減;malloc等分配的內存空間在堆空間。堆是正向增長的,地址遞增。  
r,w變量在棧上(則&r>&w),r,w所指內容在堆中(即r<w)。*/  

 

 下面將會主要看看java的內存分配

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM