搜档网
当前位置:搜档网 › 操作系统进程管理实验

操作系统进程管理实验

操作系统进程管理实验
操作系统进程管理实验

昆明理工大学信息工程与自动化学院学生实验报告

(2010 —2011 学年第二学期)

课程名称:操作系统开课实验室:信自楼444 2011 年 4 月 10 日

一、实验目的

通过编写进程管理的算法,要求学生掌握整个进程管理的各个环节,进程的数据结构描述,进程的各种状态之间的转换,以及进程的调度算法。以加深对进程的概念及进程调度算法的理解,并且提高链表的应用能力,达到提高编程能力的目的。

二、实验原理及基本技术路线图(方框原理图)

用C语言或C++语言开发。需要定义PCB的数据结构,用链表的形式管理进程,采用多级反馈队列调度的算法模拟进程的控制。要求有创建、撤销、调度、阻塞、唤醒进程等功能。

①进程的状态转换图

②数据结构定义、主要变量的说明、函数的说明及各原语的功能说明

typedef struct PCB 定义结构体PCB进程控制块;char NAME[20] 定义结构体变量,进程名;long ID 定义进程id;int RUNTIME 定义进程运行时间;char STATE[6] 定义进程状态有ready 、wait 、run;

int PRIORITY定义权值。typedef struct QNode { PCB pcb; struct QNode *next; }QueuePtr; 定义单链表,有定义指针next。typedef struct LinkQueue { int prior; QueuePtr *front; QueuePtr *rear; int PartTime; }LinkQueue;

链队列中定:优先级、结构体里的QueuePtr类型指针变量,指向该优先级的进程的头结点和尾结点,还运行的时间片。LinkQueue Readyqueue[10] 链队列的单链表。

void schedule() 声明调度函数,用来调度进程的运行;void show() 声明输出函数,用来输出的一个函数;void Create()声明创建进程的函数,用来创建进程。

