2019.1.21
简单地说,操作系统就是用来管理硬件的。
对上提供操作系统接口
打开电源以后计算机是如何工作的
最早的计算机叫图灵机 其实就是把人在纸上计算的这个过程模拟出来---纸带机,有纸带和控制器
把菜谱载进来,然后做菜,就做出了菜。
把程序载进来,然后执行,就出相应的结果
然后,冯诺依曼说,把程序存到内存里,把程序载入到控制器里进行解释执行,就可以输出结果。
首先,把程序放到内存里,然后用一个指针指向他,然后取指令、执行指令、指针向下移动、继续取指令、执行指令等
所以计算机是怎么工作的?
可以大概概括为四个字 取指执行
打开电源,计算机执行的第一个指令是啥呢?
刚上电的时候,内存中有一部分是固化的(rom Bios(基本输入输出系统)),是硬件设计者决定的
内存里如果什么都没有的话,冯诺依曼的取指执行怎么完成呢
所以,首先把这段程序固化在0xFFFF0处
刚一上电的时候计算机硬件自动设置好CS=0xFFFF,IP=0x0000.这两玩意合起来计算出0xFFFF0于是找到我们存的这段代码。
那这段固化的程序都做了哪些工作呢?
然后把磁盘 0磁道0扇区的内容读入0x7c00处
然后设置CS=0x07c0,IP=0x0000.这样就进入了引导扇区、
计算机的工作原理是取指执行。
要想能够取指执行,就需要把代码放入内存中。
刚开始,操作系统是放在磁盘上的。
所以我们要先把操作系统从磁盘上载入到内存里。而BOOTSECT.S就完成了这个工作
汇编中的每一条指令最后都变成了完整的机器指令,所以我们可以完整地控制机器。所以这里选择使用汇编语言而不是C语言。
2019.1.22
刚上电的时候,操作系统在硬盘上
上电以后,首先需要把磁盘中的操作系统载入到内存中。
开机时,由bootset.s完成、读完以后,bootset就完成了历史使命。
操作系统分为几个模块,setup模块,SYstem部分。
接着setup出场
(1.读一些硬件参数,将来用作管理
把扩展内存的大小读进来
光标是什么样的。。。等等一系列信息
是一个了解硬件的过程
2.把system挪动到内存0X0000地址处
3.启动了保护模式(32位寻址方式),应用了一条高级指令跳到0地址处去执行
)
接下来跳到system模块去执行
head.s是个汇编
执行完后会跳到main.c
main.c是个c函数
---------------------------------------------------------------------------------------------------------------------------------
把操作系统源码编译出来的东西叫镜像
通过一些工具我们可以把镜像写到磁盘的任意位置。当然我们这里要写到0磁盘0扇区
2019年1月23日
光是操作系统就用了3种汇编。
1.16位的汇编、
2.32位的汇编
3.
bOOT-setup-head-main-mem_init-操作系统的接口(系统调用、系统调用的原理)、
来学习历史:
操作系统是怎么编出来的
为什么操作系统要有这些模块
一个计算机如果不配上操作系统,那使用起来可真是太费劲了
于是出现了作业之间的交替切换和调度
于是出现了真正意义上的操作系统
多任务之间随意切换、调度
当时已经产生了多进程的萌芽
之后,又考虑到不光计算机任务增加了,使用计算机的人数也增加了
张三想用这个计算机算数学题,李四这时候又想用这个计算机听歌。。。。大家都想控制他
2019.1.24
多进程图像 是操作系统的核心图像
为了管理CPU 引出了多进程图像
管理CPU
CPU就是一个取指执行的设备
管理CPU最直观的方法就是设置好PC的初值
由于IO的速度相比CPU执行计算的速度真的慢太多了,导致在实际中CPU的利用率接近为0
为了充分利用,让CPU可以忙碌起来
出现了 切换,多个程序在内存中,来回切来切去
于是多道程序交替执行便成了管理CPU的核心
PC的切换
由于运行过程中需要暂停切出去
所以我们需要记录这种运行中的程序
一个运行中的程序就叫一个进程 进程就描述了这种运行中的程序
操作系统如何支持多进程图像
操作系统如何切换多个进程
PID1是一个进程,PID2是一个进程,在切换过程中能不能只是切换指令,这个映射表能不能不切呢?
使得既保留了并发的特点,又避免了切换开销大
仅仅只是指令的切换,没有资源的切换,叫做线程的切换
映射表是与内存有关的
进入内核的方式是中断
操作系统如何让多个进程合作的
2019.1.31
上面讲的是操作系统如何管理CPU
首先将CPU是如何能用起来的,然后从用起来的直观想法引出问题,一步一步解决这些问题,从而引出了多进程图像,多进程图像的各种支持方法、切换等
操作系统--内存管理
内存如何使用
如何将程序放入内存中
程序编译完了放在磁盘上,我们怎么把它从磁盘搞到内存呢
如何更好地使用内存
2019.2.1
计算机是如何在屏幕上输出hello的?
PS:在讲解原理的时候,总是跨越式讲重点,非重点用一句话概括。
人-CPU
CPU要发一些指令给内存 什么指令 给内存的哪里
内存位置X里存放的是ox(hello的h的ASCII码值),Y里存放的是ox(hello的e的ASCII码值)......(这里我们不必去纠结怎么放入内存的,关于内存的细节应该忽略)
什么指令:告诉内存,把X这个位置的存放的东西(ASCII码值)取出来,放在显存地址上
把y这个位置的存放的东西(ASCII码值)取出来,放在显存地址上
......
如何告诉
显存拿到这些ASCII码值后就会将hello显示出来。
如果每个程序员在想要做这件事时都要这样去交互CPU,那也太麻烦了
现实中,大家都是用一句printf就解决了。这是如何做到的呢
这就是操作系统的魔力啊
操作系统是在计算机硬件外包了一层软件,来方便我们的使用