Linux 进程管理实验.docVIP

  • 15
  • 0
  • 约8.54千字
  • 约 11页
  • 2020-01-21 发布于天津
  • 举报
Linux 进程管理实验 一、实验内容: 1. 利用bochs观测linux0.11下的PCB进程控制结构。 2. 利用bochs观测linux0.11下的fork.c源代码文件,简单分析其中的重要函数。 3. 在fork.c适当位置添加代码,以验证fork函数的工作原理。 二、Linux进程管理机制分析 Linux有两类进程:一类是普通用户进程,一类是系统进程,它既可以在用户空间运行,又可以通过系统调用进入内核空间,并在内核空间运行;另一类叫做内核进程,这种进程只能在内核空间运行。 在以i386为平台的Linux系统中,进程由进程控制块,系统堆栈,用户堆栈,程序代码及数据段组成。Linux系统中的每一个用户进程有两个堆栈:一个叫做用户堆栈,它是进程运行在用户空间时使用的堆栈;另一个叫做系统堆栈,它是用户进程运行在系统空间时使用的堆栈。 1.Linux进程的状态: Linux进程用进程控制块的state域记录了进程的当前状态,一个Linux进程在它的生存期中,可以有下面6种 状态。 1.就绪状态 (TASK_RUNNING):在此状态下,进程已挂入就绪队列,进入准备运行状态。 2.运行状态(TASK_RUNNING):当进程正在运行时,它的state域中的值不改变。但是Linux会用一个专门指针(current)指向当前运行的任务。 3.可中断等待状态(TASK_INTERRUPTIBLE):进程由于未获得它所申请的资源而处在等待状态。不管是资源有效或者中断唤醒信号都能使等待的进程脱离等待而进入就绪状态。即”浅睡眠状态”。 4.不可中断等待状态(TASK_UNINTERRUPTIBLE):这个等待状态与上面等待状态的区别在于只有当它申请的资源有效时才能被唤醒,而其它信号不能。即“深睡眠状态”。 5.停止状态(TASK_STOPPED):当进程收到一个SIGSTOP信号后就由运行状态进入停止状态,当收到一个SINCONT信号时,又会恢复运行状态。挂起状态。 6.终止状态(TASK_ZOMBIE):进程因某种原因终止运行,但进程控制块尚未注销。即“僵死状态”。 状态图如下所示: 2.Linux进程控制块: 在Linux中,进程控制块为数据结构task_struct,它包含了大量该进程的信息,这些信息大致为以下几类: 1).进程的当前状态 2).调度信息 3).进程标识 4).进程的通信信息 5).进程与其它进程之间关系的信息 6).使用文件的信息 7).虚拟内存与物理内存的关系 8).计时器 9).处理器与进程的有关信息 3. Fork函数: 父进程创建一个子进程最方便快捷的方式就是把父进程的控制块照原样复制一个,然后再根据子进程的修改特点对它进行必要的修改,形成子进程的控制块。 系统调用fork()通过调用find_empty_process及copy_process等函数复制一个当前进程的进程控制块,然后用新进程标识修改旧标识,填写子进程与父进程关系,创建子进程堆栈和数据区。 因此,fork()执行后,父子进程共享同一个存储空间,父进程的所有可共享资源都被子进程通过数据结构的复制继承了过来。 在父进程调用fork()与在子进程中调用fork(),fork()的返回值不同!如果是在父进程调用fork(),则fork()就复制出一个子进程,并返回子进程的标识ID,如果创建子进程失败,则fork()的返回值为-1;而如果在子进程调用fork(),则它返回的是0。 三、实验步骤及结果 在安装目录下双击bochs.exe,选择提供好的linux0.11配置文件,点击start,启动虚拟机,如下图所示: 利用bochs观测linux0.11下的PCB进程控制结构 切换工作目录到/usr/src/linux/include/linux文件夹,如下所示: 2. 利用vi编辑器打开sched.h头文件,寻找struct task_struct结构体的定义,如下: 观察进程控制块的内容,对里面的一些变量分析: Long state:表示当前进程所处的状态。-1为不可运行,0可运行(就绪),0 已停止。进程执行时,它会根据具体情况改变状态。Linux中的进程主要有如下状态,如下所示: 内核表示 含义 TASK_RUNNING 可运行 TASK_INTERRUPTIBLE 可中断的等待状态 TASK_UNINTERRUPTIBLE 不可中断的等待状态 TASK_ZOMBIE 僵死 TASK_STOPPED 暂停 TASK_SWAPPING 换入/换出 Long counter:表示当前进程所剩余的时间片 Long priority:表示当前进程的优先级。 Long signal:存储进程收到的信号。 Unsi

文档评论(0)

1亿VIP精品文档

相关文档