进程详解,内核空间,优先级,状态转换,LRU算法,Cow机制(多进程,多线程)

0信号检查错误

Killall -0 进程

在这里插入图片描述

一.基础知识

进程:在内存中的正在运行中的程序(文件)
进程ID:PID,
进程属性:用户信息:所有者,所属组,存在生命周期

多个进程组成的链表task list
守护进程:daemon随着计算机的启动而启动,关闭而关闭
用pstree可以看到---->Centos6之前的
在这里插入图片描述
Centos7用软连接的方式将init替代成可systemd
在这里插入图片描述
在这里插入图片描述

有花括号的为线程
在这里插入图片描述

COW机制

Cow(copy on write)机制:写时复制,发生变化的时候才有复制行为
当创建子进程后,这个子进程不会立即分配空间,可能与父进程使用相同的内存空间,当子进程有数据的更新,他会复制父进程的空间(可以节约内存空间)cow

简单理解为

  • 进程:一个在内存中运行的应用程序。每个进程都有自己独立的一块内存空间,一个进程可以有多个线程,比如在Windows系统中,一个运行的xx.exe就是一个进程。
  • 线程:进程中的一个执行任务(控制单元),负责当前进程中程序的执行。一个进程至少有一个线程,一个进程可以运行多个线程,多个线程可共享数据
    与进程不同的是同类的多个线程共享进程的堆和方法区资源,但每个线程有自己的程序计数器、虚拟机栈和本地方法栈,所以系统在产生一个线程,或是在各个线程之间作切换工作时,负担要比进程小得多,也正因为如此,线程也被称为轻量级进程。

携程:和开发相关,相互之间的调度,式独立的语句块由程序员控制
在这里插入图片描述
Page Frame: 页框,用存储页面数据,存储Page 4k
进程以页page为单位分配4K (不能改变)

物理地址空间和线性地址空间
MMU内存管理单元Memory Management Unit 负责把应用程序(虚拟的)线性内存转换为物理内存
TLB:Translation Lookaside Buffer 翻译后备缓冲器,用于保存虚拟地址和物理地址映射关系的缓存
LRU:Least Recently Used 近期最少使用算法,释放内存

进程与线程的区别总结

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

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

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

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

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

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

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

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

下图是 Java 内存区域
在这里插入图片描述

多进程,多线程

介绍

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

  • 多线程:在同一个进程中同时运行的多个任务
    多线程主要是为了节约CPU时间,发挥利用,根据具体情况而定. 线程的运行中需要使用计算机的内存资源和CPU。

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

多线程提高CPU使用率
在这里插入图片描述

多进程:

  • 多进程优点

1、每个进程互相独立,不影响主程序的稳定性,子进程崩溃没关系;

2、通过增加CPU,就可以容易扩充性能;

3、可以尽量减少线程加锁/解锁的影响,极大提高性能,就算是线程运行的模块算法效率低也没关系;

4、每个子进程都有2GB地址空间和相关资源,总体能够达到的性能上限非常大。

  • 多进程缺点

1、逻辑控制复杂,需要和主程序交互;

2、需要跨进程边界,如果有大数据量传送,就不太好,适合小数据量传送、密集运算 多进程调度开销比较大;

3、最好是多进程和多线程结合,即根据实际的需要,每个CPU开启一个子进程,这个子进程开启多线程可以为若干同类型的数据进行处理。当然你也可以利用多线程+多CPU+轮询方式来解决问题……

4、方法和手段是多样的,关键是自己看起来实现方便有能够满足要求,代价也合适。

多线程:

  • 多线程的优点

1、无需跨进程边界;

2、程序逻辑和控制方式简单;

3、所有线程可以直接共享内存和变量等;

4、线程方式消耗的总资源比进程方式好。

  • 多线程缺点

1、每个线程与主程序共用地址空间,受限于2GB地址空间;

2、线程之间的同步和加锁控制比较麻烦;

3、一个线程的崩溃可能影响到整个程序的稳定性;

4、到达一定的线程数程度后,即使再增加CPU也无法提高性能,例如Windows Server 2003,大约是1500个左右的线程数就快到极限了(线程堆栈设定为1M),如果设定线程堆栈为2M,还达不到1500个线程总数;

5、线程能够提高的总性能有限,而且线程多了之后,线程本身的调度也是一个麻烦事儿,需要消耗较多的CPU。

应用场景

在这里插入图片描述

其他

用户内核空间

0-3G给进程使用(用户空间)
3G-4G操作系统(内核空间)
代码段:程序运行的二进制程序
数据段:进程运行中的变量(赋值了)
BSS:以符号开始的块(变量,没赋值)
堆:存放系统中,需要使用的空间,动态空间
栈:可以临时存一些函数变量(先进先出)在这里插入图片描述

