【Linux详解】冯诺依曼架构 | 操作系统设计 | 斯坦福经典项目Pintos

目录

一. 冯诺依曼体系结构 (Von Neumann Architecture)

注意事项

存储器的意义:缓冲

数据流动示例

二. 操作系统 (Operating System)

操作系统的概念

操作系统的定位与目的

操作系统的管理

系统调用和库函数

操作系统的管理:

sum

三. 系统调用实现示例:Pintos 项目

Step 1:进入 examples 目录

Step 2:修改 Makefile 文件

Step 3:添加系统调用编号

Step 4:编写系统调用 API 原型

Step 5:定义参数调用宏

Step 6:实现系统调用功能

测试新系统调用

总结

文章手稿:


文章手稿可见文末~

一. 冯诺依曼体系结构 (Von Neumann Architecture)

冯诺依曼体系结构是我们常见计算机系统的基础架构,它由以下几个核心组件组成:

 之间的关系:

注意事项

  • 内存是 CPU 唯一能直接读写的数据存储器。
  • 外设只能通过内存进行数据传输,即外设的数据必须先写入内存,然后由 CPU 读取;同样,CPU 输出数据也必须先写入内存,再由内存转交给外设。

存储器的意义:缓冲

  • 技术角度:内存的速度介于 CPU 寄存器和外设之间,起到了缓冲的作用,避免了“木桶效应”,即系统性能被最慢的部分限制。
  • 成本角度:内存的制造成本低于 CPU 寄存器,但性能却能满足大部分数据存储需求,从而实现性价比的优化。

数据流动示例

当你登录 QQ 与朋友聊天时,数据流动过程如下:

  • 输入设备(键盘)将输入的数据先写入内存;
  • CPU 从内存读取数据进行处理,并将处理结果再次写入内存;
  • 输出设备(网卡)从内存读取数据并显示。

这种数据流动过程确保了各组件之间高效协作,提高了计算机系统的整体性能。


二. 操作系统 (Operating System)

操作系统的概念

计算机的运行:

操作系统 (OS) 是管理计算机软硬件资源的基本程序集合。主要包括:

  • 内核:负责进程管理、内存管理、文件管理和驱动管理。
  • 其他程序:如函数库、Shell 程序等,提供额外的功能和用户接口。

操作系统的定位与目的

  • 定位操作系统是一款专门管理软硬件资源的软件。
  • 目的
    • 对上:为用户程序提供良好、稳定的运行环境。
    • 对下:高效管理硬件资源。

操作系统的管理

管理分为决策和执行两个过程:

  • 决策:操作系统通过 数据+算法决定资源分配策略。
  • 执行:通过系统调用和库函数实际操作硬件资源。

系统调用和库函数

系统调用是操作系统提供给用户程序的接口,用于请求内核服务。由于系统调用比较底层,功能基础,对用户要求高,因此开发者通常会封装系统调用形成库函数,简化开发工作

操作系统的管理:

先描述再组织

C语言编写的os来管理软硬件,再底层就是二进制了

1. 描述起来,用struct结构体

2. 组织起来,用链表或其他高效的数据结构

maybe:计算机就是一种算法建模,处理数据的手段 

sum


三. 系统调用实现示例:Pintos 项目

为了更好的实战性学习,下面我将演示如何在斯坦福操作系统大作业 Pintos 项目,添加用户级系统调用。学习如何额外实现一些功能到系统调用中以供用户使用。

准备工作:

1. 获取最新的 Pintos

git clone git://pintos-os.org/pintos-anon

2:安装 QUMU

sudo apt-get install qemu

3:把压缩文件 ftp 传输到云服务器上,并解压文件。

$ tar -xvf pintos_modified.tar.gz

Pintos 是一个教学操作系统项目,以下是添加自定义系统调用的步骤:

Step 1:进入 examples 目录
cd pintos/src/examples
Step 2:修改 Makefile 文件

在 Makefile 中添加新系统调用程序的文件名和资源文件:

PROGS = ... additional
additional_SRC = additional.c
Step 3:添加系统调用编号

在 syscall-nr.h 中添加新函数的系统调用编号:

enum {...SYS_FIBONACCI,SYS_MAX_OF_FOUR_INT,...
};
Step 4:编写系统调用 API 原型

在 syscall.h 中声明新函数:

int fibonacci(int n);
int max_of_four_int(int a, int b, int c, int d);
Step 5:定义参数调用宏

