打开我们电脑的任务管理器.
我们电脑中的.exe
文件,如果我们不去双击运行它的话,他只会静静的躺在你的硬盘空间里,也就是说在我们双击它之前,它不会对我们的系统产生任何影响。但双击执行exe文件后,操作系统就会把这个exe给加载到内存中,让CPU执行exe内部的一些指令。开始进行一些具体的工作,把这些运行起来的可执行文件,称为“进程”
进程是操作系统对一个正在运行的程序的一种抽象,换言之,可以把进程看做程序的一次运行过程;同时,在操作系统内部,进程又是操作系统进行资源分配的基本单位。
(明确一个进程上面的一些相关属性)
首先我要给大家介绍一下 "PCB"(进程控制块)~注意并不是那个参见的PCB
板(这个是硬件中的),在操作系统里面主要是通过c/c++
来实现相关属性,此处描述其实就是用的c语言中的“结构体” (也就和Java
中的类差不多). 操作系统中描述进程的这个结构体,称为 'PCB'
(使用一些数据结构,把很多描述进程的信息给放到一起,方便进行增删查改)
就是使用双向链表来把每个进程的PCB
给串起来~
注意这里指的是在Linux
这个系统为例.
所谓的“创建进程”,就是先创建出PCB
,然后把PCB加到双向链表中。
所谓的“销毁进程”,就是找到链表上的PCB
,并且从链表上删除。
所谓的“查看任务管理器”,就是遍历链表~~
就是进程的身份标识(就像每个人的身份证号一样)
一个主机, 同一时刻, 这些进程的 pid 是唯一的, 可以通过 pid 来区分一个进程
可以在任务管理器上查看 pid
指明了这个进程要执行的代码/指令在内存的哪里,以及这个进程执行中依赖的数据都在哪里~~当运行一个 exe ,
此时操作系统就会把这个 exe 加载到内存中,变成进程。
每个进程都可以打开一些文件~~ (文件其实是储存在硬盘上的数据)
文件描述符表厘米就记录了当前进程都打开了那些文件, (打开了之后, 就可以后续针对这些文件进行读写操作了)
进程--是操作系统分配资源的基本单位!!!
进程的调度,其实就是,操作系统在考虑CPU资源如何给各个进程分配~
上面的属性是一些基础的属性,下面的一组属性,主要是为了能够实现进程的调度~
系统调度的时候, 会根据优先级, 来给进程安排时间~~
创建进程的时候, 可以通过一些系统调用来干扰优先级的~~(相对的)
先给谁分配时间,后给谁分配时间, 以及给谁分的多,给谁分的少
进程在CPU上执行了一会之后, 要切换给其他的进程, 就需要保存当前运行的中间结果(存档), 下次再轮到他执行的时候, 就恢复之前的中间结果(读档), 继续往下执行~~
对于进程来说, 上下文就是CPU中的寄存器的值.
(寄存器的值就包含了运行的中间结果, 需要把这些结果保存到PCB的上下文信息中(内存))
每个进程再CPU上执行了多久, 统计信息~~
执行进程的时候, 虽然有优先级, 但是还是不希望让有的进程没有COU资源去执行.
这样可以更加均衡, 避免有的进程完全捞不着CPU执行~~
操作系统对CPU资源的分配,采用的是时间模式 --- 不同的进程在不同的时间段去使用 CPU 资源,
所谓的调度就是进行时间管理
进程的调度,其实就是草错系统在考虑CPU资源如何给各个进程分配
由于操作系统上,同时进行多个进程
如果某个进程,出现BUG,进程崩溃了,是否影响其他进程呢?
依靠“进程的独立性”来保证,依靠与“虚拟地址空间'
进程之间现在通过虚拟地址空间,已经各自隔离开了
但实际工作中进程之间的的时候还是需要相互交互的。
操作系统对内存资源的分配,采用的是空间模式 —— 不同进程使用内存中的不同区域,互相之间不会干扰