进程和线程区别、以及进程的同步与互斥

    科技2025-09-30  49

    进程和线程

    一、什么是进程: 站在操作系统的的角度,进程就是一个PCB(进程控制块),系统利用PCB来描述进程的基本情况和活动过程,进程控制、管理过程。 进程是资源分配和调度的基本单位。

    进程如何描述一个运行中的程序: 内存指针、程序计数器、上下文数据、标识符PID、进程状态、状态、优先级、记账信息、IO信息

    进程的特性: 1、动态性:由创建而产生、调度而执行、撤销而消亡,有一定的生命周期 2、并发性:指多个进程实体存在于内存之中,能够在一段时间内同时运行。 3、独立性:进程是一个能够独立运行的,独立获取资源、独立接收调度的基本单位。 4、异步性:各自独立,并且以不可预知的速度向前推进。

    进程的三种状态: 1、就绪态:指的是进程已经处于准备好运行的状态,已经获取到除CPU以外的资源。 2、阻塞态:这里指正在运行的进程由于发生某种事件,例如说(I/O请求,获取缓存失败)导致无法继续执行的状态。 3、运行态:指的是程序已经获取CPU,程序正在执行的状态。

    Linux下的进程状态: 运行态R/可中断休眠状态S/不可中断休眠状态D/停止状态T/死亡状态X/追踪状态t/僵死状态Z 僵死状态:进程已经退出,但是资源并未释放。 僵尸进程:处于僵死状态的进程。 僵死进程的产生: 子进程先于父进程退出,为了保存退出的原因,因此资源并没有完全释放,因此在子进程退出后,操作系统会通知父进程来回收子进程的资源,如果父进程未关注子进程的状态,那么就会产生僵尸进程。

    1、僵尸进程的危害:资源泄露 2、僵尸进程的避免:进程等待 3、僵尸进程的处理:退出父进程 fork()创建子进程后,代码共享数据独有。

    孤儿进程:父进程先于子进程退出,子进程成为孤儿进程,运行在后台,父进程成为1号进程(Init进程)(孤儿进程不会成为僵尸进程) 守护进程(精灵进程):特殊的孤儿进程(在孤儿进程的基础上,脱离终端脱离登录会话)(通常在后台运行,默默的工作,不希望受到终端会话的影响)

    二、什么是线程: 线程:是操作系统进程中能够独立执行的实体(控制流),是处理器(CPU)调度和分配的基本单位。

    线程是一个轻量级的进程一个进程可以并行多个线程进程中的线程共享内存线程间的通讯在共享内存中的地址空间上执行,不需要额外的通讯地址,速度更快。

    三、进程与线程的比较 1、进程是资源调度的基本单位,线程是程序执行的最小单位。 2、进程拥有自己独立的地址空间,每启动一个进程系统就会为其分配相应的地址空间,建立数据表来维护代码段,堆栈和数据段,这种开销非常昂贵。而线程没有独立的地址空间,共享的是进程中的数据,使用相同的地址空间。 3、CPU切换一个线程的比切换一个进程花费小,线程比进程的开销小 4、进程对资源的保护要求高,线程资源保护不高。 5、多进程程序更加健壮,多线程程序只要有一个死掉,整个进程也会死掉,而一个进程死掉,并不会造成其他进程的影响。

    四、进程的同步与互斥

    1、进程的同步:进程之间一种直接的协同工作关系,一些进程相互合作,共同完成一项任务。进程之间的同步也是进程间的一种直接制约关系,一个进程的执行依赖另一个进程的消息,当一个进程执行到某一点时,必须得到另一个进程发来的消息,在没有得到另一个进程的消息时,进程应该等待,直到消息到达才被唤醒,继续进程的执行。

    2、进程的互斥:进程的互斥是进程间的一种间接制约关系。许多进程常常需要共享资源,而这些资源往往要求排他性的使用,即一次只能为一个进程服务,因此各进程间只能互斥使用这些资源,进程间的这种关系就是进程的互斥。

    3、临界区:进程中访问临界资源的程序。系统中的某些资源一次只允许一个进程使用,则这类资源称为临界资源和共享变量,为了保证系统中各并发进程顺利进行,对两个以上欲进入相关临界区的进程必须实行互斥,所以系统必须采取合理的调度措施。

    同步机制应该遵循的规则:

    空闲让进:临界区为空时,允许一个就绪进程立刻进入临界区。无空等待:临界区有运行进程,则其他要求进入临界区的进程必须等待。有限等待:对要求访问临界资源的进程,应该保证在有限的时间段里,能进入到自己的临界区,以免与陷入“死等”状态。让权等待:当进程不能进入自己的临界区,应当立即释放处理机,以免进程陷入“忙等”状态。多中选一:临界区没有运行进程。从多个进程中只选择其中之一进入临界区,其他进程必须等待。
    Processed: 0.014, SQL: 8