在 syscall.c 中定义 syscall4 宏:

#define syscall4(NUMBER, ARG0, ARG1, ARG2, ARG3) ...
Step 6:实现系统调用功能

在 userprog/syscall.c 中实现新系统调用:

int fibonacci(int n) {// 斐波那契数列实现
}int max_of_four_int(int a, int b, int c, int d) {// 四数最大值实现
}
测试新系统调用

运行 Pintos 进行测试:

pintos --filesys-size=2 -p ../examples/additional -a additional -- -f -q run 'additional 10 20 62 40'

总结

冯诺依曼体系结构和操作系统设计共同构成了现代计算机系统的基础。冯诺依曼体系通过明确的组件分工和数据流动规则,实现了高效的硬件资源利用。而操作系统通过系统调用和库函数,为用户程序提供了高效、稳定的执行环境。掌握这两者的原理和实现方法,对于理解和优化计算机系统具有重要意义。


文章手稿:

 

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

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

相关文章

Structured Steaming结构化流详解:大案例解析(第12天)

系列文章目录 一、结构化流介绍(了解) 二、结构化流的编程模型(掌握) 三、Spark 和 Kafka 整合,流处理,批处理演示(掌握) 四、物联网数据分析案例(熟悉) 文章…

华硕笔记本重装系统详细操作,图文教程体验Win11如何重装系统

随着科技的不断发展,电脑操作系统的步骤也在不断更新迭代。对于华硕笔记本用户来说,升级到Windows 11操作系统可以带来更好的使用体验。本文将通过图文教程的形式,详细介绍华硕笔记本重装Windows 11系统的操作步骤,帮助用户顺利完…

LeetCode | 344.反转字符串

