操作系统起到如下两个作用:
一、将所有的系统资源收归己有,然后视需要有条件地分配给用户进程,目的是协调诸多进程对系统资源的请求;
二、提供任何一个用户进程都需要的功能。比如维护页表,比如磁盘IO等。这一方面是因为第一条的理由,另一方面也简化了程序的编写。所以这些程序脱离了操作系统就无法执行。
编写“脱离”操作系统的程序主要是要完成:CPU和外设的初始化,在初始化完成之后,再设法把程序从ROM中读到主存,初始化CPU寄存器,将指令计数器(i386上是CS:IP的组合)指向程序代码的开始处,就可以开始运行了。为了方便起见,i386系列CPU可以工作在实模式,省去了处理保护模式工作的麻烦。
整个过程系统初始化和寄存器初始化都是系统相关的,可以参考lilo和linux内核的初始化代码。
上面说的都是系统同一时刻只运行一个进程的情况。如果有多个进程并发执行,就要写一段调度和协调的代码,这本身就是一个操作系统了。