【Linux】计算机操作系统和软硬件体系结构

2023-11-15

目录

1、冯诺依曼体系结构

1.1 中央处理器(CPU)

2、操作系统(OS)

2.1、操作系统的概念

 2.2、操作系统的作用

2.3、操作系统如何进行管理

2.3.1  操作系统通过分级管理的方式,实现对整体的管理

2.3.2 管理的本质是对数据进行管理

2.3.3  所有的“管理”,本质逻辑都是 — 先描述,再组织

3、系统调用与用户操作接口

3.1 系统调用

3.2 用户操作接口


1、冯诺依曼体系结构

我们常见的计算机,如笔记本。我们不常见的计算机,如服务器,大部分都遵守冯诺依曼体系。

 

现代计算机发展所遵循的基本结构形式始终是冯·诺依曼机结构。这种结构特点是“程序存储,共享数据,顺序执行”,需要 CPU 从存储器取出指令和数据进行相应的计算。主要特点有:

  1. 单处理机结构,机器以运算器为中心;
  2. 采用程序存储思想;
  3. 指令和数据一样可以参与运算;
  4. 将软件和硬件完全分离;
  5.  指令由操作码和操作数组成;
  6. 指令顺序执行。
  7. 计算机处理的数据和指令一律用二进制数表示
  8. 顺序执行程序

冯诺依曼体系结构由运算器、控制器、存储器、输入设备和输出设备五大部分组成。

  • 其中运算器、控制器和一些其他寄存器统称为中央处理器(CPU);
  • 存储器一般指内存,内存掉电易失,只能作为临时存储;
  • 输入设备和输出设备统称为外设,其中磁盘、网卡等等于输出和输入设备,键盘、鼠标等属于输入设备,显示器属于输出设备;

1.1 中央处理器(CPU)

中央处理器(Central Processing Unit),简称CPU,是1971年推出的一个计算机的运算核心和控制核心,是信息处理、程序运行的最终执行单元。

CPU作为一台电脑的核心,它的运算能力决定了一台电脑的运行速度;但CPU其实是很笨的,它只能被动接收别人传递过来的数据和指令,经过运算后再将得到的结果返回;那么这里就会存在两个问题:

  • 1、CPU如何能够识别我们传递给它的数据和指令?

答案是:CPU内部有一套自己的指令集,它会把指令对应到指令集,然后完成相应的操作;其中CPU的指令集是二进制的,这就是为什么我们编写的代码需要经过编译链接变成二进制的可执行程序后才能被运行的原因 – CPU需要读懂我们的指令才能完成对应的运算;这也是编译器存在与产生的根本原因。

  • 2、CPU需要的数据从哪里获取?

答案是:内存 (此处不考虑缓存);虽然我们的数据是存放在磁盘中的,但是由于磁盘读取与写入数据的速度太慢了 – 可以简单理解为CPU的运算速度以纳秒为单位,内存的运算速度以微秒为单位,而磁盘的运算速度则是以毫秒甚至秒为单位;CPU如果直接从磁盘中读取和写入数据,会有大量的等待时间,所以为了提高计算机的整体效率,CPU只会向内存中读取和写入数据;内存再向磁盘中读取和写入数据;其中,内存向磁盘读取和写入数据就是IO的过程。

通过以上问题,我们得出以下结论:

  • 在数据层面上,CPU不会直接和外设打交道,而只会和内存打交道;
  • 所有的外设需要载入数据时,只能载入到内存,内存要写入数据,也只能写入到外设中。

2、操作系统(OS)

2.1、操作系统的概念

操作系统(Operating SysSystem,OS)是配置在计算机硬件的第一次层软件,是对硬件系统的首次扩充。其作用是管理好这些设备,提高它们下利用率和系统的吞吐量,并为用户和应用程序提供一个简单的接口,便于用户使用。OS是现代操作系统中最简单和最重要的系统软件。

操作系统一共有四大软件管理模块:进程管理、文件管理、内存管理、驱动管理。

 2.2、操作系统的作用

计算机操作系统的作用是:为了提高计算机的利用率,为了方便用户使用,以及提高计算机的系统响应速度而给计算机配备的一种大型系统程序,用它来实现计算机系统自身的硬件和软件资源的管理。

