Linux的进程管理_第1页
Linux的进程管理_第2页
Linux的进程管理_第3页
Linux的进程管理_第4页
Linux的进程管理_第5页
已阅读5页,还剩12页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第二章linux的进程管理 linux是一个多任务多用八操作系统, 一个任务(task)就是一个进程(process) 0每一个进程都具有一定的功能和权限,它们都运行在各自 独立的虚拟地址空间。 在linux中,进程是系统资源分配的基本单位,也是使用cpu运行的基本调度单位。§ 2. 1 linux进程概述一. linux进程的组成 存放在磁盘上的可执行文件的代码和数据的集合称为可执行映象(executable image)。 当一个程序装入系统中运行时,它就形成了一个进程。 进程是山正文段(text) 用丿'数据段(user segment)和系统数据段(system se

2、gment)组成的一个动态实体。 正文段中存放着进程要执行的指令代码,具有只读的属性, 川户数据段是进程在运行过程中处理数据的集合,它们是进程直接进行操作的所冇数据,以及进程使川的 进程堆栈。 系统数据段存放着进程的控制信息。其屮包括进程控制块pcb。 进程控制块pcb是名字为task_struct的数据结构,它称为任务结构体 任务结构体中容纳了一个进程的所有信息,是系统对进程进行管理和控制的有效手段,是系统实现进程调度 的主要依据。 当一个进程被创建时,系统就为该进程建立一个task_struct任务结构体。当进程运行结朿时,系统撤消该 进程的任务结构体。 进程的任务结构体是进程存在的唯一标

3、志。 linux在内存空间中开辟了一个专门的区域存放所有进程的任务结构体。 在操作系统的内核空间设置了一个task数组,该数组的每一个元素是一个指向任务结构体的指针,所以task 数组乂称为task向量。struct taskstruct *tasknr_tasks = &init_task;#define nr_tasks 512全局变最nr_tasks,记录着系统中存在的进程数目。i nt nr tasks = 1;二. linux进程的状态1. 运行态:进程正在使用cpu运行的状态。处于运行态的进程又称为当前进程(cuitent process)。2. 町运行态:进程已分配到除c

4、pu外所需要的其它资源,等待系统把cpu分配给它z后即町投入运行。3. 等待态:又称睡眠态,它是进程正在等待某个事件或某个资源时所处的状态。等待态进一步分为可屮断的等待态和不可屮断的等待态。处于可屮断等待态的进程可以由v(signal)解除其等待态。处于不可中断等待 态的进程,一般是直接或间接等待硬件条件。它只能用特定的方式來解除,例如使用唤醍函数wake_up() 等。4. 暂停态:进程需要接受某种特殊处理而暂时停止运行所处的状态。通常进程在接受到外部进程的某个信号进 入暂停态,例如,正在接受调试的进程就处于这种状态。5. 僵死态:进程的运行己经结束,但它的任务结构体仍在系统中。linu谧程

5、状态晞换三. 核心态和用户态 linux的进程处理机上运行时,处理机提供了两种不同的的执行状态,核心态(kernel mode)和用户态(user mode)。 核心态乂称系统态,它具有较高的特权,能执行所有的机器指令,包括由操作系统执行的特权指令,能访问 所有的寄存器和存储区域,能直接控制所有的系统资源。linux在执行内核程序时是处于核心态fo 用户态是进程的普通执行状态,在用户态卜进程具有较低的特权,只能执行规定的机器指令,不能执行特 权指令。进程在川户态f只能访问进程的存储空间。在用户态卜-进程不能与系统硬件相互作川,不能访问系 统资源。四. 进程空间和系统空间 系统为每个进程分配一个

