【操做系统学习笔记】操做系统基础

什么是操做系统?

先看下面的一张图
clipboard.png
你会联想到什么?没错这是整个计算机啊。
咱们讲计算机是用来帮助人们解决一些实际问题的工具
那咱们不妨先探究一下,在屏幕上输入“hello”,计算机内部都会进行哪些工做吧。ios

输出“hello”的工做

clipboard.png

  1. cpu发指令给内存,把内存地址为300的地方东西拿出来,写入到777显存地址。屏幕出现h
  2. 同理e,l,l,o。

这是系统内部是这么操做的,然而实际中咱们是怎么操做的呢?
咱们的程序是这样的:printf("hello")
而这时计算机已经穿上了衣服。工具

clipboard.png
直接就会在屏幕上面输出“hello”!
因此,咱们有了操做系统之后,咱们就能从应用程序,透过操做系统,来直接操做计算机硬件。spa

因此咱们知道了,所谓操做系统,就是在硬件之上包了一层软件,让咱们使用计算机更加便捷和高效操作系统

准确的说操做系统很难,很难,绝知此事要躬行啊!!!指针

打开操做系统

上层应用经过操做系统提供的接口,来使用操做系统。code

让咱们打开钢琴的盖子,看看操做系统内部是怎么运做的吧。
从打开电源开始,计算机作了什么事情呢?要解决这个问题,就要解决计算机是怎么工做的呢?blog

计算机的工做方式。

图灵

1936,英国图灵提出了一种模型。
图灵机:
clipboard.png
由此能够看出,图灵机和现代的计算机还有必定的距离,因此演化成了通用图灵机。接口

clipboard.png

控制器首先读逻辑,好比读进来加法的逻辑,那他就作加法的运算,若是读进来的是乘法的逻辑,那么他就作乘法的运算。这更像是一种通用的模型,也就是所谓的通用图灵机。这就很像计算机了,把程序载入进来,就会执行相应的功能。ip

冯诺依曼

1946年,冯诺依曼提出存储程序思想。
把程序和数据存放在内存里,,而后载入到控制器中解释执行,计算机就会一步步的完成程序的工做。内存

clipboard.png

一些知识:

IR的全称应该是Instructinon register
指令寄存器是用来存放指令的,存放当前正在执行的指令,包括指令的操做码,地址码,地址信息

PC的全称是program counter
程序计数器,是用来计数的,指示指令在存储器的存放位置,也就是个地址信息
在汇编中用寄存器IP表示pc

具体的操做流程,

  1. 将程序载入到(存储器)内存中
  2. 用PC指针指向程序的存放地址。
  3. 取址执行。取址执行,,,,取址执行。。。自动的进行

因此计算机的工做方式,用四个字归纳就是取址执行

打开操做系统的第一句指令

也就是PC=?
在X86 PC的执行过程:

clipboard.png

内存中首先有一个固化的区域,存在着基本的输入输出功能,叫作ROM BIOS,固化在内存的0xFFFF0处。

开机前,硬件自动的设置好CS=0xFFFF;IP=0x0000处(CS:段寄存器 iP:段内的偏移。)造成的地质就是CS<<4+IP

从0磁道0扇区读入1个扇区 也就是 512 个字节,读到了0x7c00处,这个0磁道0扇区就是操做系统的引导扇区。

引导扇区代码:bootsect.s

编译相关知识
代码解析

注意:以s结尾的是汇编代码。
clipboard.png

这段代码 从start开始:

mov ax, #BOOTSEG     mov ds,ax

也就是说上面的代码的做用是 bios将bootsect从7c00处挪到了9000这个地方。

clipboard.png

jumi 间接跳转 go 赋给 ip ,INITSEG 赋给cs,这样就造成了一个地址,想想这样跳到哪里去了呢?

如今bootsect已经挪到了9000的这个地方,因此里面go的地址,也已经挪到了另外一个地址,因此调转的仍是下一行代码go所在的地址!

继续顺序执行。

int 0x13 中断

从第2个扇区开始读4个扇区,载入setup

读入setup模块后

clipboard.png

bios int 0x10 中断

是显示中断。bp 表示的要显示的字符在内存中的位置。因此要把msg1的字符数据打到光标的位置,这就须要获取一下光标的位置 xor bh,bh

总结

bootsect.s作了什么事情呢?

首先咱们知道的操做系统原本在硬盘上面,电源打开,就必须从磁盘载入到内存中,才会取址执行,那么bootsect.s就作了这件事。(分段读入)具体以下:

一、 先读入setup 显示logo。

  1. int 0x13号中断,将system读进来。如今为止,操做系统就在内存中了!

如今bootsect.c执行完毕了,下面应该把控制权转给setup了,利用jumpi 0,SETUPSEG 段间跳转能够实现。cs《4 + ip

操做系统的启动

setup模块 即setup.s

clipboard.png

未完待续。。。

相关文章
相关标签/搜索