关于进程的用户态和内核态

mtlx1986 2011-05-05 08:50:44
在操作系统中,一个进程从用户模式切换至内核模式,需要系统调用产生中断,但是我不明白的是既然切换到内核模式应该执行的是系统进程,因为用户的进程已被中断。那进程的这两个状态应该怎么理解呢? 刚学操作系统,求大神赐教。
...全文
1221 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
xgbing 2012-08-09
  • 打赏
  • 举报
回复
关键还是权限的理解,

就像你在linux下以普通用户的身份要删除root下的一个文件,你要先切换到root然后再删除文件,再退出root身份进入到普通用户身份。整个过程就是一个进程。
xgbing 2012-08-09
  • 打赏
  • 举报
回复
当一个任务(进程)执行系统调用而陷入内核代码中执行时,我们就称进程处于内核运行态(或简称为内核态)。此时处理器处于特权级最高的(0级)内核代码中执行。当进程处于内核态时,执行的内核代码会使用当前进程的内核栈。每个进程都有自己的内核栈。当进程在执行用户自己的代码时,则称其处于用户运行态(用户态)。
草原苍狼 2011-07-04
  • 打赏
  • 举报
回复
说的很有道理,初学者关注中~~
deguodeguo 2011-06-02
  • 打赏
  • 举报
回复
bradsnow 2011-05-22
  • 打赏
  • 举报
回复
学习...
Wenxy1 2011-05-11
  • 打赏
  • 举报
回复
进程运行时, 在用户空间运行即进程的用户态, 在内核态运行时即进程的内核态(例如进入系统调用, 调用fopen()或者open()打开一个文件,此进程即进入了内核态), 一般地指进程的上下文..
wf521yezi 2011-05-10
  • 打赏
  • 举报
回复
进程在创建的时候除了创建进程的控制块之外,在内核里还创建了进程的内核栈,进程通过系统调用进入内核后,是指向在进程的上下文上的。
  • 打赏
  • 举报
回复
正解
[Quote=引用 7 楼 qust_sunqiyuan 的回复:]
通常操作系统把虚拟地址空间划分为用户空间和内核空间,例如x86平台的Linux系统虚拟地址空间是0x00000000~0xffffffff,前3GB(0x00000000~0xbfffffff)是用户空间,后1GB(0xc0000000~0xffffffff)是内核空间。用户程序加载到用户空间,在用户模式下执行,不能访问内核中的数据,也不能跳转到内核代码中执行。这样可以保护内核,如果一个进程访问了……
[/Quote]
qust_sunqiyuan 2011-05-06
  • 打赏
  • 举报
回复
通常操作系统把虚拟地址空间划分为用户空间和内核空间,例如x86平台的Linux系统虚拟地址空间是0x00000000~0xffffffff,前3GB(0x00000000~0xbfffffff)是用户空间,后1GB(0xc0000000~0xffffffff)是内核空间。用户程序加载到用户空间,在用户模式下执行,不能访问内核中的数据,也不能跳转到内核代码中执行。这样可以保护内核,如果一个进程访问了非法地址,顶多这一个进程崩溃,而不会影响到内核和整个系统的稳定性。CPU在产生中断或异常时不仅会跳转到中断或异常服务程序,还会自动切换模式,从用户模式切换到特权模式,因此从中断或异常服务程序可以跳转到内核代码中执行。事实上,整个内核就是由各种中断和异常处理程序组成的。总结一下:在正常情况下处理器在用户模式执行用户程序,在中断或异常情况下处理器切换到特权模式执行内核程序,处理完中断或异常之后再返回用户模式继续执行用户程序。

Arnold9009 2011-05-06
  • 打赏
  • 举报
回复
新手区分清楚概念很重要。。。。。
小魔菇 2011-05-06
  • 打赏
  • 举报
回复 2
进程本身就包含用户态和内核态
进入内核态中还是在本进程上下文 除非时间片完了 或者自己放弃CPU 进行了进程切换
没有“进程进入内核态就切换到内核线程执行”的说法
chenxiancool 2011-05-06
  • 打赏
  • 举报
回复
进程就是程序的执行过程,所谓内核态和用户态是指你现在执行的代码是在内核空间还是在用户空间,并不是所谓的进程切换。比如在用户进程A中调用了内核系统调用来获取当前的时钟滴答数,在执行用户进程A中的系统调用指令时,会保存当前用户进程的IP,CS等当前寄存器状态,然后再跳转到内核空间(即内核代码区域)去执行像应的系统调用函数,获取当前的时钟滴答数。执行完后再通过IRET指令返回到进程A中(就是将进入时保存的信息再复位到相应的寄存器中),再接着从CS:EIP地址开始执行A进程的指令。CPU只是执行指令,至于哪条置零就是相应寄存器的事了,如果选择性的执行某些地址的指令就是出现了多进程切换。呵呵,以上纯属个人见解,如有不当,请谅解。
mtlx1986 2011-05-06
  • 打赏
  • 举报
回复
谢谢,我还是不太明白。是不是使用宏内核的操作系统,进行系统调用时,执行进程状态的切换,用以执行内核代码。微内核的操作系统,进行的是进程切换?windows操作系统里不是有系统进程吗,专门执行内核的代码?求详解。谢谢
YTerrenceLau 2011-05-05
  • 打赏
  • 举报
回复
没有系统进程这一说,进程就是进程,分别工作在用户态和内核态,在内核态工作仍旧是这个进程,除非进行了进程切换。
yuanlulu 2011-05-05
  • 打赏
  • 举报
回复
切换到内核态的是系统调用。当系统调用返回时,也便返回了用户态

4,465

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 内核源代码研究区
社区管理员
  • 内核源代码研究区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