比如我们程序运行之前需要预先把数据加载到内存当中,那么谁来加载?什么时候加载?一次加载多少呢?CPU为了提高效率把数据写入到内存中,之后再统一刷新,那么谁帮我们刷新?什么时候刷新呢?CPU运算结束后内存中的垃圾数据又由谁来帮我们清理呢?等等问题;这些事情全部都由操作系统来完成。

2.3、操作系统如何进行管理

关于操作系统的管理,我们主要从以下三个方面入手:

2.3.1  操作系统通过分级管理的方式,实现对整体的管理

我们学校为例,学校的校长并没有和我们(学生)进行交互,但他依旧能把学校管理的很好;这是因为校长把管理分发到下级,也就是我们的辅导员(班主任),通过辅导员来管理班级,这样,校长只需要把命令下放到下级,就可以轻松管理整个学校的事物;同样,操作系统也是如此。

2.3.2 管理的本质是对数据进行管理

任何决策都是要有依据的,而决策的依据就是管理者所获得的数据;比如:你个人的成绩、绩点、综测等。但是管理者不和我们之间进行交互,他又是如何获取我们的数据的呢?答案是由执行者提供 – 执行者通过与被管理者交互得到被管理者的各种数据,管理者通过这些数据对被管理者做出决策,然后执行者再执行这些决策。

对于计算机来说,各种硬件对应的驱动就是所谓的执行者,比如网卡有网卡驱动,磁盘有磁盘驱动;操作系统从这些驱动获取硬件数据,然后通过对硬件的数据进行管理实现对硬件的管理;
 

2.3.3  所有的“管理”,本质逻辑都是 — 先描述,再组织

我们知道,一个大学有几万名学生,如果校长对每个学生的数据都独立保存的话,那数据管理的成本势必会非常大;所以,我们可以利用面向对象的思想将学生的数据描述成一个结构体或者一个类,然后每个学生都对应着由这个类/结构体实例化出的一个对象;最后,我们可以使用某一种数据结构 (比如顺序表、链表) 将这些类对象组织起来,形成一个学生信息管理系统;此时,我们对学生数据的管理就转变成了对某一数据结构的增删查改,大大提高了管理的效率。

注:操作系统不仅能管理硬件,也能管理软件,且对软件的管理和对硬件的管理方法是完全一样的 -- 管理软件 --> 管理软件的数据 --> 把软件数据描述成一个结构体 --> 管理用于组织这个结构体的数据结构。

3、系统调用与用户操作接口

3.1 系统调用

操作系统是管理各种软硬件资源的软件,那么我们是否能通过系统直接对各种软硬件进行操作呢?答案是:不能,因为操作系统出于安全考虑,它不相信任何人!不然,万一有人对不小心删除磁盘驱动或者向磁盘进行添加恶意数据,那么数据安全将无法保障。

那么,操作系统又是如何向上层用户提供各种服务呢?于是操作系统想到一个完美的方法 — 给用户提供系统调用的接口,即当用户访问软硬件需求时,直接调用系统提供的接口,而这些操作系统调用的接口统称为系统调用

注:Linux 操作系统是托瓦兹大神于1991年使用C语言编写的,而上述的各种系统调用接口又是由操作系统提供的,所以它们也是C式的接口,说白了就是用C语言编写的用于用户调用的各种函数接口。

3.2 用户操作接口

  • 虽然操作系统为我们提供了各种系统调用接口让我们来访问软硬件,但是这些接口在使用上功能比较基础,对用户的要求也相对较高;于是人们在系统调用接口的基础上开发出了用户操作接口,比如 Linux 下的外壳程序 shell,各种函数库 (C/C++等),windows 图形化界面 (GUI),以及一些指令 (编译好的可执行程序) 等;
  • 用户通过这些操作接口进行指令操作、开发操作以及管理操作等等;比如 Linux 下外壳程序 bash 提供的 ls,本质上是调用系统接口,将磁盘中文件信息写入到显示器;touch 本质是调用系统接口,在磁盘上创建文件;又比如 C语言的 scanf/printf 函数,底层都是调用系统调用接口从键盘读入数据/向显示器上打印数据。

 

总结:

