了解Linux的进程与线程.doc

了解Linux的进程与线程.doc

ID:52592808

大小:34.00 KB

页数:3页

时间:2020-03-28

了解Linux的进程与线程.doc_第1页
了解Linux的进程与线程.doc_第2页
了解Linux的进程与线程.doc_第3页
资源描述:

《了解Linux的进程与线程.doc》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、了解Linux的进程与线程上周碰到部署在真实服务器上某个应用CPU占用过高的问题,虽然经过tuning,问题貌似已经解决,但我对tuning的方式只是基于大胆的假设并最终生效了。我更希望更多的求证一下程序背后CPU及OSkernel当时的运作机制。所以我读了一些Linux内核设计与实现及其他一些相关资料,对Linuxprocess的机制与切换有了更多一些体会。本文尽可能条理一点,但由于牵涉点较多,同时自己可能觉得某些点有记录的价值,因此文字可能会零散。·进程状态Linux进程的状态比较容易理解,值得注意的是UNINTER

2、RUPTIBLE及ZOMBIETASK_RUNNINGTASK_INTERRUPTIBLETASK_UNINTERRUPTIBLE此时进程不接收信号,这就是为什么有时候kill一个繁忙的进程没有响应。TASK_ZOMBIE我们经常kill-9pid之后运行ps会发现被kill的进程仍然存在,状态为zombie。zombie的进程实际上已经结束,占用的资源也已经释放,仅由于kernel的相关进程描述符还未释放。TASK_STOPPED·KernelspaceanduserspaceKernelspace是供内核,设备驱动运

3、行的内存区域。userspace是供普通应用程序运行的区域。每一个进程都运行在自己的虚拟内存区域,不能访问其他进程的内存空间。普通进程不能访问kernelspace,只能通过系统调用来间接进行。当系统内存比较紧张时,非当前运行进程userspace可能会被swap到磁盘。使用命令pmap-x可以查看进程的内存占用信息;lsof-a-p可以查看一个进程打开的文件信息。ps-Lf可以查看进程的线程数。另外procfs也是一个分析进程结构的好地方。procfs是一个虚拟的文件系统,它把系统中正在运

4、行的进程都显现在/proc/目录下。·进程创建进程创建通常调用fork实现。创建后子进程和父进程指向同一内存区域,仅当子进程有write发生时候,才会把改动的区域copy到子进程新的地址空间,这就是copy-on-write技术,它极大的提高了创建进程的速度。·Linux的线程实现Linux线程是通过进程来实现。Linuxkernel为进程创建提供一个clone()系统调用,clone的参数包括如CLONE_VM,CLONE_FILES,CLONE_SIGHAND等。通过clone()的参数,新创建的进程,也称

5、为LWP(Lightweightprocess)与父进程共享内存空间,文件句柄,信号处理等,从而达到创建线程相同的目的。Linux2.6的线程库叫NPTL(NativePOSIXThreadLibrary)。POSIXthread(pthread)是一个编程规范,通过此规范开发的多线程程序具有良好的跨平台特性。尽管是基于进程的实现,但新版的NPTL创建线程的效率非常高。一些测试显示,基于NPTL的内核创建10万个线程只需要2秒,而没有NPTL支持的内核则需要长达15分钟。在Linux2.6之前,Linuxkernel并没

6、有真正的thread支持,一些threadlibrary都是在clone()基础上的一些基于userspace的封装,因此通常在信号处理、进程调度(每个进程需要一个额外的调度线程)及多线程之间同步共享资源等方面存在一定问题。为了解决这些问题,当年IBM曾经开发一套NGPT(NextGenerationPOSIXThreads),效率比LinuxThreads有明显改进,但由于NPTL的推出,NGPT也完成了相关的历史使命并停止了开发。NPTL的实现是在kernel增加了futex(fastuserspacemutex)支

7、持用于处理线程之间的sleep与wake。futex是一种高效的对共享资源互斥访问的算法。kernel在里面起仲裁作用,但通常都由进程自行完成。NPTL是一个1×1的线程模型,即一个线程对于一个操作系统的调度进程,优点是非常简单。而其他一些操作系统比如Solaris则是MxN的,M对应创建的线程数,N对应操作系统可以运行的实体。(N

8、统会立即转到内核陷阱处理程序,因此同步信号也称为陷阱。异步信号如kill,lwp_kill,sigsend等调用产生的都是,异步信号也称为中断。kill调用的是SIGTERM,此信号可以被捕获和忽略。kill-9调用的是SIGKILL,杀掉进程,不能被捕获和忽略。SIGHUP是在终端被断开时候调用

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。