操作系统 OS(Operating System)
是一组做计算机资源管理的软件的统称
常用的操作系统 -> windows andrioid IOS Unix大家应该都有所了解
基础了解OS
-
对下,要管理各种硬件设备
-
对上,要给软件提供稳定的运行环境
-
某个软件想要操作某个硬件的话,此时就需要用你操作系统进行完成
-
功能非常多,其中最重要的就是进程管理
-
进程(process)/任务(task)
-
.exe就是一个可运行文件(程序)->双击这个程序就会在系统中形成了一个进程(在任务管理器中可以看见很多进程)
进程管理:
先提出几个问题
1.为什么要进行管理?
当然是因为进程很多所以需要管理
2.进程和操作系统之间的关系是咋样的?
a. 进程的运行,需要从操作系统这里申请资源
b.进程是操作系统进行资源分配的基本单位
3.进程是啥样子的?
如图显示,进入页面的快捷键是 :Ctrl+Shift+Esc
对进程的使用:
- 描述这个进程:使用 结构体/类 把一个进程有哪些信息 ,表示出来
- 组织这些进程:使用一定的数据结构,把这些 结构体/对象,放到一起
进程的结构体中的属性:
进程的结构体:PCB(process control block)进程功能块,描述进程的结构体
1.pid
每个进程需要有一个唯一的身份标识 pid
2.内存指针
当前这个进程使用的内存是哪一部分->进程要跑起来就要消耗一定的硬件资源 比如内存空间
(进程运行的时候使用了哪些内存上的资源)
3.文件描述符表:
进程每次打开一个文件们就会产生一个文件描述符(标识这个被打开的文件) 一个进程可能会打开很多文件,对应了一组文件描述符,把这些文件描述符放到一个顺序表这样的结构里,就构成了文件描述表
(进程运行的时候使用了哪些硬盘上的资源)
文件:比如硬盘上的数据,往往就是以文件为单位进行整理的
CPU分配–进程调度(Process Scheduling )
这些属性都是辅助进行进程调度
了解CPU
-
程序运行全靠CPU,每个程序,相当于一组"二进制指令"的集合
-
CPU核心数 我这是4核心8线程 就相当于4个人干8个人干的事
**并发:**同一时刻,两个核心,同时执行两个进程,此时这两进程就是并行执行
**并行:**一个核心,先执行进程1,执行一会后,再去执行进程2,再执行一会后,再去执行进程3,此时只要这里切换的速度够快,看起来进程123都是同时执行的
这些进程都是操作系统控制CPU进行并发+并行来执行的统称为并发 (并发程度高的话就叫高并发)
进程调度
操作系统对CPU资源的分配,采用的是时间模式 —— 不同的进程在不同的时间段去使用 CPU 资源
-
进程状态
进程的状态主要有两个:
就绪态:该进程已经准备好了,随时可以上CPU执行
阻塞态:该进程暂时无法上CPU执行
-
进程优先级
进程之间的调度不一定是"公平"的,有的要优先调度
-
进程的上下文
上下文,描述当前进程执行到哪里这样的"存档记录"
进程在离开CPU的时候就要把当前运行的中间结果"存档"
等到下次进程回来CPU上,在恢复之前的"存档",从上次的结果继续往后执行
具体到进程,所谓的上下文具体指的就是进程运行过程中,CPU内部的一系列寄存器(寄存器有很多种,最典型的就是保存当前进程执行的中间结果,包括进程运行到哪一条指令)的值
进程离开CPU就需要把这些寄存器的值保存到PCB的上下文字段中,这就叫存档
进程喜爱新回来CPU再把PCB中的值给恢复到寄存器中,这就是读档
-
进程的记账信息
统计了每个进程在CPU上执行了多久了
可以作为调度的参考依据
组织pcb:
操作系统往往是采用双向链表这样的结构来组织pcb
- 创建一个进程,就是创建一个链表的节点
- 销毁一个进程,就是把链表的节点给删除了
- 遍历进程列表,就是遍历链表
内存分配–内存管理(memory Manage)
操作系统给进程分配的内存,是以"虚拟地址空间"的方式进行分配的
每个进程访问的内存地址,都不是真实的物理内存的地址(一个进程无法干预另一个进程的内存内容,操作系统的稳定性,每个进程都有自己的独立空间,进程的独立性)
进程间通信(Inter Process Communication)
进程间之间需要进行交互,相互配合
-
如果每个进程可以直接访问物理内存,其实是没有隔离性,也就不许哟啊进程间通讯,进程1直接把算好的结果,写到进程2中的内存中就行
-
所谓进程间的通讯,就是再隔离性的前提下,找一个公共的空间,让两个进程借助这个区域来完成数据交换
(在隔离性的前提下做了一个小小的妥协)
-
操作系统提供的进程间通信的具体实现方式有很多种,管道,消息队列, 公共内存,信号
-
在java中主要使用文件,socket,这两种方式进行进程间的通信
个进程借助这个区域来完成数据交换
(在隔离性的前提下做了一个小小的妥协)
-
操作系统提供的进程间通信的具体实现方式有很多种,管道,消息队列, 公共内存,信号
-
在java中主要使用文件,socket,这两种方式进行进程间的通信