计算机是如何工作的

news2025/1/11 0:10:21

一、冯诺依曼体系:

  1. CPU中央处理器(运算器+控制器):CPU是计算机最核心的部分,进行算数运算和逻辑判断。CPU最重要的指标是“主频”,如:2.5Ghz,描述了CPU的运算速度,可以近似认为,每秒执行25亿条指令。
  2. 存储器(内存+外存)
  3. 输入设备
  4. 输出设备

另外,

显卡(GPU),和CPU类似,CPU是通用计算芯片,GPU是专用计算芯片。

二、操作系统

操作系统是个搞管理的软件。对下,要管理硬件设备;对上,要给软件提供稳定的运行环境。是软件、硬件和用户之间交互的媒介。

应用程序不能直接操作硬件设备,要通过层层调用最终才可以达到目的。

java虚拟机是操作系统中的一个应用程序,在java虚拟机上运行的java代码很多都要通过系统调用,进一步和内核交互,在通过驱动程序操作硬件设备。

三、进程

一个跑起来的应用程序,就是一个进程。如果不在运行中,只能叫程序,不能叫进程。

进程也叫作任务。通过任务管理器可以查看到当前电脑上所有的进程。

进程是操作系统资源分配的基本单位。

3.1 PCB(进程控制块)— 描述进程属性的结构体

进程是一个重要的“软件资源”,是由操作系统内核负责管理的。

那么,操作系统内核是如何管理进程的呢?

进程有许多属性,使用PCB来描述进程属性。(PCB是一个C语言的结构体,叫做进程控制块。)然后通过双向链表,把多个PCB给串到一起。

创建一个进程,本质上就是创建一个PCB这样的结构体对象,把它插入到链表中;销毁一个进程,本质上就是把链表上的PCB结点删除掉;任务资源管理器查看到进程列表,本质上就是遍历这个PCB链表。

那么,PCB描述了进程的哪些核心属性呢?

1、pid:进程的身份标识符(唯一的数字)

2、内存指针:指向了自己的内存是哪些。

3、文件描述符表:硬盘上的文件等其他资源的分配

内存指针和文件描述符表这两个属性,描述了进程持有了哪些硬件资源(硬件资源是指内存,硬盘,网卡,CPU等)

4、进程调度相关的属性

(1)进程的状态:

  • 就绪状态:随叫随到,进程随时准备好了去CPU上执行
  • 运行状态:正在CPU上执行
  • 阻塞状态:如进程在进行密集的IO操作,在读写数据,短时间无法到CPU上执行。

(2)进程的优先级:决定了分配CPU资源的先后顺序和多少的问题。

(3)上下文:即存档读档,CPU的寄存器上存储了程序运行过程中的中间结果,即一些值。

保存上下文,把这些CPU寄存器的值记录到PCB中,

恢复上下文,就是把PCB中的这些寄存器值恢复回去,使进程可以在CPU上接着上次的状态继续运行。

(4)记账信息:操作系统会统计每个进程在CPU上占用的时间和执行的指令数目,根据这个来决定下一阶段如何调度。

3.2 CPU分配 — 进程调度

进程调度是用来解决CPU分配的问题的。CPU很少,进程很多,想要让有限的CPU调度执行很多的进程,就需要进程调度。

首先,操作系统里有个调度器。其次,PCB里有进程调度相关的属性。通过调度器,再加上PCB里的进程调度相关属性的支持,通过并行和并发的方式,最终完成CPU的分配。

3.3 内存分配 — 虚拟地址

程序中获取到的内存地址,并不是真是的物理内存的地址,而是抽象出来的虚拟地址。

物理地址,内存条上的真实地址,给进程分配内存时,如果一个进程出现bug,访问内存越界,就会导致其他原本正常运行的进程出现问题。所以,

引入虚拟地址空间,由操作系统和专门的硬件设备负责进行虚拟地址到物理地址的转换。这样就可以对进程使用的内存空间进行“隔离”,避免进程之间相互影响。具体过程如下:

MMU硬件设备会将分配给进程的虚拟地址映射到物理内存上,MMU只能识别分配给进程的那一段虚拟地址,当进程出现访问内存越界,MMU识别不了此虚拟地址,就会直接向进程发送一个 SIGN SEGEMENT FAULT 信号,引起该进程崩溃,不会影响到其他正常运行的进程。

3.4 进程间通信

搞一个多个进程都能访问到的“公共空间”,基于这个公共空间进行交互数据。如基于文件,基于网络等形式。

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

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

相关文章

【React】redux和React-redux

🎀个人主页:努力学习前端知识的小羊 感谢你们的支持:收藏🎄 点赞🍬 加关注🪐 Redux和React-redux reduxredux的使用Redux的工作流Redux APIstoreactionreducerstore.dispatch()redux的方法使用 React-Redux…

python人工智能【隔空手势控制鼠标】“解放双手“

大家好,我是csdn的博主:lqj_本人 这是我的个人博客主页: lqj_本人的博客_CSDN博客-微信小程序,前端,python领域博主lqj_本人擅长微信小程序,前端,python,等方面的知识https://blog.csdn.net/lbcyllqj?spm1011.2415.3001.5343哔哩哔哩欢迎关注…

【计算机图形学基础教程】MFC上机操作步骤

MFC上机操作步骤 步骤1 在Visual Studio界面,选择文件-新建-项目: 步骤2 在新建项目对话框,选择MFC-MFC应用程序: 步骤3 创建一个带有下列特征的新控制台工程框架,主要内容如下: 基于Win32的单文档…

PMP/高项 05-项目进度管理

项目进度管理 概念 项目进度管理(Schedule Management) 项目进度管理又叫项目工期管理(Duration Management)或项目的时间管理(Time Management) 是一种为管理项目按时完成项目所需的各个过程 进度管理过程 规划进度管理 定义活动 排列活动顺序 估算活…