6、独立的虚拟地址空间(虚拟内存)。进程的虚拟地址空间被分做两个部分,川户空 间和系统空间。 用户进程本身的程序和数据(可执行映象)映射到用户空间中。进程空间中还冇进程运行用户程序时使用的 堆栈,称为进程堆栈。 系统对这个进程进行控制和管理的信息,如进程控制块等,也映射到进程空间。内核堆栈也在进程空间中。内核被映射到所有进程的系统空间中。它们只允许在具有较高特权的核心态下访问。进程运行在特权较低的 用户态下时,不允许它直接访问系统空间。进程只能通过系统调用(system call)转换为核心态丿f,才能访问系统空间。一个进程在运行过程中,总是在两种执行状态之间不断地转换。进程上下文和系统上下文把系

7、统提供给进程的处于动态变化的运行环境总和称为进程上下文。系统屮的每一个进程都冇它自己的上下 文。进程因时间片川完或因等待某个事件而阻塞时,进程调度需要把cpu的使丿ij权从当前进程交给另一个进程, 这个过程称为进程切换(procdss switching)。进程的切换乂称为上卜文切换(context switching).o在系统内核为用户进程服务,例如进程执行一个系统调用时,进程的执行状态要从用户态转换为核心态。但 是,此时内核的运行仍是进程的一部分,所以说这时内核是运行在进程上下文中。系统在完成自身任务时的运行环境称为系统上卜:文(system context)0内核在系统上下文中执行时不

8、会阻塞。执行状态和上下文系统上下文 进程上下文§2. 2 linux进程的任务结构体1.进程的状态和标志数据类型名称功能及作用volatile longstate进程的状态unsigned longflags进程的标志2.进程的标识数据类型名称功能及作用intpid进程标识号unsigned shortuid, gid用户标识号,组标识号unsigned shorteuid, egid用户有效标识号,组有效标识号unsigned shortsuid, sgid用户备份标识号,组备份标识号unsigned shortfsuid, fsgid用户文件标识号,组文件标识号p cptr父进程

9、x*. -t-. t-. z"p_pptrp osptr v子进程psptt|p_pptre_6ptrjp 75ptrlp_pptr空迪勻摄年长p_pptt-子进程匕.二=1子进程psphr4.进程间的链接信息图迸程的族亲关系数据类型名称功能及作用struct task struct*next task指向卜-一个任务结构体的指针struct task struct*prev task指向上一个任务结构体的指针struct task_struct*next_run指向可运行队列的下一个任务结构体 的指针struct task_struct*prev_run指向可运行队列的上一个任务结

10、构体 的指针5进程的调度信息数据类型名称功能及作用longcounter时间片计数器longpriority进程优先级unsigned longrt jpriority实时进程的优先级unsigned longpolicy进程调度策略6. 进程的时间信息3.进程的族亲关系数据类型名称功能及作用struct taskstruct*p opptr指向祖先进程任务结构体的指针struct taskstruct*p pptr指向父进程任务结构体的指针struct task struct*pcptr指向子进程任务结构体的指针struct taskstruct*p ysptr指向弟进程任务结构体的指针st

11、ruct taskstruct*posptr指向兄进程任务结构体的指针数据类型名称功能及作用longstarttime进程创建的时间longutime进程在用户态下耗费的时间longstime进程在核心态下耗费的时间longcutime所有子进程在用户态下耗费的时间longcstime所冇了进程在核心态下耗费的时间unsigned longtimeout进程中请延吋7. 进程的虚存信息数据类型名称功能及作用struct mmstruct进程的虚存信息struct desc struct*dt进程的局部描述符表指针unsigned longsavedkernel stack核心态下堆栈的指针un

12、signed longkernel stack page核心态下堆栈的贝表指针8. 进程的文件信息数据类型名称功能及作用struct fs struct*fs进程的可执行映象所在的文件系统struct files struct*files进程打开的文件9打进程间通信冇关的信息数据类型名称功能及作用unsigned longsignal进程接收到的信号unsigned longblocked阻塞信号的掩码struct signolstmct*sig信号处理函数表的指针intexits进程终止的信号struct sem undosemundo进程要释放的信号量struct sem queue*se

