一、程序启动必须有操作系统来执行,那操作系统本身也是一个程序,那是如何在开机时候被执行的呢?
首先我们要知道,CPU执行的是机器指令,程序需要被编译器翻译成机器指令才能被CPU执行。操作系统本身也是一个程序,被编译后也会生成一堆机器指令被CPU执行。所以我们要知道的是操作系统这个程序被谁编译。
在此之前,我们又要知道程序在启动时是被加载器loader加载到内存的,加载器是一个加载其他程序的程序。操作系统同理,也需要个什么东西把它加载到内存中才能运行,这个东西不叫loader,而是boot loader.它本身也是一个程序,那又是什么加载器把boot loader加载到内存中的呢?
这个问题好像是一个死循环。就像鸡生蛋蛋生鸡一样。我不知道先有鸡还是先有蛋。但我知道第一个bootloader程序怎么来的,哈哈--boot loader是被保存在BIOS的非易失性存储ROM或者flash存储中了,这里的代码在即使断电后也会保存下来,加电后CPU开始执行这里代码,把boot loader加载到内存中。实现了第一个boot loader程序被加载到了内存中。
二、系统中运行的程序远远大于CPU的核数,那linux系统是如何实现同时运行那么多程序的呢?
linux是个多任务操作系统,支持远大于CPU数量的任务同时进行,但是这里的同时并不是真的同时啊,只是CPU可以快速的转换其他任务,就是让系统在很短的时间内,将CPU轮流分配给它们,让别人以为在同时进行而已。
三、linux有这么多不同的文件系统,如何实现对用户提供统一调用接口的?
虚拟文件系统(VFS),这个是用户层和文件系统的中间层,实现了对用户提供统一调用接口。VFS定义了一组所有文件系统都支持的数据结构和标准接口,所以程序员并不需要了解文件系统的工作原理,只需要知道VFS提供的统一接口如何使用即可。
虚拟文件系统在文件系统挂载之后,将文件系统的一些元数据加载到内存中,虚拟文件系统只存在于内存中,VFS作用就是屏蔽给各类文件系统的差异,给用户、应用程序一个统一的接口。
。