1、什么是系统调用?
2、系统调用的实现
- 用户程序也在内存中,内核数据也在内存中,为什么不能直接调用?答:保证系统安全
- 因此为了保证系统安全,操作系统将内存区域分成了用户态和内核态
- 用户态和内核态是借助于硬件来实现的,cpu的指令分了4个级别(下图所示),因此,内核态既不是一个特殊的进程,也不是进程的一种特殊状态,内核态用户态指的是CPU在执行指令时所位于的特权层级。一般来说有4个层级,但一般操作系统只使用到了其中两个,这两个层级就被称为用户态和内核态,CPU内部有专门的状态寄存器,寄存器中记录了CPU当前工作在哪个层级
- exe文件的本质是什么?答:exe里保存了程序的机器码,机器码的规则详见x86指令集文档,这些机器码可以被操作系统送进内存,然后使用cpu执行;在windows下当我们鼠标点击图标打开进程时,首先windows接受到进程启动命令,把exe文件从磁盘映射到操作系统内核,操作系统解析exe文件头,创建进程PCB,创建进程虚拟地址空间,完成exe文件中段的映射,建立初始化栈和堆,把PCB加入到进程队列,最后建立主线程并且启动进程。
-
究竟什么是中断?
- 一般情况下,将硬件设备产生的中断信号称为中断,而数组溢出,缺页等错误称之为异常,对系统接口的调用称为系统调用。由于这3种方式有共性,都是暂停当前用户进程,转而让内核运行,然后再由内核回到用户进程暂停的代码段继续执行,所以操作系统对这3种情况,其实是采用统一的处理方式,暂停用户进程,提升cpu特权级(从用户态提升为内核态),从寄存器中取出处理函数的地址,将pc寄存器指向该地址执行。中断处理函数做的事情就是保存用户上下文,将进程页表切换成内核页表,然后执行内核中断代码。
-
为什么需要有中断?没有了中断,计算器就无法与外界交互了,所有的输入数据都得提前准备好
标记