码迷,mamicode.com
首页 > 其他好文 > 详细

进程学习(一) 进程的地址空间

时间:2014-07-03 06:13:57      阅读:351      评论:0      收藏:0      [点我收藏+]

标签:blog   http   java   color   使用   strong   

多年前的一个午后,那时阳光灿烂,正值青春,那天我第一次遇到了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程序吧,然后运行它,我们就会发现多个进程了同时注意下面说的都是虚拟地址空间。

bubuko.com,布布扣

1、text:看名字知道是文本段,C里面就是代码段,可以这么理解,其实存的是机器指令。

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

2.未初始化段:  int a[100],定义了,但是没初始化,会被初始化为0;

3.堆和栈很重要,仔细讲讲,(java中的堆和栈是干啥的?)

1首先看图,堆向上生长,栈向下生长。

2.我们知道在new 创建的对象一定要delete(java呢?),ta就分配在堆上,说白了,就是程序员自己分配的内存要自己释放,他们可以没有垃圾回收。

3.对于栈,是程序自己管理的,例如局部变量和临时变量等,进程结束,全部自动释放。(这个栈和数据结构中的栈有啥关系,还真有关系,有空会写程序如何调用的,最后递归的实现原理)。

好了,那普通的的进程的地址空间什么样呢?

bubuko.com,布布扣

其实大同小异。

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的内存分配

 

 

 

进程学习(一) 进程的地址空间,布布扣,bubuko.com

进程学习(一) 进程的地址空间

标签:blog   http   java   color   使用   strong   

原文地址:http://www.cnblogs.com/hansongjiang/p/3818491.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!