计算机系统简述

目标

计算机世界并非如此神秘。相反,计算机是非常“确定”的一个系统,即在任何时候,在相同的方法、相同的状态下(当然还包括相同的起始条件),同样的问题必然获得相同的结果。其实,计算机并不是什么电子天才,相反,它只是一个电子傻瓜,只会精确地按照我们的要求去执行任务,它本身是没有什么心智的。事实上,计算机这样一个复杂的机体,是由一堆简单的部件,经过精心的组合而成。

本专栏强调的是理解,而不是死记硬背;强调的是软件与硬件结合,而不是软件与硬件的分别教授与学习。本着将软件硬件教学齐头并进的思路,从硬件的基本构件一直讲到软件的高级程序设计与构造,这样能够在学习过程中将软硬件融会贯通、相互印证,从而提高学习的广度、深度和效果,并为后续的计算机专业课如操作系统、计算机系统设计与结构、算法设计与分析、高可靠软件工程理论等打下基础。

最大的特点是提倡层次转换概念,即从问题开始到计算机运算出结果可分为七个层次。通过七个层次的转换,即可完成从问题到结果的转变。这七个层次及其转换是:问题到算法的转换、算法到程序设计语言的转换、程序到指令集结构(ISA)的转换、指令集结构到微观结构的转换、微观结构到电路的转换和电路到电路组件的转换。

经验与体会

为未来做准备:深入底层:系统运行的性能不仅仅取决于编写程序的水平,如果缺乏对系统底层知识的了解,则在面对一些性能问题时会一筹莫展。作为高级程序员,要编写高效率代码,仅仅掌握高级语言本身是不够的。除此之外,我们还需要了解与设备相关的知识(甚至是引脚的定义)。在高级语言编程课中,编译器这个“保护层”将计算机底层的“丑陋细节”都隐藏了。

两个反复出现的理念

一是“抽象”,二是“在脑子里不要对硬件和软件做任何区分”。

学会“抽象”能让我们站在更高的层次看问题,从而将事物的本质表现出来,而将其中的细节隐藏起来;能让我们更有效地利用时间和大脑;能让我们在分析问题时不至于陷入泥潭。此外,我们不仅要具备抽象的能力,还要具备“分解抽象”的能力,这样才能保证问题的顺利解决。这个过程有可以称为“解析”,即从抽象回到具体的过程。抽象技能相当重要,抽象的层次越高越好,它与工作效率成正比。 

硬件和软件只是计算机系统中两个组成部分的名称而已;对设计者来说,具体将计算机的某个功能划分给哪部分来实现,以及他们之间如何协同工作,原则只有一个:让计算机工作的最棒。

计算机系统简述

计算机,它是指这样一种机制,即同时在做着两方面的事情:即控制着信息的处理过程,同时也是信息处理过程的具体执行者。所谓“控制信息的处理过程”,指的是它必须决策下一个执行任务是什么,而“处理过程”的执行者,意味着他必须具备“加”、“减”、“乘”等运算能力以产生执行结果。该机制更准确的称谓是“中央处理器(Central Processing Unit,CPU)”。

而大多数人更熟悉“计算机”这个词,它包含了比处理器更多的意思。一个计算机系统由更多的部件组成,除了处理器之外,还包含键盘(用来输入命令)、鼠标(用来点击菜单)、显示器(用来显示计算机系统产生的信息)、打印机(用来打印信息的拷贝)、内存(用来临时存储信息)、磁盘和CD-ROM(用来永久存储信息及很多可以执行的程序或软件)。这些附件的部件更方便了计算机最终用户的使用。

两个非常重要的思想

第一:所有的计算机(不管是最大的还是最小的、最快的还是最慢的、最昂贵的还是最廉价的),只要给予足够的时间和内存,它们所能完成的计算任务是相同的。换句话说,最快的计算机能够完成的事情,最慢的计算机也能完成,只是更慢一些而已;而一个便宜的计算机所不能完成的事情(如果有足够内存的话),对于一个更昂贵的计算机来说,同样也是无法完成的。总之,所有的计算机能够完成相同的事情。只是有些计算机可能做的更快些,但绝不会做的更多。

第二,我们用英语或其他语言给出了一个问题,然而计算机却能通过电子运转(运行程序)来解决这个问题,太奇妙了!至于怎样把用人类语言描述的问题转换成能够影响电子运转的电压,需要一系列的、系统的转换过程。

