随笔 - 9  文章 - 0  评论 - 0  阅读 - 659

进程和线程的一些知识整理

1.什么是进程?

  运行程序的封装,操作系统进行资源调度分配的基本单位。

 

2.什么什么是进程表?

  由一个结构数组组成,每个进程占一个进程表项,表项包含进程的重要信息(程序计数器、堆栈指针、内存分配情况、文件状态、账户调度信息等),保证进程能随后再次启动。

 

3.什么是并行和并发?

  并发:单个核心在很短时间分别执行多个进程。

  并行:多个核心同时执行多个进程。

 

4.进程的几个状态

  运行态:进程占用cpu;

  就绪态:由于其他进程在运行二暂时停止运行;

  就绪挂起:进程在外存,进入内存马上运行;

  阻塞态:进程在等待某一事件而暂时运行;

  阻塞挂起:进程在外存,并等待某一事件发生。

 

5.什么是进程控制块(PCB)?

  进程存在的唯一标识,用于操作系统感知进程,有以下信息:

  进程描述信息:进程标识符、用户标识符等;

  进程控制和管理信息:进程状态、优先级等;

  进程资源分配清单:虚拟内存空间信息地址、打开文件列表等;

  cpu相关信息:cpu寄存器的值,便于进程重断点处继续运行。

 

6.进程切换为何比线程慢?

  进程的切换涉及到虚拟地址空间的切换,而线程没有。虚拟地址转换为物理地址涉及页表查找,页表查找很慢,因此常利用TLB快表来缓存常用的地址映射,页表切换或导致TLB失效,虚拟地址转为物理地址就会变慢,而线程不会。

 

7.什么是守护进程?

  守护进程是指在后台运⾏的,没有控制终端与它相连的进程。它独⽴于控制终端,周期性地执⾏某种任务。 Linux的⼤多数服务器就是⽤守护进程的⽅式实现的,如web服务器进程http等。

 

8.什么是多进程?

  通过父进程fork()多个子进程,称为多进程。父子进程除pid号不相同外,几乎所有部分一样。两者共享数据,但在子进程写数据时,会将公共数据重新拷贝一份再修改,而不是在同一块数据修改。

 

9.什么是僵尸进程?如何避免?

  多进程情况下,子进程结束后,父进程还没捕获子进程退出状态前,子进程变为僵尸进程。目的在于维护子进程信息便于父进程捕获。僵尸进程会占用内核资源,因此要避免僵尸进程的产生和持续时间。

  避免:调用wait等待子进程会导致父进程阻塞,调用waitpid不会产生阻塞。忽略signal信号可以把僵尸进程交给init进程处理。而不是等待wait回收资源。

 

10.进程的算法调度有哪几种?

  (1)批处理系统中

      先来先服务:每次调度选择最先进入队列的进程,分配处理机。(利于长进程,不利于断进程) 

      短作业优先:按照估计运行时间进行调度,时间短的先调度。(平均周转时间最短,利于短进程,不利于长进程,可能产生饥饿现象)

      最短剩余时间优先:按估计剩余最短时间调度

  (2)交互式系统中

      高优先权优先调度:为每个进程分配不同的优先级,先调度优先级高的进程。又分为抢占式和非抢占式两种。

      高响应比优先调度:短作业和优先级调度的结合,使用动态的优先级,保证长作业也能够有机会被调度,优先级=1+等待时间/服务时间

      基于时间片轮转调度:进程队列中每个进程依次运行一个时间片,雨露均沾,但和时间片选取很重要,太长不能保证实时性,太短会导致进程切换频繁浪费时间。

      多级反馈队列:有多个进程队列,每个队列进程优先级不一样,每个队列都是时间轮转调度,高优先级队列处理完在处理低优先级,每一次调度后的进程降一级队列。

 

11.进程间的通信方法?

  无名管道:半双工;单向;管道中数据先入先出;管道数据无格式,需要双方约定格式;不属于文件系统,存在于内存的一个缓冲区,系统不同大小不同;读数据时一次性操纵;只能在有公共祖先的进程使用;存在阻塞方式。

  有名管道:相对于无名管道多了一个路径名与之关联,以FIFO形式存在于文件系统中,因此不相关进程也能用其通信。

  内存共享:两个进程创建一块共享内存数据,两个进程通过共同修改缓冲区文件进行通信。通信最快的方式。

  消息队列:A发信息给B,A将数据放到对应的消息队列,B需要的时候再去读。特点:消息队列是以消息链表保存在内核中,当读取一个消息体,内核就会删除这个消息体,也就是一个消息体只能读一次;如果没有释放消息队列或者关闭操作系统,消息队列会一直存在。 缺点: 通信不及时,传输数据有长度限制,且有数据拷贝开销。

  信号:简单;不能携带大量信息;满足特点条件才发送。

  套接字:可用于与其他机器间通信。

 

12.什么是线程?

  cpu调度和分配的基本单位,是比进程更小的能独立运行的基本单位。 一个进程里面可以有多个线程,分别完成不同的任务,共享地址空间、文件等资源,但每一个线程都有自己的程序计数器、寄存器、堆栈

 

13.线程的三种实现

  1)⽤户线程:⽤户空间实现的线程,由基于⽤户态的线程库管理;

    优点:管理不需要内核直接参与,因此可⽤于不⽀持线程技术的操作系统;⽤户线程切换由线程库调度,不需要⽤户态与内核态之间转换。

    缺点:由于不由操作系统调度,⼀旦⽤户线程发起系统调⽤⽽阻塞,那么此进程下⽤户线程都⽆法运⾏;⼀旦某个⽤户线程正在运⾏,只有当其交出CPU执⾏权,其他⽤户线程才可以运⾏,⽆法被打断,因为只有操 作系统才有权限打断运⾏,但是操作系统不直接参与调度;⽤户线程操作系统⽆法感知,CPU资源是直接分配给线程所在的进程,因此分到具体⽤户线程的时间⽚就较短了。

  2)内核线程:由操作系统管理、调度,其TCB是存放在内核中。⼀般由操作系统事先创建内核线程集(类似于线程池),数量有限。

    优点:当⼀个内核线程发起系统调⽤阻塞时不会影响其它内核线程的执⾏;操作系统将CPU资源直接分配给内核线程,更多CPU时间。

    缺点:需要由内核来维护内核线程的上下⽂信息及运⾏状态等,占⽤内核资源;内核线程创建、终⽌、切换都是在内核中进⾏,开销⽐较⼤。

  3)轻量级线程 LWP:

    内核⽀持的⽤户线程,像普通进程⼀样被调度,其类似于进程中的执⾏线程。 每个LWP都需要⼀个内核线程的⽀持(CPU资源分配、调度),实际上⽤户线程是运⾏在LWP上的。

 

14.进程与线程区别?

  1)进程是资源分配的基本单位,线程不拥有资源,但同一进程下的线程共享该进程的资源;

  2)线程是进程的一个执行流,是CPU调度和分派的基本单位,是比进程更小的能独立运行的基本单位;

  3)在创建和撤销进程时,系统都会分配和回收资源,所花费的开销都远远大于线程创建和撤销的开销;同样,进程切换涉及当进程的cpu环境的保存和新进程cpu环境的设置,而线程只需要保存和设置少量的寄存器内容,开销更小;

  4)线程之间通信可以通过直接读写同一进程中的数据来完成,进程通信需要借助IPC来完成。

 

 

 

 

 

 

  

 

posted on   俊男  阅读(56)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示