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


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

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



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. Burp Suite

    Burp Suite proxy代理 1.首先在浏览器中设置代理配置 火狐浏览器先点击右上角三个杠--选项--常规--网络设置 2.打开Burp Suite进行抓包 Proxy代理--options中 ...

  2. 一篇文章教你实战Docker容器数据卷

    在上一篇中,咱们对Docker中的容器数据卷做了介绍.已经知道了容器数据卷是什么?能干什么用.那么本篇咱们就来实战容器数据卷,Docker容器数据卷案例主要做以下三个案例 1:宿主机(也就是Docke ...

  3. 解决Win10更新后远程桌面提示CredSSP加密Oracle修正的问题

    1.以管理员身份打开cmd,运行命令提示符:2.执行REG ADD HKLM\Software\Microsoft\Windows\CurrentVersion\Policies\System\Cre ...

  4. cmd命令行ssh连接Linux服务器

    打开cmd工具 使用命令ssh连接服务器 ssh 用户名@ip地址 (不需要指定端口号,默认端口就是22) 输入密码即可

  5. Apache Kafka 移除 ZK Proposals

    Zookeeper 和 KRaft 这里有一篇 Kafka 功能改进的 proposal 原文.要了解移除 ZK 的原因,可以仔细看看该文章.以下是对该文章的翻译. 动机 目前,Kafka 使用 Zo ...

  6. flutter系列之:flutter中listview的高级用法

    目录 简介 ListView的常规用法 创建不同类型的items 总结 简介 一般情况下,我们使用Listview的方式是构建要展示的item,然后将这些item传入ListView的构造函数即可,通 ...

  7. jQuery烟花效果

    1.依赖源码 (function($){$.fn.fireworks=function(options){options=options||{};options.opacity=options.opa ...

  8. [剑指Offer]3.数组中重复的数字

    题目 找出数组中重复的数字. 在一个长度为n的数组中的所有数字都在0~n-1的范围内.数组中某些数字是重复的,但是不知道有几个数字重复了,也不知道每个数字重复了几次.请找出数组中任意一个重复的数组.例 ...

  9. Flutter帧率监控 | 由浅入深,详解获取帧率的那些事

    前言 做线上帧率监控上报时,少不了需要弄明白如何通过代码获取实时帧率的需求,这篇文章通过图解配合Flutter性能调试工具的方式一步步通俗易懂地让你明白获取帧率的基础知识,以后再也不愁看不懂调试工具上 ...

  10. 1.31 wlx 魔怔 9 解法交互题小结

    参考题解地址 1. 从树上任意一个节点开始,跳到其随机一个后代,跳到叶子的期望次数为 \(H_{siz_u}=\ln(siz_u)\). 证明: 首先考虑一条链的情况.设在第 \(i\) 个点期望次数 ...