目录
进程和线程区别
进程和线程切换的区别
系统调用流程
系统调用是否会引起线程切换
为什么需要使用虚拟内存
进程和线程区别
本质区别:
进程是资源分配的基本单元。
线程是操作系统调度的基本单元。
地址空间:
进程具有独立的虚拟地址空间。
线程共享进程的虚拟地址空间。
内存:
系统为每个进程分配不同的内存空间
线程使用的资源来源于所属进程。
并发性:
线程是系统调用的最小单位,线程切换性能好,并发性能好。
进程和线程切换的区别
本质是上下文的切换。
- 用户级上下文
- 系统级上下文:进程标识信息、进程线程信息、进程控制信息、系统内核栈
- 寄存器上下文:硬件上下文 cpu各寄存器的内容
何时切换:
- 主动:条件不满足
- 被动:时间片结束
进程切换过程:
- 保存当前进程的硬件上下文
- 修改进程的PCB,状态由运行改为就绪或者阻塞 加入相关队列
- 调度另外一个进程
- 修改该调度进程的PCB,状态修改为运行
- 把当前进程的存储管理数据改为被调度进程的存储管理信息(页表,TLB)
- 恢复被调度进程的硬件上下文,让PC指向被调度的进程代码
进程和线程有哪些状态
进程在并发执行时共享系统资源,导致它们在运行过程中呈现间断性的运行规律,在执行过程中,有时进程正在被CPU处理,有时又需要等待CPU服务,所以进程在其生命周期内可能存在多种状态。 为了方便对各个进程的管理,操作系统一般将进程划分为运行状态、就绪状态、阻塞状态、创建状态和结束状态五种状态。 其中运行状态、就绪状态和阻塞状态这三种是进程的基本状态,需要我们重点关注。
运行状态表示进程占有着CPU并正在运行。
就绪状态表示进程已分配到所需资源,已经具备运行条件,但是由于此时没有空闲的CPU而暂时不能运行。
阻塞状态表示进程正在等待某一事件(比如IO请求)的发生而暂时停止运行,处于阻塞状态时,进程本身不具备运行条件,即使给它分配CPU资源也无法运行。 进程的另外两种状态,创建态表示进程正在被创建,尚未转到就绪态。结束状态表示进程正从系统中消失,可能是进程正常结束或其他原因退出运行。 当进程的运行环境在满足一定条件后,就会从一种状态变化为另外一种状态。进程间的状态变化总共有以下六种情况:
1、当进程被创建完成并初始化后,一切就绪准备运行时,此时进程就从创建状态变为就绪状态。
2、处于就绪状态的进程被操作系统的进程调度器选中后,就分配给 CPU 正式运行该进程,此时进程就从就绪状态变为运行状态。
3、当进程已经运行完成或出错时,会被操作系统作结束状态处理,此时进程就从运行状态变为结束状态。
4、处于运行状态的进程在运行过程中,由于分配给它的运行时间片用完,操作系统会把该进程变为就绪态,接着从就绪态选中另外一个进程运行,此时进程就从运行态变为就绪态。 5、处于运行状态的进程请求某个事件,例如请求 I/O 事件,必须等待时,此时就从就从运行状态变为阻塞状态。
6、当进程等待的事件完成时,此时进程就从阻塞状态变为就绪状态。
进程状态变化需要注意两点:
1、进程只能从运行状态变为阻塞状态,无法从就绪状态变为阻塞状态,因为进程变为阻塞状态是进程去请求某种资源导致的,是进程自发的行为,必然是发生在进程正在运行处于运行状态的时候。
2、进程无法直接从阻塞状态变为运行状态,因为一个进程被分配CPU资源进行运行,是由操作系统进行调度的,进程请求到资源后,只能先变为就绪状态,然后等待操作系统的调度,等被分配到CPU资源后,才会变为运行状态。
系统调用流程
请求准备:系统调用号 -> eax寄存器
(设置系统调用号,每个系统调用都有一个特有的系统调用号放到寄存器中)
触发中断:执行int 0x80 用户态 切换到 内核态
- 1 保存用户态状态
- 2 运行内核代码 - 执行中断处理
- 3 恢复运行现场 - 中断返回
2 执行中断处理:
根据中断号从系统调用表的查找表来找到与该号码关联的具体函数,内核开始执行这个函数。
3 中断返回:
iret 将返回值返回,并从内核态切换到用户态
系统调用是否会引起线程切换
不一定,如果是阻塞IO且IO未就绪,就是他在阻塞等待了,那么线程会切换;
非阻塞IO不会导致线程切换。
为什么需要使用虚拟内存
也就是为什么进程需要通过一个页表映射到物理内存。
内存利用率:通过需求分页或需求分段,只有当进程真正访问一个页面或段时,它才会被加载到物理内存中。这使得更多的进程可以同时在内存中运行(即便它们的总虚拟内存使用超过了可用的物理内存),从而提高了内存的利用率和系统的吞吐量。
抽象与隔离:虚拟内存为每个进程提供了它自己的地址空间,使其看起来好像它独占了全部的物理内存。这样,每个进程都不能直接访问其他进程的内存,从而实现了进程间的隔离,提高了系统的安全性和稳定性。文章来源:https://www.toymoban.com/news/detail-692521.html
磁盘与内存之间的交换:当物理内存不足时,操作系统可以将不常用的内存页面移到磁盘上的交换区或页面文件中,从而释放物理内存供其他进程使用。当进程再次访问被换出的页面时,操作系统可以将其换回内存中。文章来源地址https://www.toymoban.com/news/detail-692521.html
到了这里,关于C++进程、线程、内存管理的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!