学习操作系统必须要了解一切。
首先要了解机器:
每条指令的长度,每条指令的功能,对机器的影响等等。
有哪些寄存器,都具有什么功能? 如何访问这些寄存器。
在访问数据的时候,机器会给你做什么?
在执行一条指令的时候,机器会做什么事情? 修改什么寄存器。
周边设备 的访问 (比如说 磁盘,行式打印机等) 是如何进行的?
然后要了解编译器: 将 一段C 语言代码编译成什么样子?
数据放在那里,代码又放在那里,都有什么样子的数据?
函数调用是如何实现的?
链接的时候的数据是如何放置在一起的?
写汇编语言的时候,或者写 C 语言的时候如何影响 汇编器 或者 C 编译器的行为,具有哪些可以影响的行为?
了解编译过后的代码是什么样子, 加载到内存的时候又是什么样子?
这两个实体 之间 具有何种对应关系? (非常重要)
(其实也就是虚拟地址空间 和 物理地址空间的对应关系)
需要了解,操作系统内存是如何管理的,又是如何给一个进程,或者给自身,分配内存的? (涉及到具体的数据存放在物理内存哪里?)
还需要了解中断,这个很重要,中断的时候 一个进程是如何切换到 另外一个进程,切换了之后又是如何 切换回来
并且可以依旧接着继续运行程序呢? (为什么可以接着继续运行程序,这个是非常重要的。保存现场,指的是保存了什么东西呢?)
当我们真的了解了上述的东西之后,就可以说对操作系统入门了,并且可以开始琢磨着写自己的操作系统了。