操作系统(二)从图灵机到现代计算机

本文介绍了从图灵机的概念到现代计算机的演化过程,阐述了冯诺依曼架构的基本原理,详细讲解了计算机开机时的指令执行,包括BIOS的初始化、引导扇区的加载以及后续的程序执行。通过对X86架构计算机开机步骤的分析,揭示了计算机从开机到执行第一句指令的详细流程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

上一篇文章,我们初步了解了操作系统在现代计算机中充当的角色。
操作系统(一)什么是操作系统

一:从白纸到图灵机

图灵机是英国数学家A.C.图灵于1936年提出的一个模型。

小孩子算数
在聊图灵机之前,我们先来想象这样一个场景:
一个小孩想要计算一条算式:2 + 4 = ?。
于是小孩在大脑里面想要计算的是2 + 4,然后把“2 + 4”写到白纸上。然后使用他的手指数数,左手摆出了两个手指,右手摆出四个手指。于是数两个手的手指一共是六个。最后把结果6写到白纸上。
好,以上就是小孩执行一个计算的 全过程。

图灵机
图灵想到的是如何使用机器来模拟人类计算一道算术题的过程。
他创造了这样一个机器,一个控制器,一条纸带。控制器扫描纸带上的“2 + 4”指令,然后控制器根据自身的一套机制,算出了“2 + 4”的结果,并把结果“6”打印到纸带上。
但是这样的图灵机不够灵活,只能做单一的运算,例如例子中的加法运算。
最初的图灵机

二:从图灵机到通用图灵机

在这里插入图片描述
从图分析改良过的通用图灵机,首先在控制器里面过了一个模块,用于修改控制器的。纸带里面也多了一些数据,这些通过纸带上的具有特定规则的数据,图灵机可以通过这些字符去判断接下来的数据是要使用加法还是减法,或者是其他的更加复杂的多层计算。
这就是通用图灵机。根据读进来的数据判断执行什么样的动作,再想一下我们现在在用的现代计算机,我们点击微信,电脑就打开微信。我们点击浏览器,电脑就打来浏览器。可以惊讶的发现,我们现在这么智能的计算机,居然是跟早期的通用图灵机的思路是一致的。

三:从通用图灵机到计算机

1946年,冯诺依曼提出了一个伟大的想法:将程序和数据存储到计算机内部的存储器中,然后把程序载入到控制器、运算器里面进行解析执行。如图:
在这里插入图片描述
计算机由五大部件组成:

  • 输入设备
  • 输出设备
  • 存储器
  • 运算器
  • 控制器

计算机执行的时候,首先把程序存储到存储器中,然后用一个指针指向某个程序,控制器和运算器便会取程序地址进行执行。执行完了第一个程序后,指针接着指向下一个地址,继续通过控制器和运算器进行执行,直到执行完所有任务。

那么概述来说,计算机的运行原理是什么呢?
取址执行。

四:现代计算机,开机!

上面通过计算机的一些历史和发展,我们了解了计算机的大概情况。接下来继续探索计算机是如何开机的。
打开计算机电源,计算机执行的第一句指令是什么?
对于X86架构的Intel计算机来说,内存有部分区域是已经固化的,叫做ROM BIOS映射区,地址为0xFFFF0,其中CS = 0xFFFF,IP = 0x0000。(BIOS,全称basic input output system,即基本输入输出系统。)

备注:这里其实就是冯诺伊曼的思想的应用,取址执行,首先要有执行程序的地址,在计算机刚上电的时候,内存是空的没有数据和地址的话,计算机就会无从执行,所以把一部分内存固化用作开机使用。

1.从按下电源键到进入引导扇区

  1. 开机时,X86架构的计算机CPU处于实模式,CS = 0xFFFF,IP = 0x0000。CS左移4位,加上IP,等于0xFFFF0,这正好是BIOS区域。
  2. 计算机执行BIOS区域的代码检查RAM、键盘、显示器、硬盘、主板等硬件。只有所有硬件都正常运作,才进入下一个环节。
  3. 将磁盘的0磁道扇区读入一个512字节的扇区(该扇区被命名为引导扇区)。CS = 0x07c0,IP = 0x0000,CS左移4位加上IP,得到地址0x7c00,改地址正是引导扇区的地址。
  4. CPU执行内存0x7c00,即引导扇区的代码。

2.引导扇区存放的代码
引导扇区就是启动设备的第一个扇区,大小为512个字节(开机时候按住del键可以进入启动设备界面,这个地方就是我们平时进入PE系统或者光盘启动的入口!)。其中,启动设备信息会被设置到CMOS,CMOS用来存储实时钟和硬件配置信息。
所以硬盘上的第一个扇区存放着开机后的第一段我们可以控制的程序。下面接着看扇区里面的代码是怎么样的。

3.bootsect.s
在这里插入图片描述
备注:首先,我们看到代码文件的后缀为.s,可以知道这是一段汇编语言代码。这里引发出一个思考,汇编语言对应的高级语言是C,为什么不用C来编写?
C语言是需要编译才能运行的,C经过编译知道,会产生一些我们无法控制的元素。
这里举个例子,假如我们用C写了个int a,经过编译后的int a,我们无法控制它存放在内存的哪个位置。而汇编的每一条指令最终都变成完整的机器指令,可以随意控制机器。

上面的代码执行完后,会执行到以下代码:
在这里插入图片描述
上面代码我们只挑重点的来分析, 代码中的0x13是BIOS读磁盘扇区的中断。中断之后,计算机应该读取那些扇区呢?读取的扇区是setup的4个扇区,如下图:
在这里插入图片描述

4.读入setup模块后的代码模块:ok_load_setup
在这里插入图片描述
代码中,我们看到会执行打光标到屏幕上,并且我们开机过程中的显示的logo也在这代码里面执行。接着读入并且执行system模块。
备注:在这里我们可以修改代码,从而把开机的logo和文字改为自己想要的。

由于篇幅原因,后面我们继续了解和学习操作系统的system模块。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员-薯片

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值