当前位置: 首页 > news >正文

冯诺依曼结构和进程概念及其相关的内容的简单介绍

目录

​编辑

冯诺依曼体系结构

操作系统(Operator System)

进程

引入

基本概念

描述进程-PCB

task_ struct内容分类

进程 ID (PID)和查看进程

进程状态:

进程创建:

进程终止:

进程间通信 (IPC):


 

冯诺依曼体系结构

冯诺依曼体系结构是现代计算机的基础架构,它将计算机的主要部分分为以下几个核心组件:

中央处理单元(CPU

  • 算术逻辑单元(ALU):执行计算任务,如加法、减法等运算。

  • 控制单元(CU):负责解读程序指令,并控制各部分执行任务。

存储器内存:存储数据和程序指令,CPU可以从内存中取出数据和指令进行处理。

输入/输出设备(I/O:与外部设备进行数据交换,输入设备将外部数据送入计算机,输出设备将计算结果输出到外部。

总线:连接CPU、内存和I/O设备的通信通道,负责在各个部分之间传输数据。

工作流程:

  • 取指(Fetch):从内存中读取下一条指令。

  • 解码(Decode):控制单元解码指令并确定需要执行的操作。

  • 执行(Execute):通过ALU执行运算或处理数据。

  • 存储(Store):将结果存回内存(如果需要)。

注意:

  • 这里的存储器指的是内存

  • 不考虑缓存情况,这里的CPU能且只能对内存进行读写,不能访问外设(输入或输出设备)

  • 外设(输入或输出设备)要输入或者输出数据,也只能写入内存或者从内存中读取。

假设你和你朋友在不同的地区利用qq进行聊天,

在我们的角度上你们各自的电脑分别是两个冯诺依曼结构,我们的网卡使我们电脑连接我们的网络,我们聊天时利用网卡发送消息通过网络,接受信息通过网络。

当我们的数据在计算机内部流转时,本质就是进行拷贝,我们的计算机的效率实际就是拷贝的效率。

为什么要有内存

我们没有内存时:

但是哦你要知道我们的CPU运行是非常的快的,外设是非常的慢的。

如果我们计算机要是想这个样设计的话,那么我们整个计算机的效率就是以我们外设的效率为准(木桶原理)

如果我们增加了内存的话,我们的CPU的效率就不会受我们的外设影响,而是我们的内存和外设进行交流,

那么我们的CPU的效率就和我们的内有关,我们内存的运行速度还是挺快的。虽然达不到我们CPU的速度那么快,但是会比我们的外设快很多。

而我们的内存也不会很贵,价格适中,效率也可以,所以导致我们的计算机的造价没有那么贵,所以我们普通人也可以用得起电脑

操作系统(Operator System)

概念

任何计算机系统都包含一个基本的程序集合,称为操作系统(OS)。笼统的理解,操作系统包括:

  • 内核(进程管理,内存管理,文件管理,驱动管理)

  • 其他程序(例如函数库,shell程序等等)

设计OS的目的

  • 与硬件交互,管理所有的软硬件资源

  • 为用户程序(应用程序)提供一个良好的执行环境

定位

在整个计算机软硬件架构中,操作系统的定位是:一款纯正的“搞管理”的软件

如何理解 "管理"

  • 管理的例子 描述被管理对象

  • 组织被管理对象

我们的操作系统就像我们的管家,不用我们的去概念底层的是如何实现的,只需要你把你要干什么,要什么告诉我们的操作系统,他就会去实行,完成我们的任务。

无论我们上面怎么实现,我们的硬件设备会满足我们的冯诺依曼体系结构,每一种硬件都要有我们自己对应的驱动程序。

为什么要有操作系统

  • 操作系统对下也要进行软硬件资源的管理。稳定的,高效的,安全的,能进行良好的。

  • 操作系统对上要给用户提供一个良好的稳定的,高效的,安全的运行环境。

但是注意我们的操作系统他是不相信我们任何用户的,所以他会将我们的底层封闭起来,就像我们的银行不相信我们的前来银行取钱的人,他不会让你直接去他自己的仓库中拿,而是提供一个个的窗口为我们提供相关服务,我们的操作系统向上也提供了相关接口,方便我们的上层使用。( 李美,也就是我们的系统调用)

进程

引入

在我们现实生活中,我们的校长要管理好学生,不需要直接和我们学生直接见面,所以我们的操作系统在管理我们的底层硬件时也不用直接管理他们。

是如何实现的呢?

管理的本质是对我们的数据进行管理。

在我们的管理者和被管理者之间需要有一个中间角色,它对上采集决策,对下执行决策。

我们的校长去管理学生的数据时,创建一个我们的学生的结构体(struct) ,里面包含我们的学生的一些资料,我们校长对学生的信息进行管理实际上是对我们的结构体进行管理,我们将我们的学生的结构体利用我们的链表将没所有学生的信息串联起来,那么我们去遍历和查找我们的信息,实际上就转换为对链表的增删查改了。

那么我们操作系统是如何管理硬件的呢?我们的硬件虽然不同,但是他们的属性是一样的,只是属性的内容不一样,所以我们的只需要建立一个结构体就行就可以管理我们的硬件,也是我们对链表的管理。

这种方法我们称为先描述在组织。

基本概念

  • 课本概念:程序的一个执行实例,正在执行的程序等

  • 内核观点:担当分配系统资源(CPU时间,内存)的实体。

我们的操作系统在管理我们的进程的时候同一个名为task_struct PCB的结构体来管理我们的进程的属性。task_struct是Linux内核的一种数据结构,它会被装载到RAM(内存)里并且包含着进程的信息

比如我们自己写的代码加载到我们的内存中,我们将它的代码内容加载进去,但是中数据是不利于我们管理的,但是我们的数据执行到哪了,和状态等一列属性是可以的,我们将其组织起来便于管理。

描述进程-PCB

进程信息被放在一个叫做进程控制块的数据结构中,可以理解为进程属性的集合。 课本上称之为PCB(process control block),Linux操作系统下的PCB是

task_ struct内容分类

  • 标示符: 描述本进程的唯一标示符,用来区别其他进程。

  • 状态: 任务状态,退出代码,退出信号等。

  • 优先级: 相对于其他进程的优先级。

  • 程序计数器: 程序中即将被执行的下一条指令的地址。

  • 内存指针: 包括程序代码和进程相关数据的指针,还有和其他进程共享的内存块的指针

  • 上下文数据: 进程执行时处理器的寄存器中的数据[休学例子,要加图CPU,寄存器]。

  • I/O状态信息: 包括显示的I/O请求,分配给进程的I/O设备和被进程使用的文件列表。

  • 记账信息: 可能包括处理器时间总和,使用的时钟数总和,时间限制,记账号等。 其他信息

在 Linux 中,进程是操作系统进行资源分配和调度的基本单位。每个进程都有独立的内存空间、文件描述符、环境变量等资源。以下是进程的几个关键点:

进程 ID (PID)和查看进程

每个进程都有一个唯一的进程 ID,用于标识和管理。进程的信息可以通过 /proc 系统文件夹查看

进程状态:

  • 运行 (Running): 进程正在 CPU 上执行。

  • 就绪 (Ready): 进程等待 CPU 调度。

  • 阻塞 (Blocked): 进程等待某些事件(如 I/O 完成)。

  • 僵尸 (Zombie): 进程已终止,但其父进程尚未回收资源。

  • 停止 (Stopped): 进程被信号暂停。

进程创建:

通过 fork() 系统调用创建新进程,新进程是父进程的副本。

#include <stdio.h>
#include <unistd.h> // 包含 fork() 和 getpid() 的声明
#include <sys/types.h> // 包含 pid_t 的定义int main() {// 创建子进程pid_t pid = fork();if (pid < 0) {// fork() 失败fprintf(stderr, "Fork failed!\n");return 1;} else if (pid == 0) {// 子进程printf("Hello from the child process! (PID: %d)\n", getpid());} else {// 父进程printf("Hello from the parent process! (PID: %d, Child PID: %d)\n", getpid(), pid);}return 0;
}

进程终止:

进程可通过 exit() 系统调用终止,或由信号强制终止。

进程间通信 (IPC):

进程可以通过管道、消息队列共享内存信号量等方式进行通信。

相关文章:

冯诺依曼结构和进程概念及其相关的内容的简单介绍

目录 ​编辑 冯诺依曼体系结构 操作系统(Operator System) 进程 引入 基本概念 描述进程-PCB task_ struct内容分类 进程 ID (PID)和查看进程 进程状态: 进程创建: 进程终止: 进程间通信 (IPC): 冯诺依曼体系结构 冯诺依曼体系结构是现代计算机的基础架构&#xf…...

Native Memory Tracking 与 RSS的差异问题

一 问题现象 前一段时间用nmt查看jvm进程的栈区占用的内存大小。测试代码如下 public class ThreadOOM {public static void main(String[] args) {int i 1;while (i < 3000) {Thread thread new TestThread();thread.start();System.out.println("thread : "…...

在K8s中部署动态nfs存储provisioner

背景 之前&#xff0c;我已经在一台worker node上安装了local lvm 的provisioner来模拟需要本地高IOPS的数据库等stafeful应用的实现。 为了后续给虚拟机里的K8s集群安装可用的metrics和logs监控系统&#xff08;metrics和logs的时序数据库需要永久存储&#xff09;&#xff0…...

家庭财务管理系统的设计与实现

标题:家庭财务管理系统的设计与实现 内容:1.摘要 摘要&#xff1a;随着家庭经济的日益复杂&#xff0c;家庭财务管理变得越来越重要。本文旨在设计并实现一个功能强大的家庭财务管理系统&#xff0c;以帮助用户更好地管理家庭财务。通过对家庭财务管理需求的分析&#xff0c;我…...

数据结构-Stack和栈

1.栈 1.1什么是栈 栈是一种特殊的线性表&#xff0c;只允许在固定的一段进行插入和删除操作&#xff0c;进行插入和删除操作的一段称为栈顶&#xff0c;另一端称为栈底。 栈中的数据元素遵顼后进先出LIFO&#xff08;Last In First Out&#xff09;的原则&#xff0c;就像一…...

使用vhd虚拟磁盘安装两个win10系统

使用vhd虚拟磁盘安装两个win10系统 前言vhd虚拟磁盘技术简介准备工具开始动手实践1.winX选择磁盘管理2.选择“操作”--“创建VHD”3.自定义一个位置&#xff0c;输入虚拟磁盘大小4.右键初始化磁盘5.选择GPT分区表格式6.右键新建简单卷7.给卷起个名字&#xff0c;用于区分8.打开…...

代码随想录34 动态规划

1.经典问题&#xff1a; 背包问题 打家劫舍 斐波那契数列 爬楼梯问题 股票问题 2.dp数组以及下标的含义 3.递推公式 3.dp数组初始化 4.遍历顺序 5.打印数组 leetcode509.斐波那契数列 1.确定dp[i]含义 dp[i]第i个斐波那契数的值为dp[i] 2.递推公式&#xff1a;dp[…...

【2025年最新版】Java JDK安装、环境配置教程 (图文非常详细)

文章目录 【2025年最新版】Java JDK安装、环境配置教程 &#xff08;图文非常详细&#xff09;1. JDK介绍2. 下载 JDK3. 安装 JDK4. 配置环境变量5. 验证安装6. 创建并测试简单的 Java 程序6.1 创建 Java 程序&#xff1a;6.2 编译和运行程序&#xff1a;6.3 在显示或更改文件的…...

Shell特殊状态变量以及常用内置变量总结

目录 1. 特殊的状态变量 1.1 $?&#xff08;上一个命令的退出状态&#xff09; 1.2 $$&#xff08;当前进程的 PID&#xff09; 1.3 $!&#xff08;后台进程的 PID&#xff09; 1.4 $_&#xff08;上一条命令的最后一个参数&#xff09; 2.常用shell内置变量 2.1 echo&…...

【4Day创客实践入门教程】Day4 迈向高手之路——进一步学习!

Day4 迈向高手之路——进一步学习&#xff01; 目录 Day4 迈向高手之路——进一步学习&#xff01;更多的开发板外壳制作 Day0 创想启程——课程与项目预览Day1 工具箱构建——开发环境的构建Day2 探秘微控制器——单片机与MicroPython初步Day3 实战演练——桌面迷你番茄钟Day4…...

EtherCAT-快速搭建

EtherCAT-快速搭建 快速简介 快速简介 EtherCAT现场总线协议是由德国倍福公司在2003年提出的&#xff0c;该通讯协议拓扑结构十分灵活&#xff0c;数据传输速度快&#xff0c;同步特性好&#xff0c;可以形成各种网络拓扑结构。倍福公司推出了自己的ASIC专用芯片有ET1100和ET1…...

【设计测试用例自动化测试性能测试 实战篇】

&#x1f308;个人主页&#xff1a;努力学编程’ ⛅个人推荐&#xff1a; c语言从初阶到进阶 JavaEE详解 数据结构 ⚡学好数据结构&#xff0c;刷题刻不容缓&#xff1a;点击一起刷题 &#x1f319;心灵鸡汤&#xff1a;总有人要赢&#xff0c;为什么不能是我呢 设计测试用例…...

DBeaver连接MySQL提示Access denied for user ‘‘@‘ip‘ (using password: YES)的解决方法

在使用DBeaver连接MySQL数据库时&#xff0c;如果遇到“Access denied for user ip (using password: YES)”的错误提示&#xff0c;说明用户认证失败。此问题通常与数据库用户权限、配置错误或网络设置有关。本文将详细介绍解决此问题的步骤。 一、检查用户名和密码 首先&am…...

【MySQL — 数据库增删改查操作】深入解析MySQL的 Update 和 Delete 操作

1. 测试数据 mysql> select* from exam1; ----------------------------------------- | id | name | Chinese | Math | English | ----------------------------------------- | 1 | 唐三藏 | 67.0 | 98.0 | 56.0 | | 2 | 孙悟空 | 87.0 | 78.…...

04树 + 堆 + 优先队列 + 图(D1_树(D1_基本介绍))

目录 一、什么是树&#xff1f; 二、相关术语 根结点 边 叶子结点 兄弟结点 祖先结点 结点的大小 树的层 结点的深度 结点的高度 树的高度 斜树 一、什么是树&#xff1f; 树是一种类似于链表的数据结构&#xff0c;不过链表的结点是以线性方式简单地指向其后继结…...

【Proteus仿真】【51单片机】多功能计算器系统设计

目录 一、主要功能 二、使用步骤 三、硬件资源 四、软件设计 五、实验现象 联系作者 一、主要功能 1、LCD1602液晶显示 2、矩阵按键​ 3、加减乘除&#xff0c;开方运算 4、带符号运算 5、最大 999*999 二、使用步骤 基于51单片机多功能计算器 包含&#xff1a;程序&…...

Solon Cloud Gateway 开发:Route 的配置与注册方式

路由的配置与注册有三种方式&#xff1a;手动配置&#xff1b;自动发现配置&#xff1b;代码注册。 1、手动配置方式 solon.cloud.gateway:routes: #!必选- id: demotarget: "http://localhost:8080" # 或 "lb://user-service"predicates: #?可选- &quo…...

jstat命令详解

jstat 用于监视虚拟机运行时状态信息的命令&#xff0c;它可以显示出虚拟机进程中的类装载、内存、垃圾收集、JIT 编译等运行数据。 命令的使用格式如下。 jstat [option] LVMID [interval] [count]各个参数详解&#xff1a; option&#xff1a;操作参数LVMID&#xff1a;本…...

[Collection与数据结构] B树与B+树

&#x1f338;个人主页:https://blog.csdn.net/2301_80050796?spm1000.2115.3001.5343 &#x1f3f5;️热门专栏: &#x1f9ca; Java基本语法(97平均质量分)https://blog.csdn.net/2301_80050796/category_12615970.html?spm1001.2014.3001.5482 &#x1f355; Collection与…...

Ubuntu 24.04 安装 NVIDIA Container Toolkit 全指南:让Docker拥抱GPU

Ubuntu 24.04 安装 NVIDIA Container Toolkit 全指南&#xff1a;让Docker拥抱GPU 前言一、环境准备1.1 验证驱动状态 二、安装NVIDIA Container Toolkit2.1 添加官方仓库2.2 执行安装 三、配置Docker运行时3.1 更新Docker配置 四、验证安装结果4.1 运行测试容器 五、实战应用 …...

【人工智能】神经网络的优化器optimizer(二):Adagrad自适应学习率优化器

一.自适应梯度算法Adagrad概述 Adagrad&#xff08;Adaptive Gradient Algorithm&#xff09;是一种自适应学习率的优化算法&#xff0c;由Duchi等人在2011年提出。其核心思想是针对不同参数自动调整学习率&#xff0c;适合处理稀疏数据和不同参数梯度差异较大的场景。Adagrad通…...

MFC内存泄露

1、泄露代码示例 void X::SetApplicationBtn() {CMFCRibbonApplicationButton* pBtn GetApplicationButton();// 获取 Ribbon Bar 指针// 创建自定义按钮CCustomRibbonAppButton* pCustomButton new CCustomRibbonAppButton();pCustomButton->SetImage(IDB_BITMAP_Jdp26)…...

第25节 Node.js 断言测试

Node.js的assert模块主要用于编写程序的单元测试时使用&#xff0c;通过断言可以提早发现和排查出错误。 稳定性: 5 - 锁定 这个模块可用于应用的单元测试&#xff0c;通过 require(assert) 可以使用这个模块。 assert.fail(actual, expected, message, operator) 使用参数…...

数据库分批入库

今天在工作中&#xff0c;遇到一个问题&#xff0c;就是分批查询的时候&#xff0c;由于批次过大导致出现了一些问题&#xff0c;一下是问题描述和解决方案&#xff1a; 示例&#xff1a; // 假设已有数据列表 dataList 和 PreparedStatement pstmt int batchSize 1000; // …...

3403. 从盒子中找出字典序最大的字符串 I

3403. 从盒子中找出字典序最大的字符串 I 题目链接&#xff1a;3403. 从盒子中找出字典序最大的字符串 I 代码如下&#xff1a; class Solution { public:string answerString(string word, int numFriends) {if (numFriends 1) {return word;}string res;for (int i 0;i &…...

[Java恶补day16] 238.除自身以外数组的乘积

给你一个整数数组 nums&#xff0c;返回 数组 answer &#xff0c;其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。 题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。 请 不要使用除法&#xff0c;且在 O(n) 时间复杂度…...

优选算法第十二讲:队列 + 宽搜 优先级队列

优选算法第十二讲&#xff1a;队列 宽搜 && 优先级队列 1.N叉树的层序遍历2.二叉树的锯齿型层序遍历3.二叉树最大宽度4.在每个树行中找最大值5.优先级队列 -- 最后一块石头的重量6.数据流中的第K大元素7.前K个高频单词8.数据流的中位数 1.N叉树的层序遍历 2.二叉树的锯…...

有限自动机到正规文法转换器v1.0

1 项目简介 这是一个功能强大的有限自动机&#xff08;Finite Automaton, FA&#xff09;到正规文法&#xff08;Regular Grammar&#xff09;转换器&#xff0c;它配备了一个直观且完整的图形用户界面&#xff0c;使用户能够轻松地进行操作和观察。该程序基于编译原理中的经典…...

Linux --进程控制

本文从以下五个方面来初步认识进程控制&#xff1a; 目录 进程创建 进程终止 进程等待 进程替换 模拟实现一个微型shell 进程创建 在Linux系统中我们可以在一个进程使用系统调用fork()来创建子进程&#xff0c;创建出来的进程就是子进程&#xff0c;原来的进程为父进程。…...

微软PowerBI考试 PL300-在 Power BI 中清理、转换和加载数据

微软PowerBI考试 PL300-在 Power BI 中清理、转换和加载数据 Power Query 具有大量专门帮助您清理和准备数据以供分析的功能。 您将了解如何简化复杂模型、更改数据类型、重命名对象和透视数据。 您还将了解如何分析列&#xff0c;以便知晓哪些列包含有价值的数据&#xff0c;…...