操作系统对所有软硬件资源进行管理,同时为用户提供访问软硬件资源的系统调用接口,由操作系统来完成资源的各种访问;

另一方面,用户为了降低成本,使用各种用户操作接口来访问软硬件资源,用户操作接口的底层再来调用系统调用接口。所以说,操作系统将硬件、软件和用户有机联系了起来。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【Linux】计算机操作系统和软硬件体系结构 的相关文章

  • xsel -o 对于 OS X 等效项

    是否有一个等效的解决方案可以在 OS X 中抓取选定的文本 就像适用于 Linux 的 xsel o 一样 只需要当前的选择 这样我就可以在 shell 脚本中使用文本 干杯 埃里克 你也许可以安装xsel在 MacOS 上 更新 根据 A
  • 为什么我收到的数据包数据大小大于mss?

    我在两台 PC 上使用 ifconfig ethX mtu 300 修改了 MTU 并使用 netperf 测试网络 我用 WireShark 嗅探了 SYN 数据包中的 MSS 260 但我得到了一些大于 260 的数据包 为什么 嗅探器
  • 拆分字符串以仅获取前 5 个字符

    我想去那个地点 var log src ap kernelmodule 10 001 100 但看起来我的代码必须处理 ap kernelmodule 10 002 100 ap kernelmodule 10 003 101 等 我想使用
  • 何时使用 pthread 条件变量?

    线程问题 看来 只有在其他线程调用 pthread cond notify 之前调用 pthread cond wait 时 条件变量才起作用 如果在等待之前发生通知 那么等待将被卡住 我的问题是 什么时候应该使用条件变量 调度程序可以抢占
  • 在 Linux 上更快地分叉大型进程?

    在现代 Linux 上达到与 Linux 相同效果的最快 最好的方法是什么 fork execve combo 从一个大的过程 我的问题是进程分叉大约 500MByte 大 并且一个简单的基准测试只能从进程中实现约 50 个分叉 秒 比较最
  • 如何使用 xterm.js 创建基于 Web 的终端以 ssh 进入本地网络上的系统

    我偶然发现了这个很棒的图书馆xterm js https xtermjs org 这也是 Visual Studio Code 终端的基础 我有一个非常普遍的问题 我想通过基于网络的终端 不在网络中 可能位于 aws 服务器上 访问本地网络
  • 如何在 Linux 中编写文本模式 GUI? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 当我编写脚本 程序时 我经常想弹出一个简单的文本 gui 来提示输入 我该怎么做 例如 来自 Shel
  • 如何禁用 GNOME 桌面屏幕锁定? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 如何阻止 GNOME 桌面在几分钟空闲时间后锁定屏幕 我已经尝试过官方手册了在红帽 https access redhat com doc
  • nginx 上的多个网站和可用网站

    通过 nginx 的基本安装 您的sites available文件夹只有一个文件 default 怎么样sites available文件夹的工作原理以及如何使用它来托管多个 单独的 网站 只是为了添加另一种方法 您可以为您托管的每个虚拟
  • 如何根据 HTTP 请求使用 Python 和 Flask 执行 shell 命令并流输出?

    下列的这个帖子 https stackoverflow com questions 15092961 how to continuously display python output in a webpage 我能够tail f网页的日志
  • 如何在 shell 脚本中并行运行多个实例以提高时间效率[重复]

    这个问题在这里已经有答案了 我正在使用 shell 脚本 它读取 16000 行的输入文件 运行该脚本需要8个多小时 我需要减少它 所以我将其划分为 8 个实例并读取数据 其中我使用 for 循环迭代 8 个文件 并在其中使用 while
  • Linux中的定时器类

    我需要一个计时器来以相对较低的分辨率执行回调 在 Linux 中实现此类 C 计时器类的最佳方法是什么 有我可以使用的库吗 如果您在框架 Glib Qt Wx 内编写 那么您已经拥有一个具有定时回调功能的事件循环 我认为情况并非如此 如果您
  • 在哪里可以找到并安装 pygame 的依赖项?

    我对 Linux 比较陌生 正在尝试安装 python 的 pygame 开发环境 当我运行 setup py 时 它说我需要安装以下依赖项 我找到并安装了其中之一 SDL 然而 其他人则更加难以捉摸 Hunting dependencie
  • 加载数据infile,Windows和Linux的区别

    我有一个需要导入到 MySQL 表的文件 这是我的命令 LOAD DATA LOCAL INFILE C test csv INTO TABLE logs fields terminated by LINES terminated BY n
  • 添加要在给定命令中运行的 .env 变量

    我有一个 env 文件 其中包含如下变量 HELLO world SOMETHING nothing 前几天我发现了这个很棒的脚本 它将这些变量放入当前会话中 所以当我运行这样的东西时 cat env grep v xargs node t
  • 如何在Linux内核源代码中打印IP地址或MAC地址

    我必须通过修改 Linux 内核源代码来稍微改变 TCP 拥塞控制算法 但为了检查结果是否正确 我需要记录 MAC 或 IP 地址信息 我使用 PRINTK 函数来打印内核消息 但我感觉很难打印出主机的MAC IP地址 printk pM
  • PHP 从命令行启动 gui 程序,但 apache 不启动

    首先 我阅读了有类似问题的人的一些帖子 但所有答案都没有超出导出 DISPLAY 0 0 和 xauth cookies 这是我的问题 提前感谢您的宝贵时间 我开发了一个小库 它使用 OpenGL 和 GLSL 渲染货架 过去几天我将它包装
  • 将 PDF 转换为 600dpi 的 TIFF 和 jpg 96 dpi

    我想使用 ImageMagick 从 Python 脚本将 pdf 转换为 600 dpi 的 tiff 和 96 dpi 的 jpg 我使用 imagemagick 命令行完成了这项任务 但我想使用python中的Imagemagick将
  • 如何在shell中输出返回码?

    我正在尝试通过调用自定义 shell 脚本sh bin sh c myscript sh gt log txt 2 gt 1 echo 该命令的输出是创建的后台进程的 PID 我想指导 bin sh保存返回码myscript sh到某个文件
  • 在 Linux 上使用多处理时,TKinter 窗口不会出现

    我想生成另一个进程来异步显示错误消息 同时应用程序的其余部分继续 我正在使用multiprocessingPython 2 6 中的模块来创建进程 我试图用以下命令显示窗口TKinter 这段代码在Windows上运行良好 但在Linux上

