操作系统

1、操作系统启动过程:

①执行BIOS,进行硬件自检并且去磁盘的0号块的0号扇区读取bootsect.s放入内存区域

②执行bootsect.s把操作系统的后部分代码读入,并放在相邻位置。包括setup.s、system.s。

③执行setup.s,初始化一些数据结构,用于管理硬件。

④执行system

2、系统调用:

①系统调用是用户程序访问操作系统的接口。

 

问题一:为什么用户程序不能直接使用内核的程序、数据呢?

因为内核涉及一些公共的资源,比如打印机。如果可以让你直接访问打印机,你就可以知道别人打印的内容了,对用户来说不安全。

因此用户程序对于那些共享的资源,一定不可以直接自己访问,一定要通过借用操作系统来访问,借用的方式就是系统调用。

 

内核态和用户态:

内核段:内存中存储内核的那部分代码段。内核段的程序仅在内核态下执行

用户段:内存中存储用户、应用程序的那部分代码。

 

问题二:怎么做到让用户段的代码自己不能访问内核段?

通过硬件机制来判断,如果当前的优先级 高于 访问的优先级就可以访问。对应的是CPL <= DPL。数越小,优先级越高。 

而用户段、内核段的代码的优先级这些数据结构,在os初始化的时候就设置好了。

 

问题三:系统调用是如何让用户程序访问内核段的?

中断是进入内核的唯一方法。

用户的函数,经过库函数会转变成一些系统调用函数。系统调用的函数比如open(),其实里面的细节会包含int 中断,操作系统根据中断类型号进行中断处理。

 

posted @ 2023-07-23 18:09  我的秘密小屋  阅读(17)  评论(0编辑  收藏  举报