设置头尾两个指针,依靠中间变量temp交换头尾指针所指元素,头指针后移,尾指针前移,直到头尾指针重合或者头指针在尾指针后面一个元素 class Solution(object):def reverseString(self, s):""":type s: List[str]:r…

如和完全免费快速访问外网?有亿点点不便利罢了

很鸡肋,但是可以试试 这个手机是真的可以使用谷歌的 不得不说有点意思,但肯定没啥用 地址跳转

怎么用Excel生成标签打印模板,自动生成二维码

环境: EXCEL2021 16.0 问题描述: 怎么用excel生成标签打印模板自动生成二维码 解决方案: 在Excel中生成标签打印模板并自动生成二维码,可以通过以下几个步骤完成: 1. 准备数据 首先,确保你的Excel表…

SyntaxWarning警告

为什么conda环境运行hipcc vector_add.cpp -o vector_add -v会出现: SyntaxWarning: invalid escape sequence \w staticVars(search_namere.compile("gfx[0-9a-fA-F](:[-:\w])?")) SyntaxWarning: invalid escape sequence \A line_search_term re…

Vue3 【仿 react 的 hook】封装 useTitle

效果预览 页码加载时&#xff0c;自动获取网页标题通过input输入框&#xff0c;可以实时改变网页标题 代码实现 index.vue <template><h1>网页的标题为&#xff1a; {{ titleRef }}</h1><p>通过input输入框实时改变网页的标题 <input v-model"…

【Vision AI v2开箱之SenseCraft AI猫狗识别Arduino教程】

【Vision AI v2开箱之SenseCraft AI猫狗识别Arduino教程】 1. 前言2. 实验材料2.1 Grove Vision AI Module V22.1.1 特征2.1.2 硬件概述2.1.3 启动/重置/程序2.1.4 驱动 2.2 ESP32C32.2.1 引脚图2.2.2 组件概述2.2.3 电源引脚 2.3 SenseCraft AI Model Assistant2.3.1 部署的模…

【雷丰阳-谷粒商城 】【分布式高级篇-微服务架构篇】【13】压力压测JMeter-性能监控jvisualvm

持续学习&持续更新中… 守破离 【雷丰阳-谷粒商城 】【分布式高级篇-微服务架构篇】【13】压力压测JMeter-性能监控jvisualvm 压力测试概述性能指标 JMeter基本使用添加线程组添加 HTTP 请求添加监听器启动压测&查看分析结果JMeter Address Already in use 错误解决 性…

Hive数据锁问题处理

在测试环境有定时任务会定期将flume采集的数据load到hive表中&#xff0c;在查看yarn application过程中发现load操作没有执行&#xff0c;且后续的任务在上一个任务执行结束后很久才开始。感觉像是阻塞一样&#xff0c;于是手动执行相关脚本&#xff0c;发现也是会卡住&#x…

【Linux】进程间通信上 (1.5万字详解)

目录 一.进程间通信介绍 1.1进程间通信的目的 1.2初步认识进程间通信 1.3进程间通信的种类 二.匿名管道 2.1何为管道 2.1实现原理 2.3进一步探寻匿名管道 2.4编码实现匿名管道通信 2.5管道读写特点 2.6基于管道的进程池设计 三.命名管道 3.1实现原理 3.2代码实现 四.…

视觉理解与图片问答,学习如何使用 GPT-4o (GPT-4 Omni) 来理解图像

&#x1f349; CSDN 叶庭云&#xff1a;https://yetingyun.blog.csdn.net/ 一、引言 OpenAI 最新发布的 GPT-4 Omni 模型&#xff0c;也被称为 GPT-4o&#xff0c;是一个多模态 AI 模型&#xff0c;旨在提供更加自然和全面的人机交互体验。 GPT-4o 与 GPT-4 Turbo 都具备视觉功…

SuiNS发布子名及新命名标准,推动Web3身份结构的进步

SuiNS子名是Sui Name Service的强大扩展&#xff0c;最近与新命名标准一起发布。子名允许用户在一个主要的SuiNS名下创建额外的自定义身份&#xff0c;而无需额外费用。用户 gia 可以创建如 gaminggia 或 lendinggia 这样的子名&#xff0c;从而增强个人组织和支持群组与组织的…

068、PyCharm 关于Live Template模板

在 PyCharm 编辑器中&#xff0c;Live Templates 是一种功能强大的工具&#xff0c;可以帮助我们快速插入常用的代码片段或模板。 以下是在 PyCharm 中添加 Live Templates 的步骤&#xff1a; 添加 Live Templates 步骤&#xff1a; 打开 PyCharm 编辑器。 转到菜单栏中的 …

飞行堡垒系列_键盘灯开关

飞行堡垒系列键盘灯可以通过键盘上的"Fn 方向键"控制 演示机型品牌型号&#xff1a;飞行堡垒8 系统版本&#xff1a;Windows 11 飞行堡垒键盘灯可通过键盘上的"Fn方向键"控制。 " Fn 下方向键 "为减弱键盘灯光&#xff0c;多按几次键盘灯就可…

Linux源码阅读笔记05-进程优先级与调度策略-实战分析

基础知识 Linux 内核当中有 3 种调度策略&#xff1a; SCHED_OTHER 分时调度策略&#xff1b;SCHED_FIFO 实时调度策略&#xff0c;先到先服务&#xff1b;SCHED_RR 实时调度策略&#xff0c;时间片轮转。 如果有相同优先级的实时进程&#xff08;根据优先级计算的调度权值是…

2024 年值得推荐的 10 款 iPhone 数据恢复软件

iPhone 从来都不是一个简单的打电话电话。它就像一台微型电脑&#xff0c;让我们互相联系、拍照、拍视频、发邮件、看文档、看书。然而&#xff0c;随着它成为日常生活的必需品&#xff0c;我们总是容易因各种原因丢失数据&#xff0c;如删除、恢复出厂设置、iOS 错误、文件同步…

云手机在跨平台兼容性方面优势明显?有何应用场景

跨平台设备间无缝切换和数据同步的需求现在是很多人或者企业都需要的&#xff0c;云手机在这些方面似乎有很大优势&#xff1f;下面我们来具体探讨在兼容方面&#xff0c;云手机有何出彩之处&#xff1f;又支持哪些应用场景呢 先来说说云手机跨平台兼容性优势所在&#xff0c;要…

【设计模式深度剖析】【9】【行为型】【访问者模式】| 以博物馆的导览员为例加深理解

&#x1f448;️上一篇:备忘录模式 | 下一篇:状态模式&#x1f449;️ 设计模式-专栏&#x1f448;️ 文章目录 访问者模式定义英文原话直译如何理解呢&#xff1f; 访问者模式的角色类图代码示例 访问者模式的应用优点缺点使用场景 示例解析:博物馆的导览员代码示例 访问…

Mybatis——动态sql

if标签 用于判断条件是否成立。使用test属性进行条件判断&#xff0c;如果条件为true&#xff0c;则拼接sql。 <where>标签用于识别语句是否需要连接词and&#xff0c;识别sql语句。 package com.t0.maybatisc.mapper;import com.t0.maybatisc.pojo.Emp; import org.a…