随机推荐

  • Linux的find命令

    一 find语法 find path option print exec ok command find 路径 参数 二 使用 通过文件名查找 find name 文件名 find etc name passwd 查找 etc目录下的pas
  • easychat项目讲解

    项目简介 本项目是基于Websocket和Servlet实现的多用户聊天室 实现了聊天所需的一些基本功能 功能描述 1 用户信息注册 2 登录 同时标识上 下线用户 3 私聊 点击好友列表中指定用户进行私聊 4 群聊 点击好友列表指定用户建
  • 2023最新ELK搭建教程,基于ES 8

    一 ELK介绍 ELK的应用 ELK的应用场景 日志查询 问题排查 上线检查服务器监控 应用监控 错误报警Bug管理性能分析 用户行为分析 安全漏洞分析 企业 行业 ELK用途 阿里巴巴 电子商务 云计算 用于日志管理和实时监控 腾讯 互联
  • 蓝桥杯客观题知识点

    一 异步和同步的在于 有无统一的时钟信号 异步无 同步有 RS485 半双工 异步 串行 差分输入 多级通信 USB 键盘等外设 RS232 全双工 异步 串行 单端输入 一对一通信 二 组合逻辑电路和时序逻辑电路的区别 组合 任意时刻的输
  • 整数转换成罗马数字

    给定一个整数num 1 lt num lt 3999 将整数转换成罗马数字 如1 2 3 4 5对应的罗马数字分别位I II III IV V等 格式 第一行输入一个整数 接下来输出对应的罗马数字 输入 123 输出 CXXIII 我的解法
  • 如何让Object 变得有序

    如何让Object 变得有序 1 方法一 继承Comparable 实现CompareTo方法 CompareTo 只有一个参数 但它有四个限制条件 具体我也没有研究 可查看相关信息 如果该类实现这个方法它就具有比较规则定义 那么以后放在C
  • SpringBoot——配置文件的分类

    简单介绍 在之前我们写配置文件的时候 我们直接在项目中的resources下面编写的配置文件 其实除了在这个路径下编写配置文件 还可以在其他的地方编写配置文件 并且不同位置的配置文件在启动的时候的优先级也是不一样的 1 在resources
  • java list 默认排序_List集合排序(默认及自定义排序)

    一 java提供的默认list排序方法 主要代码 List list new ArrayList list add 王硕 list add 刘媛媛 list add 刘迪 list add 刘布 升序 Collections sort li
  • 数据类型与printf,scanf函数

    printf与scanf函数 printf函数是一个格式化输出函数 scanf 函数则是一个输入函数 其一般的调用格式 scanf 格式控制 地址列表 其中格式控制一般是双引号中间加一些字符 由 与格式符组成 用于控制输入的格式 比如 d
  • 内存条 udimm rdimm 等和 ECC 功能

    RDIMM registered DIMM Registered Dual In line Memory Module 带寄存器的双线内存模块 表示控制器输出的地址和控制信号经过Reg寄存后输出到DRAM芯片 控制器输出的时钟信号经过PLL
  • MySQL 查询语句大全

    目录 基础查询 直接查询 AS起别名 去重 复 查询 条件查询 算术运算符查询 逻辑运算符查询 正则表达式查询 模糊查询 范围查询 是否非空判断查询 排序查询 限制查询 分页查询 随机查询 分组查询 HAVING 高级查询 子查询 嵌套查询
  • vs显示行号

    工具 gt 选项 gt 文本编译器 gt 然后选择对应的编程语言 gt 在右侧 行号前的对勾打上确定即可
  • 【知识分享】Modbus通信协议详解

    一 协议 这里分两部分 Modbus和协议 首先什么是协议 百度解释下就是 意思是共同计议 协商 经过谈判 协商而制定的共同承认 共同遵守的文件 比如大学毕业找工作的时候 一般要签一份叫 三方协议 的 三方指自己 校方 企业 这份协议里规定
  • kali学习4——使用msfvenom制作exe木马

    使用msfvenom制作exe木马文件 1 msfvenom msfvenom是msfpayload msfencode的结合体 使用msfvenom制作木马的思路是 木马在目标机上执行后 向本机发送信息 而本机则需要开启监听状态 收到信息
  • 2021级新生个人训练赛第38场

    问题 A chicken 题目描述 小 x 非常喜欢小鸡翅 他得知 NSC 超市为了吸引顾客 举行了如下的活动 一旦有顾客在其他超市找到更便宜的小鸡翅 NSC 超市将免费送给顾客 1000g 小鸡翅 小 x 为了尽可能的省钱 走遍了各大超市
  • java Unreachable错误

    Unreachable code 错误 不可达代码 比如在循环的break或者return后面的代码就是不可达代码 因为执行它们之前就已经跳出循环了 只要把这段代码移到break return之前就好了 参考https blog csdn
  • np.mean()和np.std()函数

    一 np mean 函数定义 numpy mean a axis dtype out keepdims mean 函数功能 求取均值 经常操作的参数为axis 以m n矩阵举例 axis 不设置值 对 m n 个数求均值 返回一个实数 ax
  • kibana启动问题:Kibana server is not ready yet

    第一点 KB ES版本不一致 网上大部分都是这么说的 解决方法 把KB和ES版本调整为统一版本 第二点 kibana yml中配置有问题 通过查看日志 发现了Error No Living connections的问题 解决方法 将配置文件
  • Vue3通透教程【八】获取DOM、操作组件

    文章目录 写在前面 Vue2 ref 的使用 Vue3获取DOM Vue3操作组件 写在最后 写在前面 专栏介绍 凉哥作为 Vue 的忠实 粉丝输出过大量的 Vue 文章 应粉丝要求开始更新 Vue3 的相关技术文章 Vue 框架目前的地位
  • 【Linux】计算机操作系统和软硬件体系结构

    目录 1 冯诺依曼体系结构 1 1 中央处理器 CPU 2 操作系统 OS 2 1 操作系统的概念 2 2 操作系统的作用 2 3 操作系统如何进行管理 2 3 1 操作系统通过分级管理的方式 实现对整体的管理 2 3 2 管理的本质是对数