操作系统
1、操作系统启动过程:
①执行BIOS,进行硬件自检并且去磁盘的0号块的0号扇区读取bootsect.s放入内存区域
②执行bootsect.s把操作系统的后部分代码读入,并放在相邻位置。包括setup.s、system.s。
③执行setup.s,初始化一些数据结构,用于管理硬件。
④执行system
2、系统调用:
①系统调用是用户程序访问操作系统的接口。
问题一:为什么用户程序不能直接使用内核的程序、数据呢?
因为内核涉及一些公共的资源,比如打印机。如果可以让你直接访问打印机,你就可以知道别人打印的内容了,对用户来说不安全。
因此用户程序对于那些共享的资源,一定不可以直接自己访问,一定要通过借用操作系统来访问,借用的方式就是系统调用。
内核态和用户态:
内核段:内存中存储内核的那部分代码段。内核段的程序仅在内核态下执行
用户段:内存中存储用户、应用程序的那部分代码。
问题二:怎么做到让用户段的代码自己不能访问内核段?
通过硬件机制来判断,如果当前的优先级 高于 访问的优先级就可以访问。对应的是CPL <= DPL。数越小,优先级越高。
而用户段、内核段的代码的优先级这些数据结构,在os初始化的时候就设置好了。
问题三:系统调用是如何让用户程序访问内核段的?
中断是进入内核的唯一方法。
用户的函数,经过库函数会转变成一些系统调用函数。系统调用的函数比如open(),其实里面的细节会包含int 中断,操作系统根据中断类型号进行中断处理。