学习操作系统原理最好的方法是自己写一个简单的操作系统。


在大学计算机课程中会学到一个叫冯·诺依曼结构的东西,很多同学当时学的也不是很清楚,也就是记住冯·诺依曼结构中五个部分的名称,能应付考试。主要原因还是当时大家的计算机知识比较少,的确不好深入理解。

计算机组成与运行原理和冯·诺依曼结构密切相关,今天我们就来回顾一下冯·诺依曼结构,也许能温故知新。



1946年冯·诺依曼提出了计算机的三个基本原则:

  1. 计算机硬件由五个部分组成:运算器、控制器、存储器、输入设备和输出设备。
  2. 计算机采用二进制。
  3. 计算机采用“存储程序”模式。

以上三个基本原则虽然是七十多年前提出的,但现在的计算机仍然沿用这些原则。

下面将这三个基本原则简单介绍一下:

一、计算机硬件的五个部分

冯·诺依曼结构中五个部分分别对应哪些东西呢?我大概列举了一下:

  • 运算器+控制器=CPU。
  • 存储器:随机存储器RAM(内存、显存),只读存储器ROM。
  • 外部存储:硬盘、软盘、光盘、优盘、磁带、纸带等。
  • 输入设备:键盘、鼠标、扫描仪、外部存储等。
  • 输出设备:显示器、音响、打印机、外部存储等。

计算机发明七十多年了,在计算机发展的初期,计算机是一个庞然大物,冯·诺依曼结构中的五个部分每个都很大。而现在的笔记本电脑很轻便,一个人就能很轻松的拎走。我们需要结合现在和历史的角度去分析冯·诺依曼结构中的五个部分。

从现在的角度看,运算器和控制器已经集成到同一个芯片里了,叫CPU,就像图中画的那样。

存储器包括随机存储器RAM和只读存储器ROM。RAM主要是指内存和显存。ROM主要存放BIOS等计算机内置程序,特点是断电后不会像RAM那样丢失数据。

有时候我们会看到一个叫“外部存储器”的概念,主要包括硬盘、优盘、光盘、软盘,甚至包括古老的磁带和纸带。这些东西都不属于冯·诺依曼结构中的存储器,而属于输入设备或输出设备。

二、计算机采用二进制

在今天看来计算机采用二进制是理所当然的事,然而当年一开始发明的计算机采用的是十进制,因为十进制符合人类的习惯。为了让计算机硬件在设计上更加简单可靠,后来还是采用了冯·诺依曼提倡的二进制。因为从电路上说,有电和没电是两种非常容易区分的两种状态,正好对应数学上的二进制。

三、计算机采用“存储程序”模式

这个可以对比一下算盘,在用算盘做计算时,算盘上只有数据,而怎么计算是人来一步一步操作的。也就是说算盘并不知道该怎么计算,这样就导致算盘无法实现计算自动化。而冯·诺依曼提出的“存储程序”的意思就是将算法和数据都设计成计算指令(也就是后来的汇编指令),放入内存中,然后控制器会从内存中读入第一条指令并执行,然后会读入并执行下一条指令,然后会读入并执行下下一条指令……就这样,计算机终于实现了计算自动化。而且计算机取指令和执行指令的速度要比人拨动算盘快很多,这样使计算机实现了高速自动化计算,同时也使计算机有了更大的实用价值。而我们平时写的各种程序,最终会转化为这样的指令。我觉得这才是程序员诞生的起点。这里需要注意的一点是我们平时写的程序放在硬盘或其它外部存储器中只是一个普通的文件,只有加载到内存后才能执行。