计算机:通用计算设备

计算机是特别的,要学习计算机的基本原理,必须先了解计算机是怎样工作的?答案在于计算机被称为“通用计算设备(universal computational device)”。

在现代计算机出现之前,曾经出现了很多能计算的机器,其中,有些是模拟机—即机器产生的结果是用可测量的模拟量来表示的(如电压、距离等)。例如:滑动计算尺。模拟机器的缺陷主要是难以提高其精度。于是,数字机出现了,数字机(digital machine)通过一组固定的、有限的数字和字符来完成操作。如:数字手表。但计算机就不一样了。你需要告诉计算机的是“方法”和“任务”,如怎样做加法、怎样做乘法等。而假如你有新的计算任务要实现,就不需要购买或设计新机器了,所要做的唯一事情,就是在原来的计算机上增加一些新的指令或程序即可,这就是为什么我们称计算机为“通用计算设备”的原因。

通用计算的思想产生要归功于Alan Turing(阿兰·图灵)。1937年,他提出了一个大胆的设想:任何计算都可以由这样一台机器来完成,这个机器就是图灵机。他为这类机器给出了一个清晰的数学描述,但没有为之建造一台真正的机器。世界上真正可运行的数字计算机是在1946年才出现的(ENIAC—美国宾夕法尼亚大学)。在计算机领域上,有一个最高奖—图灵奖,相当于“诺贝尔奖”。

bb2b64ec78cf4ab3950f66e3a7aec80a.png

图灵机的“黑箱模型”

图灵提出:任何计算都可以通过某种图灵机来完成,我们称这个论题为“图灵论题”。虽然图灵论题从来没有被严格证明过,但众多的证据都表明它是正确的。

 

 

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

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

相关文章

数据库的学习(4)

