前言

 

 

前面我们已经了解了计算机硬件的工作原理,以及操作系统的发展。我们知道是内存把计算机硬件和软件联系了起来。不夸张的说,了解了软件在内存中的结构,就基本了解了程序最底层的运行原理。所以从这一篇开始,将深入的讨论计算机中内存管理和布局。内存的管理同计算机硬件以及擦做系统是分不开的。这一篇我们主要讨论早期x86 CPU和DOS系统对于内存的管理。

 

 

1. 8086 CPU

 

说到CPU,我们第一个想到的应该就是Intel。 1971年11月15号,Intel发布了全球第一款微处理器Intel 4004,这是一个主频只有108KHz的4bit处理器。而后又发布了8bit的8008处理器。而我们最熟悉的应该就是8086,为什么?因为随便找一本汇编的书籍看看,都会有8086四个大字。因为8086标志着Intel x86体系结构的CPU的开始。而且8086/8088开始用于便携电脑,所以我们就从8086开始介绍。80186除8086内核,另外包括了中断控制器、定时器、DMA、I/O、UART、片选电路等外设。

 

 

1.1 8086/8088内存访问

 

8086是x86体系结构的开始,他采用了16bit,但是地址线却用了20位。前面介绍CPU工作原理的时候哦我们知道,CPU内部有一个PC计数器,用来存储下一个要执行的物理地址。但是16位的寄存器如何存储20位的地址呢?

继续阅读

 

前言

 

 

前面的文章主要都是计算机硬件相关的一些工作原理。而前一篇文章介绍了内存的工作原理,编址方式,逐步过渡到软件上面来了。前面也说过,内存是一个非常重要的部件,因为CPU所需的指令和数据都在内存中。所以从这一篇开始我们主要看看程序运行时在内存中的布局。

 

我们知道对于计算机系统来说,最底层的是硬件,硬件之上是操作系统,而我们的程序都是基于操作系统来运行的,而不是基于硬件,这样操作系统为我们提供了一层抽象,所以对于程序员来说,不需要特别的关注计算机硬件。所以正常来说介绍完硬件后,应该来介绍操作系统。但是我们知道在计算机在不断的发展,硬件,操作系统都在不断发展。而无论怎么发展,程序运行都离不开内存,所以我决定以内存和出发点,来看硬件,操作系统以及应用程序的发展过程。

 

 

 

1. 操作系统和内存布局

在第一代计算机时期,构成计算机的主要元器件是电子管,计算机运行速度慢(只有几千次/秒),当时没有操作系统,甚至没有任何软件。程序员首先编写程序,然后直接在计算机的控制台上操纵程序运行。

 

 

1.1 人工操作方式

 

当时的计算机有一个控制面板,上面有一些开关,当要启动计算机的使用,就是要把启动程序用手工输入到机器里去,其方法就是利用机柜面板上的一排开关,用二进制代码把指令一条一条拨进去。但是指令有限,干不了太多事情。

 

所以当时程序员使用机器码编写程序,然后通过打孔机,将程序转换到打孔的纸袋上。纸袋每排有八个孔的位置,穿了孔的代表1,没穿孔的代表0。然后通过纸带机等设备手工将程序装入计算机的内存,按动控制台开关和按扭确定程序的起始地址并启动程序执行。程序员只能通过控制台上的显示灯来观察程序执行情况。当程序运行出错时,程序员直接通过控制台开关来停止程序运行,检查内存及寄存器内容并调试程序。程序运行结果可以通过打印机或穿孔机输出。

 

上图就是纸袋和纸袋读入机器。但是存储程序的介质是纸袋,而加载程序是通过纸带机。其实这里我也有个疑问:

  1. 纸带机是如何把纸袋上的程序加载到内存的呢?
  2. 程序被加载到内存的地址是如何确定的呢?

继续阅读