Linux的进程管理(一)

Linux的进程管理(一)

ID:43937946

大小:2.15 MB

页数:51页

时间:2019-10-17

Linux的进程管理(一)_第1页
Linux的进程管理(一)_第2页
Linux的进程管理(一)_第3页
Linux的进程管理(一)_第4页
Linux的进程管理(一)_第5页
资源描述:

《Linux的进程管理(一)》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、Linux进程控制2主要内容进程、线程和轻量级进程的概念进程描述符进程状态如何标识一个进程进程内核栈进程间的关系与进程创建相关的系统调用3进程、线程和轻量级进程进程是程序执行的一个实例,是有限状态机的一次迁移过程。进程和程序的区别:动态与静止;多对一进程是资源分配的实体,这些资源包括:PID、task_struct、独立的内存地址空间、打开的文件描述符、信号处理函数对应表、挂起的信号等。线程是进程内一个独立的执行线路,是CPU调度的实体。线程共享所属进程的资源,但也有私有资源:栈、CPU寄存器状态、CPU时间片、优先级、线程局部存储TLS在Linux

2、下,线程是利用轻量级进程机制实现的。多个轻量级进程共享同一套资源(同一内存空间),但具有不同的栈和CPU寄存器状态。4进程描述符task_struct进程描述符与进程一一对应,记录了与进程相关的所有信息进程描述符一般较大,(32位机1.7KB)创建进程描述符时使用了SLAB分配器5进程描述符task_structLinux2.6进程的状态include/linux/sched.h2021/7/15Linux操作系统分析7/65进程状态转换图EXIT_ZOMBIE或者EXIT_DEAD或者TASK_DEAD如何标识一个进程使用进程描述符地址进程和进程描

3、述符之间有非常严格的一一对应关系,使得用32位进程描述符地址标识进程非常方便使用PID(ProcessID,PID)每个进程的PID都存放在进程描述符的pid域中进程的PID进程的pid字段Pid最大值,参见kernel/pid.c顺序使用&&循环使用include/linux/types.hinclude/asm-XXX/posix_typesYYY.hinclude/linux/threads.h10如何获得一个空闲的PID32位机上,PID最大为32767为了循环使用PID编号,内核定义了一个pidmap_array位图,pidmap_arra

4、y包含32768个位,刚好放到一个页框中。alloc_pid是如何实现的?(last_pid变量)11如何由PID获得对应的进程描述符如何实现find_task_by_pid(nr)?pidhashtable(固定数组,一般占4个页框,2048个表项)12structpidstructpid_link{intnr;//pid的数值structhlist_nodepid_chain;structlist_headpid_list;}structtask_struct{…structpid_linkpids[4];…}13如何由PID获得对应的进程描述符

5、14/65进程和进程的内核堆栈Linux为每个进程分配一个8KB大小的内存区域,用于存放该进程两个不同的数据结构:Thread_info进程的内核态堆栈进程处于内核态时使用, 不同于用户态堆栈内核控制路径所用的堆栈 很少,因此对栈和Thread_info来说,8KB足够了Thread_info15用户态到内核态的切换用户态和内核态的区别?从用户态切换到内核态的3种方式:系统调用:int80或sysinter中断异常从用户态切换到内核态后:进程上下文(主要指页表)不切换CPU自动切换到当前进程对应的内核态堆栈工作CPU自动将用户态的寄存器状态和返回地址

6、存放到内核栈Thread_unionC语言允许用如下的一个union结构来方便的表示这样的一个混合体thread_info由体系结构相关部分定义阅读include/asm-x86/thread_info.h以及include/asm-x86/thread_info_32.hinclude/linux/sched.hCurrent宏的使用Current宏可以看成当前进程的进程描述符指针,在内核中直接使用举例:比如current->pid返回在CPU上正在执行的进程的PIDcurrent宏的实现:#defineget_current()(current_

7、thread_info()->task)#definecurrentget_current()current_thread_info的汇编代码是:movl$-THREAD_SIZE,%eax;andl%esp,%eax其中#defineTHREAD_SIZE(2*PAGE_SIZE)内核栈thread_infotask_struct*taskvoid*stacktask_struct21进程间的关系父子关系:parent,real_parent,children兄弟关系:sibling线程组关系:tgid,group_leader,thread_gr

8、oup进程组关系:signal->pgrp会话组关系:signal->session被调试关系:ptrace

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

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

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