13、msleeping与信号量操作相关的等待队列10.其它信息数据类型名称功能及作用interrno系统调用的出错代码longdebugreg8进程的8个调试寄存器charcomm16进程接收到的信号§2.3 linux的进程调度.linux进程调度方式 linux系统采用抢占调度方式,又称可剥夺调度力式。采用这种调度方式时,对于当前运行的进程而言,当有 更紧急的进程到來时,系统将剥夺当而进程使用处理机的权利,立即停止它在处理机上的运行,而把处理机 分配给那个更紧急的进程。 linux采用时间片轮转法。对某个运行中的进程,当它的时间片用完时,系统将停止它的运行并把处理机分配 给其它进程。

14、二.linux进程调度策略 linux的进程分为普通进程和实时进程,实时进程的优先级高于普通进程。 linux对实时进程和普通进程采用不同的调度策略,在基于优先级的算法下,实时进程优先于普通进程。 linux进程的策略冇三种,符巧常量意义sched other普通进程的时间片轮转算法sched ftfo实时进程的先进先出算法sched rr实时进程的时间片轮转算法普通进程按照sched_other调度策略进行进程调度。实时进程按照schedftfo或sched_rr策略进行调度。 sched_ftfo是按先述先出方法选择下一个使用cpu的进程。 sched_rr是实时进程的时间片轮转法策略(r

15、ound robin)。三.linux进程调度依据 policy是进程的调度策略sched_ftfo、sched_rr 的是实时进程,sched other是普通进程。 priority是进程优先级。它还表示分配给进程使用cpu的时间片。 counter是进程使用cpu运行时间的计数值。随时钟滴答减1。counter=0时,进程的时间片已用完。static inline i nt goodness (struct task_struct * p,struct taskstruct * prev, int this_cpu)int weight;if (p->policy != sched

16、 other)return 1000 + p->rt_priority;weight = p->counter;return weight;0. linux进程调度方法 linux进程调度采用动态优先级法,调度对彖是口j运行队列,可运行队列屮优先级人的进程首先得到cpu投入运行。进程在运行中,counter的代表进程的动态优先级。 linux采収了加权的方法來保证实时进程优先于普通进程。卄通进稈的权值就是它的counter的值,而实时进程的权值是它的rt_priority的值加1000。在调度过程中,调度程序检查可运行队列中所有进程的权值,选择其屮权值最大的进程做为下一个运行进程。

17、五.进程调度时机时机1.进程状态发生变化时。(1)处于运行态下的进程要等待某种资源,(2)运行态下的进程在程序执行完毕后,一般通过调用内核函数do_exi t ()终止运行并转入僵死态。(3)处于等待态的进程被唤醉后,将加入到可运行队列屮时。(4)进程从运行态转入暂停态时。(5)进程从暂停态成为可运行态时。时机2.当前进程时间片用完时。时机3.进程从系统调用返回到用八态时。时机4.中断处理后,进程返回到用八态时。§2.4 linux调度程序分析§2.5 linux进程的创建一. 进程创建的原理系统创建的第一个进程是ini t进程。系统屮所行的进程都是由当前进程使用系统调用f

