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

多年前的一个午后,那时阳光灿烂,正值青春,那天我第一次遇到了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的内存分配

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

时间: 2024-10-16 07:45:01

进程学习(一) 进程的地址空间的相关文章

菜鸟随笔(3)---三种进程学习.孤儿进程.僵尸进程.守护进程

一只菜鸟横空出世,码农世界闯一闯,每天进展多一丢丢. 三种进程学习.孤儿进程.僵尸进程.守护进程 转自https://blog.csdn.net/believe_s/article/details/77040494 1.孤儿进程 如果父进程先退出,子进程还没退出那么子进程将被 托孤给init进程,这里子进程的父进程就是init进程(1号进程).其实还是很好理解的. // 父进程先子进程退出 // 子进程会被祖父进程接手并在后台运行,执行内部的代码 int main() { pid_t pid =

Linux进程学习 - 孤儿进程和守护进程

孤儿进程和守护进程 通过前面的学习我们了解了如何通过fork()函数和vfork()函数来创建一个进程.现在 我们继续深入来学习两个特殊的进程:孤儿进程和守护进程 一.孤儿进程 1.什么是 孤儿进程如果一个子进程的父进程先于子进程 结束, 子进程就成为一个孤儿进程,它由 init 进程收养,成为 init 进程的子进程.2.那么如何让一个进程变为一个孤儿进程呢?我们可以先创建一个进程,然后杀死其父进程,则其就变成了孤儿进程.pid =  fork();if(pid > 0) {         

linux 进程学习笔记-进程跟踪

<!--[if !supportLists]-->Ÿ <!--[endif]-->进程跟踪 long ptrace(enum __ptrace_request request, pid_t pid, void *addr, void *data); Linux用ptrace来进行进程跟踪,就跟我们平时用GDB debug一样,它允许一个进程去跟踪和控制另外一个进程.当被跟踪进程有信号发生时,被跟踪进程会被暂停下来,其内存空间变得可读写,跟踪它的进程可以选择是否忽略该信号和让程序继续

Linux 程序设计学习笔记----进程管理与程序开发(下)

转载请注明出处:http://blog.csdn.net/suool/article/details/38419983,谢谢! 进程管理及其控制 创建进程 fork()函数 函数说明具体参见:http://pubs.opengroup.org/onlinepubs/009695399/functions/fork.html 返回值:Upon successful completion, fork() shall return 0 to the child process and shall re

LINUX内核分析第六周学习总结——进程的描述和进程的创建

LINUX内核分析第六周学习总结——进程的描述和进程的创建 张忻(原创作品转载请注明出处) <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 一.知识概要 进程的描述 进程描述符task_struct数据结构(一) 进程描述符task_struct数据结构(二) 进程的创建 进程的创建概览及fork一个进程的用户态代码 理解进程创建过程复杂代码的方法 浏览进程创建过程相关的关键代码 创建的新进程是从哪里开始执行的

LINUX内核分析第八周学习总结——进程的切换和系统的一般执行过程

LINUX内核分析第八周学习总结——进程的切换和系统的一般执行过程 黄韧(原创作品转载请注明出处) <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 一.知识概要 Linux中进程调度的基本概念与相关知识 schedule函数如何实现进程调度 Linux进程的执行过程(一般情况与特殊情况) 宏观描述Linux系统执行 二.学习笔记 (一)进程切换的关键代码switch_to分析 进程进度与进程调度的时机分析 1.

操作系统学习笔记----进程/线程模型----Coursera课程笔记

操作系统学习笔记----进程/线程模型----Coursera课程笔记 进程/线程模型 0. 概述 0.1 进程模型 多道程序设计 进程的概念.进程控制块 进程状态及转换.进程队列 进程控制----进程创建.撤销.阻塞.唤醒.... 0.2 线程模型 为什么引入线程 线程的组成 线程机制的实现 用户级线程.核心级线程.混合方式 1. 进程的基本概念 1.1 多道程序设计 允许多个程序同时进入内存运行,目的是为了提高CPU系统效率 1.2 并发环境与并发程序 并发环境: 一段时间间隔内,单处理器上

操作系统学习之进程和线程

为什么会有进程 进程是一个计算机工程概念,进程包含一个程序运行的所有资源.进程提供程序的抽象 一个独立的逻辑流 一个私有的地址空间 逻辑控制流 如果使用调试器调试一个程序,就能看到一些列的(PC),这些PC的序列就是逻辑控制流. 并发流 一个逻辑流的执行在时间上与另一个流重叠,成为并发流,多个流并发地执行的一般现象称为并发.简单理解为同时做多件事. 并行: 一般出现在多个CPU上. 多任务: 一个进程和其他进程轮流运行的概念. 时间片: 一个进程执行他的控制流的每一时间片段. 私有地址空间 进程

linux内核学习:进程管理

进程状态 TASK_RUNNING 可运行或正在运行 TASK_INTERRUPTIBLE 进程被阻塞,但可以被信号唤醒 TASK_UNINTERRUPTIBLE 进程被阻塞,且不可以被信号唤醒 TASK_STOPPED 进程已停止,且不能再投入运行 TASK_ZOMBIE 所谓的僵死进程,进程描述符仍然保留 关键函数和结构 task_struct thread_info current clone fork exec wait exit linux内核学习:进程管理,布布扣,bubuko.co