【人工智能视角下的计算机系统:硬件、操作系统与进程管理基础】

](https://img-home.csdnimg.cn/images/20220524100510.png#pic_center)
🌈个人主页: Aileen_0v0
🔥热门专栏: 华为鸿蒙系统学习|计算机网络|数据结构与算法
💫个人格言:“没有罗马,那就自己创造罗马~”

文章目录

    • 电脑硬件的基本常识
    • 电脑操作系统(软件)的基本常识
    • 进程
    • 进程操作
    • PCB的属性
    • PCB中支持进程调度的属性(支持钓🐟️的属性)
      • 1.状态(🐟️的状态)
      • 2.优先级
      • 3.上下文
      • 4.记账信息
    • 总结:

电脑硬件的基本常识

在这里插入图片描述
在这里插入图片描述

  • 越往上空间越小,速度越快,成本越高,其中缓存介于中间位置。
  • 其中,内存,缓存,寄存器,只要掉电就会丢数据。
  • 寄存器相当于操作台:其操作流程如下:

在这里插入图片描述


电脑操作系统(软件)的基本常识

软件:一组指令的集合,使得计算机能按照一定的规则执行。
操作系统:用于管理软件和硬件的资源。

在这里插入图片描述

  • 其实,一条println指令就是一个应用程序,它的执行顺序是:
    • ①先调用系统提供的api
    • ②在操作系统内核里,感知到要执行显示器的行为。
    • ③操作系统内核,通过驱动程序,找到对应的硬件设备(显示器),并且执行“显示字符串”的操作。

进程

  • ⭐️⭐️⭐️进程(process): 一个程序跑起来,在操作系统中,就会出现一个对应的进程。进程就是一个运行的应用程序。
    在这里插入图片描述
  • 上图展示了我的电脑中的进程。
  • 还有一些系统自带的/安装的某些应用程序,对于系统的运行具有重要的意义。

在这里插入图片描述

  • 这里展示了每一个进程占用了多少的系统资源。
  • 想要让一个程序运行,就必须给这个进程分配系统资源(包括但不限于:cpu,内存,硬盘,网络带宽,显卡…),操作系统以进程为单位分配资源
  • 由于操作系统上包含很多的进程,为了管理好这些进程,我们可以先描述再进行组织
    • 描述: 通过结构体(数据结构)/类,把一个进程的核心信息抽象提取出来·,并进行表示。eg:主流的操作系统都是C语言实现的,Windows操作系统主要以C为主,也有一部分C++,Linux操作系统就是纯C语言。

      • 在操作系统中,通常使用PCB(Process Control Block)这样的结构体来描述进程。
      • PCB:进程控制块,落实到具体的操作系统代码上的名字是不一样的,eg:Linux操作系统的PCB实际名字是task_struct
      • 结构体中就应该包含一些进程的核心信息。
    • 组织: 通过一定的数据结构,把多个这样的结构体/类的对象串起来,方便进一步的各种增删改查。

      • 操作系统中通常会 使用链表这样的结构,来把多个PCB串在一起。

进程操作

  • 1.在任务管理器中查看进程列表

    • 就是在遍历链表的每一个节点,并获取显示出对应的信息。
  • 2.创建新的进程(双击某个程序运行)

    • 新进程创建出一个对应的新的 PCB ,并且添加到上述链表中。
  • 3.销毁某个进程(退出某个程序)

    • 把链表上对应的 PCB 节点给删除掉。

PCB的属性

  • ①PID进程的id/标识符

在这里插入图片描述

  • 同一个机器,同一时刻,进程id一定是不同的。

  • ②内存指针

在这里插入图片描述

  • 进程运行时,需要消耗一定的硬件资源,内存就是一个关键资源!!一个程序,在运行的时候,就会从硬盘(xx.exe)加载到内存中,在这个过程中会加载这个程序的指令/依赖的数据。

内存指针: 是一组指针,不光一个,这一组指针就会告诉操作系统该进程,要运行的指令都在内存的哪些房间里,也告诉系统,该进程依赖的数据,又在哪些房间里。内存指针是记录运行进程的指令和数据的位置。

exe文件(相当于一个内存指针):包含二进制类型的运行指令及运行过程所需要的数据。


  • ③文件描述符表(未来还会深入探讨)
  • 一个进程在运行时会操作一些文件,就通过顺序表这样的数据结构,记录下当前这个进程都打开了哪些文件。

接下来的这一组属性更加抽象和重要,这一组属性是用来支撑进程调度的👇

在这里插入图片描述

  • 在任务管理器中,我们可以看到,系统中包含了很多进程,每个进程都需要执行,执行就需要占用cpu资源,去cpu上执行。但是进程的数量是远远多于cpu的,

在这里插入图片描述

  • 在我们的计算机中cpu都是多核心的cpu,其中逻辑处理器的数量就是我们cpu 的数量,每个cpu核心,都是一个“打工人”在干活。每个核心,各自干各自的活,互不影响。

  • eg:假设我们有100个进程,那么这100个都需要通过这16个(逻辑处理器)人去处理,并且他们之间不会互相影响。

    • 进程调度就是调度这16个铁轨,使得它们能够在同一时让这100个火车在这16个有限的铁轨上有条不紊的运行。—— “分时复用”
  • 一个核心,同一时刻,只能运行一个进程。

  • 有16个核心,同一时刻,只能运行16个进程(完全是同时执行)。 ——“并行执行”

  • 但,一个核心,不同时刻,可以执行不同的进程。(现在先在这个铁轨上跑一辆火车,下一时刻跑另一辆火车)——“分时复用”

  • CPU将总时间切成若小片,每个片执行一个进程,由于时间较短,这使得CPU切换进程的速度极快,人无法感知,让人感觉到它们是在同时执行的(本质上不是)——“并发执行”

  • 操作系统会按照 并行+并发相互搭配,运行所有进程。(所以即使是单核CPU时代,也可以通过并发来实现同时运行多个程序的效果)

  • 多任务操作系统: 支持并行和并发

  • 并行和并发统称“并发”

  • 编写解决并发问题的程序统称为“并发编程”

PCB中支持进程调度的属性(支持钓🐟️的属性)

  • 进程调度的本质就是分时复用(今天约这个,明天约另一个)

1.状态(🐟️的状态)

  • ①随叫随到(就绪状态)
  • ②约不出来(阻塞状态)

2.优先级

  • 不同的🐟️钓的时间长短不同

3.上下文

  • 把每次和不同的🐟️约会的信息记录到笔记本里(存档),这个约会信息就是(上下文),每次约会之前都需要复习(读档)

    • 进程在cpu执行过程中,会产生很多的中间结果,在进程切换出cpu之前,就需要把这些中间结果(cpu的各种存储器中的值)保存到 pcb的上下文里(寄存器->内存)【存档】
    • 下次这个进程回到cpu上执行时,需要先把之前的存档恢复回来(内存->寄存器)【读档】
      • 寄存器里面有一个程序计数器,记录程序执行到哪个指令了,下次执行的时候就沿着上次执行到的那个地方继续执行。

4.记账信息

  • 通过表格记录给每个🐟️分配的时间。

总结:

  • 操作系统为了避免某个进程吃不到CPU资源,就会进行统计,给少的(舔狗🐶)分配多一点。

](https://img-home.csdnimg.cn/images/20220524100510.png#pic_center)
](https://img-home.csdnimg.cn/images/20220524100510.png#pic_center)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/65453.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【AI大模型系列】提示词基础技巧(三)

目录 技巧一:提供充分的背景信息 技巧二:精准用词,避免误解 技巧三:角色扮演 技巧四:分布提问,循序渐进解决问题 技巧五:充分利用大语言模型的知识库 技巧一:提供充分的背景信息…

bash 中 ${-#*i} 是什么意思?

-------------------------------------------------- author: hjjdebug date: 2024年 12月 25日 星期三 17:43:45 CST description: bash 中 ${-#*i} 是什么意思? -------------------------------------------------- 在centos 的 /etc/profile 中有这样的语句 for i in /…

Flink源码解析之:如何根据算法生成StreamGraph过程

Flink源码解析之:如何根据算法生成StreamGraph过程 在我们日常编写Flink应用的时候,会首先创建一个StreamExecutionEnvironment.getExecutionEnvironment()对象,在添加一些自定义处理算子后,会调用env.execute来执行定义好的Flin…

IntelliJ IDEA Docker集成

一、概述 Docker是一种用于在隔离和可复制环境中部署和运行可执行文件的工具。这可能很有用,例如,在与生产相同的环境中测试代码。 IntelliJ IDEA集成了Docker功能,并为创建Docker映像、运行Docker容器、管理Docker Compose应用程序、使用公…

【closerAI ComfyUI】快速洗图!高效快速的提示词反推节点——cliption,让洗图出图快人一步不爆显存!

添加图片注释,不超过 140 字(可选) 【closerAI ComfyUI】快速洗图!高效快速的提示词反推节点——cliption,让洗图出图快人一步不爆显存! 大家好,我是Jimmy。反推提示词的节点有很多,像Florence2 、Joycaption2、喵手等。都是非常优秀的。但是呢,就是占用设备资源,加…

Pandas-数据组合

文章目录 一. 连接数据1.简介2. 加载数据1. 添加行① 添加行-DataFrame连接② 添加行-DataFrame和Series连接③ 添加行-append函数④ 添加行-重置索引 2. 添加列① 添加列-concat函数② 添加列-通过dataframe[列名] [值]③ 添加列-通过dataframe[列名] Series对象④ 添加列-重…

第四周枝节

一. reverse函数 ###在写回文题的时候有以下函数: 高精度反转: (在计算高精度时,我们输入的是从高位到低位,但在计算时从低位到高位,因此需要反转) void turn(int a[])//反转数字 {int j 0;…

软件架构设计——数据表状态切换开关—未来之窗行业应用跨平台架构

一、样式 二、样式 /*开关示例*/.东方仙盟_灵颜妙手 {position: relative;display: inline-block;width: 60px;height: 34px;border-radius: 17px; /* 添加圆角效果,使开关看起来更圆润美观 */box-shadow: 0 0 5px rgba(0, 0, 0, 0.2); /* 添加淡淡的阴影效果&…

django --递归查询评论

表数据 树状结构 action(methods(GET, ), detailFalse) def get_info_pinglun(self, request, *args, **kwargs) -> Response:根据评论id查所有回复params wenxian_pinglun_id --> 评论id;wenxian_pinglun_id self.request.GET.get(wenxian_pinglun_id)results se…

向量叉积浅讲

线段交叉 前提条件有三个点o,a,b,如何判断b在线段oa何方向,可以使用叉积; 1、向量的叉积公式 假设 -点o的坐标是 ( o x , o y ) (o_x, o_y) (ox​,oy​) -点a的坐标是 ( a x , a y ) (a_x, a_y) (ax​,ay​) -点b的坐标是 ( b x , b y ) (b_x, b_y) (bx​,by​) …

适用于项目经理的跨团队协作实践:Atlassian Jira与Confluence集成

适用于项目经理的跨团队协作实践:Atlassian Jira与Confluence集成 现代项目经理的核心职责是提供可视性、保持团队一致,并确保团队拥有交付出色工作所需的资源。在过去几年中,由于分布式团队的需求不断增加,项目经理这一角色已迅速…

基于JAVA+SpringBoot+Vue的问卷调查系统

基于JAVASpringBootVue的问卷调查系统 前言 ✌全网粉丝20W,csdn特邀作者、博客专家、CSDN[新星计划]导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末附源码下载链接🍅 哈喽兄…

Vue开发环境搭建上篇:安装NVM和NPM(cpnm、pnpm)

文章目录 引言I 安装NVM1.1 Windows系统安装NVM,实现Node.js多版本管理1.2 配置下载镜像1.3 NVM常用操作命令II NPM永久使用淘宝源安装 cnpm安装pnpm【推荐】see also: vscode常用插件引言 淘宝镜像:http://npm.taobao.org 和 http://registry.npm.taobao.org 已在 2022.06.3…

杨天真高情商公式: 建立能量场

在现代社会中,我们常常听到“情商高的人更容易成功”,但情商到底是什么?如何培养高情商?其实,情商并不是天生的,它是可以通过训练和调整的。著名经纪人杨天真曾提到过她的一套“高情商公式”,其…

Kimi进行学术方向选择精讲!

目录 1.文献搜索 2.辅助选题 3.选题判断 在我们之前的文章中,小编都强调了选题在文章价值中的核心作用。一篇优秀的文章背后,肯定有一个精心挑选的选题。选题的好坏直接影响着文章能够发表的期刊等级。许多宝子们却采取了相反的做法,将大量…

vue.js 组件化开发 根组件

Vue.js是一个用于构建用户界面的渐进式JavaScript框架。组件化开发是Vue.js的核心理念之一,它允许开发者将部分代码封装为可重用的组件,从而提高代码的复用性和可维护性。而根组件是Vue.js应用的最顶层组件,它包含了其他所有的组件。 下面详…

YOLO系列正传(五)YOLOv4论文精解(上):从CSPNet、SPP、PANet到CSPDarknet-53

系列文章 YOLO系列基础 YOLO系列基础合集——小白也看得懂的论文精解-CSDN博客 YOLO系列正传 YOLO系列正传(一)类别损失与MSE损失函数、交叉熵损失函数-CSDN博客 YOLO系列正传(二)YOLOv3论文精解(上)——从FPN到darknet-53-C…

Vulnhub靶场-Driftingblues 6靶机(至获取shell)

靶机安装好后,照例扫描IP 端口 目录 首页为一个图片,没有什么信息 访问robots.txt,存在一个textpattern/textpattern目录,我们访问为一个登录窗口,sqlmap无法注入 提示我们扫目录时添加.zip扩展名,所以我们…

基于springboot的汽车租赁系统丨源码+数据库+万字文档+PPT

作者简介: 作者:学姐 开发技术:SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等 文末获取“源码数据库万字文档PPT”,支持远程部署调试、运行安装。 技术框架 开发语言:Java 框架:spring…

学习,指针和FLASH

一个经典的指针交换数值函数&#xff1a; #include <stdio.h>void interchange(int *u,int *v); void interchange(int *u,int *v) {int temp;temp*v;*v*u;*utemp; }int main() {int x5,y10;printf("before swap value x:%d value y:%d\n",x,y);interchange(&…