用户态和内核态
*每天都有新体验
用户态和内核态
内核态:cpu可以访问内存的所有数据,包括外围设备,例如硬盘,网卡,cpu也可以将自己从一个程序切换到另一个程序。
用户态:只能受限的访问内存,且不允许访问外围设备,占用cpu的能力被剥夺,cpu资源可以被其他程序获取。
切换:
用户在用户态时需要做一些内核才能做的事情,就需要这样一个机制。
系统调用:(陷阱指令)用户态切换到内核态,但是不能控制在内核态中执行的指令。
工作流程:
- 用户态程序将一些数据放在寄存器中,或者使用参数创建一个堆栈以表明需要操作系统提供的服务
- 用户态程序执行陷阱指令。
- cpu切换到内核态,并跳到位于内存指定位置的指令。这些指令(A)是操作系统的一部分,不可被用户态程序访问。
- 这些指令(A)被称之为trap(陷阱),或者系统调用处理器。他们会读取程序放入内存的数据参数,并执行程序请求服务。
- 系统调用完成后,操作系统会重置cpu为用户态并返回系统调用的结果。
- 当进程处于内核态时,执行的内核代码会使用当前进程的内核栈。每个进程都有自己的内核栈。
- 内核态中,处理器处于特权级别最高的0级内核代码中执行。
- 用户态是3级
- 当正在执行用户程序突然被中断程序中断时,此时用户程序也象征型的处于进程的内核态。因为中断处理程序此时将使用进程的内核栈。
- 保护模式是用过内存页表操作等机制,保证进程间地址空间不会相互冲突。一个进程的修改不会修改另一个集成的地址空间的数据。。