自己动手从零写桌面操作系统GrapeOS系列教程——7.计算机组成与运行原理的更多相关文章

  1. 别人写的一个Bootstrap系列教程

    http://www.cnblogs.com/lansy/category/659061.html

  2. 一个人写的操作系统 - Sparrow OS

    一个人写的操作系统 - Sparrow OS 自己写一个操作系统,这是在过去的几年里我一直为之努力的目标,现在终于完成了. 缘起 自己动手写操作系统的动机最初来自于学习Linux遇到的困难. 我是一个 ...

  3. 自制 os 极简教程1:写一个操作系统有多难

    为什么叫极简教程呢?听我慢慢说 不知道正在阅读本文的你,是否是因为想自己动手写一个操作系统.我觉得可能每个程序员都有个操作系统梦,或许是想亲自动手写出来一个,或许是想彻底吃透操作系统的知识.不论是为了 ...

  4. 【操作系统】关于Linux桌面操作系统

    以前是Win+Ubuntu+黑苹果,周末想体验一下deepin,于是简单安装了一下,安装过程很简单,这里不再描述.安装之后,第一次打开系统,确实很惊艳,赏心悦目的操作系统. 之前用Ubuntu时候,C ...

  5. 盘点|2021年最受欢迎Linux桌面操作系统前十名

    镜像下载.域名解析.时间同步请点击 阿里云开源镜像站 阿里云开源镜像站利用云服务上的优势,提供快速.稳定的镜像分发服务.和免费的CDN加速服务.更新频率高,基本上一天一更新,对于Centos/Ubun ...

  6. 手把手教你从零写一个简单的 VUE

    本系列是一个教程,下面贴下目录~1.手把手教你从零写一个简单的 VUE2.手把手教你从零写一个简单的 VUE--模板篇 今天给大家带来的是实现一个简单的类似 VUE 一样的前端框架,VUE 框架现在应 ...

  7. 《一步一步写嵌入式操作系统》读书笔记1—Skyeye介绍、安装和HelloWorld

    2013-11-14 最近在看<一步一步写嵌入式操作系统>,感觉此书甚好,许多地方讲得很清楚.可操作性强,计划边读边实践边写笔记,希望能够逐步熟悉嵌入式操作系统底层的东西,最终剪裁出一套实 ...

  8. Python之美[从菜鸟到高手]--一步一步动手给Python写扩展(异常处理和引用计数)

    我们将继续一步一步动手给Python写扩展,通过上一篇我们学习了如何写扩展,本篇将介绍一些高级话题,如异常,引用计数问题等.强烈建议先看上一篇,Python之美[从菜鸟到高手]--一步一步动手给Pyt ...

  9. Zedboard学习(一):移植Ubuntu桌面操作系统 标签: ubuntu移植zedboardFPGA 2017-07-04 21:53 26人阅读

    环境准备: 首先,需要的肯定是Ubuntu操作系统.可以在自己的电脑上安装物理机,也可以是虚拟机下运行的.我的是在Vmware下运行的Ubuntu14.04 32位操作系统. 由于zedboard上的 ...

  10. 新奇:(nodejs兄弟)用HTML + FLASH +JS 也可以写桌面EXE。

    首先看下面这张图片,下面的所有界面都是用html代码实现的. 编程IDE:vb6.0 使用控件:WEBBROWSER 原理:使用olelib 让程序继承:IDocHostUIHandler 和 ICu ...

随机推荐

  1. SAP程序发布流程

    更改程序名称 如果你想要更改程序名称的话,首先进入程序,关闭编辑,只显示代码 点击重命名就可以了 或者直接输入事务代码se38进入APAP编辑器,输入程序名称,重命名 为程序创建事务代码 事务代码为s ...

  2. 如何优化大场景实时渲染?HMS Core 3D Engine这么做

    在先前举办的华为开发者大会2022(HDC)上,华为通过3D数字溪村展示了自有3D引擎"HMS Core 3D Engine"(以下简称3D Engine)的强大能力.作为一款高性 ...

  3. linux挖矿处置

    挖矿的类型 主动挖矿:用户在个人电脑或服务器使用挖矿程序进行CPU,GPU计算,获取虚拟货币. 被动挖矿:挖矿病毒通过系统漏洞,恶意程序,弱口令等方式入侵服务器,设备感染挖矿病毒后会开始挖掘虚拟货币. ...

  4. 随身WIFI刷机记录 UF1003

    设备说明 拿到手的设备是UF1003的设备,入手价格23元. https://www.bilibili.com/video/BV1Ne4y1n7su/ 视频会同步到BIlibili,感谢大家的支持,点 ...

  5. [编程基础] C++多线程入门2-连接和分离线程

    原始C++标准仅支持单线程编程.新的C++标准(称为C++11或C++0x)于2011年发布.在C++11中,引入了新的线程库.因此运行本文程序需要C++至少符合C++11标准. 文章目录 2 连接和 ...

  6. 如何指定多个项目的 InternalsVisibleTo

    InternalsVisibleTo 属性允许你指定一个或多个程序集,这些程序集可以访问当前程序集中的内部类型.经常在进行单元测试时使用,例如,你可以在一个项目中定义一个内部类型,然后在另一个项目中进 ...

  7. [cocos2d-x]关于定时器

    什么是定时器 定时器的作用就是每隔一段时间,就执行一段自定义的动作,比如飞机向前方移动,子弹的移动等等.该函数定义在CCNode头文件中,基本上cocos2dx中所有的东西都能够使用定时器. 定时器的 ...

  8. C#调用js库的方法

    前言 用.net6开发一个Winform程序,处理Excel文件,并把结果导出Excel文件. 要用到两个算法,一是turf.js库的booleanPointInPolygon方法,判断经纬度坐标是否 ...

  9. ORM执行SQL语句,神奇的双下划线查询,ORM外键字段的创建,外键字段数据的操作,多表查询

    ORM执行SQL语句,神奇的双下划线查询,ORM外键字段的创建,外键字段数据的操作,多表查询 一.ORM执行SQL语句 有时候ORM的操作效率较低,我们是可以自己来编写SQL语句的 方式一: res ...

  10. 记一下Mybatis Plus遇到的现象

    使用Springboot+Mybaits plus,在Controller中直接调用Service中的方法,没有配置事务,就算是在Services上加了@Transactional也是没有事务的,可以 ...