一、题目 1、创建数据表qrade: CREATE TABLE grade(id INT NOT NULL,sex CHAR(1),firstname VARCHAR(20)NOT NULL,lastname VARCHAR(20)NOT NULL,english FLOAT,math FLOAT,chinese FLOAT ); 2、向数据表grade中插入几条数据: (3,mAllenwiiliam,88.0,92.0 95.0), (4,m,George&…

【数据结构与算法】快速排序双指针法

💓 博客主页:倔强的石头的CSDN主页 📝Gitee主页:倔强的石头的gitee主页 ⏩ 文章专栏:《数据结构与算法》 期待您的关注 ​

【js基础巩固】深入理解作用域与作用域链

作用域链 先看一段代码,下面代码输出的结果是什么? function bar() {console.log(myName) } function foo() {var myName "极客邦"bar() } var myName "极客时间" foo()当执行到 console.log(myName) 这句代码的时候&#xff0c…

树形结构数据库存储表转换

有个树形的菜单, 当初设计表时将数据存储为 level0, level1,leve2,level3..., 表名menus_month 即0层级下子层级1,孙层级2 但是带来一个问题, 如何查询这个树形结构,变得非常复杂 以下是对数据表进行关系转换, 生成两张表, menus和 menus_relastionships 1.建菜单表及关系表…

nullptr和NULL

nullptr 既不是整型类型,也不是指针类型,nullptr 的类型是 std::nullptr_t(空指针类型),能转换成任意的指针类型。 NULL是被定义为0的常量,当遇到函数重载时,就会出现问题。避免歧义 函数重载…

如何在Spring Boot中实现OAuth2.0和OpenID Connect

如何在Spring Boot中实现OAuth2.0和OpenID Connect 大家好,我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿! 一、OAuth2.0和OpenID Connect简介 OAuth2.0和OpenID Con…

数据结构--二叉树和堆

目录 1.基本概念 2.树的遍历方法 3.满二叉树&&完全二叉树 4.逻辑结构&&物理结构 5.推理公式 6.二叉树应用--堆 7.简单实现堆 1.基本概念 (1)这个里面的概念还是比较多的,但是大部分我们只需要了解即可,因为…

Ubuntu TensorRT安装

什么是TensorRT 一般的深度学习项目,训练时为了加快速度,会使用多 GPU 分布式训练。但在部署推理时,为了降低成本,往往使用单个 GPU 机器甚至嵌入式平台(比如 NVIDIA Jetson)进行部署,部署端也…

leetcode算法题总结

leetcode算法题总结 1、面试题整理1.1 入门1.2 基础1.3 适合1-3年面试1.4 适合3年以上面试 1、面试题整理 1.1 入门 1)两数之和(1, easy) 考察对map的使用,通过空间换时间 2)有效的括号(20, easy&#x…

Python的装饰器介绍

Python装饰器是一个强大的工具,可以增强函数或方法的功能而不改变它们的源代码。装饰器本质上是高阶函数(即接受一个函数作为参数的函数),它允许我们在函数的入口和出口添加逻辑,这使得代码更简洁、更具可维护性。下面…

VSCode使用ipynb文件高效地进行功能测试

一、ipynb是什么文件 .ipynb文件是Jupyter Notebook的专用格式,它允许用户在一个网页应用中混合编写Markdown文本、执行代码、查看输出结果及图表。Jupyter Notebook的本质是一个Web应用程序,支持运行40多种编程语言,包括Python。它的主要用…

java反射介绍

Java反射API允许你在运行时检查和修改程序的行为。这意味着你可以动态地创建对象、查看类的字段、方法和构造函数,甚至调用它们。这是一个强大的特性,但也应该谨慎使用,因为它可以破坏封装性。 以下是使用Java反射的一些常见用途:…

403 Forbidden:深入解析 HTTP 禁止访问错误及排查方法

目录 一、理解 403 Forbidden 错误的本质 二、系统化排查 403 Forbidden 错误 三、常见的解决方法 四、错误详尽排查指南 步骤1:掌握基本知识 步骤2:确定错误范围 步骤3:检查显而易见的问题 步骤4:核对权限和访问控制 步…

【鸿蒙学习笔记】MVVM模式

官方文档:MVVM模式 [Q&A] 什么是MVVM ArkUI采取MVVM Model View ViewModel模式。 Model层:存储数据和相关逻辑的模型。View层:在ArkUI中通常是Component装饰组件渲染的UI。ViewModel层:在ArkUI中,ViewModel是…

[AHK V2]获取本地IP地址

问题&#xff1a;如何用AutoHotkey v2 获取本地IP地址。 解答&#xff1a;AutoHotkey v2 源代码如下 #Requires AutoHotkey v2; MsgBox GetLocalIPByAdapter(Ethernet) ; <— specify the adapter name you are interested in ; MsgBox GetLocalIPByAdapter(以太网) ; <…

《算法笔记》总结No.4——散列

散列的英文名是hash&#xff0c;即我们常说的哈希~该知识点在王道408考研的教材里面属于查找的范围。即便各位并无深入了解过&#xff0c;也听说过散列是一种更高效的查找方法。 一.引例 先来考虑如下一个假设&#xff1a;设有数组M和N分别如下&#xff1a; M[10][1,2,3,4,5,6…

ARM/Linux嵌入式面经(十三):紫光同芯嵌入式

static关键字 static关键字一文搞懂这个知识点,真的是喜欢考!!! stm32启动时如何配置栈的地址 在STM32启动时配置栈的地址是一个关键步骤,这通常是在启动文件(如startup_stm32fxxx.s,其中xxx代表具体的STM32型号)中完成的。 面试者回答: STM32启动时配置栈的地址主…

java IO流(1)

一. 文件类 java中提供了一个File类来表示一个文件或目录(文件夹),并提供了一些方法可以操作该文件 1. 文件类的常用方法 File(String pathname)构造方法,里面传一个路径名,用来表示一个文件boolean canRead()判断文件是否是可读文件boolean canWrite()判断文件是否是可写文…

早起能给我带来了什么

现在我早已养成习惯&#xff0c;每天不用闹钟也能自然醒来。有时5点起&#xff0c;有时4点半起&#xff0c;最早4点起&#xff0c;通常不晚于5点半。 相比在7点左右起床&#xff0c;我每天多出了2小时&#xff0c;按一天8小时工作时长计算&#xff0c;每年可以多出约90个工作日…

Spring懒加载Bean机制

一、概述 默认情况下Spring容器启动时就会创建被它管理的Bean&#xff0c;但是有的时候被Spring管理的Bean并不需要再容器启动的时候被创建&#xff0c;而是当对象第一次被访问的时候进行创建&#xff0c;这种场景就可以使用懒加载实现。 也就是说&#xff1a;容器启动的时候…