计算机操作系统——进程和线程
不忘初心,砥砺前行
作者 | 陌无崖
转载请联系授权
进程的定义
进程时具有一定功能的程序关于某个数据集合上的一次运行活动
为什么需要进程
在传统的计算机运行程序时,往往一次只能运行一个程序,这样对于CPU是极度不公平的,有可能一个程序需要进行计算仅仅需要简单的运算,而大部分都会进行输入输出,因此此时,我们的CPU处于闲置状态,CPU无法最大效率的运行。人们为了提高CPU的效率,人们想把多个程序同时加载到计算机中,也就是我们经常会说的并发执行。为了实现这一点,人们引入进程的概念,
程序和进程的关系
一个程序加载到内存后,就变成了进程,进程是系统进行资源调度和分配的一个独立单位。
进程是什么
从三个角度进行解释,首先从物理内存上:进程是内存的一片内存空间,在任意时刻cpu只能执行一条指令,执行哪条指令由物理程序由程序计数器决定,也就是说,进程共用一个程序计数器;从逻辑上:由于进程可以执行,也可以被挂起,还能继续执行,因此从这个角度看,每个进程有着自己的计数器;从时间上:进程都是向前推进;
进程的管理
引入了进程的概念,就需要对进程进行管理,只有这样各个进程在运行期间才会相互配合且互不影响。因此计算机需要对进程信息进行存储,操作系统对进程的存储引入了进程表的存储结构。
进程在计算机上运行,需要让计算机分配合适的内存,让其有一个安身之处,由于多个进程可能同时并存,因此为了解决让多个进程共享同一个物理内存而不发生冲突,操作系统解决这个问题的手段是内存管理;此外进程也需要进行切换,因此计算机为解决这个问题,则有了进程调度。
进程的创建过程
分配进程控制块
初始化机器寄存器
初始化页表
将程序代码从磁盘读进内存
将处理器状态设置为用户态
跳转到程序的起始地址
进程的几种状态
就绪状态
当进程分配到除了cpu以外的所有必要的资源,只要获得处理机便可以立即执行;运行状态
进程获得了处理机,其程序正在处理机上执行;阻塞状态
正在执行的进程,由于等待某事件发生而无法执行时,便放弃处理机而处于阻塞状态;
进程几种状态的转换
就绪到执行
计算机操作系统调度就绪进程到CPU上进程就到了运行状态执行到阻塞
当运行中的进程因为发生了某个事件的等待,进程因为阻塞无法继续向前推进。执行到就绪
正在执行的进程有可能占用了CPU太长时间,操作系统将其挂起阻塞到就绪
正在阻塞的进程在等待资源到达之前,变为就绪状态,当分配到所需的资源后就可以立即执行。
不可转换的状态
阻塞到执行
操作系统将进程变为执行的时候,是从就绪队列中寻找进程,阻塞进程必须先转换成就绪进程
需要注意的是,此转换在逻辑上是可以实现,只不过计算机不允许这样做。
就绪到阻塞
只有正在执行的进程才有可能发生阻塞,就绪状态不可能直接到阻塞,从逻辑上就不行。
线程
线程是进程的实体,是cpu调度和分派的基本单位,它是比进程更小的能独立运行的基本单位。
为什么需要线程
线程的出现是为了更好的提高CPU的计算效率,由于进程在一个时间做一件事,进程在执行的过程中,如果发生了阻塞,那么整个进程就会无法继续向前推进,比如一个进程需要等待用户输入才能继续向前执行,有可能该进程中不需要等待用户输入的也无法工作。因此计算机科学家们在进程的基础上引入了线程的概念。
举个例子来说如果将进程比作工厂,线程就是工厂里的工人,工人们各自执行着自己的工作,没有关系的工作不会发生互相等待。
由此可以推出:多线程的情况下,增加cpu,可以有效提高进程的执行效率,如果没有线程,一个时间点只能运行一个进程。
进程与线程的关系
一个进程至少有一个线程
一个进程包含多个线程
一个进程的内存空间是共享的,每个线程都可以使用这些共享内存。
线程的同步方式
临界区
当多个线程访问同一个独占性资源的时候,可以使用临界区对象,只有拥有临界区对象的才能访问被保护的资源
事件
一个线程结束之后,主动唤醒另外一个线程,其中事件有两种类型分别是人工事件和自动事件。
互斥量
只有拥有互斥对象的线程才能有访问公共资源的权限,互斥对象只有一个。防止多个线程同时读写某一块内存区域。
信号量
信号量是允许多个线程访问同一个资源,但只能提供给固定数目的线程使用。
总结
多进程形式,允许多个任务同时运行
多线程形式,允许单个任务分成不同的部分运行
协调机制,防止进程和线程之间的冲突,另一方面允许进程之间和线程之间共享资源
END
今日推荐阅读
RabbitMQ系列笔记广播模式和路由模式
RabbitMQ系列笔记入门篇
基于Nginx和Consul构建高可用及自动发现的Docker服务架构
▼关注我,一起成长
主要分享 学习心得、笔记、随笔▼