一.概念
1.用户态:执行自己的代码
2.内核态:执行操作系统的代码
二.联系
1.用户态向内核态的转换
(1).转换条件
a.系统调用,内核代表用户执行。(eg.银行存钱过程(银行属于内核,我们自己属于用户,银行代表我们将钱存进银行卡里,但是我们自己不能完成这个操作))
[其和库函数的区别:函数的实现在库中执行,执行后会跳转,不会发生内核和用户的切换;系统调用的实现在内核中,执行时会发生内核和用户的切换]
b.异常。
c.外围设备的中断。(当外围设备完成用户请求的操作之后,会向CPU发出相应的中断信号,这时CPU会暂停执行下一条将要执行的指令,转而去执行中断信号的处理程序,如果先执行的指令是用户态下的程序,那么这个转换的过程自然也就发生了有用户态到内核态的切换。(eg:硬盘读写操作完成,系统会切换到硬盘读写的中断处理程序中执行后续操作))
strlen()(属于库函数)执行完之后产生 用户空间 0x80(中断) (内核换上来执行) 将fd的值写入寄存器中 (线程保护)
|
【sys_open()】 ( 执行前先在寄存器中读值) 内核空间 |