1:操作系统
操作系统是一个软件,是电脑组成不可分割的一部分。
1.对上,操作系统要给软件提供稳定的运行环境。
2.对下,要管理好硬件设施。
熟悉常见的操作系统:
windows(兼容性强,用户面广泛,使用难度较低);
Linux(程序猿必须掌握的操作系统,特别适用于开发和部署);
Mac(特立独行的系统,果家特别出品,使用难度高);
Android(老熟人啦~除苹果手机使用IOS操作系统,其他手机几乎都采用安卓,鸿蒙本质上也是基于安卓的)
操作系统的定位:
操作系统两大最核心的应用:
1.是为了防止应用程序对硬件资源的滥用。
2.向应用程序提供简单一致的机制来控制复杂而又通常大相径庭的低级硬件设备。
注:API简单来说是什么呢?就是别人写好的一系列函数,你直接拿来使用,比如C语言里的printf函数(语言本身将内部具体的算法原理进行了封装),其实也不仅限于函数,任何他人为你提供便利的方法,都可以称之为API。
举例:在我们使用C语言打印出hello world这个看似简单的过程,其实就需要C语言这个程序通过系统调用向核心申请对显示屏的使用权,然后通过驱动程序驱动显示屏,进而使用显示屏,最后再将hello world渲染到显示屏上让我们看到。简单的过程其实涉及了很多复杂的步骤,但是操作系统为我们简化了非常多的底层过程,为我们写代码减轻了许多负担。
进程:一个跑起来的程序,就成之为进程。进程进程,进行中的应用程序!
注意区别!!点击ctrl+alt+delete打开应用管理器,可以查看电脑当前运动的程序。
而未运行的应用程序不能称之为是进程,只能称之为程序,但还没有跑起来!
进程是重要的软件资源,是由操作系统负责管理的:描述(讲清楚有哪些基础特性)+组织(通过C语言中的结构体将基础属性特征串联起来)。
这个用来描述进程的特殊结构体,我们称之为PCB(Progress control block)。
组织:简单来说,是通过双向链表(实际上比双向链表更为复杂),把多个PCB串到一起。此部分大家简单的理解成一串佛珠,一个佛珠是一个PCB,通过一条绳子,将这些佛珠串接到一起。
创建一个进程,本质上就是创建一个PCB这样的结构体对象,把他插入到链表当中。
销毁一个进程,本质上就是把链表上的PCB节点删除掉。
任务管理器看到的进程列表,本质上就是在遍历这个双向链表后拿出所有元素然后渲染到显示屏上。
详解PCB:
1.PID进程的唯一身份标识符(把进程比作一个学生,PID就是学生的学号);
2.内存指针(指向自己的内存是哪些;相当于告诉你这个学生住在哪个宿舍);
3.文件描述符表(硬盘上的文件等其他资源;相当于这个学生有哪些其他实际物品);
其中2.3两项描述了进程有哪些硬件资源。
总结:PCB相当于是一个学生的信息集合表,学号,宿舍房间,以及其他的硬件资源都在这个表中。
注意:程序中所获取的内存地址,并非是真正的物理内存地址(实际的储存在内存条上的地址)。是经过一层抽象,虚拟出来的地址。虚拟地址空间,避免了自己的程序对其他进程造成影响。
虽然进程通过虚拟地址实现了隔离性,但是进程之间无法融合无法通信了。因此,在程序之间设立了公共空间,每一个进程都可以使用,实现了进程之间的交互通信(此处的公共空间类似于菜鸟驿站,接收方和快递小哥不接触,但是通过菜鸟驿站实现了物品的接收)。
内核处理的并行并发在宏观上感觉是同时的,应用程序无法感知,所以将并行并发统称为并发。
进程调度相关的属性:
一.进程的状态:
1:就绪状态:随叫随到,进程随时准备好了去CPU上执行
2:运行状态:正在CPU上执行的;
3:阻塞状态:开小差了,短时间内无法到CPU上执行了,比如进程在进行密集的IO操作(IO:输入输出流),读写数据。
二.优先级:
进程也是有优先级的,操作系统进行的调度并非是一碗水端平的。
比如上学时候,成绩优秀的同学,老师就会把好的学习资源优先分配给这些同学。
三.上下文
操作系统在进行进程切换的时候,就需要把进程的中间状态记录下来保存好,下次来CPU上执行的时候,就可以回复上次的状态,继续进行下去。
上下文本质上,就是你存档的内容。进程的上下文们就是CPU中各个寄存器的值(CPU内置的存储数据的模块,保存的就是程序运行的中间结果)。
保存上下文(存档):就是把这些CPU寄存器的值,记录保存到内存中。
恢复上下文(读档):就是把内存中的这些寄存器的值恢复回去,继续执行。
四.记账信息
操作系统,统计每个进程在CPU上占用的时间和执行的指令数目
根据这个来决定下一个阶段该如何调度。
由于是初学此部分,只能简单做一些介绍总结。纰漏很多,后面学的更系统了,会慢慢补充,望大家谅解。