前端web3入门脚本五:decode input data

一、前言 作为一个前端,在调用合约调试的时候,在区块浏览器里拿到一串 hex 格式的 input data,我们应该怎么decode呢? 二、举例 解码交易需要拥有 对应合约的 abi 以及 input data 下面举例介绍怎么获得这两个信息: 参…

二叉搜索树中的众数

1题目 给你一个含重复值的二叉搜索树(BST)的根节点 root ,找出并返回 BST 中的所有 众数(即,出现频率最高的元素)。 如果树中有不止一个众数,可以按 任意顺序 返回。 假定 BST 满足如下定义&…

存储资源调优技术——智能缓存分区

SmartPratition智能缓存分区 基本概念 本质上就是一种Cache分区技术 通过对系统核心资源的分区(隔离不同业务所需要的缓存资源),保证关键应用的性能 工作原理 用户可以以LUN或文件系统为单位设置SmartPartition分区 每个SmartPartition分区的…

Qt文件系统源码分析—第二篇QSaveFile

范围 深度 首先指定深度分析深度,否者会陷入代码海洋之中。 本文只分析到Win32 API/Windows Com组件/STL库函数层次,再下层代码不做探究 本文主要了解QSaveFile及其具体实现,使用到父类数据的地方只讨论关键点 QT Private类 大部分Qt类有…

基础篇-设计模式

单例模式: 注意:这里的唯一实例不是使用时候才创建,而是构造时候就会创建; 注意:提前创建了对象,并不是调用时候才创建 解决方法: 枚举饿汉单例: 注意: 饿汉式枚举不会通过反序列化破坏单例 懒汉模式&…

SQL笔记(3)——MySQL数据类型

学习MySQL,通常应该是先学习数据类型的,因为不管是开发还是MySQL中,每个数据对象都有其对应的数据类型,MySQL提供了丰富的数据类型,如在创建表的时候就需要指定列的数据类型,在向表中插入数据时&#xff0c…

ElasticSearch(一)下载及安装(windows)

1. 官网 ElasticSearch官网地址ElasticSearch生态组件下载地址Kibana下载地址ik中文分词插件 备注:网址打不开,或者打开速度慢是正常情况。 2. 解压后目录结构 bin :脚本文件,包括启动elasticsearch,安装插件&#…

目录打开显示提示文件或目录损坏且无法读取、文件或目录损坏且无法读取的破解之道

咱们在平日工作时,通常都会将资料放进不同的目录中,方便咱们找到,随着时间的推移就会产生有越来越多目录。最近有位用户了这样一个问题,就是目录无论怎么都无法打开,这样就无法浏览、使用里面的资料了,影响…

springboot sharding-jdbc 主从 读写分离

目录 1 mysql 主从搭建 1.1 docker mysql 主从搭建 1.2 非docker mysql 主从搭建 2 springboot sharding-jdbc 主从 读写分离 2.1 pom 加依赖 2.1 yml 配置文件 3 测试 -> 直接使用 就是读写分离 3.1 实体类User -> 数据字段 对象字典 3.2 Mapper -> 增删改查…

Nomogram | 盘点一下绘制列线图的几个R包!~(二)

1写在前面 不知道各位小伙伴的五一假期过的在怎么样,可怜的我感冒了。😷 今天继续之前没有写完的列线图教程吧,再介绍几个制作列线图的R包。🤠 2用到的包 rm(list ls())library(tidyverse)library(survival)library(rms)library(…

新闻文本关键词提取有哪些算法,这些算法的特点以及应用,以及不足方面的解决办法

目录 一、新闻文本关键词提取算法 1. TF-IDF(Term Frequency-Inverse Document Frequency)算法 2. TextRank算法 3. 词向量算法 4. 深度学习算法 5. 主题模型算法 二、这些算法的不足方面的解决办法 1. TF-IDF算法: 2. TextRank算法&…

一文彻底读懂nginx中的location指令

Nginx主配置文件结构 location 介绍 location是Nginx中的块级指令(block directive),,location指令的功能是用来匹配不同的url请求,进而对请求做不同的处理和响应,这其中较难理解的是多个location的匹配顺序,本文会作为重点来解释…

Effective Modern C++

模板类型推导 template<typename T> void f(T& parms);//reference template<typename T> void f(const T& parms);//const ref template<typename T> void f(T* parms);//pointer template<typename T> void f(T&& parms);//univers…

通讯录的实现(动态完结版)

&#x1f349;博客主页&#xff1a;阿博历练记 &#x1f4d6;文章专栏&#xff1a;c语言&#xff08;初阶与进阶&#xff09; &#x1f357;代码仓库&#xff1a;阿博编程日记 &#x1f339;欢迎关注&#xff1a;欢迎友友们点赞收藏关注哦 文章目录 &#x1f354;前言&#x1f…

java 倒计时实现的方式

倒计时的实现方法有很多种&#xff0c;本文给大家介绍其中一种&#xff0c;最简单的一种实现方式&#xff0c;也是最方便的一种方式&#xff0c;希望能帮到大家。 1、 java中倒计时是利用循环来实现的&#xff0c;我们可以使用循环语句来实现。 2、 java中使用 bool类的 setTim…

python相对路径与绝对路径

9.1 Python 绝对路径与相对路径 - 知乎 (zhihu.com) 目录 1. 绝对路径 1.1 概念 1.2 用绝对路径打开文件 1.2 相对路径 1.3 python路径表示的斜杠问题 1. 绝对路径 1.1 概念 绝对路径 指完整的描述文件位置的路径。绝对路径就是文件或文件夹在硬盘上的完整路径。 在 Win…