码迷,mamicode.com
首页 > 系统相关 > 详细

linux用户态与内核态

时间:2016-01-28 15:20:17      阅读:149      评论:0      收藏:0      [点我收藏+]

标签:

系统调用:如何中用户态切换到内核态

在linux中,系统调用是通过0x86体系结构中的软件中断实现的。这个软件中断与通常说的硬件中断不同之处在于,它是通过软件指令触发,而不是外部设备,这是程序员可以触发的一种异常,调用int 0x80汇编指令就可以产生向量号为128的异常。

 

进程与线程的区别与联系

操作系统教科书上讲的理论东西就不说了,这里说说linux中复制进程和复制线程的异同。

我们知道,Linux的线程实现是在核外进行的,核内提供的是创建进程的接口do_fork()。内核提供了两个系统调用__clone()和fork(),最终都用不同的参数调用do_fork()核内API。当然,要想实现线程,没有核心对多进程(其实是轻量级进程)共享数据段的支持是不行的,因此,do_fork()提供了很多参数,包括CLONE_VM(共享内存空间)、CLONE_FS(共享文件系统信息)、CLONE_FILES(共享文件描述符表)、CLONE_SIGHAND(共享信号句柄表)和CLONE_PID(共享进程ID,仅对核内进程,即0号进程有效)。当使用fork系统调用时,内核调用do_fork()不使用任何共享属性,进程拥有独立的运行环境。而使用pthread_create()来创建线程时,则最终设置了所有这些属性来调用__clone(),而这些参数又全部传给核内的do_fork(),从而创建的"进程"拥有共享的运行环境,只有栈是独立的,由__clone()传入。

 

linux用户态与内核态

标签:

原文地址:http://www.cnblogs.com/mylinuxer/p/5166167.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!