什么是进程
简单来说, 一个运行起来的程序就是一个进程 !
进程是操作系统进行资源分配的基本单位 .
例如 : 当我们去打开QQ , 于是就在系统中形成了一个进程 .
通过任务管理器 , 可以看到这么多的进程在运行.
进程管理
进程多了 , 自然就要进行管理 .
所谓的管理 , 可以分为两步 :
1 . 描述一个进程 : 使用 结构体 / 类 , 把一个进程有那些信息表示出来.( 结构体 也可以称为 PCB (process control block))
2 . 组织这些进程 : 使用 一定的数据结构, 把这些 结构体/对象 放到一起.
进程中结构体有那些重要的属性 ?
1 . pid : 每个进程都有的一个唯一身份标识
2 . 内存指针 : 当前这个进程使用的内存是哪个部分.(进程运行的时候, 使用了那些内存上的资源)
3 . 文件描述符表 : 文件指的是 硬盘上存储的数据 , 进程每打开一个文件 , 就会产生一个 "文件描述符"(标识了这个被打开的文件) 一个进程可能打开很多文件 , 对应了一组文件描述符, 把这些文件描述符放到一个顺序表这样的结构里 , 就构成了 文件描述符表.(进程运行时,使用了那些硬盘上的资源)
4 . 进程调度
1) 进程状态 :
进程的状态主要分为两个 : 就绪态和阻塞态 , 就绪态 : 表示该进程随时可以上cpu执行.
阻塞态 : 该进程暂时无法上cpu执行.
2) 进程的优先级
进程之间的调度存在优先调度的情况 .
3) 进程的上下文
上下文, 就是描述了当前进程执行到哪了. 因为进程在离开cpu的时候就要把当前运行的中间结果 进行" 存档 " , 当下次进程回来 cpu 上 , 再恢复之前的 "存档" , 从上次的结果继续往后执行 .
4) 进程的记账信息
记账信息 : 统计了每个进程 在cpu 上执行了多久了 , 可以作为调度的参考依据 .
如何组织这些进程
操作系统使用双向链表这样的结构来组织 pcb
创建一个进程, 就是创建一个 链表的节点.
销毁一个进程, 就是把链表的节点给删除了.
遍历进程列表 , 就是在遍历链表.
并行 与 并发
程序要想运行 , 就离不开 cpu .而cpu 一时间能运行的进程数是有限的 , 因此就有了 并行与并发.
CPU 有一个核心数 , 我的这个电脑同时只能让8个进程工作 .
但是这有 100多个进程, 计算机是怎么样来运行的呢?
并行 : 同一时间 , 两个核心 , 同时执行两个进程 , 此时这两个进程就是并行执行的 .
并发 : 一个核心, 但是有三个任务 , 它的流程是 : 先执行进程1, 执行一会儿后 , 再去执行进程2,
执行一会儿之后, 再去执行进程3. 注意! 因为cpu运算的速度非常快 , 宏观上看起来 进程 1 2 3就好像是在" 同时 "运行 .
因此说 只有 8个核心 , 也是可以完成100多个进程工作的. 通过 并行 + 并发的方式来完成. 具体是使用并行还是并发 , 完全是由操作系统自身控制的.
进程与线程
创建一个进程 / 销毁一个进程 / 调度一个进程 , 它们的成本都是很高的 , 原因就体现在资源分配上 .
资源分配往往是一个很耗时的操作.
因此说 进程是比较 "重量的" 速度慢/消耗资源多.
线程则是更轻量的进程.是因为一个进程可以包括多个线程 , 而多个线程都是一个独立的可以调度执行的" 执行流 " , (这些执行流之间本事就是并发的). 同时这些线程共用一份进程的系统资源. 也就是说 , 对于线程而言 , 系统资源是已经分配好了的 , 创建线程就省下了分配资源的开销 .
区别 :
1 . 进程包含线程
2 . 进程有自己独立的内存空间和文件描述符表, 同一个进程中的多个线程之间共享同一份地址空间和文件描述符表.
3 . 进程是操作系统资源分配的基本单位 , 线程是操作系统调度执行的基本单位 .
4 . 进程之间具有独立性 , 一个进程挂了, 不会影响到别的进程 . 同一个进程中的多个线程之间 , 一个线程挂了 , 可能会把整个进程带走 , 影响到其他线程的 .文章来源:https://www.toymoban.com/news/detail-552126.html
End....文章来源地址https://www.toymoban.com/news/detail-552126.html
到了这里,关于进程的基本概念的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!