文章目录
一、什么是操作系统
操作系统(英语:Operating System,缩写:OS)是一组主管并控制计算机操作、运用和运行硬件、软件资源和提供公共服务来组织用户交互的相互关联的系统软件程序。
简单来说:操作系统是一个软件,是用来管理的,操作系统是位于软件硬件用户交互的媒介。
1.对下,管理硬件设备
2.对上提供稳定的运行环境
常见的操作系统:
Windows:windows98, 2000, xp, vista,win7, win10, win11(普通人使用较多的操作系统)
Linux: 适合开发和部署(程序员经常使用的系统)
Mac: 苹果电脑的系统,和Linux有一些相似之处
还有一些手机上的系统;Android ,IOS等
蓝色圈起的就是操作系统的定位。
硬件设备: 我们实体看得见摸得着的就是硬件设备,更通俗易懂的就是电脑后盖打开看到的都是。
驱动程序: 我们每台电脑的硬件都不一样,系统如何去识别这些硬件设备,硬件厂商在开发硬件的同时会给电脑装上驱动程序,方便操作系统去调用硬件系统。
操作系统内核: 是操作系统最主要最核心的部位,承上启下。
系统调用: 操作系统给应用程序提供的一些API接口。
应用程序:QQ,java,英雄联盟等等都是。
大概的流程就是,应用程序通过一些系统调用指令告诉操作系统内核,内核去调用驱动程序去操作硬件设备。
二、进程
进程:进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础。
简单来说进程就是一个正在运行的程序。
如果没有正在运行,那么就不能称之为进程,只能称为:程序.
因为没有运行我们操作系统并没有为其分配资源,当我们运行之后,我们就会为其分配一系列资源,所以我们称: 进程是操作系统资源分配的基本单位
PCB
我们操作系统内核要对进程管理(描述 + 组织)
描述: 使用C语言的结构体(PCB 进程控制块) 来描述进程属性,至于为什么不使用java的类或者其他来描述,因为我们的操作系统基本都是用(C/C++)写的。
组织: 通过双链表来将多个PCB串起来,每创建一个进程(创建一个PCB对象插入到链表中),销毁一个进程(把链表中的PCB节点删除掉)
PCB里面有哪些具体的属性呢?
1.pid: 进程的唯一标识表(类似于数据库的主键)
2.内存指针: 指向了自己分配到内存
3.文件描述符表: 硬盘上的文件等其他资源
硬件资源: 内存,硬盘,网卡等这些资源对进程来说都比较好分配。
CPU资源不太好分配: 我们电脑可能进程有几十上百个,但是我们电脑的CPU(虽然现在电脑都是多核CPU),但是远不够这些进程去分配。
我们可以通过设备管理器去查看自己的电脑是几核的。
我们肯定是希望进程都是同时运行的,原因很简单"爽",同时运行可以简单的分为(并行和并发)。
并行: 同一时刻,两个核心上的进行是同时执行的(真正的同时运行)。
并发: 同一时刻,一个核心只能够运行一个进程,但是我们能够快速的切换(感官上的同时运行)。
比如在CPU的一个核心上,我们先运行一下CSGO,在运行一下英雄联盟,只要切换速度很快(3.1GHz,每秒25亿条指令),我们感官上觉得是在同时运行。
4.进程调度的属性:
既然我们有这么多进程,那么就需要有人来管理,操作系统里有个调度器,负责让有限的CPU调度执行这些进程。
- 进程状态就绪状态: 准备就绪,随时等待CPU调度执行。运行状态: 正在CPU上实实在在运行阻塞状态: 简单地说就是等待状态,短时间内无法在CPU上执行.
- 优先级这么多进程,操作系统进行调度的时候,并不是完全平等,而是有一定的优先级的。
- 上下文操作系统并发执行时,进程与进程切换的时候,如何恢复到之前的状态,就需要我们把进程的“中间状态"保存下来。实际上就是保存CPU各个寄存器中的值到内存中。
- 记账信息操作系统,统计每个进程在CPU上的占用时间以及指令数目,来决定下一阶段如何调度。
内存管理
我们程序中所获取的内存地址,不是硬件上真真实实的地址,而是进行一些计算之类出来的虚拟地址。
这就是一个真实的内存条,我们的内存时有一个内存编号,这个内存编号就是"物理地址",真实的地址,正因如何所以我们内存支持随机访问(通过这个编号)。
如果我们程序直接访问的是物理地址,如果正常操作还好,但是如果越界访问了,就会对其他进程的数据进行改变,比如我们正在写代码,不一会把网易云写崩了,这是很危险的操作,所以我们程序操作的是虚拟内存。
所以我们引入了一个虚拟地址的概念,对物理地址进行隐藏和隔离,避免进程之间的相互影响,MMU硬件设备(集成在CPU)是为了虚拟地址和物理地址的转换速度更快.
当我们操作系统内核发现转换后的地址超过了物理地址的访问返回,就会直接向进程返回一个错误,进而引发进程崩溃,这里的崩溃不会影响到其他进程。
版权归原作者 熬夜磕代码丶 所有, 如有侵权,请联系我们删除。