前言❤️❤️hello hello这里是洋不写bug~欢迎大家点赞关注收藏上篇博客从计算机组成cpu指令操作系统分析了计算机是如何工作的这篇文章会对计算机的操作系统以及系统对进程的管理进行解析进一步了解计算机的内部工作个人主页洋不写bug的博客所属专栏JavaEE学习铁汁们对于JavaEE的各种常用核心语法都可以在上面的JavaEE专栏学习专栏正在持续更新中有问题可以写在评论区或者私信我哦~1操作系统的管理谈到计算机的工作那当然是离不开操作系统的操作系统不仅要管理所有的硬件设备还要给各种软件提供稳定的运行环境例如在Windows系统中steam程序运行出现问题是不会影响其他程序的运行的大不了就是自己崩溃那既然Windows系统能保证一个程序出问题不影响其他程序的运行那为什么电脑还会出现蓝屏的情况呢这个就要提到另一个东西那就是驱动程序驱动程序是直接在操作系统内部运行的如果驱动程序遇到bug电脑就很可能会蓝屏例如买了个罗技鼠标一般就要在罗技官网上去下载驱动程序计算机的音响键盘、游戏耳机都需要驱动程序那为什么这些驱动程序还要再下载不能直接就安装好吗是因为计算机可以连接的外置设备太多了除了各种鼠标、键盘、音响还有医院的心电图机器核磁共振控制手柄这些这些设备的功能也不同因此操作系统就允许这些硬件开发商在研发硬件的同时提供一套对应的驱动程序通过开发商提供的驱动让操作系统“认识、理解”硬件进而对硬件进行管理操作系统驱动程序硬件设备就类似于这样一个关系校长并不熟悉每个班的同学例如要开运动会校长会先通知辅导员辅导员再管理同学进行备赛组队辅导员对同学是比较了解的如下图所示操作系统在管理硬件设备和软件资源的时候会有一个个的“类”来表示各个软件/硬件的各种属性类是Java中的定义主流操作系统都是C语言编写的因此更准确来说使用的是结构体来表示属性操作系统的管理具体是怎样进行的描述通过“类”来表示硬件/软件的属性管理把这若干个类的对象通过数据结构给串起来方便后面的增删改查总之操作系统管理的资源是非常多的例如CPU资源、内存资源、硬盘资源、网络资源…2进程介绍说到操作系统的管理就要提到进程“运行起来的程序”用计算机的专业术语来说就叫做进程每个进程都要消耗一定的系统资源操作系统给进程分配了硬件资源进程才能运行以win11为例打开任务管理器刚进入的就是进程界面如下图那操作系统是如何管理进程的呢这个其实前面已经提到过就是通过描述和组织管理过程描述操作系统使用 结构体 把一个进程的关键属性给表示出来这个结构体就称之为PCBProcess Control Block进程控制块这个称呼适用于各种操作系统但是如果具体到某个操作系统就会有专门的具体的结构体的名字来对应例如Linux上对应结构体的名字是task_struct组织操作系统使用一定的数据结构把上述数据体的变量对象给串起来大部分情况下使用的都是链表因为进程一会要终止一些一会要添加一些链表的增删比较方便创建进程创建PCB变量插入到链表上销毁进程把链表中对应的PCB删除掉释放在任务管理器中查看进程列表遍历链表打印每个PCB中的属性那铁汁们想一下组织的时候大部分是把进程的信息存到链表中的那在数据库中建个表存储这些进程的信息增删改查不是更方便吗像MySQLOracle等数据库本质都是一个运行在操作系统上的应用程序打开数据库这个应用程序就需要先有操作系统而这些进程的描述和组织过程实现操作系统的时候就得先实现出来了因此没法用数据库存储这些进程的信息3 PCB中的关键属性前面提到PCB结构控制块中存储了进程的关键属性方便系统进行管理下面就解析下具体有哪些属性。1PID进程id进程在系统上的身份标识不会重复在当前的计算机上这个时刻不会重复就类似与我们在大学的学号在这里博主运行微软浏览器这个程序启动了13个进程如下图2内存这里有个内存列如下图可以看出来在进程运行时需要申请一系列的内存资源这些内存资源分为两部分指令和数据下图在上篇博客中有提到过0123地址处里面存储的是指令131415地址处存储的是纯数据那操作系统如何知道每个进程的内存空间中分成了哪些部分的区域呢以及每个区域存储的到底是数据还是指令这就需要通过一个叫做内存指针的东西通过内存指针操作系统就知道在哪里找数据哪里找指令那铁汁们想下既然程序的指令是存储在内存中的那有没有办法直接修改内存中的指令内容让程序的逻辑发生变化呢当然是可以的这个一般有两种情况会这样做一种是外挂一种是病毒就拿做外挂而言比如做PUBG的无敌锁血挂大概就是分析出内存中的哪条指令在判定死亡然后修改这条指令让系统永远不会判定玩家被击杀如下图hp就是血量这里只是简单举个例子实际肯定不会这么简单注做游戏外挂是犯法行为要做遵纪守法的好公民3文件描述符表我们平时在计算机都是直接访问文件这就相当于访问了硬盘上的某一块空间操作系统就是通过文件这样的概念来管理硬盘的进程在使用文件的时候需要先打开才能使用就像在C语言中要先通过fopen打开文件再通过fwrite和fread这些真正访问硬盘进程打开文件成功之后会得到一个文件描述符整数类似于身份标识一个进程可以打开多个文件使用多个文件的硬盘资源这些文件的文件描述符就可以通过一个数组来进行表示这个数组就体现了进程访问的内存资源4进程状态要理解这个概念要先大概了解进程的运行打开任务管理器会发现这里有很多进程如下图所示打开性能部分看下面的信息博主的计算机中现在有296个进程如下所示博主的计算机有28个逻辑处理器一个逻辑处理器在同一时间只能处理一个进程铁汁们想一下这28个逻辑处理器全部使用也只能分别同时处理28个进程这也就是并行那这296个进程是如何处理的呢一个处理器核心可以一会运行线程1一会运行线程2一会运行线程3这样进行快速的切换铁汁们看下上面这个图里面的速度是4.03GHz也就是1s可以进行40亿次运算因此切换线程的速度我们是感受不到的现在这296个线程看起来是在同时执行但实际上还是“串行执行”这种操作模式就叫做并发现在的操作系统实际执行的时候都是并发并行就是不同处理器可以执行不同线程互不干扰 这两种模式同时存在的这种多任务操作系统同一个处理器快速切换线程的模式在windows 95系统上就已经使用了还是比较经典的诺基亚使用的塞班系统比较老就是单任务操作系统已经淘汰十多年了这些进程有个状态有的方便调到cpu上执行有的不方便最关键的两个进程状态就是就绪状态和阻塞状态:就绪状态就可以理解为是随叫随到进程随时可以调到cpu上来执行阻塞状态表示现在进程暂时不方便调度到cpu上执行比如说控制台上等待用户输入的情况scanner.next()用户不输入就一直处于阻塞状态5优先级操作系统会给进程分配cpu资源分配并不一定是平分的会根据进程的优先级就好比在电脑上玩三角洲同时电脑也运行着QQ那QQ的消息延迟个几s问题不大但是三角洲如果延迟几s如果正在和别人打架那就很炸缸了因此优先级还是比较重要的6上下文就好比铁汁们玩那些黑神话这次打到哪里了存个档下次接着这次打总不可能每次都重新打进程也是类似进程在运行时会有一系列的中间状态因为cpu是会切换进程的当进程从cpu中调走的时候就需要把中间状态保存起来当进程下次被cpu运行的时候就可以把中间状态恢复过来继续上次执行进程的中间状态就叫做上下文7记账信息PCB会统计该进程在cpu过去一共执行了多少条指令可以识别出某一条指令是不是太久没有执行了结语在JavaEE初学基础概念时还是比较简单的不涉及代码什么的还是比较好理解的后面线程部分就要上强度了会写很多的代码铁汁们要做好准备以上就是今天的所有内容啦完结撒花