yunxingshijian=1+(int)(rand()%30); 此语句是随机生成一个整数赋给运行时间RUNTIME;youxianji=1+(int)(rand()%9); 该语句随机生成一个整数(1~9)赋给优先级;strcpy(p->https://www.sodocs.net/doc/a63446542.html,,name)将名字赋给PCB块;strcpy(p->pcb.STATE,"Ready")将进程状态赋给PCB块;p->pcb.PRIORITY=youxianji 将优先级赋给PCB块;p->pcb.RUNTIME=yunxingshijian; 将运行时间赋给PCB块;p->pcb.ID=id 将id号赋给PCB块。

{Readyqueue[i].front->next=p->next; Readyqueue[i+1].rear->next=p; Readyqueue[i+1].rear=p;

p->next=NULL; } p移到下一队列的队尾,使Readyqueue[i+1].rear指向最后一个结点。{Readyqueue[i].front->next=p->next; Readyqueue[9].rear->next=p; p->next=NULL; Readyqueue[9].rear=p; } //p->next前移,把p移到运行结束的队列Readyqueue[9].rear。

③多级反馈队列调度算法的描述

一个进程被调度,则其运行时间有p->pcb.RUNTIME=p->pcb.RUNTIME-(int )pow(2,i+1),此后如果该进程的p->pcb.RUNTIME<0或p->pcb.RUNTIME=0,此进程就结束且加入到Readyqueue[9].rear->next=p且p->next=NULL。没有结束就移加到下一队列的尾部且优先级减“1”(Readyqueue[i].front->next=p->next;Readyqueue[i+1].rear->next=p;Readyqueue[i+1].rear=p;p->next=NULL; )。然后往下执行。如此循环.iv Readyqueue[i].front->next!=NULL发生时,就往下一优先级运行。直到所有进程结束。

④程序功能结构图、流程图

<1>创建进程函数Create()(左图) <2>调度函数schedule()(右图)

三、所用仪器、材料(设备名称、型号、规格等)。

所用仪器:计算中心201;操作系统:Microsoft Visual C++;软件平台:Microsoft Visual C++

四、实验方法、步骤

#include

#include

#include

#include

#include

typedef struct PCB //定义结构体PCB进程控制块

{

char NAME[20]; //结构体变量,进程名

long ID; //进程id

int RUNTIME; //进程运行时间

char STATE[6]; //进程状态 ready wait run

int PRIORITY; //权值

}PCB;

typedef struct QNode //单链表

{ PCB pcb;

struct QNode *next;

}QueuePtr;

typedef struct LinkQueue //链队列

{ int prior; //优先级

QueuePtr *front; //结构体里的QueuePtr类型指针变量,指向该优先级的进程的头结点

QueuePtr *rear; //结构体里的QueuePtr类型指针变量,指向该优先级的进程的尾结点

int PartTime; //时间片

}LinkQueue;

LinkQueue Readyqueue[10]; //链队列的单链表

int N; //N为当前进程数

void schedule(); //声明调度函数

void show(); //声明输出函数

void InitQueue() // 队列的初始化、给每个队列加个头结点

{

for(int i=0;i<10;i++)

{

Readyqueue[i].PartTime=(int )pow(2,i+1); //每个进程的时间片

Readyqueue[i].prior=9-i; //每进程的优先级

Readyqueue[i].front=(QueuePtr*)malloc(sizeof(QueuePtr)); //为进程申请空间

Readyqueue[i].rear=Readyqueue[i].front; //初始化单链的头结点和尾结点指向同一位置Readyqueue[i].front->next=NULL; //初始化时Readyqueue[i].front->next为空}

}

//***************************创建进程**************************************************

void Create()

{

InitQueue();

char name[20]; long id=201031101; //定义ID和初始化为201031101

int m;

QueuePtr *p;

int yunxingshijian,youxianji; //运行时间、优先级

printf("\n\t\t请输入要创建进程的数目:");

fflush(stdin);

scanf("%d",&m);

for(int j=1;j<=m;j++) //创建用户所需进程m个

{

printf("\t\t输入进程名:"); //用户输入用户名

scanf("%s",&name);

srand((int)time(0));

yunxingshijian=1+(int)(rand()%30); //随机生成一个整数赋给运行时间

printf("\t\t运行时间:%d",yunxingshijian);

srand((int)time(0));

youxianji=1+(int)(rand()%9); //随机生成一个整数(1~9)赋给优先级

printf("\t优先级:%d",youxianji);

p=(QueuePtr *)malloc(sizeof(QueuePtr)); //插入就绪队列

QueuePtr *k;

for(int i=0;i<9;i++) //通过优先级寻找该进程应放置的队列

{

if(youxianji==9-i)

{

k=Readyqueue[i].front; //k为移动指针,寻找队列末尾进程

strcpy(p->https://www.sodocs.net/doc/a63446542.html,,name); //将名字赋给PCB块

strcpy(p->pcb.STATE,"Ready"); //将进程状态赋给PCB块

p->pcb.PRIORITY=youxianji; //将优先级赋给PCB块

p->pcb.RUNTIME=yunxingshijian; //将运行时间赋给PCB块

p->pcb.ID=id; //将id号赋给PCB块

if(k->next!=NULL)

{

k=k->next; //k指针在寻找队列末尾进程

}

k->next=p; //将p接到队尾

p->next=NULL; //将队尾的next置为空

Readyqueue[i].rear=p;

}

}

N++; //保存当前就绪进程数

id++; //ID自动加"1"

printf("\n\t第%d个进程创建成功!\n\n",N);

}

show(); //调用输出函数show()

}

//******************************调度函数*******************************************

void schedule()

{

QueuePtr *p;

for(int i=0;i<9;i++)

{

while(Readyqueue[i].front->next!=NULL)

{

p=Readyqueue[i].front->next; //p指向Readyqueue[i].front->next的结点

Sleep((int )pow(2,i+1)); //调用函数Sleep()使进程i休眠

p->pcb.RUNTIME=p->pcb.RUNTIME-(int )pow(2,i+1); //进程的时间减pow(2,i+1)

strcpy(p->pcb.STATE,"run"); //调用strcpy()把状态run复给p->pcb.STATE p->pcb.PRIORITY--; //权值减减

show();

if(p->pcb.RUNTIME<0||p->pcb.RUNTIME==0) //判断p->pcb.RUNTIME是否<0或=0

{

Readyqueue[i].front->next=p->next; //p前移

Readyqueue[9].rear->next=p; //把p移到运行结束的队列Readyqueue[9].rear p->next=NULL;

Readyqueue[9].rear=p; //使Readyqueue[9].rear指向最后一个结点

strcpy(p->pcb.STATE,"finish"); //调用strcpy()把状态finish复给p->pcb.STATE

show(); //调用输出函数show()

}

else

{

Readyqueue[i].front->next=p->next;

Readyqueue[i+1].rear->next=p; //p移到下一队列的队尾

Readyqueue[i+1].rear=p; //使Readyqueue[i+1].rear指向最后一个结点

p->next=NULL;

strcpy(p->pcb.STATE,"ready"); //调用strcpy()把状态ready复给p->pcb.STATE }

}

}

}

//*******************************输出函数********************************************

void show() // 队列输出函数

{

QueuePtr *q=NULL;

printf("\t名字 ID 运行时间优先级状态\n");

for(int j=0;j<10;j++)

{

q=Readyqueue[j].front->next;

while(q!=NULL)

{

printf("\t%s,\t%ld,\t%d,\t%d,\t%s\n",q->https://www.sodocs.net/doc/a63446542.html,,q->pcb.ID,q->pcb.RUNTIME,q->pcb.PRIORITY,q->pcb.STA TE);

q=q->next ;

}

}

}

//***************************主函数*********************************************

void main()

{

Create();

char choice;

printf("请选择是否要对以上进程进行调度?(y(Y)或n(N))");

scanf("%s",&choice); //输入choice

while(1)

{

if(choice=='Y'||choice=='y') //判断choice的值

{

schedule(); //如果choice的值是Y或y 调度schedule()函数 printf("\t\t\t所有进程 (%d个) 运行结束!\n",N);

break; //调度结束、退出程序

}

if(choice=='N'||choice=='n') //如果choice的值是N或n

exit(0); //退出程序

if(choice!='Y'&&choice!='y'&&choice!='N'&&choice!='n') //如果choice的值不是Y或或N或n {

printf("\t\t\t您的选择有误,请重新输入!\n"); //输出出错、重新输入

scanf("%s",&choice);

}

}

}

请加上程序的源代码,需要有详细的注释。

五、实验过程原始记录(数据、图表、计算等)

①创建6个进程

②进行调度(输入Y或y)

③要不调度(输入N或n)

④如果输入不是Y或y或N或n,则有如下

⑤在④的情况下,想调度输入Y或y,退出输入N或n即可

程序的测试数据、运行截图

六、实验结果、分析和结论(误差分析与数据处理、成果总结等。其中,绘制曲线图

时必须用计算纸)

对整个上机过程、上机结果进行总结、分析。包括收获、存在问题、改进等方面。

在这次上机中,我发现了自己有很多不足。所以花了很长的时间才做出来,而且还在老师多次的讲解之后,才悟出来的。真是有点惭愧了。

在编程的过程中,就没有明白数组队列、链队列、PCB块及结构体的真正意思。所以老师说了是半懂不懂的,虽说从图书馆借来一本类似的书看,可到用时还是不完全明白。在这几天,我努力了,我敢说。就连睡觉了我都会在想为什么不可以这样、那样,看了好多学过的和没学过的书、知识点。用多级反馈队列来实现,虽说没有很多美化的功能,我

相信,只要好好学,下一次我会做得好。此外,存在的问题还是不少的,比如好多学过的知识都不记得了,也许是好长时间没复习了,也可能是太久没编程序了。不过这也是我自己的问题所在。真心的说,遇到杨老师这样的好老师,我很欣慰。有耐心、讲得仔细、重复的讲重点、举例说明难点、讲课精神足等等,真是当今大学难有的好老师。

在这次有深度的上机,觉得这样的程序还可以改进,比如:程序运行背景、算法的简洁等等。我突然觉醒:我该努力了

计算机操作系统进程调度实验研究报告

计算机操作系统进程调度实验研究报告

————————————————————————————————作者:————————————————————————————————日期:

操作系统实验题:设计一若干并发进程的进程调度程序 一、实验目的 无论是批处理系统、分时系统还是实时系统,用户进程数一般都大于处理机数,这将导致用户进程互相争夺处理机。这就要求进程调度程序按一定的策略,动态地把处理及分配给处于就绪队列中的某一进程,以使之执行。进程调度是处理机管理的核心内容。本实验要求采用最高优先数优先的调度算法(即把处理机分配给优先数最高的进程)和先来先服务算法编写和调试一个简单的进程调度程序。通过本实验可以加深理解有关进程控制块、进程队列的概念。并体会了优先数和先来先服务调度算法的具体实施办法。 二、实验要求 用高级语言编写和调试一个进程调度程序,以加深对进程的概念及进程调度算法的理解. 三、实验内容 进程调度算法:采用最高优先数优先的调度算法(即把处理机分配给优先数最高的进程)和先来先服务算法(将用户作业和就绪进程按提交顺序或变为就绪状态的先后排成队列,并按照先来先服务的方式进行调度处理)。 每个进程有一个进程控制块(PCB)表示。进程控制块可以包含如下信息:进程名、优先数、到达时间、需要运行时间、已用CPU时间、进程状态等等。 进程的优先数及需要的运行时间可以事先人为地指定(也可以由随机数产生)。进程的到达时间为进程输入的时间。 进程的运行时间以时间片为单位进行计算。 每个进程的状态可以是就绪W(Wait)、运行R(Run)、或完成F(Finish)三种状态之一。 就绪进程获得CPU后都只能运行一个时间片。用已占用CPU时间加1来表示。 如果运行一个时间片后,进程的已占用CPU时间已达到所需要的运行时间,则撤消该进程,如果运行一个时间片后进程的已占用CPU时间还未达所需要的运行时间,也就是进程还需要继续运行,此时应将进程的优先数减1(即降低一级),然后把它插入就绪队列等待CPU。 每进行一次调度程序都打印一次运行进程、就绪队列、以及各个进程的PCB,以便进行检查。重复以上过程,直到所要进程都完成为止。 四、实验算法流程

操作系统实验-进程控制

实验一、进程控制实验 1.1 实验目的 加深对于进程并发执行概念的理解。实践并发进程的创建和控制方法。观察和体验进程的动态特性。进一步理解进程生命期期间创建、变换、撤销状态变换的过程。掌握进程控制的方法,了解父子进程间的控制和协作关系。练习Linux 系统中进程创建与控制有关的系统调用的编程和调试技术。 1.2 实验说明 1)与进程创建、执行有关的系统调用说明进程可以通过系统调用fork()创建子进程并和其子进程并发执行.子进程初始的执行映像是父进程的一个复本.子进程可以通过exec()系统调用族装入一个新的执行程序。父进程可以使用wait()或waitpid()系统调用等待子进程的结束并负责收集和清理子进程的退出状态。 fork()系统调用语法: #include pid_t fork(void); fork 成功创建子进程后将返回子进程的进程号,不成功会返回-1. exec 系统调用有一组6 个函数,其中示例实验中引用了execve 系统调用语法: #include int execve(const char *path, const char *argv[], const char * envp[]); path 要装入 的新的执行文件的绝对路径名字符串. argv[] 要传递给新执行程序的完整的命令参数列表(可以为空). envp[] 要传递给新执行程序的完整的环境变量参数列表(可以为空).

Exec 执行成功后将用一个新的程序代替原进程,但进程号不变,它绝不会再返回到调用进程了。如果exec 调用失败,它会返回-1。 wait() 系统调用语法: #include #include pid_t wait(int *status); pid_t waitpid(pid_t pid,int *status,int option); status 用 于保留子进程的退出状态 pid 可以为以下可能值: -1 等待所有PGID 等于PID 的绝对值的子进程 1 等待所有子进程 0 等待所有PGID 等于调用进程的子进程 >0 等待PID 等于pid 的子进程option 规 定了调用waitpid 进程的行为: WNOHANG 没有子进程时立即返回 WUNTRACED 没有报告状态的进程时返回 wait 和waitpid 执行成功将返回终止的子进程的进程号,不成功返回-1。 getpid()系统调用语法: #include #include pid_t getpid(void); pid_t getppid(void); getpid 返回当前进程的进程号,getppid 返回当前进程父进程的进程号 2)与进程控制有关的系统调用说明可以通过信号向一个进程发送消息以控制进程的 行为。信号是由中断或异常事件引发的,如:键盘中断、定时器中断、非法内存引

windows进程管理实验报告

实验报告 课程名称:操作系统 实验项目:windows进程管理 姓名: 专业:计算机科学与技术 班级: 学号:

计算机科学与技术学院 计算机系 2019 年 4 月 23 日

实验项目名称: windows进程管理 一、实验目的 1. 学习windows系统提供的线程创建、线程撤销、线程同步等系统调用; 2. 利用C++实现线程创建、线程撤销、线程同步程序; 3. 完成思考、设计与练习。 二、实验用设备仪器及材料 1. Windows 7或10, VS2010及以上版本。 三、实验内容 1 线程创建与撤销 写一个windows控制台程序(需要MFC),创建子线程,显示Hello, This is a Thread. 然后撤销该线程。 相关系统调用: 线程创建: CreateThread() 线程撤销: ExitThread() 线程终止: ExitThread(0) 线程挂起: Sleep() 关闭句柄: CloseHandle() 参考代码: ; } 运行结果如图所示。 完成以下设计题目: 1. 向线程对应的函数传递参数,如字符串“hello world!”,在线程中显示。 2. 如何创建3个线程A, B, C,并建立先后序执行关系A→B→C。

实验内容2 线程同步 完成父线程和子线程的同步。父线程创建子线程后进入阻塞状态,子线程运行完毕后再唤醒。 相关系统调用: 等待对象 WaitForSingleObject(), WaitForMultipleObjects(); 信号量对象 CreateSemaphore(), OpenSemaphore(), ReleaseSemaphore(); HANDLE WINAPI CreateSemaphore( _In_opt_ LPSECURITY_ATTRIBUTES lpSemaphoreAttributes _In_ LONG lInitialCount, _In_ LONG lMaximumCount, _In_opt_ LPCTSTR lpName ); 第一个参数:安全属性,如果为NULL则是默认安全属性 第二个参数:信号量的初始值,要>=0且<=第三个参数 第三个参数:信号量的最大值 第四个参数:信号量的名称 返回值:指向信号量的句柄,如果创建的信号量和已有的信号量重名,那么返回已经存在的信号量句柄参考代码: n"); rc=ReleaseSemaphore(hHandle1,1,NULL); err=GetLastError(); printf("Release Semaphore err=%d\n",err); if(rc==0) printf("Semaphore Release Fail.\n"); else printf("Semaphore Release Success. rc=%d\n",rc); } 编译运行,结果如图所示。

操作系统实验报告--实验一--进程管理

实验一进程管理 一、目的 进程调度是处理机管理的核心内容。本实验要求编写和调试一个简单的进程调度程序。通过本实验加深理解有关进程控制块、进程队列的概念,并体会和了解进程调度算法的具体实施办法。 二、实验内容及要求 1、设计进程控制块PCB的结构(PCB结构通常包括以下信息:进程名(进程ID)、进程优先数、轮转时间片、进程所占用的CPU时间、进程的状态、当前队列指针等。可根据实验的不同,PCB结构的内容可以作适当的增删)。为了便于处理,程序中的某进程运行时间以时间片为单位计算。各进程的轮转时间数以及进程需运行的时间片数的初始值均由用户给定。 2、系统资源(r1…r w),共有w类,每类数目为r1…r w。随机产生n进程P i(id,s(j,k),t),0<=i<=n,0<=j<=m,0<=k<=dt为总运行时间,在运行过程中,会随机申请新的资源。 3、每个进程可有三个状态(即就绪状态W、运行状态R、等待或阻塞状态B),并假设初始状态为就绪状态。建立进程就绪队列。 4、编制进程调度算法:时间片轮转调度算法 本程序用该算法对n个进程进行调度,进程每执行一次,CPU时间片数加1,进程还需要的时间片数减1。在调度算法中,采用固定时间片(即:每执行一次进程,该进程的执行时间片数为已执行了1个单位),这时,CPU时间片数加1,进程还需要的时间片数减1,并排列到就绪队列的尾上。 三、实验环境 操作系统环境:Windows系统。 编程语言:C#。 四、实验思路和设计 1、程序流程图

2、主要程序代码 //PCB结构体 struct pcb { public int id; //进程ID public int ra; //所需资源A的数量 public int rb; //所需资源B的数量 public int rc; //所需资源C的数量 public int ntime; //所需的时间片个数 public int rtime; //已经运行的时间片个数 public char state; //进程状态,W(等待)、R(运行)、B(阻塞) //public int next; } ArrayList hready = new ArrayList(); ArrayList hblock = new ArrayList(); Random random = new Random(); //ArrayList p = new ArrayList(); int m, n, r, a,a1, b,b1, c,c1, h = 0, i = 1, time1Inteval;//m为要模拟的进程个数,n为初始化进程个数 //r为可随机产生的进程数(r=m-n) //a,b,c分别为A,B,C三类资源的总量 //i为进城计数,i=1…n //h为运行的时间片次数,time1Inteval为时间片大小(毫秒) //对进程进行初始化,建立就绪数组、阻塞数组。 public void input()//对进程进行初始化,建立就绪队列、阻塞队列 { m = int.Parse(textBox4.Text); n = int.Parse(textBox5.Text); a = int.Parse(textBox6.Text); b = int.Parse(textBox7.Text); c = int.Parse(textBox8.Text); a1 = a; b1 = b; c1 = c; r = m - n; time1Inteval = int.Parse(textBox9.Text); timer1.Interval = time1Inteval; for (i = 1; i <= n; i++) { pcb jincheng = new pcb(); jincheng.id = i; jincheng.ra = (random.Next(a) + 1); jincheng.rb = (random.Next(b) + 1); jincheng.rc = (random.Next(c) + 1); jincheng.ntime = (random.Next(1, 5)); jincheng.rtime = 0;

进程管理实验报告

实验2过程管理实验报告学生号姓名班级电气工程系过程、过程控制块等基本原理过程的含义:过程是程序运行过程中对数据集的处理,以及由独立单元对系统资源的分配和调度。在不同的数据集上运行程序,甚至在同一数据集上运行多个程序,是一个不同的过程。(2)程序状态:一般来说,一个程序必须有三种基本状态:就绪、执行和阻塞。然而,在许多系统中,过程的状态变化可以更好地描述,并且增加了两种状态:新状态和终端状态。1)就绪状态,当一个进程被分配了除处理器(CPU)以外的所有必要资源时,只要获得了处理器,进程就可以立即执行。此时,进程状态称为就绪状态。在系统中,多个进程可以同时处于就绪状态。通常,这些就绪进程被安排在一个或多个队列中,这些队列称为就绪队列。2)一旦处于就绪状态的进程得到处理器,它就可以运行了。进程的状态称为执行状态。在单处理器系统中,只有一个进程在执行。在多处理器系统中,可能有多个进程在执行中。3)阻塞状态由于某些事件(如请求输入和输出、额外空间等),执行进程被挂起。这称为阻塞状态,也称为等待状态。通常,处于阻塞状态的进程被调度为-?这个队列称为阻塞队列。4)新状态当一个新进程刚刚建立并且还没有放入就绪队列中时,它被称为新状态。5)终止状态是

