目录
一. 操作系统
1. 操作系统的概念
操作系统是计算机系统的核心软件,负责管理计算机的硬件和软件资源,并为用户和应用程序提供统一的接口。
常见的操作系统:Windows,macOS,Linux,Android,iOS,鸿蒙
注意:操作系统是一个软件
2. 操作系统的功能
1. 管理各种硬件设备(向下,管理各种硬件设备)
2. 给软件提供稳定的运行环境(向上,向上层提供方便易用的服务)
3. 操作系统是系统资源的管理者
一个电脑由硬件组成,比如鼠标,键盘等
市面上,每一种硬件有很多厂商在生产,不同厂商生产的硬件会存在差异,
即使是同一个厂商,型号不同,也会存在差异,
意味着:每一个硬件就会对应一个程序,这样很不利于市场的发展,
这时候操作系统就会提出统一的API,软件来实现API,达到管理这些种硬件设备的功能
操作系统会提供一些管理软件资源的API
常见的管理:文件管理,存储器管理,设备管理,处理器管理
3.操作系统的组成
操作系统 = 内核(核心功能) + 外围组件(用户界面、工具、服务、驱动等)
内核:直接与硬件交互,提供CPU时间片管理、中断、内存管理、IO管理等等。
用户态和内核态
- 内核态:内核态仅执行内核代码。用户程序需只能通过系统调用“借用”内核能力。
- 用户态:不能直接使用系统资源,也不能改变 CPU 的工作状态,用户程序执行的位置
注意:
- 用户程序必须通过内核提供的封装接口间接操作硬件。
- 内核态是 CPU 硬件支持的模式,操作系统利用它实现权限隔离。
比如:用户执行的大部分程序都在用户态中执行,假如用户使用QQ音乐播放歌曲,程序在用户态中运行,但是歌曲的播放需要使用硬件,硬件由内核管理,内核态会提供一种API接口,播放歌曲直接使用封装好的接口即可
二. 进程
1. 进程的概念
进程是操作系统提供的一种软件资源
多任务操作系统(同一时刻,可以执行多个任务)
单任务操作系统(同一时刻,可以执行一个任务)
进程的组成部分:程序代码,数据和PCB(进程控制块)组成
在任务管理器中,正在运行的程序或者正在执行的任务都可以被称为进程,进程是动态的
注意:进程和程序的区别
- 程序是静态的,进程是动态的
一个可执行文件(程序),当我们双击运行的时候,操作系统就会把这个可执行文件中的关键信息(小部分)加载到内存中,并且开始运行里面的代码,就形成了一个进程.
2. 进程在系统中的管理
操作系统,一般使用C/C++实现,没有java实现的
- 一般使用结构体的方式来描述进程的信息—PCB(进程控制块)
- 再使用一些数据结构(链表等)将这些结构体,串在一起
可以粗劣认为:
- 运行一个新的程序,系统上就会多出一个进程,也意味着会多出一个新的结构体(PCB),并且添加在链表上
- 结束一个程序,就意味着将链表中对应进程的PCB删除并销毁
- 当在运行管理器中,看到这些任务在运行的时候,就说明在遍历链表并打印每个节点的信息
也就意味着,有一些特殊的程序(在内核中执行),如果出现问题,可能会导致系统故障(卡死或者蓝屏) ,但是大部分,不会导致崩溃,最多是会抛出一些异常
3. PCB
本质上是一个结构体
结构体内包含了进程的核心信息(以为很少吗?并不,事实上可能会有上百个)
(1)pid
作用:进程的身份表示(进行区分)
在同一个机器上,某一个时刻,每个进程pid都是唯一的
在针对进程的操作中,经常使用pid作为参数
(2)内存指针
作用:描述进程使用内存资源的情况
- 进程只能使用申请到的资源
- 进程在运行的时候,必须将指令和数据都加载到内存中
内存指针就详细说明进程可以使用那些资源,并且知道那些地址存放的指令,那些地址存放的数据
注意:肯定是先将指令和数据传入内存中,再创建和运行进程
(3)文件标识符
作用:说明了这个进程在运行的时候,会涉及到的外存相关资源
文件:对外存的一种抽象,无论是硬盘,软盘,U盘,都叫“文件”
一个进程想要操作文件,那么结构体内的文件标识符,会记录这个文件的相关信息
4. 资源分配
进程是系统分配资源的基本单位
- 内存和硬盘的资源分配问题,在PCB中详细体现
- cpu中同样会出现资源分配的情况(一块cpu可能会有一个核心或者多个核心)
同一时刻,一个核心只能运行一个进程
但是电脑上的进程往往不止几个,而是上百个甚至更多,要如何解决这个问题?
于是出现了分时复用(并发)的概念:因为cpu运行的速度很快,让这些进程轮流进入cpu运行
在人眼看来,这些进程就是“同时执行”
注意:多核cpu的特点
假如只有4个进程,4核cpu并不是通过进程快速切换的方式实现的并行,而是真正的同时执行(并发)
但是,现在的计算机都是并行加并发 ,具体如何,还是看系统的调度
5. 进程的调度
PCB 中还提供一些属性, 来支持系统对进程的调度
(1)状态
- 就绪状态:进程已经准备好,等待CPU调度。
- 运行状态:进程正在CPU上运行。
- 阻塞状态:进程因为某些原因暂时无法运行,需要等待某个事件的发生。
(2)优先级
在多个进程需要调动的时候,会根据优先级从而选择调动谁,
优先级的排序会根据优先级算法得出
比如:在打王者和qq,这个时候王者的优先级肯定比qq高
(3)记账信息
会根据每个进程占用cpu多少时间,进行一个统计,然后根据统计结果,调整调度的策略
比如,一个进程很长时间都没有进入cpu,那么就会适当的提高这个进程的优先级
(4)上下文
支撑进程调度的重要属性,类似于游戏的存档和读档
- cpu内有一些寄存器,专门存放信息
- 进程调度出 CPU 之前,把关键寄存器中的这些数据,保存到内存中。
- 在该进程下次再去 CPU 上执行的时候,把数据从内存中加载到cpu的对应寄存器上。
6. 进程的通信
每个进程的内存,都是相互独立的,彼此互不干扰
进程A不能访问进程B,对应进程B也不能访问进程A,这种称为“进程独立性”
好处:如果这个进程出现了问题,只会影响当前进程,不会导致所有的进程崩溃
比如:在打王者的时候,qq突然有人给你发了个神秘信息,导致你手机崩溃了,那确实很让人恼
注意:
进程的通信和进程的独立性,并不冲突,系统会提供一些公共的空间来交互数据
常见的几种通信方式:管道,文件,网络,信号等
其中,最常用的是网络,网络可以实现一个主机的不同进程,也支持不同主机的不同进程
点赞的宝子今晚自动触发「躺赢锦鲤」buff!