- 内核态和用户态的区别
1.内核态:CPU可以访问内存的所有数据,包括外围设备,比如硬盘、网卡,CPU也可以将自己从一个程序切换到另一个程序。
2.用户态:只能受限的访问内存,且不允许访问外围设备,占用cpu的能力被剥夺,cpu资源可以被另一个程序获取。 - 很多程序一开始运行于用户态,一些操作需要在内核中完成,比如说malloc(),malloc()具体是使用sbrk()系统调用来分配内存,当malloc()调用sbrk()时来分配内存时,就涉及到一次从用户态到内存态切换的操作。类似的函数还有printf(),调用的是write()系统调用来输出字符串。
- 当发生系统调用、异常事件、外围设备的中断的时候就会从用户态切换到内核态。用户态可以通过系统调用、库函数、shell脚本调用内核态的资源。
- 特权级的概念:
内核的核心功能是创建一个进程,创建进程需要消耗很多物理资源,比如分配内存,父子进程的拷贝。特定的工作需要特定的进程去做,这就有了特权级的概念。最关键的工作需要特权最高的进程做,这样可以集中管理,减少有限资源的访问和使用冲突。然后intel x86就有0-3四个级别,其中0的特权级别最高,3的特权级别最低。 - 用户态到内核态具体的切换步骤:
(1)从当前进程的描述符中提取其内核栈的ss0及esp0信息。
(2)使用ss0和esp0指向的内核栈将当前进程的cs,eip,eflags,ss,esp信息保存起来,这个过程也完成了由用户栈到内核栈的切换过程,同时保存了被暂停执行的程序的下一条指令。
(3)将先前由中断向量检索得到的中断处理程序的cs,eip信息装入相应的寄存器,开始执行中断处理程序,这时就转到了内核态的程序执行了。
用户态和内核态
最新推荐文章于 2024-02-24 23:53:38 发布