什么时候-?进程已正常或异常终止,操作系统已将其从系统队列中删除,但尚未取消。这就是所谓的终结状态。(3)过程控制块是过程实体的重要组成部分,是操作系统中最重要的记录数据。控制块PCB记录操作系统描述过程和控制过程操作所需的所有信息。通过PCB,一个不能独立运行的程序可以成为一个可以独立运行的基本单元,并且可以同时执行一个进程。换句话说,在进程的整个生命周期中,操作系统通过进程PCB管理和控制并发进程。过程控制块是系统用于过程控制的数据结构。系统根据进程的PCB来检测进程是否存在。因此,进程控制块是进程存在的唯一标志。当系统创建一个进程时,它需要为它创建一个PCB;当进程结束时,系统回收其PCB,进程结束。过程控制块的内容过程控制块主要包括以下四个方面的信息。过程标识信息过程标识用于对过程进行标识,通常有外部标识和内部标识。外部标识符由流程的创建者命名。通常是一串字母和数字。当用户访问进程时使用。外部标识符很容易记住。内部标识符是为了方便系统而设置的。操作系统为每个进程分配一个唯一的整数作为内部标识符。通常是进程的序列号。描述性信息(process scheduling message)描述性信息是与流程调度相关的一些有关流程状态的信息,包括以下几个方面。流程状态:表

