目录
什么是进程?
操作系统
进程控制块(PCB)
PCB中的一些属性
pid(进程id)
内存指针
文件描述符表
状态
优先级
记账信息
上下文
并行,并发
CPU分配——进程调度
内存分配——内存管理
进程间是如何通信的
什么是进程?
如图,当我们调出电脑的任务管理器即可看到这些内容,而这些就是进程。
进程还有一个名字 任务
进程就是操作系统对一个正在进行的程序的一种抽象,简的来说,我们可以把进程当做程序的一次运行过程,同时,在操作系统内部,进程又是操作系统进行资源分配的基本单位,到这,我们就要来讲讲什么是操作系统了
操作系统
操作系统(Operation System, OS) 是指控制和管理整个计算机系统的硬件和软件资源,并合理的组织和调度计算机的工作和资源的分配,以提供给用户和其它软件方便的接口和环境,它是计算机系统中最基本的系统软件。
操作系统(Operation System, OS) 是指控制和管理整个计算机系统的硬件和软件资源,并合理的组织和调度计算机的工作和资源的分配,以提供给用户和其它软件方便的接口和环境,它是计算机系统中最基本的系统软件。
操作系统是计算机资源管理的软件的统称,据我们常见的操作系统有:Windows系列,Linux系列,ios系列,Android系列等等。
那操作系统有什么作用呢?
1.防止硬件被失控的应用程序滥用
2.向应用程序提供简单一致的机制来控制复杂而又通常大相径庭的低级硬件设备
那么操作系统是如何管理进程的呢?
1.先描述一个进程(明确出一个进程上面的一些相关属性)
操作系统里面主要都是通过C/C++来实现的,此处的描述就是用的C语言中的“结构体”,而在操作系统中描述进程的这个结构体称为“PCB”
2.在组织若干个进程(使用一些数据结构,把很多描述进程的信息给放到一起,方便进行增删改查)
其中应用数据结构的典型实现就是使用双向链表吧每个进程的PCB串起来,操作系统的种类是很多的,内部的实现也各有不同,在这,我们是拿Linux这个系统为例
进程控制块(PCB)
PCB中的一些属性
pid(进程id)
pid(进程id)
pid是进程的身份标识,身份证号
内存指针
内存指针指明了这个进程执行的代码/执行的指令在内存中的哪里,以及这个进程执行中的一来的数据在哪里
文件描述符表
在程序运行的过程中,经常要和文件打交道(文件是在硬盘上的),进程每次打开一个文件,就会在文件描述符表中增加一项(这个文件描述符表我们可以把它看作是一个数组,里面的每一个元素,就是一个结构体,存储对应的文件相关信息)
当一个进程启动,不管你代码中是否写打开/操作文件的代码,都会默认打开三个文件-----(系统自动打开的),1.标准输入。 2. 标准输出。 2.标准错误
在程序运行的过程中,经常要和文件打交道(文件是在硬盘上的),进程每次打开一个文件,就会在文件描述符表中增加一项(这个文件描述符表我们可以把它看作是一个数组,里面的每一个元素,就是一个结构体,存储对应的文件相关信息)
当一个进程启动,不管你代码中是否写打开/操作文件的代码,都会默认打开三个文件-----(系统自动打开的),1.标准输入。 2. 标准输出。 2.标准错误
以上的三个属性是PCB的基础属性,而我们接下来所说的一组属性,主要是为了能够实现进程的调度,这就是理解进程管理的重要话题,在我们现在所用的操作系统,一般都是“多任务操作系统”,就是一个系统,同一时间,可以执行多个任务,而在此之前,它的前身就是“单任务操作系统” 就是同一时间只能执行一个进程,而单任务操作系统,就不同考虑进程的调度
状态
状态就是用来表述当前这个进程接下来应该怎么调度,常见的状态有
就绪状态:随时可以去CPU上执行
阻塞状态/睡眠状态:咱是不可以去CPU状态上执行
在Linux中,进程状态还有很多其他的
优先级
指优先给谁给那个进程分配时间,后给谁,以及分多点还是分少点
指优先给谁给那个进程分配时间,后给谁,以及分多点还是分少点
记账信息
统计每个进程 都分别被执行了多久,执行了那些命令。排队拍了多久,是用来给进程调度知道依据的。
统计每个进程 都分别被执行了多久,执行了那些命令。排队拍了多久,是用来给进程调度知道依据的。
上下文
就表示了上次进程被调度出CPU的时候,当时程序的执行状态,下次进程上CPU的时候,就可以恢复之前的装潢太,然后继续往下执行,就类似与备份/存档
进程被调度出CPU之前,就先把CPU中的所有寄存器中的数据给保存到内存中(PCB的尚希文字段中)就相当于存档了
下次进程在被调度上CPU的时候,就可以从方才的内存中恢复这些数据到寄存器中,就相当于读档
而存档和读档就构成了上下文
就表示了上次进程被调度出CPU的时候,当时程序的执行状态,下次进程上CPU的时候,就可以恢复之前的装潢太,然后继续往下执行,就类似与备份/存档
进程被调度出CPU之前,就先把CPU中的所有寄存器中的数据给保存到内存中(PCB的尚希文字段中)就相当于存档了
下次进程在被调度上CPU的时候,就可以从方才的内存中恢复这些数据到寄存器中,就相当于读档
而存档和读档就构成了上下文
并行,并发
并行:从微观上,相当于两个CPU核心,同时执行两个任务和代码
并发:从微观上,相当于一个CPU核心,先执行一会儿任务1,在执行一会儿任务2,········在执行一会儿任务3,在执行一会儿任务1 ,只要切换的足够快,宏观上看起来,就相当于与这些任务同时执行一样
并行和并发这俩只是在微观上有区分
宏观上咱们区分不了,微观上这道理的区分都是操作系统自行调度的结果,正因为我们在宏观上区分不了并行并发,我们在写代码的时候也就不具体区分这两个次,通常情况下只用并发这个词,来代指并行+ 并发
CPU分配——进程调度
进程的调度就是操作系统在考虑CPU的资源如何给各个进程分配
内存分配——内存管理
那么内存资源是如何分配的呢? 这里用到了虚拟内存地址
由于操作系统上,同时运行着很多个进程,当其中一个进程出现了bug,进程崩溃了,那这样是否会影响到其他的进程呢? 这里现代的操作系统能够做到这一点,就是“进程的独立性”来保证的,就依赖了“虚拟地址空间”
进程间是如何通信的
在操作系统中,提供的“公共空间有很多种”,并且个有特点,有的存储空间大有的小,有的速度快有的慢,在操作系统中提供了很多种这样的进程间通信机制
而我们常用的,最主要使用的进程通信方式有俩种:
1.文件操作
2.网络操作



