精华内容
下载资源
问答
  • 进程和线程的区别(超详细)

    万次阅读 多人点赞 2019-10-03 21:57:46
    进程和线程 进程 一个在内存中运行的应用程序。每个进程都有自己独立的一块内存空间,一个进程可以有多个线程,比如在Windows系统中,一个运行的xx.exe就是一个进程。 线程 进程中的一个执行任务(控制单元),负责...

    进程和线程

    进程

    一个在内存中运行的应用程序。每个进程都有自己独立的一块内存空间,一个进程可以有多个线程,比如在Windows系统中,一个运行的xx.exe就是一个进程。

    任务管理器

    线程

    进程中的一个执行任务(控制单元),负责当前进程中程序的执行。一个进程至少有一个线程,一个进程可以运行多个线程,多个线程可共享数据。

    与进程不同的是同类的多个线程共享进程的方法区资源,但每个线程有自己的程序计数器虚拟机栈本地方法栈,所以系统在产生一个线程,或是在各个线程之间作切换工作时,负担要比进程小得多,也正因为如此,线程也被称为轻量级进程。

    Java 程序天生就是多线程程序,我们可以通过 JMX 来看一下一个普通的 Java 程序有哪些线程,代码如下。

    public class MultiThread {
    	public static void main(String[] args) {
    		// 获取 Java 线程管理 MXBean
    		ThreadMXBean threadMXBean = ManagementFactory.getThreadMXBean();
    		// 不需要获取同步的 monitor 和 synchronizer 信息,仅获取线程和线程堆栈信息
    		ThreadInfo[] threadInfos = threadMXBean.dumpAllThreads(false, false);
    		// 遍历线程信息,仅打印线程 ID 和线程名称信息
    		for (ThreadInfo threadInfo : threadInfos) {
    			System.out.println("[" + threadInfo.getThreadId() + "] " + threadInfo.getThreadName());
    		}
    	}
    }
    

    上述程序输出如下(输出内容可能不同,不用太纠结下面每个线程的作用,只用知道 main 线程执行 main 方法即可):

    [6] Monitor Ctrl-Break //监听线程转储或“线程堆栈跟踪”的线程
    [5] Attach Listener //负责接收到外部的命令,而对该命令进行执行的并且把结果返回给发送者
    [4] Signal Dispatcher // 分发处理给 JVM 信号的线程
    [3] Finalizer //在垃圾收集前,调用对象 finalize 方法的线程
    [2] Reference Handler //用于处理引用对象本身(软引用、弱引用、虚引用)的垃圾回收的线程
    [1] main //main 线程,程序入口
    

    从上面的输出内容可以看出:一个 Java 程序的运行是 main 线程和多个其他线程同时运行

    进程与线程的区别总结

    线程具有许多传统进程所具有的特征,故又称为轻型进程(Light—Weight Process)或进程元;而把传统的进程称为重型进程(Heavy—Weight Process),它相当于只有一个线程的任务。在引入了线程的操作系统中,通常一个进程都有若干个线程,至少包含一个线程。

    根本区别:进程是操作系统资源分配的基本单位,而线程是处理器任务调度和执行的基本单位

    资源开销:每个进程都有独立的代码和数据空间(程序上下文),程序之间的切换会有较大的开销;线程可以看做轻量级的进程,同一类线程共享代码和数据空间,每个线程都有自己独立的运行栈和程序计数器(PC),线程之间切换的开销小。

    包含关系:如果一个进程内有多个线程,则执行过程不是一条线的,而是多条线(线程)共同完成的;线程是进程的一部分,所以线程也被称为轻权进程或者轻量级进程。

    内存分配:同一进程的线程共享本进程的地址空间和资源,而进程之间的地址空间和资源是相互独立的

    影响关系:一个进程崩溃后,在保护模式下不会对其他进程产生影响,但是一个线程崩溃整个进程都死掉。所以多进程要比多线程健壮。

    执行过程:每个独立的进程有程序运行的入口、顺序执行序列和程序出口。但是线程不能独立执行,必须依存在应用程序中,由应用程序提供多个线程执行控制,两者均可并发执行

    从 JVM 角度说进程和线程之间的关系(重要)

    图解进程和线程的关系

    下图是 Java 内存区域,通过下图我们从 JVM 的角度来说一下线程和进程之间的关系。

    在这里插入图片描述

    从上图可以看出:一个进程中可以有多个线程,多个线程共享进程的方法区 (JDK1.8 之后的元空间)资源,但是每个线程有自己的程序计数器虚拟机栈本地方法栈

    程序计数器为什么是私有的?

    程序计数器主要有下面两个作用:

    1. 字节码解释器通过改变程序计数器来依次读取指令,从而实现代码的流程控制,如:顺序执行、选择、循环、异常处理。
    2. 在多线程的情况下,程序计数器用于记录当前线程执行的位置,从而当线程被切换回来的时候能够知道该线程上次运行到哪儿了。

    需要注意的是,如果执行的是 native 方法,那么程序计数器记录的是 undefined 地址,只有执行的是 Java 代码时程序计数器记录的才是下一条指令的地址。

    所以,程序计数器私有主要是为了线程切换后能恢复到正确的执行位置

    虚拟机栈和本地方法栈为什么是私有的?

    • 虚拟机栈:每个 Java 方法在执行的同时会创建一个栈帧用于存储局部变量表、操作数栈、常量池引用等信息。从方法调用直至执行完成的过程,就对应着一个栈帧在 Java 虚拟机栈中入栈和出栈的过程。
    • 本地方法栈:和虚拟机栈所发挥的作用非常相似,区别是: 虚拟机栈为虚拟机执行 Java 方法 (也就是字节码)服务,而本地方法栈则为虚拟机使用到的 Native 方法服务。 在 HotSpot 虚拟机中和 Java 虚拟机栈合二为一。

    所以,为了保证线程中的局部变量不被别的线程访问到,虚拟机栈和本地方法栈是线程私有的。

    一句话简单了解堆和方法区

    堆和方法区是所有线程共享的资源,其中堆是进程中最大的一块内存,主要用于存放新创建的对象 (所有对象都在这里分配内存),方法区主要用于存放已被加载的类信息、常量、静态变量、即时编译器编译后的代码等数据。

    多进程和多线程区别

    多进程:操作系统中同时运行的多个程序

    多线程:在同一个进程中同时运行的多个任务

    举个例子,多线程下载软件,可以同时运行多个线程,但是通过程序运行的结果发现,每一次结果都不一致。 因为多线程存在一个特性:随机性。造成的原因:CPU在瞬间不断切换去处理各个线程而导致的,可以理解成多个线程在抢CPU资源。

    多线程提高CPU使用率

    多线程

    多线程并不能提高运行速度,但可以提高运行效率,让CPU的使用率更高。但是如果多线程有安全问题或出现频繁的上下文切换时,运算速度可能反而更低。

    Java中的多线程

    Java程序的进程里有几个线程:主线程,垃圾回收线程(后台线程)等

    在 Java 中,当我们启动 main 函数时其实就是启动了一个 JVM 的进程,而 main 函数所在的线程就是这个进程中的一个线程,也称主线程。

    Java支持多线程,当Java程序执行main方法的时候,就是在执行一个名字叫做main的线程,可以在main方法执行时,开启多个线程A,B,C,多个线程 main,A,B,C同时执行,相互抢夺CPU,Thread类是java.lang包下的一个常用类,每一个Thread类的对象,就代表一个处于某种状态的线程

    展开全文
  • 进程特性与状态

    千次阅读 2017-04-22 18:44:38
    一、进程特性 1.结构特征  通常的程序是不能并发执行的,为使程序能独立运行,应为之配置一进程控制块,即pcb。所谓 进程的实体:程序段、相关的数据段、pcb。;而撤销进程,实质上是撤销进程中的pcb 所谓创建...

    一、进程的特性

    1.结构特征

        通常的程序是不能并发执行的,为使程序能独立运行,应为之配置一进程控制块,即pcb.

        所谓进程的实体:程序段、相关的数据段、pcb。;而撤销进程,实质上是撤销进程中的pcb

        所谓创建进程,实际上是创建进程实体中的pcb;

        创建进程一般分为两个步骤:首先,为一个新进程创建pcb,并填写必要的管理信息,其次,把该进程转入就绪状态并插入就绪队列之中

         ps:fork的实际开销就是复制父进程的页表以及给子进程创建惟一的进程描述符

         http://blog.csdn.net/king16304/article/details/52211436

    通过调用fork()来创建一个新进程----->通过复制当前进程来实现的------>先复制一个PCB——task_struct------>再给新进程分配一个新的内核堆栈------>修 改复制过来的进程数据(如pid、进程链表等)

    2.动态性

        进程的实质是进程实体的一次执行过程,他由创建而产生,由调度而执行,由撤销而消亡

    3.并发性

        引入进程的目的也正是为了使其进程实体能和其他进程实体并发执行

    4.独立性

        进程实体是一个能独立运行、独立分配资源和独立接收调度的基本单位,凡未建立pcb的程序都不能作为一个独立的单位参与运行

    5.异步性

        进程按各自独立的、不可预知的速度向前推进

    二、进程的三种基本状态

        进程执行的间断性(操作系统通过调度器向他分配时间片)决定了进程可能具有多种状态

    1.就绪状态

        当进程已分配到除cpu以外的所有必要资源后,只要在获得cpu,便可立即执行,进程这时的状态称为就绪状态。在一个系统中处于就绪状态的进程可能有多个,通常将他们排成一个队列,称为就绪队列

    2.执行状态

        进程已获得cpu,其程序正在执行,在单核cpu系统中,只有一个进程处于执行状态,在多核cpu系统中,则有多个进程处于执行状态。

    3.阻塞状态

        正在执行的程序由于发生事件暂时无法继续执行时,便放弃处理机(使用cpu)而处于暂停状态,通常将阻塞状态的进程也排成一个队列。

    ps:就绪----->执行:在调度程序为之分配了处理机后;

           执行----->就绪:分配给它的时间片已完而被暂停执行

           执行----->阻塞:例:进程请求访问某临界资源,而该资源正被其他进程访问

           阻塞----->就绪:例:进程正在请求被其他进程访问临界资源结束时


    大集制父就是就姐姐

    展开全文
  • 操作系统4————进程同步

    千次阅读 多人点赞 2019-02-02 17:27:43
    操作系统4————进程同步 一.目录 操作系统4————进程同步 一.目录 二.进程同步的基本概念 1. 同步机制的引入目的 2. 临界资源 3. 临界区 4. 两种形式的制约关系 5. 同步机制应遵循的...

    操作系统4————进程同步

    一.目录

    二.进程同步的基本概念

    1. 同步机制的引入目的

    在多道程序环境下,进程是并发执行的,不同进程之间存在着不同的相互制约关系。为了协调进程之间的相互制约关系,引入了进程同步的概念。

    2. 临界资源

    虽然多个进程可以共享系统中的各种资源,但其中许多资源一次只能为一个进程所使用,我们把一次仅允许一个进程使用的资源称为临界资源。许多物理设备都属于临界资源,如打印机等。此外,如果变量、数据等都可以被若干进程共享,也属于临界资源。

    3. 临界区

    对临界资源的访问,必须互斥地进行,在每个进程中,访问临界资源的那段代码称为临界区。

    我们可以进入访问临界资源的代码分为4个区:

    • 进入区。为了进入临界区使用临界资源,在进入区要检查可否进入临界区,如果可以进入临界区,则应设置正在访问临界区的标志,以阻止其他进程同时进入临界区。
    • 临界区。进程中访问临界资源的那段代码,又称临界段。
    • 退出区。将正在访问临界区的标志清除。
    • 剩余区。代码中的其余部分。即:
        do {  
        entry section; //进入区  
        critical section; //临界区  
        exit section; //退出区  
        remainder section; //剩余区  
        } while (true)  
    

    4. 两种形式的制约关系

    b.直接相互制约关系(同步):直接相互制约关系是指,为了完成某个目而建立的两个或多个进程,这些进程需要在某些位置协调工作次序,信息传递而产生的制约关系,直接相互制约关系是由于进程间的相互合作而引起的。

    比如说AB进程,A产生数据,B计算结果,AB公用一个缓存区。缓存区为空时,B不能运行,等待A向缓存区传递数据后B才能运行,缓存区满时,A不能运行,等待B取走数据后,A才能运行。此时AB为直接制约关系。

    a.间接相互制约关系(异步):间接相互制约关系是指当一个进程进入临界区使用临界资源时,另一个进程必须等待,当占用临界资源的进程退出临界区后,另一进程才允许去访问此临界资源。

    比如AB进程都需要使用打印机,如果进程A需要打印时, 系统已将打印机分配给进程B,则进程A必须阻塞。一旦进程B将打印机释放,系统便将进程A唤醒,并将其由阻塞状态变为就绪状态

    5. 同步机制应遵循的规则

    • 空闲让进:当无进程处于临界区时,表明临界资源处于空闲状态,应允许一个请求进入临界区的进程立即进入自己的临界区,以有效利用临界资源。
    • 忙则等待:当已有进程进入临界区时,表明临界资源正在被访问,因而其他试图进入临界区的进程都必须等待,以保证对临界资源的互斥访问。
    • 有限等待:对要求访问的临界资源的进程,应保证在有限时间内能进入自己的临界区,以免陷入“死等”状态。
    • 让权等待:当进程不能进入自己的临界区时,应立即释放处理机,以免陷入"忙等"状态

    三.软件同步机制

    在进入区设置和检查一些标志来标明是否有进程在临界区,如果已有进程在临界区,则在进入区通过循环检查进行等待,进程离开临界区后则在退出区修改标志。

    1. 算法一:单标志法。

    思想: 该算法设置一个公用整型变量turn,用于指示被允许进入临界区的进程编号,比如turn = 0 ,则允许P0进程进入临界区。该算法可确保每次只允许一个进程进入临界区。

    伪代码:

    // P0进程
    while(turn!=0);  // 进入区
    critical section; //临界区
    turn=1; //退出区
    remainder section; //剩余区
    
    // P1进程
    while(turn!=1);  // 进入区
    critical section; //临界区
    turn=0; //退出区
    remainder section; //剩余区
    

    评价: 两个进程必须交替进入临界区,如果某个进程不再进入临界区了,那么另一个进程不再进入临界区(违背“空闲让进”)这样很容易造成资源利用的不充分。

    2. 算法二:双标志法先检查

    思想:该算法的基本思想是在每一个进程访问临界区资源之前,先查看一下临界资源是否正在被访问,若被访问,该进程需等待;否则,进程才进入自己的临界区。为此,设置了一个数据flag[i],如果第i个进程值为FLASE,则表示Pi进程未进临界区,值为TRUE,表示Pi进程进入临界区。

    伪代码

    //pi进程
    while(flag[j]); //进入区  ① 
    flag[i] = TRUE;//进入区 ③
    critical section;//临界区
    flag[i] = FALSE;//退出区
    remainder section;//剩余区
    
    //pj进程
    white(flag[i]);//进入区 ②
    flag[j] = TRUE //进入区  ④ 
    critical section;//临界区
    flag[j] = FLASE; //退出区
    remainder section;//剩余区
    

    评价: 优点:不要交替进入,可连续使用;缺点:pi和pj可能同时进入临界区,按序号①②③④执行,会同时进入临界区(违背”忙则等待“)。即在检查对方flag之后和切换自己的flag之间有一段时间,结果都检查通过。这里问题出在检查和修改操作不能一次进行。

    3. 算法三:双标志法后检查

    思想: 算法二先检测进程状态标志后,再置自己标志,由于在检测和放置中可插入另一个进程到达时的检测操作,会造成两个进程分别检测后。同时进入临界区。为此,算法三采用先设置自己标志为TRUE,再检测对方状态标志,若对方标志为TURE,则进程等待,否则进入临界区

    伪代码:

    // Pi进程  
    flag[i] =TRUE;  
    while(flag[j]);  
    critical section;  
    flag[i] =FLASE;  
    remainder section;
    
    // Pj进程  
    flag[j] =TRUE;  // 进入区  
    while(flag[i]);  // 进入区  
    critical section;  // 临界区  
    flag [j] =FLASE;   // 退出区  
    remainder section;  // 剩余区 
    

    评价: 当两个进程几乎同时想要进入临界区时,他们分别将自己的标志值flag设置为TRUE,并且同时检测对方的状态(执行while语句),发现对方也要进入临界区,预算对方互相谦让了,结果谁也进不了临界区,从而导致"饥饿"现象。

    4. 算法四:Peterson’s Algorithm

    思路: 为了防止两个进程为进入临界区而无限等待,又设置变量turn,指示不允许进入临界区的进程编号,每个进程在设置自己的标志后再设置turn标志,不允许另一个进程进入。这时,在同时检测另一个进程状态标志和不允许进入标志,这样可以保证两个进程同时要求进入临界区,只允许一个进程进入临界区

    代码:

    // Pi进程  
    flag[i]=TURE; turn=j;  
    while(flag[j]&&turn==j);   
    critical section;  
    flag[i]=FLASE;  
    remainder section; 
    
    // Pj进程  
    flag[j] =TRUE;turn=i;  // 进入区  
    while(flag[i]&&turn==i);   // 进入区  
    critical section;  // 临界区  
    flag[j]=FLASE;  // 退出区  
    remainder section;  // 剩余区  
    

    评价: 本算法的基本思想是算法一和算法三的结合。利用flag解决临界资源的互斥访问,而利用turn解决“饥饿”现象。

    四.硬件同步机制

    虽然可以利用软件方法解决诸进程互斥进入临界区的问题,但有一定难度,并且存在很大的局限性,因而现在已很少采用,相应的许多计算机已提供了一些特殊的硬件指令,允许对一个字中的内容进行检查和修改,或者是对两个字的内容进行交换等。

    实际上,对临界区进行管理时,可以将标志看做一个锁,“锁开”进入,"锁关"等待,初始时,锁打开。每次进程要进入临界区时,检测锁。打开时,进入;关闭是,等待。

    1. 关中断

    思想: 在进入锁测试之前关闭中断,直到完成锁测试并上锁之后才能打开中断。这样,进程在临界区执行期间,计算机系统不响应中断,从而不会引发调度,也就不会打发生进程或者线程切换

    缺点:

    1. 滥用关中断权利可能会导致严重的后果
    2. 关中断时间过长,会影响系统效率,限制了处理器交叉执行程序的能力;
    3. 关中断方法也并不适用于多CPU系统,因为在一个处理机上关中断并不能防止其他进程在其他处理器上执行相同的临界段代码。

    2. 利用Test-and-Set指令实现互斥

    思想: 借助一条硬件指令——"测试并建立"指令TS以实现互斥的方法,TC指令是原子操作,即执行过程不可分割

    TS指令描述如下:

    boolean TS (boolean *lock){
        boolean old;
        old = *lock;
        *lock = TRUE;
        return old;
    }
    

    用TS指令管理临界区时,为每个临界资源设置一个布尔变量lock,lock初值为FALSE,表示该临界资源空闲。进程在进入临界区之前,首先用TS指令测试lock,如果其值为FALSE,则表示没有进程在临界区内,可以进入,并将TRUE值赋予lock,这等效于关闭临界资源.如果其值为TRUE,则重复检查,直到进程退出。

    伪代码

    do{
        ···
        while TS(&lock);
        critical seetion;
        lock = FALSE;
        remainder sectionl
        
    }while(TRUE);
    

    3. 利用Swap指令实现互斥

    Swap指令称对换指令,在Intel 80*86中又称XCHG指令,用于交换两个字的内容。

    Swap指令描述如下

     void swap (boolean *a,boolean *b){
         boolean temp;
         tamp = *a;
         *a = *b
         *b = temp;
     }
    

    用Swap指令可以简单有效的实现互斥,方法是为每一个临界资源设置一个全局的boolean变量lock,其初值为false,在每个进程中再利用一个局部变量key。

    伪代码

    do{
        key = TRUE;
        do{
            Swap(&lock,&key);
        }while(key!=FALSE);
        
        临界区操作
        lock= FALSE;
    }
    

    五.信号量机制

    信号量机制是一种功能性比较强的机制,可以用来解决互斥与同步的问题,它只能被两个标准的原语wait(S)和Signal(S)来访问,也可以记做“P操作”(通过)和“V操作”(释放)。wait和signal都属于原子操作。

    1. 整形信号量

    整形信号量就是用整形量S表示资源数目的多少。

    P操作

    wait(S){
        while(S<=0);
        S--;
    }
    
    

    v操作

    signal(S){
        S++;
    }
    

    wait操作中,只要信号量S<=0,就会不断地测试。因此,该机制并未遵循“让权等待” 的准则,而是使进程处于“忙等”的状态。

    2. 记录型信号量

    记录型信号量是不存在“忙等”现象的进程同步机制。除了需要一个用于代表资源数目的整型变量value外,再增加一个进程链表L,用于链接所有等待该资源的进程,记录型信号量是由于釆用了记录型的数据结构得名。记录型信号量可描述为:

    typedef struct{  
        int value; //资源数量  
        struct process *L;  //进程链表
    } semaphore;
    

    P操作

    void wait (semaphore S) { //相当于申请资源  
        S.value--;  
        if(S.value<0) {  
            add this process to S.L;  
            block(S.L);  //,表示该类资源已分配完毕,因此进程应调用block原语,进行自我阻塞
        }  
    } 
    
    

    v操作

    oid signal (semaphore S) {  //相当于释放资源
        S.value++;
        if(S.value<=0){
            remove a process P from S.L;
            wakeup(P);//将第一个等待进程唤醒。
        }
    }
    

    3. AND信号量

    上述进程互斥问题都是针对一个临界资源而言的,在有些应用场合,一个进程需要同时获得两个或者更多的资源。AND信号量可以解决多临界资源申请问题。假设有S1,…Sn,N个资源,进程必须申请到所有资源后才可执行,则其wait 和signal描述为:
    P操作

     void wait(S1, S2, ... , Sn){
    	if (S1>=1 && S2>=1 && ... && Sn>=1 ) {
    		 for (int i=1; i<n; i++) 
    			 Si = Si - 1; 
    	}
    	else place this process//将当前进程放置在第一个不满足Si>=1的阻塞队列中 
    }
    

    v操作

    void signal(S1, S2, ... , Sn){ 
    	for (int i=1; i<n; i++) 
    		Si = Si + 1;
    	 romove all the process waiting in the queue associated with Si into ready queue 
    }
    

    4. 信号量集

    在记录型信号量机制中,wait和signal操作只能进行加一减一的操作。当需要一次性需要申请N个同类资源时,需要进行N次操作,这显然是低效的。为方便对资源的控制,每种资源在分配前需要检查其数量是否在其极限值之上。为此,对AND信号量进行扩充。S为信号量,d为需求量,t为下限值:
    P操作

    void wait(S1, d1, t1, S2, d2, t2, ... , Sn, dn, tn){ 
    	if (S1>=t1 && S2>=t2 && ... && Sn>=tn ) 
    		for (int i=1; i<n; i++) 
    			Si = Si - dn; 
    	else place this process//将当前进程放置在第一个不满足Si>=1的阻塞队列中 
    }
    

    v操作

    void signal(S1, d1, S2, d2, ... , Sn, dn,){ 
    	for (int i=1; i<n; i++) 
    		Si = Si + dn;
           romove all the process waiting in the queue associated with Si into ready queue 
    }
    

    六.管程机制

    1.引入管程的目的

    虽然信号量机制是一种既方便又有效的同步方式,但每个要访问临界资源的进程都必须同时自备同步操作wait(S)和signal(S),这就使大量的同步操作分散在各个进程中。这样不仅给系统的管理者带来麻烦,而且还会因同步操作的使用不当而导致系统死锁。这样,在解决上述问题的过程中,便产生了新的进程同步工具———管程

    2.管程的定义

    系统中的各种硬件资源和软件资源,均可用数据结构抽象地描述其资源特性,即用少量信息和对资源所执行的操作来表征该资源,而忽略了它们的内部结构和实现细节。管程是由一组数据以及定义在这组数据之上的对这组数据的操作组成的软件模块,这组操作能初始化并改变管程中的数据和同步进程。

    3.管程的特性

    1. 局部于管程的数据只能被局部于管程内的过程所访问。
    2. 一个进程只有通过调用管程内的过程才能进入管程访问共享数据。
    3. 每次仅允许一个进程在管程内执行某个内部过程。由于管程是一个语言成分,所以管程的互斥访问完全由编译程序在编译时自动添加,无需程序员关注,而且保证正确。

    4.管程的组成

    1. 局部于管程的共享结构数据说明。
    2. 对该数据结构进行操作的一组过程。
    3. 对局部于管程的共享数据设置初始值的语句。

    七.参考资料

    进程同步(操作系统)
    《操作系统 第四版》

    展开全文
  • Com跨进程特性

    2008-03-10 11:30:36
    COM跨进程特性讲义,作者:潘爱民
  • 进程具有以下主要特性: (1)并发性:可以与其它进程一道在宏观上同时向前推进。 (2)动态性:进程是执行中的程序。此外进程的动态性还体现在如下两个方面:首先,进程是动态产生、动态消亡的;其次,在进程的...

    进程是具有一定独立功能的程序关于一个数据集合的一次运行活动。

    进程具有以下主要特性:
    (1)并发性: 可以与其它进程一道在宏观上同时向前推进。
    (2)动态性: 进程是执行中的程序。此外进程的动态性还体现在如下两个方面:首先,进程是动态产生、动态消亡的;其次,在进程的生存期内,其状态处于经常性的动态变化之中。
    (3)独立性: 进程是调度的基本单位,它可以获得处理机并参与并发执行。
    (4)交往性: 进程在运行过程中可能会与其它进程发生直接或间接的相互作用。
    (5)异步性: 每个进程都以其相对独立、不可预知的速度向前推进。
    (6)结构性: 每个进程有一个控制块PCB。

    进程和程序的相同点: 程序是构成进程的组成部分之一,一个进程存在的目的就是执行其所对应的程序,如果没有程序,进程就失去了其存在的意义。

    进程与程序的差别:

    (1)程序是静态的,而进程是动态的;

    (2)程序可以写在纸上或在某一存储介质上长期保存,而进程具有生存期,创建后存在,撤销后消亡;

    (3)一个程序可以对应多个进程,但一个进程只能对应一个程序;例如,一组学生在一个分时系统中做C语言实习,他们都需要使用C语言的编译程序对其源程序进行编译,为此每个学生都需要有一个进程,这些进程都运行C语言的编译程序。 另外,一个程序的多次执行也分别对应不同的进程。

    展开全文
  • 【Linux】Linux进程的创建与管理

    万次阅读 多人点赞 2018-07-27 19:21:29
    在Linux系统中,除了系统启动之后的第一个进程由系统来创建,其余的进程都必须由已存在的进程来创建,新创建的进程叫做子进程,而创建子进程进程叫做父进程。那个在系统启动及完成初始化之后,Linux自动创建的进程...
  • 进程同步和通信 进程同步 在OS中引入进程后,一方面使系统的吞吐量和资源的利用率得到提升,另一方面也使得系统变得复杂,如果没有合理的方式对进程进行妥善的管理,必然会引起进程对系统资源的无序竞争,使系统...
  • 入门学习Linux常用必会60个命令实例详解doc/txt

    千次下载 热门讨论 2011-06-09 00:08:45
    因为Linux与Windows不同,其后台运行着许多进程,所以强制关机可能会导致进程的数据丢失,使系统处于不稳定的状态,甚至在有的系统中会损坏硬件设备(硬盘)。在系统关机前使用 shutdown命令,系统管理员会通知所有...
  • 进程的特征

    千次阅读 2020-04-17 10:37:44
    进程的特征: p36 进程和程序是两个截然不同的概念,除了进程具有程序所没有的PCB结构外,还具有 下面一些特征: 1. 动态性。 进程的实质是进程实体的执行过程,因此,动态性就是进程的最基本的 特征。动态性还表现...
  • BSD于1980年前后向Unix中增加的一个新特性,代表一个或多个进程的集合,每个进程属于一个进程组。在waitpid函数和kill函数的参数中都曾使用到。操作系统设计的进程组的概念,是为了简化对多个进程的管理。 当父...
  • linux守护进程

    千次阅读 2018-03-08 21:05:10
    1.守护进程最重要的特性是后台运行。 2.守护进程必须与其运行前的环境隔离开来。这些环境包括未关闭的文件描述符,控制终端,会话和进程组,工作目录以及文件创建掩模等。这些环境通常是守护进程从执行它的父进程...
  • Linux进程控制1. 进程创建1.1 fork1.2 vfork2. 进程终止3. 进程等待4. 进程程序替换 1. 进程创建 1.1 fork 在Linux中,我们通常使用...特性:子进程会复制父进程的PCB,二者之间代码共享,数据独有,拥有各自的进程虚拟
  • 进程优先级

    千次阅读 2018-08-09 18:54:08
    1.进程优先级: 内核使用[0~139]这140个数来表示140种优先级。  内核使用一个简单些的数值范围,从0到139(包含),用来表示内部优先级。同样是值越低,优 先级越高。从0到99的范围专供实时进程使用。 nice值[20, +...
  • Python多进程

    千次阅读 2020-03-26 20:45:08
    进程访问冲突 多进程通信 mp.Queue mp.Pipe Value\Array Manager共享Value、Array、dict、list、Lock、Semaphore等 mp.Manager共享自定义类的实例对象 Python进程池 参考 上接Python多线程,简单记录一下...
  • 进程的四个特征

    千次阅读 2021-05-23 10:21:37
    1、并发性:指多个进程实体同存于内存中,且在一段时间内同时运行。并发性是进程的重要特征,同时也成为操作系统的重要特征。 2、动态性:进程的实质是进程实体的一次执行过程,因此,动态性是进程最基本的特征。 3...
  • Linux 进程基本概念 什么是进程

    千次阅读 2019-03-15 20:20:04
    操作系统主要由内核(进程管理、内存管理、文件管理、驱动管理)和其他程序(如函数库、shell等组成)。OS的目的是为了让计算机与硬件交互,管理所有的软硬件资源来为用户(应用程序)提供一个良好的执行环境。通俗...
  • 关于子进程继承父进程信号特性

    千次阅读 2013-04-01 14:42:49
    进程会继承父进程的屏蔽信号和信号处理设置。下面总结一个表,我自己也学习下 信号处理设置(Signal Disposition) 屏蔽信号(Signal Mask) 待处理信号(Pending Signal)  fork execue pthread_create ...
  • 守护进程及其特性   守护进程最重要的特性是后台运行。在这一点上DOS下的常驻内存程序TSR与之相似。其次,守护进程必须与其运行前的环境隔离开来。这些环境包括未关闭的文件描述符,控制终端,会话和进程组,...
  • 详解僵尸进程进程等待

    千次阅读 多人点赞 2021-03-31 16:17:38
    进程为子进程,而原进程为父进程,fork之后通常要用if分流,返回值为0,则为子进程,返回值为大于0(暨为创建出子进程的pid),则为父进程,返回值小于0则创建子进程失败,父子进程的pcb中有相同的代码段,因此...
  • 线程和进程的各自特点和区别

    千次阅读 2018-09-06 10:07:34
    进程的基本特性  a、动态性:进程的实质是程序的一次执行过程,它由系统创建而产生,能够被调度而执行,因申请的共享资源被其他进程占用而暂停,完成任务后被撤销。动态性是进程最重要的特性。  ...
  • Linux进程概念(精讲)

    千次阅读 多人点赞 2021-09-09 08:54:04
    文章目录基本概念描述进程-PCB组织进程查看进程通过系统调用获取进程的PID和PPID通过系统调用创建进程- fork初始进程状态运行状态-R浅度睡眠状态-S深度睡眠状态-D暂停状态-T僵尸状态-Z死亡状态-X僵尸进程僵尸进程的...
  • 72-孤儿进程与孤儿进程

    千次阅读 2017-02-26 15:02:51
    之前有学习过僵尸进程,它指的是“未老先衰”的子进程先于父进程去逝,而父进程未对它进行回收(wait)所产生的。本文来谈谈,另一个对立的概念——孤儿进程,以及孤儿进程组。1. 孤独进程如果一个进程,它的父进程先...
  • shell进程

    千次阅读 2018-06-07 15:55:17
    shell进程1.1 shell的基本概念 shell做为一种和Linux系统的特殊交互式工具,为用户提供了启动程序、管理文件系统中的文件及运行在Linux上的进程的途径。shell通过解析输入的文本命令,在内核中执行来达到与系统交互...
  • 创建守护进程的步骤

    万次阅读 多人点赞 2018-08-03 21:30:55
    实现一个守护进程,其实就是将普通进程按照上述特性改造为守护进程的过程。 需要注意的一点是,不同版本的 Unix 系统其实现机制不同,BSD 和 Linux 下的实现细节就不同。 根据上述的特性,我们便可以创建一个简单的...
  • 文章目录零、前言一、实验内容二、实验步骤三、实验数据及源代码四、实验结果分析五、思考题1、进程创建与进程并发执行2、进程的睡眠、同步、撤消等进程控制3、多进程通过加锁互斥并发运行4、进程间通过信号机制实现...
  • 进程的定义及特征

    万次阅读 2018-03-08 09:40:06
    一、定义:进程是程序的一次执行进程是可以和别的计算并行执行进程是程序在一个数据集合上运行的过程,它是系统进行资源分配和调度的一个独立单位二、特征:动态性:进程的实质是程序的一次执行过程,进程是动态产生...
  • 前言请说说你对守护进程,僵尸进程和孤儿进程的理解解答孤儿进程与僵尸进程:在linux当中,子进程是由父进程创建的,子进程再创建新的进程。子进程的结束和父进程的运行是一个异步的过程,即父进程永远无法预测子...
  • 进程

    万次阅读 2019-03-28 21:04:35
    在Java中synchronized,ReentrantLock,Object.wait() / notify()都属于阻塞锁。 可重入锁:也叫做递归锁,指的是同一线程上该锁是可重入的,对于不同线程则相当于普通的互斥锁。 公平锁:加锁前检查是否有排队等待的...
  • 操作系统之进程—并发进程(一)

    千次阅读 多人点赞 2018-11-03 21:55:22
    3.并发进程特性 并发进程之间的关系分为两类: 无关的 和 交互的 无关的并发进程:一个并发进程不会改变另一个并发进程的变量值 交互的并发进程:一组并发进程共享某些变量,进程的执行可能影响其他并发...
  • 进程池Pool 进程间通信 Queue pipe() Manager 注意事项 参考资料 考虑到现在电脑一般都有双核甚至四核的CPU,故可设计算法并行的方法,通过python编程实现并行运算,从而加快处理的速度。虽然没有GPU进行图像...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 422,131
精华内容 168,852
关键字:

属于进程的特性