第二章 操作系统进程(练习题标准答案)

第二章操作系统进程(练习题答案)

————————————————————————————————作者:————————————————————————————————日期: 2

第二章进程管理 1.操作系统主要是对计算机系统全部 (1) 进行管理,以方便用户、提高计算机使 用效率的一种系统软件。它的主要功能有:处理机管理、存储管理、文件管理、 (2) 管 理和设备管理等。Windows和Unix是最常用的两类操作系统。前者是一个具有图形界面的 窗口式的 (3) 系统软件,后者是一个基本上采用 (4) 语言编制而成的 的系统软件。在 (5) 操作系统控制下,计算机能及时处理由过程控制反馈的信息 并作出响应。 供选答案: (1): A. 应用软件 B. 系统软硬件 C. 资源 D. 设备 (2): A. 数据 B. 作业 C. 中断 D. I/O (3): A. 分时 B. 多任务 C. 多用户 D. 实时 (4): A. PASCAL B. 宏 C. 汇编 D. C (5): A. 网络 B. 分时 C. 批处理 D. 实时 答案:CBBDD 2.操作系统是对计算机资源进行的 (1) 系统软件,是 (2) 的接口。 在处理机管理中,进程是一个重要的概念,它由程序块、 (3) 和数据块三部 分组成,它有3种基本状态,不可能发生的状态转换是 (4) 。 虚拟存储器的作用是允许程序直接访问比内存更大的地址空间,它通常使用 (5) 作为它的一个主要组成部分。 供选答案: (1): A. 输入和输出 B. 键盘操作 C. 管理和控制 D. 汇编和执行 (2): A. 软件和硬件 B. 主机和外设 C. 高级语言和机器语言 D. 用户和计算机 (3): A. 进程控制块 B. 作业控制块 C. 文件控制块 D. 设备控制块 (4): A. 运行态转换为就绪态 B. 就绪态转换为运行态 C. 运行态转换为等待态 D. 等待态转换为运行态 (5): A. 软盘 B. 硬盘 C. CDROM D. 寄存器 答案:CDADB 3.在计算机系统中,允许多个程序同时进入内存并运行,这种方法称为 D。 A. Spodling技术 B. 虚拟存储技术 C. 缓冲技术 D. 多道程序设计技术 4.分时系统追求的目标是 C。 A. 高吞吐率 B. 充分利用内存 C. 快速响应 D. 减少系统开销 5.引入多道程序的目的是 D。

