博客参考http://www.178linux.com/48784http://share.zhbor.com/article/20278.html进程管理init父进程neworend子进程序列循环选择进程=数据+指令库linux单内核进程之间可以共享,但是两个进程同时打开一个文件。无法共享内存。每个进程必须打开一次。可以有多个线程。一个父进程生成一个大线程。内存空间是在线程中产生的。模式可以在n个线程之间共享。切换用户进程需要系统操作指令。内核通过时钟切换内核来驱动进程。进程内核的功能概述:进程管理、文件系统、网络功能、内存管理、驱动程序、安全功能等特权操作模式切换(理想状态):70%CPU时间用户态+30%CPU时间内核态进程(Process):是计算机中关于某个数据集上运行活动的程序,是系统进行资源分配和调度的生命周期的基本单位,是操作系统结构的基础。在早期的面向过程设计的计算机结构中,进程是程序的基本执行实体;在当代面向线程设计的计算机结构中,进程是线程的容器。程序是对指令、数据及其组织形式的描述。进程是程序的实体,是正在运行的程序的副本;加载到内存中的一组指令ProcessID:PID号用于标记每个进程的UID,GID,以及SELinux上下文决定了对文件系统的访问和访问权限,通常由执行进程的用户继承固定数据Linux内核存储进程信息的结构格式:taskstruct任务链表多个任务组成部分:tasklist进程内存PageFrame(页框):用于存放页数据,存放Page4k物理地址空间和线性地址空间physicaladdressspace:真实内存空间linearaddressspace:processvirtual占用了所有realmemory空间,但是实际使用了多少个core来分配LRU:LeastRecentlyUsedAlgorithm释放内存MMU:MemoryManagementUnit(内存管理单元)负责转换线性地址和物理地址Residentmemoryset:不可交换的内存空间Virtualmemoryset:可交换的内存空间ProcessInter-communicationmechanismIPC:InterProcessCommunicationSignalonthesamehost(信号))semaphore:信号量,不同主机上的一个计数器rpc:远程过程调用(remoteprocedurecall)套接字(socket):IP和端口号ProcessCreation导致进程被创建的事件在多道程序环境中,只有(as)一个进程(何时)可以在系统中运行。因此,为了让一个程序运行起来,必须为其创建一个进程。导致一个进程创建另一个进程的典型事件可以分为以下四类:1)用户登录到分时系统。用户在终端输入登录命令后,如果用户是合法用户,系统会为终端创建一个进程。并将其插入就绪队列。2)作业调度在批处理系统中,当作业调度器按照一定的算法调度作业时,会将作业加载到内存中,为其分配必要的资源,并立即为其创建一个进程,然后将其插入到在就绪队列中。3)提供服务当一个正在运行的用户程序提出某个请求时,系统会创建一个进程来提供用户所需要的服务。例如,如果用户程序需要打印文件,操作系统会为它创建一个打印进程,这样,不仅可以使打印进程与用户进程并发执行,而且也便于计算打印所需的时间。完成打印任务。4)应用程序请求以上三种情况,都是系统内核为其创建了一个新进程,而这类事件是根据应用进程的需要,创建一个新进程,以便新进程可以同时执行。以特定的方式运行以完成特定的任务。进程创建过程一旦操作系统发现需要创建新进程的事件,就会调用进程创建原语create()按照以下步骤创建新进程。1)申请空白PCB。为新工艺申请一个唯一的数字标识符,并从PCB集合中请求一个空白PCB。2)为新进程分配资源。为新进程的程序和数据,以及用户栈分配必要的内存空间。显然,此时操作系统必须知道新进程需要的内存量。3)初始化进程控制块。PCB的初始化包括:①初始化标识信息,将系统分配的标识和父进程标识填入新的PCB中。②初始化处理器的状态信息,使程序计数器指向程序的入口地址,使栈指针指向栈顶。③初始化处理器控制信息,设置进程状态为就绪态或静态就绪态,对于优先级,通常设置为最低优先级,除非用户明确要求高优先级。4)将新进程插入就绪队列。如果进程就绪队列可以接受新进程,则将新进程插入就绪队列。进程终止1.导致进程终止的事件1)正常结束在任何计算机系统中,都应该有一个进程运行到结束的指示。例如,在批处理系统中,通常在程序末尾安排一个Hold指令或一个终止系统调用。当程序运行到Hold指令时,会产生中断,通知OS进程已经完成。2)异常结束进程在运行过程中,由于某些错误和故障,进程被迫终止。此类异常事件很多,常见的有:越界错误、保护错误、非法指令、特权指令错误、运行超时、等待超时、算术运算错误、I/O失败。3)外部干预外部干预不是指进程运行过程中发生的异常事件,而是指进程响应外部请求而终止。这些干预是:操作员或操作系统干预、父进程请求、父进程终止。init:系统进程的第一个进程:进程间的父子关系由其父进程创建(CoWcopy-on-write)1.系统父进程以fork()的形式生成一个相同的子进程,和父进程是一样的,唯一的区别就是PID不同,但是这个进程还会多一个参数PPID,PPID是父进程的程序标识码PID2,然后从clone()运行实际要执行的程序进程优先级内核管理:按照算法+数据结构1)进程调度2)优先级系统优先级:数字越小,优先级越高0-139(CentOS4、5)各有140runningqueues和expiredqueues0-98,99(CentOS6)real-timePriority:99-0:valuemaximumpriorityhigheststaticpriority:100-139nicevalue:-20to19,对应系统优先级100-139or99BigO:时间复杂度,时间与规模的关系O(1):规模变化,但耗时不变O(logn):O(n)线性:O(n^2)抛物线:O(2^n):时间-consuming随着规模的增大而急剧增加ProcessstateLinux内核:抢占多任务工作模式下的进程类型:1)Daemon进程(服务):daemon,系统启动过程中由内核启动的一个进程,与进程无关withtheterminalprocess2)Foregroundprocess:与终端相关,通过终端启动的一个进程(用户进程)注:两者可以相互转化。进程状态:运行状态:正在运行就绪状态:就绪(可以运行但不能运行)睡眠状态:1)interruptible:可中断2)uninterruptible:不可中断数据来自磁盘-->内核内存-->进程内存——>第一阶段processprocessingdata是数据加载第二阶段是数据I/OStop状态:stopped,挂在内存中,但不会被调度,除非手动启动Zombie状态:zombie,endprocess,在父进程结束之前,子进程不关闭系统管理工具。根据进程占用资源的多少,进程可以分为(进程的分类):CPU-Bound:CPU-intensive(对于CPU-intensive来说就是CPU使用率高的进程),non-interactiveIO-Bound:IO-intensive(等待I/O时间长的进程),interactive推荐书籍:《Linux内核设计于实现》、《深入理解Linux内核》Linux系统状态查看和管理工具:pstree、ps、pidof、pgrep、top,htop,glance,pmap,vmstat,dstat,kill,pkill,job,bg,fg、nohupinit分类CentOS5:SysVinitCentOS6:upstartCentOS7:SystemdLinux终端类型console:/dev/console物理终端:虚拟终端:/dev/tty[1-6]模拟终端:/dev/pts/#serialterminal:/dev/ttyS#process分类批处理进程交互进程实时进程进程管理命令ps,pstree,pidof,pgrep,top,htop,pmap,vmstat,dstat,nice,renice,kill,jobs,killall,fg,bg,nohuppstree-a 显示每个程序的完整命令,包括路径、参数或常驻服务标志。-c 不要使用紧凑的表示法。-G 使用VT100终端的列图字符。-h 列出树状图时,特别指出执行的程序。-H<程序识别码> 该参数的作用与指定“-h”参数类似,只是具体指明了指定的程序。-l 以长列格式显示树状图。-n 按程序标识符排序。默认是按程序名排序。-p 显示程序识别码。-u 显示用户名。-U 使用UTF-8列绘图字符。-V 显示版本信息。ps与终端进程有关:a与终端进程无关:xRSDTZs+1N
