认识进程
文章目录
引入概念
在讲进程之前需要引入一个操作系统的概念
操作系统分为windows系统,ios系统,安卓系统,鸿蒙系统等等,而操作系统其实就是个软件对上管理各种应用软件对下管理好各种硬件设备
可以简单的分为
如下图 :
当一个应用程序想操作某个硬件时需要借助操作系统来完成,并不是直接取操作硬件设备
而进程管理就是操作系统中的某个功能模块用来管理进程的下面详细介绍
初识进程
进程就是一个exe文件执行后会操作系统就会创建进程 如图
当双击这个文件时会打开一个应用程序后找到任务管理器 打开进程
由此可以得知当打开一个应用程序时则会至少会创建一个进程
进程也是一个正在在运行的程序,它拥有自己的虚拟地址,代码,数据和系统资源等等...
进程的属性
进程是由结构体/类实现的拥有很多属性,下面讲解几个核心点的
pid
pid是各进程的代号,每个进程有唯一的PID编号。它是进程运行时系统随机分配的,并不代表专门的进程。在运行时PID是不会改变标识符的,但是你终止程序后再运行PID标识符就会被系统回收,就可能会被继续分配给新运行的程序。
在任务管理器详细信息栏即可查看pid
内存指针
一个进程要跑起来就需要消耗一定的硬件资源,比如内存,而内存指针也就标识了当前进程使用了哪些内存上的资源
就比如你用钱全款买了个房子,当你没卖之前房产都为你所有
文件描述符表
进程每打开一个文件就会生成一个对应的文件描述符(用来标识这个文件被打开了)
而一个进程可能会打开很多个文件则会生成很多文件描述符,此时可以使用一个顺序表把它进行存储了,就构成了一个文件描述符表
也就是标记了进程在运行时使用了哪些资源如cpu,内存,硬盘等等
进程的调度
1. 进程的状态
简单的认为 进程分为3个状态 执行状态 就绪状态 阻塞状态
执行状态 : 也就是说在当前进程已经在cpu上执行了
就绪状态 : 也就是说该进程随时可以执行
阻塞状 : 该进程暂时无法执行
2. 进程的优先级
进程的调度并不是绝对公平的,有的是优先调度的
3. 进程的上下文
描述当前进程执行到了哪里,类似于做一个存档记录,进程在离开cpu时就需要把cpu内部的一系列寄存器的值存储在进程的上下文当中
当进程下次回来时把进程上下文中的内容在恢复到寄存器
4. 进程的记账信息
统计每个进程当前执行了多久,可以使用这个作为调度的依据
也就是看谁执行的久,谁经常执行,通过这个去判断谁优先调度
并发与并行
这里需要先查看一下cpu的内核,打开任务管理器找到性能点击cpu
我电脑是8核12线程的,也就是8个人可以干12个人事.但是这里执行的进程有287个,它该如何去做呢 这里就需要用到并行+并发来解决
并行
并行顾名思义也就是我这里的8个内核同时干活
例如 : 一个车间有两台机器,早上8点上班,6点下班 小明和小王同时重8点干到6点
并发
并发也就是核心数执行一会qq这个进程,在执行一会微信或者其他的进程,当调度的足够快时就可以相当于8个内核在同时执行287个进程
例如 : 我一周两天学习高数,3天学编程,一天学英语,假设一个年的时间眨眼即使,在直观上看过去我就是在同时学习高数英语和编程
进程的调度是使用并行加并发的方式做的
进程的内存分配与内存管理
操作系统对内存资源的分配,采用的是空间模式 —— 不同进程使用内存中的不同区域,互相之间不会干扰
也就是说如果直接写入到物理内存当中,如果qq这个进程里面的代码bug了指针越界访问了访问到微信这个进程了并且修改了里面的值则引起连锁反应qq和微信同时崩溃这时无法知道是谁引起的,所以就采用了分配一个虚拟地址(页表)给进程在映射到物理内存当中
如图
每个进程虚拟地址是相同的,这样当qq这个进程地址越界访问修改之类的,0xffff变0xfff22再去找这个页表就发现页表没有此地址也就无法真正的修改物理内存,也就不会对别的进程的内存造成数据影响了
进程间的通行
通过进程的内存分配与内存管理的介绍知道进程相互之间是存在隔离性的,但是有的时候需要进程之间交互,相互配合
这里就可以寻找一个公共的区间,用来让两个进程之间完成交互
例如 : 假设我阳了被隔离了,为了一日三餐不被饿死,我就和送饭的约定了一个公共地址,门口的鞋架,当中午时他直接把饭放上面我去拿即可