什么是操作系统
- 应用软件:Word,Matlab...
- 操作系统:Windows,Linux...
- 计算机硬件:CPU,内存,显存...
- 操作系统是计算机硬件和应用之间的一层软件,方便我们使用硬件(显存等),是我们可以高效地使用硬件(如开多个终端等)。
- 管理哪些硬件:
- CPU管理,内存管理,终端管理,磁盘管理,文件管理(以上五个是基本部分)
- 网络管理,电源管理,多核管理
揭开钢琴的盖子
- 图灵机-->通用图灵机-->计算机(冯·诺依曼存储程序思想)
- 计算机是如何工作的?取指执行。
- 打开电源,计算机执行的第一句指令是什么?
- x86 PC刚开机时CPU处于实模式(和保护模式对应,实模式的寻址CS:IP(CS左移4位+IP,和保护模式不一样))
- 开机时,CS=0xFFFF,IP=0x0000
- 寻址0xFFFF0(ROM BIOS映射区)
- 检查RAM,键盘,显示器,软硬磁盘
- 将磁盘0磁道0扇区(512字节,操作系统的引导扇区)读入0x7c00处
- 设置cs=0x07c0,ip=0x0000
- 0x7c00处存放的代码:就是从磁盘引导扇区读入的那512个字节。
- 引导扇区就是启动设备的第一个扇区,开机时按住del键可进入启动设备设置界面,可以设置为光盘启动;
- 启动设备信息被设置在CMOS(互补金属氧化物半导体,用来存储实时钟和硬件配置信息)中..
- 因此,磁盘的第一个扇区存放着开机后执行的第一段我们可以控制的程序。
- 引导扇区代码:bootsect.s
- 为什么这里是汇编语言呢?视频中给出的讲法是,如果是高级语言比如C语言,写一个int a,那么我们也不知道a的具体地址是什么,但在引导扇区中,我们需要对这个代码有一个完整的控制,而汇编语言可以做到这一点。
movw是按字移动的,移动256个字就是移动512个字节,所以是把第一个扇区的所有内容再搬到0x90000处。
go代表一个偏移量(就是个数字),而go和INITSEG组成的跳转地址就是在以0x90000开始的代码段中go的地址。
把从第二个扇区开始的4个扇区(setup扇区)读到0x90200的位置。
在屏幕上显示msg1的内容,如果想更改的话,就改掉msg1:..的内容,再修改mov cx,#24(字符串长度)。
再读入system模块。最后跳转到setup地址,即ip=0,cs=0x9020,与第一张ppt也是一致的。
操作系统启动
扩展内存:1M以后的内存。
mov [2], ax:[2]是间接寻址,段寄存器中是0x9000,所以表示内存地址0x90002。
总结:开机就做了两件事,bootsect(读进来),setup(初始化)。
把0x90000开始的代码移动到0x0的地方(所以之前从0x7c00向0x90000挪,就是为了给现在挪过来的代码留有一定的空间,不然可能冲掉)。
setup做了什么:初始化,将system框架挪到0x0的地方,开启保护模式,跳到0x0的地方继续执行。
mem_init中为什么上面是非空闲的?放了操作系统的汇编代码等等。
参数从哪来的,0x90002里面,setup中初始化的内存空间大小。
总结
主要讲了boot(将操作系统从磁盘读进来),setup(获得一些参数,启动保护模式),head(初始化gdt表,初始化页表,跳到main),main(一堆初始化),mem_init(哪些是空闲内存,硬盘长什么样子)。
一件事:读入内存;另一件事:初始化。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!