进程的基本状态和转换

在这里插入图片描述
创建状态:进程在创建时需要申请一个空白PCB(process control block进程控制块),向其中填写控制和管理进程的信息,完成资源分配。如果创建工作无法完成,比如资源无法满足,就无法被调度运行,把此时进程所处状态称为创建状态
就绪状态:进程已准备好,已分配到所需资源,只要分配到CPU就能够立即运行
执行状态:进程处于就绪状态被调度后,进程进入执行状态
阻塞状态:正在执行的进程由于某些事件(I/O请求,申请缓存区失败)而暂时无法运行,进程受到阻塞。在满足请求时进入就绪状态等待系统调用
终止状态:进程结束,或出现错误,或被系统终止,进入终止状态。无法再执行

同时运行(牺牲效率):把一个cpu的运行时间,切成相同的小片(时间片),一个时间片可运行一个进程,时间片的(时间到),就停止当前进程,运行下一个进程
如果进程没有运行完,在这之间就有一个切换的过程,(要花时间成本)

状态之间转换六种情况
可能发生的
运行——>就绪:1,主要是进程占用CPU的时间过长,而系统分配给该进程占用CPU的时间是有限的;2,在采用抢先式优先级调度算法的系统中,当有更高优先级的进程要运行时,该进程就被迫让出CPU,该进程便由执行状态转变为就绪状态

就绪——>运行:运行的进程的时间片用完,调度就转到就绪队列中选择合适的进程分配CPU
运行——>阻塞:正在执行的进程因发生某等待事件而无法执行,则进程由执行状态变为阻塞状态,如发生了I/O请求
阻塞——>就绪:进程所等待的事件已经发生,就进入就绪队列

以下两种状态是不可能发生的
阻塞——>运行:即使给阻塞进程分配CPU,也无法执行,操作系统在进行调度时不会从阻塞队列进行挑选,而是从就绪队列中选取

就绪——>阻塞:就绪态根本就没有执行,谈不上进入阻塞态

LRU算法

最近最少使用算法,释放内存
老数据在最下面,新数据在最上面,重复访问(调到最上)

假设序列为 4 3 4 2 3 1 4 2
物理块有3个,则

第1轮 4调入内存 4
第2轮 3调入内存 3 4
第3轮 4调入内存 4 3
第4轮 2调入内存 2 4 3
第5轮 3调入内存 3 2 4
第6轮 1调入内存 1 3 2
第7轮 4调入内存 4 1 3
第8轮 2调入内存 2 4 1
在这里插入图片描述

IPC进程间通信

IPC: Inter Process Communication

同一主机
pipe 管道(单工)管道文件p开头的(基于FIFO先进先出)
在这里插入图片描述

socket 套接字文件(双工)
s开头
signal 信号
例如sleep休眠而ctl+C相当于给sleep发了一个信号
在这里插入图片描述

semaphore 信号量,一种计数器
某个进程使用资源计数器-1,释放资源计数器+1
不同主机

1.套接字socket由(ip和端口号)组成确定应用程序的位置
2.RPC远程过程调用,有功能不在本机,而在其他电脑(需要调用另一台电脑)
3.MQ消息队列,多个进程的数据通信

进程优先级

在这里插入图片描述

在这里插入图片描述
进程优先级:

系统优先级:数字越小,优先级越高
0-139:各有140个运行队列和过期队列、

实时优先级realtime: 99-0 值最大优先级最高
先进先出FIFO/轮寻RR

非实时优先级100-139

nice值:-20到19,对应系统优先级100-139
-20优先级最高,19优先级最低
在这里插入图片描述

Big O时间复杂度,用时和规模的关系
O(1), O(logn), O(n)线性, O(n^2)抛物线, O(2^n)

进程状态

Linux内核:抢占式多任务

进程文件目录/proc/ procress进程
每个进程在proc里面都会有一个文件夹(文件名为PID)

进程类型
守护进程: daemon,在系统引导过程中启动的进程,和终端无关进程
前台进程:跟终端相关,通过终端启动的进程
注意:两者可相互转化

进程状态
运行态:running

就绪态:ready

睡眠态:sleep

可中断:interruptable

不可中断:uninterruptable

停止态:stopped,暂停于内存,但不会被调度,除非手动启动

僵死态:zombie,结束进程,父进程结束前,子进程不关闭

R:running
S: interruptable sleeping
D: uninterruptable sleeping
T: stopped
Z: zombie
+: 前台进程
l: 多线程进程
L:内存分页并带锁
N:低优先级进程
<: 高优先级进程
s: session leader,会话(子进程)发起者

系统管理工具

进程的分类
CPU-Bound:CPU密集型,非交互
IO-Bound:IO密集型,交互

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值