操作系统期末试题及答案

《操作系统》期末试卷 姓名 一、选择题(15*2分=30分) 1、在操作系统中,JCB是指(A ) A.作业控制块B.进程控制块C.文件控制块D.程序控制块 2、并发进程之间(D) A.彼此无关 B.必须同步 C.必须互斥 D.可能需要同步或互斥 3 A 4 ?A 5、(D A 6 A 7 A. 8 A. C. 9、设有。 A.2 10 A. 11 A 12、() A C 13 A 14、(B A.固定分区 B.分段 C.分页 D.可变分区 15、在进程管理中,当()时,进程从阻塞状态变为就绪状态。 A.进程被进程调度程序选中B.等待某一事件C.等待的事件发生D.时间片用完 二、填空题(20*1分=20分) 1、在单用户环境下,用户独占全机,此时程序的执行具有_封闭性______和_可再现性_。 2、对于信号量,在执行一次P操作时信号量-1_;当其值为__<0__时,进程应阻塞。在执行V操作时信号量的值应当_信号量+1_; 当其值为__<=0__时,应唤醒阻塞队列中的进程。 3、进程的三种基本状态分别是、进程的三种基本状态分别是__运行______,_就绪_和__阻塞(等待)__。 4、多道程序环境下的各道程序,宏观上它们是_并行__运行,微观上是_串行_运行。 5、在单CPU系统中有(n>1)个进程,在任一时刻处于就绪的进程最多是__n-1__个,最少是___0____个。

6、分区管理方案不能实现虚存的原因是_作业地址空间不能大于存储空间_。 7、段页式存储管理中,是将作业分_段__,__段_____内分___页____。分配以__页_____为单位。在不考虑使用联想存储器快表 的情况下,每条访问内存的指令需要____3___访问内存。其中第_2___次是查作业的页表。 三、简答题(4*5分=20分) (2) ????????????进程A???????????????????????????????进程B ???????????...??????????????????????????????????... ????????P(mutex);????????????????????????????P(mutex);

进程管理实验报告

进程的控制 1 .实验目的 通过进程的创建、撤消和运行加深对进程概念和进程并发执行的理解,明确进程与程序之间的区别。 【答:进程概念和程序概念最大的不同之处在于: (1)进程是动态的,而程序是静态的。 (2)进程有一定的生命期,而程序是指令的集合,本身无“运动”的含义。没有建立进程的程序不能作为1个独立单位得到操作系统的认可。 (3)1个程序可以对应多个进程,但1个进程只能对应1个程序。进程和程序的关系犹如演出和剧本的关系。 (4)进程和程序的组成不同。从静态角度看,进程由程序、数据和进程控制块(PCB)三部分组成。而程序是一组有序的指令集合。】2 .实验内容 (1) 了解系统调用fork()、execvp()和wait()的功能和实现过程。 (2) 编写一段程序,使用系统调用fork()来创建两个子进程,并由父进程重复显示字符串“parent:”和自己的标识数,而子进程则重复显示字符串“child:”和自己的标识数。 (3) 编写一段程序,使用系统调用fork()来创建一个子进程。子进程通过系统调用execvp()更换自己的执行代码,新的代码显示“new

program.”。而父进程则调用wait()等待子进程结束,并在子进程结束后显示子进程的标识符,然后正常结束。 3 .实验步骤 (1)gedit创建进程1.c (2)使用gcc 1.c -o 1编译并./1运行程序1.c #include #include #include #include void mian(){ int id; if(fork()==0) {printf(“child id is %d\n”,getpid()); } else if(fork()==0) {printf(“child2 id %d\n”,getpid()); } else {id=wait(); printf(“parent id is %d\n”,getpid()); }

第二章-操作系统进程(练习题答案)

第二章进程管理 1.操作系统主要是对计算机系统全部 (1) 进行管理,以方便用户、提高计算机使 用效率的一种系统软件。它的主要功能有:处理机管理、存储管理、文件管理、 (2) 管 理和设备管理等。Windows和Unix是最常用的两类操作系统。前者是一个具有图形界面的 窗口式的 (3) 系统软件,后者是一个基本上采用 (4) 语言编制而成的 的系统软件。在 (5) 操作系统控制下,计算机能及时处理由过程控制反馈的信息 并作出响应。 供选答案: (1): A. 应用软件 B. 系统软硬件 C. 资源 D. 设备 (2): A. 数据 B. 作业 C. 中断 D. I/O (3): A. 分时 B. 多任务 C. 多用户 D. 实时 (4): A. PASCAL B. 宏 C. 汇编 D. C (5): A. 网络 B. 分时 C. 批处理 D. 实时 答案:CBBDD 2.操作系统是对计算机资源进行的 (1) 系统软件,是 (2) 的接口。 在处理机管理中,进程是一个重要的概念,它由程序块、 (3) 和数据块三部 分组成,它有3种基本状态,不可能发生的状态转换是 (4) 。 虚拟存储器的作用是允许程序直接访问比内存更大的地址空间,它通常使用 (5) 作为它的一个主要组成部分。 供选答案: (1): A. 输入和输出 B. 键盘操作 C. 管理和控制 D. 汇编和执行 (2): A. 软件和硬件 B. 主机和外设 C. 高级语言和机器语言 D. 用户和计算机 (3): A. 进程控制块 B. 作业控制块 C. 文件控制块 D. 设备控制块 (4): A. 运行态转换为就绪态 B. 就绪态转换为运行态 C. 运行态转换为等待态 D. 等待态转换为运行态 (5): A. 软盘 B. 硬盘 C. CDROM D. 寄存器 答案:CDADB 3.在计算机系统中,允许多个程序同时进入内存并运行,这种方法称为 D。 A. Spodling技术 B. 虚拟存储技术 C. 缓冲技术 D. 多道程序设计技术 4.分时系统追求的目标是 C。 A. 高吞吐率 B. 充分利用内存 C. 快速响应 D. 减少系统开销 5.引入多道程序的目的是 D。

操作系统-进程管理实验报告

实验一进程管理 1.实验目的: (1)加深对进程概念的理解,明确进程和程序的区别; (2)进一步认识并发执行的实质; (3)分析进程争用资源的现象,学习解决进程互斥的方法; (4)了解Linux系统中进程通信的基本原理。 2.实验预备内容 (1)阅读Linux的sched.h源码文件,加深对进程管理概念的理解; (2)阅读Linux的fork()源码文件,分析进程的创建过程。 3.实验内容 (1)进程的创建: 编写一段程序,使用系统调用fork() 创建两个子进程。当此程序运行时,在系统中有一个父进程和两个子进程活动。让每一个进程在屏幕上显示一个字符:父进程显示字符“a”,子进程分别显示字符“b”和“c”。试观察记录屏幕上的显示结果,并分析原因。 源代码如下: #include #include #include #include #include int main(int argc,char* argv[]) { pid_t pid1,pid2; pid1 = fork(); if(pid1<0){ fprintf(stderr,"childprocess1 failed"); exit(-1); } else if(pid1 == 0){ printf("b\n"); } 1/11

else{ pid2 = fork(); if(pid2<0){ fprintf(stderr,"childprocess1 failed"); exit(-1); } else if(pid2 == 0){ printf("c\n"); } else{ printf("a\n"); sleep(2); exit(0); } } return 0; } 结果如下: 分析原因: pid=fork(); 操作系统创建一个新的进程(子进程),并且在进程表中相应为它建立一个新的表项。新进程和原有进程的可执行程序是同一个程序;上下文和数据,绝大部分就是原进程(父进程)的拷贝,但它们是两个相互独立的进程!因此,这三个进程哪个先执行,哪个后执行,完全取决于操作系统的调度,没有固定的顺序。 (2)进程的控制 修改已经编写的程序,将每个进程输出一个字符改为每个进程输出一句话,再观察程序执行时屏幕上出现的现象,并分析原因。 将父进程的输出改为father process completed 2/11

操作系统复习-进程管理

2.1 进程与线程 进程是指令的集合(错,程序是指令的集合,进程是程序的一次执行过程) 优先级是进程调度的重要依据,一旦确定就不能改变(错) 在单CPU的系统中,任意时刻都有一个进程处于运行状态(错,可以空转) 进程申请CPU得不到满足时,其状态变为阻塞(错!等待CPU的进程处于就绪状态) 进程获得CPU运行是通过调度得到的(对) 线程是一种特殊的进程(对) 进程是程序在一个数据集合上运行的过程,是系统进行资源分配和调度的独立单位(对)进程是PCB结构、程序和数据的集合(对) 撤销父进程时,应同时撤销子进程(错!进程撤销可采用两种策略,一种是只撤销指定进程,另一种是撤销指定进程和其子孙进程) 线程的切换,可能会引起进程的切换(对) 引入线程后,处理机只在线程中切换(错!!) 线程是比进程更小的能独立运行的基本单位(错,这句话的成立需要一定的前提条件) 线程的引入增加了程序执行的时空开销(错,应为减少) 一个进程一定包含多个线程(错) 一个进程创建的若干线程共享该进程的程序段和数据段,但是它们有各自的运行栈区(对)中断是进程切换的必要条件,而不是充分条件。(对) 进程的基本特点:动态性,并发性,独立性,异步性,结构性。 在多道程序设计环境下,操作系统分配资源以进程为基本单位 在引入线程的操作系统中,资源分配的基本单位是进程,CPU分配的基本单位是线程。 在引入线程的操作系统中,进程是资源分配的基本单位,线程是调度的基本单位 从运行状态到就绪状态是由于时间片用完或出现了比现在进程优先级更高的进程(调度程序决定) 从就绪状态到运行状态是调度程序决定的 从阻塞状态到就绪状态是协作程序决定的 从运行状态到阻塞状态是进程自身决定的(只有这个是主动的) 对进程的管理和控制使用原语。(原语包括创建原语,撤销原语,阻塞原语,唤醒原语等)一个进程被唤醒意味着进程变为就绪状态(该进程可能重新占用CPU)。(唤醒原语的功能是将被被唤醒进程从阻塞队列中移到就绪队列中) 降低进程优先级的合理时机是进程的时间片用完。 进程调度主要负责选一个进程占有CPU。 建立多线程的主要目的是提高CPU的利用率。 进程调度的方式有抢占式,非抢占式两种。 (?)以下 C 不会引起进程创建。A.用户登录 B.作业调度 C.设备分配 D.应用请求 进程与程序的联系与区别: 联系:进程是程序的一次执行过程,没有程序就没有进程 区别: 1.进程是程序的执行,所以进程属于动态概念,程序是一组指令的有序集合,是静态的概念 2.进程的存在是暂时的,程序的存在是永久的(相对而言)

操作系统实验二

操作系统实验实验二进程管理 学号 1215108019 姓名克帆 学院信息学院 班级 12电子2

实验目的 1、理解进程的概念,明确进程和程序的区别。 2、理解并发执行的实质。 3、掌握进程的创建、睡眠、撤销等进程控制方法。 实验容与要求 基本要求:用C语言编写程序,模拟实现创建新的进程;查看运行进程;换出某个进程;杀死进程等功能。 实验报告容 1、进程、进程控制块等的基本原理。 进程是现代操作系统中的一个最基本也是最重要的概念,掌握这个概念对于理解操作系统实质,分析、设计操作系统都有其非常重要的意义。为了强调进程的并发性和动态性,可以给进程作如下定义:进程是可并发执行的程序在一个数据集合上的运行过程,是系统进行资源分配和调度的一个独立单位。 进程又就绪、执行、阻塞三种基本状态,三者的变迁图如下: 由于多个程序并发执行,各程序需要轮流使用CPU,当某程序不在CPU上运行时,必须保留其被中断的程序的现场,包括:断点地址、程序状态字、通用寄存器的容、堆栈容、程序当前状态、程序的大小、运行时间等信息,以便程序再次获得CPU时,能够正确执行。为了保存这些容,需要建立—个专用数据结构,我们称这个数据结构为进程控制块PCB (Process Control Block)。 进程控制块是进程存在的惟一标志,它跟踪程序执行的情况,表明了进程在当前时刻的状态以及与其它进程和资源的关系。当创建一个进程时,实际上就是为其建立一个进程控制块。 在通常的操作系统中,PCB应包含如下一些信息: ①进程标识信息。为了标识系统中的各个进程,每个进程必须有惟一的标识名或标 识数。 ②位置信息。指出进程的程序和数据部分在存或外存中的物理位置。 ③状态信息。指出进程当前所处的状态,作为进程调度、分配CPU的依据。 ④进程的优先级。一般根据进程的轻重缓急其它信息。 这里给出的只是一般操作系统中PCB所应具有的容,不同操作系统的PCB结构是不同的,我们将在2.8节介绍Linux系统的PCB结构。

操作系统实验二(进程管理)

操作系统进程管理实验 实验题目: (1)进程的创建编写一段程序,使用系统调用fork( )创建两个子进程。当此程序运行时,在系统中有一个父进程和两个子进程活动。让每一个进程在屏幕上显示一个字符:父进程显示字符“a”;子进程分别显示字符“b”和字符“c”。试观察记录屏幕上的显示结果,并分析原因。 (2)进程的控制修改已编写的程序,将每个进程输出一个字符改为每个进程输出一句话,在观察程序执行时屏幕上出现的现象,并分析原因。 (3)编制一段程序,使其实现进程的软中断通信。要求:使用系统调用fork( )创建两个子进程,再用系统调用signal( )让父进程捕捉键盘上来的中断信号(即按Del键);当捕捉到中断信号后,父进程调用系统调用kill( )向两个子进程发出信号,子进程捕捉到信号后分别输出下列信息后终止:Child process 1 is killed by parent! Child process 2 is killed by parent! 父进程等待两个子进程终止后,输出如下的信息后终止:Parent process is killed! 在上面的程序中增加语句signal(SIGINT, SIG_IGN)和signal(SIGQUIT, SIG_IGN),观察执行结果,并分析原因。 (4)进程的管道通信编制一段程序,实现进程的管道通信。使用系统调用pipe( )建立一条管道线;两个进程P1和P2分别向管道各写一句话:Child 1 is sending a message! Child 2 is sending a message! 而父进程则从管道中读出来自于两个子进程的信息,显示在屏幕上。要求父进程先接收子进程P1发来的消息,然后再接收子进程P2发来的消息。 实验源程序及报告: (1)、进程的创建 #include int main(int argc, char *argv[]) { int pid1,pid2; /*fork first child process*/ if ( ( pid1=fork() ) < 0 ) { printf( "ProcessCreate Failed!"); exit(-1); }

操作系统习题集------进程管理

习题集 - 2 - 进程管理 1. 在优先级调度中,__________类进程可能被“饿死”,即长时间得不到调度。 A.短进程 B.长进程 C.低优先级进程 D.大内存进程 解: C。优先级调度算法(PRI)的基本思想是:内核为每个进程赋予一个优先级,进程按照优先级的大小顺序在就绪队列中排队,内核将CPU分配给就绪队列头部的第一个进程——优先级最大的进程。因此,进程的优先级越低,在就绪队列中的排队位置就越靠近队列尾,获得运行之前的等待时间就越长。低优先级的进程必须等待所有高优先级进程运行结束后才会被调度运行。如果不断有高优先级的进程加入就绪队列,那么低优先级进程就会一直等待下去。这就是所谓的“饿死”现象。 2. 在下面的系统调用中,__________不会导致进程阻塞。 A.读/写文件 B.获得进程PID C.申请内存 D.发送消息 解: B。当正在执行的进程需要使用某种资源或等待某个事件时,如果资源已被其他进程占用或事件尚未出现,该进程不能获得所需的资源而无法继续运行,于是,进程将被阻塞。进程在阻塞状态中等待资源被释放,或等待事件的发生。所以,进程在执行系统调用时,如果需要使用某种资源,就可能导致进程阻塞。“读/写文件”需要使用设备和文件缓冲区;“申请内存”需要分配内存资源;“发送消息”需要使用消息缓冲区。 3. 下面关于临界区的叙述中,正确的是__________ A.临界区可以允许规定数目的多个进程同时执行 B.临界区只包含一个程序段 C.临界区是必须互斥地执行的程序段 D.临界区的执行不能被中断 解: C。临界段(临界区)的概念包括两个部分:①临界资源:必须互斥访问的资源。例如,需要独占使用的硬件资源,多个进程共享的变量、结构、队列、栈、文件等软件资源。②临界区:访问临界资源的、必须互斥地执行的程序段。即,当一个进程在某个临界段中执行时,其他进程不能进入相同临界资源的任何临界段。

进程管理实验报告

进程管理实验报告 1 .实验目的 通过进程的创建、撤消和运行加深对进程概念和进程并发执行的理解,明确进程与程序之间的区别。 【答:进程概念和程序概念最大的不同之处在于: (1)进程是动态的,而程序是静态的。 (2)进程有一定的生命期,而程序是指令的集合,本身无“运动”的含义。没有建立进程的程序不能作为1个独立单位得到操作系统的认可。 (3)1个程序可以对应多个进程,但1个进程只能对应1个程序。进程和程序的关系犹如演出和剧本的关系。 (4)进程和程序的组成不同。从静态角度看,进程由程序、数据和进程控制块(PCB)三部分组成。而程序是一组有序的指令集合。】2 .实验内容 (1) 了解系统调用fork()、execvp()和wait()的功能和实现过程。 (2) 编写一段程序,使用系统调用fork()来创建两个子进程,并由父进程重复显示字符串“parent:”和自己的标识数,而子进程则重复显示字符串“child:”和自己的标识数。 (3) 编写一段程序,使用系统调用fork()来创建一个子进程。子进程通过系统调用execvp()更换自己的执行代码,新的代码显示“new program.”。而父进程则调用wait()等待子进程结束,并在子进程结束后显示子进程的标识符,然后正常结束。

(3)运行并查看结果 child’s pid=2894 child’s pid=2994 parent’s pid=2849 child’s pid=2897 child’s pid=2897 parent’s pid=2849 child’s pid=2894 child’s pid=2994 parent’s pid=2849 (4)gedit创建进程2.c 使用gcc 2.c -o 2编译并./2运行程序2.c#include #include #include #include #include(6)运行并查看结果 new program ! -rw-r–r--. 1 root root 2456 Apr 14 2019 /etc/passwd child peocess PID:29035 4 .思考 (1) 系统调用fork()是如何创建进程的?

操作系统期末试卷(含答案)1

一、选择题 1、在现代操作系统中引入了(),从而使并发和共享成为可能。 A.单道程序 B. 磁盘 C. 对象 D.多道程序 2、( )操作系统允许在一台主机上同时连接多台终端,多个用户可以通过各自的终端同时交互地使用计算机。 A.网络 B.分布式 C.分时 D.实时 3、从用户的观点看,操作系统是()。 A. 用户与计算机硬件之间的接口 B.控制和管理计算机资源的软件 C. 合理组织计算机工作流程的软件 D.计算机资源的的管理者 4、当CPU处于管态时,它可以执行的指令是()。 A. 计算机系统中的全部指令 B. 仅限于非特权指令 C. 仅限于访管指令 D. 仅限于特权指令 5、用户在程序中试图读取某文件的第100个逻辑块时,使用操作系统提供的()接口。 A. 系统调用 B.图形用户接口 C.原语 D.键盘命令 6、下列几种关于进程的叙述,()最不符合操作系统对进程的理解? A.进程是在多程序并行环境中的完整的程序。 B.进程可以由程序、数据和进程控制块描述。 C.线程是一种特殊的进程。 D.进程是程序在一个数据集合上运行的过程,它是系统进行资源分配和调度的一个独立单位。 7、当一个进程处于()状态时,称其为等待(或阻塞)状态。 A. 它正等待中央处理机 B. 它正等待合作进程的一个消息 C. 它正等待分给它一个时间片 D. 它正等待进入内存 8、一个进程释放一种资源将有可能导致一个或几个进程()。 A.由就绪变运行 B.由运行变就绪 C.由阻塞变运行 D.由阻塞变就绪 9、下面关于线程的叙述中,正确的是()。 A.不论是系统支持线程还是用户级线程,其切换都需要内核的支持。 B.线程是资源的分配单位,进程是调度和分配的单位。 C.不管系统中是否有线程,进程都是拥有资源的独立单位。 D.在引入线程的系统中,进程仍是资源分配和调度分派的基本单位。 10、设有3个作业,它们同时到达,运行时间分别为T1、T2和T3,且T1≤T2≤T3,若它们在单处理机系统中按单道运行,采用短作业优先调度算法,则平均周转时间为()。 A. T1+T2+T3 B. (T1+T2+T3)/3 C. T1+T2/3+2*T3/3 D.T3/3+2*T2/3+T1 11、在下面的I/O控制方式中,需要CPU干预最少的方式是()。 A.程序I/O方式B.中断驱动I/O控制方式C.直接存储器访问DMA控制方式D.I/O通道控制方式 12、有m个进程共享同一临界资源,若使用信号量机制实现对一临界资源的互斥访问,则

实验一、进程调度实验报告

实验一、进程调度实验报告

广东技术师范学院实验报告 学院:计算机科学学 院 专业: 计算机科学与 技术(师范) 班级:成绩: 姓名:学号:组别:组员: 实验地点:实验日期:指导教师签名: 实验名称:实验一、进程调度实验 一、实验目的 用高级语言编写和调试一个进程调度程序,以加深对进程的概念及进程调度算法的理解 二、实验类别 综合性实验。综合高级语言编程、进程调度模型、进程调度算法及数据结构等多方面的知识 三、实验内容和步骤 1.编写并调试一个模拟的进程调度程序,采用“最高优先数优先”调度算法对五个进程进行调度。 “最高优先数优先”调度算法的基本思想是把CPU分配给就绪队列中优先数最高的进程。 静态优先数是在创建进程时确定的,并在整个进程运行期间不再改变。 动态优先数是指进程的优先数在创建进程时可以给定一个初始值,并且可以按一定原则修改优先数。例如:在进程获得一次CPU后就将其优先数减少1。或者,进程等待的时间超过某一时限时增加其优先数的值,等等 该题根据老师给的代码用Visual C++运行,结果以及分析如下: 预习情况操作情况考勤情况数据处理情况

结果分析:根据上述输入的三个进程的信息可以得到:优先级最高的是进程cc 最先调度进程cc的状态为运行态,需要执行的时间为10当前就绪队列状态为:进程aa先级比较高,处于就绪队列前面,而进程bb先级是三者中最低的,所以处于就绪队列的最后。而此时这两个进程的状态都为就绪态。

结果分析:当进程cc了一个时间片之后而它已占用CPU时间已达到所需要的运行时间,则将它的优先级减1之后,再将三个进程按优先级的大小排列,从中选择优先级大的进程进入运行状态,则该次进入运行态的是进程aa 按照这种方式一直运行下去: 直到:

操作系统实验3答案

实验三操作系统进程管理 一、实验目的 1) 掌握系统进程的概念,加深对Linux / UNIX进程管理的理解。 2) 学会使用ps命令和选项。 3) 列出当前shell中的进程。 4) 列出运行在系统中的所有进程。 5) 根据命令名搜索特定的进程。 6) 使用kill命令终止进程。 7) 根据用户名查找和终止进程。 二、实验内容和相应的答案截图,三、实验结果分析 步骤1:创建一个普通用户(参见实验二),以普通用户身份登录进入GNOME。 步骤2:打开一个“终端”窗口(参见实验二)。 步骤3:回顾系统进程概念,完成以下填空: 1) Linux系统中,几乎每一个启动的进程,都会由内核分配一个唯一的__PID__进程标识符,用于跟踪从进程启动到进程结束。 2) 当启动新进程的时候,内核也给它们分配系统资源,如__内存_和__CPU_。 3) 永远不向父进程返回输出的进程叫做__僵进程__。 4) 由父进程派生出来的进程叫做____子___进程。 5) ___父_进程是一个派生另一个进程的进程。 6) 运行用于提供服务的Linux系统进程是_______________。 7) 如果父进程在子进程之前结束,它创建了一个______________进程。 步骤4:回顾ps命令和信息。基本的ps命令显示当前shell中的进程信息,用户只能够查看当前终端窗口中初始化的进程。输入ps命令,将结果填入表3-3中。 表3-3 实验记录 下面,在当前终端窗口中,练习使用给出的每个选项的ps命令。

输入ps -f 命令,显示运行在系统中的某个进程的完全信息,填入表3-4中。 表3-4 实验记录 步骤5:列出系统中运行的所有进程。 输入ps -ef 命令,显示运行在系统中的各个进程的完全信息。执行该命令,并与ps –f 命令的输出结果对照,一致吗?有何不同? 答:不一致,后者显示了所有进程的完全可用信息,多了很多。 分析当前终端窗口中的输出结果,记录下来用于写实验报告。 a. 显示了多少个进程?答:59 b. 进程ID的PID是什么? c. 启动进程的命令(CMD) 是什么?答:sched d. 请观察,什么命令的PID号是1?答:init[5] e. 执行ps –ef >aaa命令,将ps命令的输出送到文本文件aaa。再次运行cat aaa | wc命令,计算进程的数目。其中,cat是显示文本文件命令。“|”是管道命令,就是将前一个命令的输出作为后一个命令的输入。wc 命令用来计算文本的行数,第一个数字显示的是行的数目,可以用来计算进程的数目。计算出进程数目并做记录。 执行man ps命令,可以打开Linux用户命令手册。了解ps命令的用法。输入wq命令可退出用户手册的阅读。man命令可以执行吗?结果如何? 答:Man ps时出现

相关主题