用户态和内核态

  • 内核态和用户态的区别
    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信息装入相应的寄存器,开始执行中断处理程序,这时就转到了内核态的程序执行了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值