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


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

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



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. 记录一次缓存引起的线上BUG

    背景 有一个需求大概是这样的,为了提高推荐系统的性能,需要本来从A服务获取的帖子信息,改为从Redis里面重新读取 Redis里面没有存帖子的所有信息,只存储了推荐系统必要的字段 大概是这样的: 至于 ...

  2. Day33:String类及其常用方法详解

    String类 1.1 String类概述 Java中字符串属于对象,String类用于创建和操作字符串. 最简单的字符串创建:直接通过String创建 String str="工地佬&qu ...

  3. Django查看内部sql语句的方式

    一:查看内部sql语句的方式 方式1(queryset对象才能够点击query查看内部的sql语句) res = models.User.objects.values_list('name', 'ag ...

  4. SQLMap入门——获取当前网站数据库的名称

    列出当前网站使用的数据库 python sqlmap.py -u http://localhost/sqli-labs-master/Less-1/?id=1 --current-db

  5. 知识分享-消息中间件详解+rabbitMQ

    知识分享-消息中间件详解+rabbitMQ 消息中间件 概述 消息中间件是基于队列与消息传递技术,在网络环境中为应用系统提供同步或异步.可靠的消息传输的支撑性软件系统. 应用场景 异步处理 对于电商a ...

  6. JavaScript:对象:如何创建对象?

    JS是面向对象的语言,除开基础数据类型,其他所有的数据类型都是对象,包括函数. 如何去理解对象,什么是对象呢? 举个例子,比如我们将日常生活中见到的猫这种动物,抽象成一个类Cat,这里不去谈类是什么概 ...

  7. 如何在C#中接受或拒绝 Excel 中的修订

    修订功能可以跟踪文档所有的修改,了解修改的过程,这对于团队协同文档编辑.审阅是非常有用的一个功能.将工作簿发送给他人审阅时,我们可以开启修订功能,共享工作簿被修改后,用户查看文档时可以选择接受或者拒绝 ...

  8. [常用工具] OpenCV_contrib库在windows下编译使用指南

    本文主要讲述opencv及opencv_contrib库在windows下基于vs2017编译安装指南.所用OpenCV版本为OpenCV4.4,编译平台为vs2017. 文章目录 1 下载 2 编译 ...

  9. 突如其来的&amp;quot;中断异常&amp;quot;,我(Java)该如何处理?

    # **一.何为异常?** ## 1.生活中的实例 生活中存在许多不正常: 上班路上自行车掉链子 上厕所手机掉马桶 下班回家钥匙丢失 ....... 2.程序中的实例 我们的代码中也许存在许多纰漏,导 ...

  10. C++Day09 深拷贝、写时复制(cow)、短字符串优化

    一.std::string 的底层实现 1.深拷贝 1 class String{ 2 public: 3 String(const String &rhs):m_pstr(new char[ ...