Hi,欢迎来到中国优发娱乐手机版高端品牌 - 华清远见嵌入式学院<北京总部官网>,专注嵌入式工程师培养13年!
  • 全国咨询热线:400-706-1880
  • 新浪微博
  • 微信
  • 北京
    校区
  • 上海
    校区
  • 深圳
    校区
  • 成都
    校区
  • 南京
    校区
  • 武汉
    校区
  • 西安
    校区
  • 广州
    校区
  • 沈阳
    校区
  • 济南
    校区
  • 重庆
    校区
  • 研发
    中心
  • 当前位置: > 嵌入式学院 > 嵌入式学习 > 讲师博文 > 对进程的理解
    对进程的理解
    时间:2017-05-12作者:华清远见
    关于进程的理解,首先得知道进程和程序有什么区别!其实程序大家并不陌生,前面也写过很多程序,那什么是程序?程序是指令和数据的有序集合,本身没有任何运行的含义,是一个静态的概念。那什么又是进程呢?程序是保存在磁盘上的,要想程序实现一定的功能,需要有执行的过程,是一个动态的概念,而对于程序是静态的概念,无法描述程序在内存中的执行情况,所以才引入了进程的概念,进程是一个程序的一次执行过程,是是程序执行和资源管理的最小单位。   对于进程,在同一时间CPU只能处理一个事件,实际上是串行的,但是CPU执行的速度非常快,所以我们感觉像是并行一样。进程是一个实体,进程不仅包括程序的指令和数据,而且包括程序计数器值、CPU的所有寄存器值以及存储临时数据的进程堆栈。它包括三部分:程序、数据、进程控制块PCB,对于进程可以分成三部分:代码段、数据段、堆栈段。 代码段:存放程序的可执行代码。 数据段:存放程序的全局变量、常量、静态变量。 堆栈段:堆用于存放动态分配的内存变量,栈用于函数调用,它存放着函数的参数、 函数内部定义的局部变量。 而程序分成了两部分:只有代码段和数据段(.bss:未初始化的全局变量或静态局部变量,.data:已初始化的全局变量或静态局部变量) 每一个进程都有独立的4g的虚拟空间,而0-3g是用户可用空间,3g-4g是内核空间,每一个进程都拥有相同的内核空间,所以3g-4g是每一个进程的共享空间。物理内存是实际存在的空间,这个空间是根据你电脑的内存条大小来确定的,对于每一个拥有独立4g虚拟空间的进程,都会在内存条上分配一定的空间大小(所以为什么说内存越大电脑的速度越快?比如10个进程在2g内存上运行,需要为每个进程分配200兆的空间来运行,如果10个进程在4g内存上运行,需要为每个进程分配400兆的空间) 对于独立4g虚拟空间的进程,怎么加载到物理内存上的呢? 进程中的每一条指令,比如a+b这条指令会被加载到物理内存中,等下一次进程再次被调度时,系统就会知道再次从什么地方开始执行。 上图中的双向循环链表是保存在3g-4g的内核空间的。 对于进程控制块PCB(process control block),系统通过PCB对进程进行管理和调度。PCB包括创建进程、执行程序、退出进程以及改变进程的优先级等。而进程中的PCB用一个名为task_struct的结构体来表示,定义在linux内核代码include/linux/sched.h中,每当创建一新进程时,便在内存中申请一个空的task_struct结构,填入所需信息,同时,指向该结构的指针也被加入到task数组中,所有进程控制块都存储在task[]数组中。存放进程的信息的PCB是存放在内存中。在这里需要重点去看的是,在PCB结构体中有两项重点来看一下,PID(进程号)和status(进程状态),PID、PPID分别代表的是进程号和父进程号,通过进程号来唯一的表示一个进程;这两个值都是非零正整数。 Linux中进程的类型也有这样几种: 1) 交互进程:该类进程是由shell控制和运行的。交互进程既可以在前台运行,也可以 在后台运行。该类进程经常与用户进行交互,需要等待用户的输入,当接收到用户的输入后,该类进程会立刻响应,典型的交互式进程有:shell命令进程、文本编辑器等 2)批处理进程:该类进程不必与用户进行交互,通常在后台运行,不必很快地响应,它会被提交到一个队列中进行顺序执行。典型的批处理进程有:编译器的编译操作、数据库搜索引擎。 3)守护进程:该类进程在后台运行。它一般在Linux启动时开始执行,系统关闭时才结 束。很多系统进程都是以守护进程的形式存在。 举例:电脑的网线口,不插网线会有小叹号,当插上网线设置好ip后就能上网,这是因为网口驱动程序是守护进程,当系统启动时,此进程就已经被创建,此守护进程后会不停的去询问有没有网线… 同时根据进程在不同时刻存在的不同状态,分成了这样几类: 1)运行态:此时进程或者正在运行,或者准备运行。R 2)等待态:此时进程在等待一个事件的发生或某种系统资源。 a)可中断: 处在这种状态下的进程可以被信号中断,接收到信号或被显示地唤醒呼叫,唤醒之后,进程将转变为运行态。S  b)不可中断:它不会处理信号,只有在它所等待的事件发生时,进程才被显示的 唤醒  D 3)停止态:此时进程被暂停,当收到SIGSTOP、SIGTSTP、SIGTTIN、SIGTTOU信号,会进入暂停状态。T  4)僵尸态:这是一个已终止的进程,但还在进程向量数组中占有一个task_struct结构。Z 僵尸有什么特性? 占空间、不起作用,每一个进程都有PCB,描述进程的信息,进程退出时PCB还存在,存放着进程的状态,死亡的状态等,所以程序结束之后PCB还存在,内核栈也存在(内核栈:大小为4k-8k,保存在3g-4g的空间,系统调用函数是需要栈的,而这个栈就是是内核栈)内核栈是占空间的,所以如果僵尸态的进程多了的话,是要消耗资源的, 僵尸进程是怎么产生的? 子进程先退出,父进程没有收尸,那子进程就是僵尸进程 父进程退出后,子进程存在,那子进程就是孤儿进程, 那子进程的父进程就是init进程, init是系统启动后的用户进程,其中还有一个0号进程,它是系统上电后,由0号进程产生init进程 5)死亡态: 这是最终状态,父进程调用wait函数将子进程回收。瞬间发生,程序员不 可见  X   状态的显示可以使用man ps查看到        <    high-priority (not nice to other users) 高优先级        N    low-priority (nice to other users) 低优先级        L    has pages locked into memory (for real-time and custom IO) 页面锁定在内存(实时或定制的IO)        s    is a session leader会话组的组长        l    is multi-threaded (using CLONE_THREAD, like NPTL pthreads do) 进程中包含线程        +    is in the foreground process group. 前台进程 以上便是我对进程相关内容的一些理解,现在分享给大家,如果存在质疑的地方请主动提出。

    发表评论
    全国咨询电话:400-706-1880,双休日及节假日请致电值班手机:15010390966 在线咨询: 曹老师QQ(619366077), 余老师QQ(2657985593), 李老师QQ(2814652411), 徐老师QQ(1462495461) 企业培训洽谈专线:010-82600901,院校合作洽谈专线:010-82600350,在线咨询:QQ(248856300) Copyright 2004-2017 华清远见教育集团 版权所有 ,沪ICP备10038863号,京公海网安备110108001117号

    优发娱乐手机版

    百度360搜索搜狗搜索

    优发娱乐手机版

    百度360搜索搜狗搜索