18、ork()创建的。子进程被创建后继承了父进程的资源。子进程共享父进程的虚存空间。写时拷贝(copy on write):子进程在创建后共享父进程的虚存内存空间,只是在两个进程中某一个进程需要向虚拟内存写入数据时才拷贝相应部分main 0pid_t val;printfcpid-.父进程main()t val:税printf cpidi f (val=fork () wz 创建进很 print£cparent elseprint£("child 子进程print£( parent elseprin t£ c* chi id .if (val=fo

19、rk 0)main() pid_t val;printf cpidif (val=fork ()princparent elseprintf ("child 的虚拟内存。子进程在创建后执行的是父进程的程序代码。父进程执行fork ()返值是子进程的pid值,子进程执行fork ()的返值是0。include <sys/typex. h>#include <unisd.h>mai n ()pid_t val ;printf (z/ptd before fork():%dn,z, (int)getpido);if (val=fork ()printf ("

20、;parent process ptd:%dn,z, (int)getpid();printf("child process ptd:%dr),(int)getpido);)该程序的执行结果:ptd before fork ():490parent process p1d:49ochi id process ptd:491二. 进程创建的过程1. 为新进程分配任务结构体内存空间2. 把父进程任务结构体拷贝到子进程的任务结构体3. 为新进程在其虚拟内存建立内核堆栈。4. 对子进程任务结构体屮部分进行初始化设置5. 把父进程的有关信息拷贝给子进程,建立共享关系6. 把了进程的counte

21、r设为父进程counter值的一半7. 把子进程加入到可运行队列中8. 结朿do_fork ()函数返回pid值三. do_fork ()程序分析§2. 6等待队列及操作一. 等待队列为了便于対等待态的进程进行管理和控制,linux设置了等待队列和对等待队列进行操作的内核函数。当 运行态进程因等待某个事件成为等待态后,由内核函数把它插入到等待队列中。当进程等待的事件发生后,内核 函数再把它从等待队列屮删除。linux屮对应于每种等待事件都侑一个等待队列。等待态进程根据等待事件的不同排在不同的等待队列中, 所以系统中通常存在着多个等待队列。linux的等待队列是一个由wait_queu

22、e结构体纽.成的循环链表。struct waitqueuq struct taskstruct *task;struct wait-queue *next;task ructtask ruettask st ruet图等待队列二. 等待队列操作函数linux屮对等待队列的操作只能使用两个内核函数,add wai t queue ()和remove_wai tqueue ()分别对等待队列进行加入和移出操作,三. 等待队列的建立与操作毎一个等待队列都有一个指针指向该队列。等待队列的指针被定义为静态全局变量,并被初始化为null。例如: static struct wait_queue * eve

23、nt_queue = null;当某个进程要加入到这个等待队列时,首先需要给该进程构造一个wait_queue结构体,例如:struct wait_queue wait;把进程的结构体wait加入到event_queue指向的等待队列中时,调丿1j加入等待队列函数:add wait_queue(&event_queue, &wait);head等待队列指针nullevenwai tnull<a)等待队列指升与等得队列站构体nex thead(c)加入等待队列前nex teven t_quqii!nullwai ti*(b)加入空等待陆列后nex tkeqdeven t_q

24、ii!uq、wai t(d)加入等待队列后从event.queue指向的等待队列屮删除某个进程的等待结构体wait吋,调用等待队列删除函数:remove_wai t_queue(&event_qucuo, &wai t);(b:l删除后§2. 7进程的睡眠与唤醒一.进程的睡眠linux «|分别使用下列两个内核函数使进程进入不可小断等待态或可屮断等待态,:/*进程进入可屮断等待态*/void interruptible sleep()n(struct wait queue *p)sleep on(p,task interruptible);/*进入不可屮断等

25、待态*/void sleep on(struct wait queue *p)sleep on(p, task.uninterruptible);return;二.进程的唤醒在等待队列中处于睡眠状态的进程,在等待的事件发牛后要使用内核函数把它们唤醒。wake_up () 于唤醒等待 队列中的町中断态和不口j中断态的进程,wake_up_interruptibl e ()仅唤醒口j中断态进程。下列函数只用于唤醒可屮断态的进程:ovoid wake up interruptible(struct wait queue *q);§2. 8进程等待一.进程等待函数及其参数int sys wai t4(pid_t pid, unsigned int * stat addr, int options, struct rusage * ru)int sys_wait3(unsigned int * stat_addr, int options, struet rusage * ru)int sys waitpid(pid_t pid,unsigned int * stat_addr, int options)static iniine pid_t wait(int * wait_stat)

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论