先看下面的一张图
你会联想到什么?没错这是整个计算机啊。
咱们讲计算机是用来帮助人们解决一些实际问题的工具
那咱们不妨先探究一下,在屏幕上输入“hello”,计算机内部都会进行哪些工做吧。ios
这是系统内部是这么操做的,然而实际中咱们是怎么操做的呢?
咱们的程序是这样的:printf("hello")
而这时计算机已经穿上了衣服。工具
直接就会在屏幕上面输出“hello”!
因此,咱们有了操做系统之后,咱们就能从应用程序,透过操做系统,来直接操做计算机硬件。spa
因此咱们知道了,所谓操做系统,就是在硬件之上包了一层软件,让咱们使用计算机更加便捷和高效操作系统
准确的说操做系统很难,很难,绝知此事要躬行啊!!!指针
上层应用经过操做系统提供的接口,来使用操做系统。code
让咱们打开钢琴的盖子,看看操做系统内部是怎么运做的吧。
从打开电源开始,计算机作了什么事情呢?要解决这个问题,就要解决计算机是怎么工做的呢?blog
图灵
1936,英国图灵提出了一种模型。
图灵机:
由此能够看出,图灵机和现代的计算机还有必定的距离,因此演化成了通用图灵机。接口
控制器首先读逻辑,好比读进来加法的逻辑,那他就作加法的运算,若是读进来的是乘法的逻辑,那么他就作乘法的运算。这更像是一种通用的模型,也就是所谓的通用图灵机。这就很像计算机了,把程序载入进来,就会执行相应的功能。ip
冯诺依曼
1946年,冯诺依曼提出存储程序思想。
把程序和数据存放在内存里,,而后载入到控制器中解释执行,计算机就会一步步的完成程序的工做。内存
一些知识:
IR的全称应该是Instructinon register
指令寄存器是用来存放指令的,存放当前正在执行的指令,包括指令的操做码,地址码,地址信息
PC的全称是program counter
程序计数器,是用来计数的,指示指令在存储器的存放位置,也就是个地址信息
在汇编中用寄存器IP表示pc
具体的操做流程,
因此计算机的工做方式,用四个字归纳就是取址执行
也就是PC=?
在X86 PC的执行过程:
内存中首先有一个固化的区域,存在着基本的输入输出功能,叫作ROM BIOS,固化在内存的0xFFFF0处。
开机前,硬件自动的设置好CS=0xFFFF;IP=0x0000处(CS:段寄存器 iP:段内的偏移。)造成的地质就是CS<<4+IP
从0磁道0扇区读入1个扇区 也就是 512 个字节,读到了0x7c00处,这个0磁道0扇区就是操做系统的引导扇区。
编译相关知识
代码解析
注意:以s结尾的是汇编代码。
这段代码 从start开始:
mov ax, #BOOTSEG mov ds,ax
也就是说上面的代码的做用是 bios将bootsect从7c00处挪到了9000这个地方。
jumi 间接跳转 go 赋给 ip ,INITSEG 赋给cs,这样就造成了一个地址,想想这样跳到哪里去了呢?
如今bootsect已经挪到了9000的这个地方,因此里面go的地址,也已经挪到了另外一个地址,因此调转的仍是下一行代码go所在的地址!
继续顺序执行。
从第2个扇区开始读4个扇区,载入setup
是显示中断。bp 表示的要显示的字符在内存中的位置。因此要把msg1的字符数据打到光标的位置,这就须要获取一下光标的位置 xor bh,bh
bootsect.s作了什么事情呢?
首先咱们知道的操做系统原本在硬盘上面,电源打开,就必须从磁盘载入到内存中,才会取址执行,那么bootsect.s就作了这件事。(分段读入)具体以下:
一、 先读入setup 显示logo。
如今bootsect.c执行完毕了,下面应该把控制权转给setup了,利用jumpi 0,SETUPSEG
段间跳转能够实现。cs《4 + ip
未完待续。。。