第一次作业:基于Linux操作系统的进程模型分析
Posted 张铭裕
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了第一次作业:基于Linux操作系统的进程模型分析相关的知识,希望对你有一定的参考价值。
1.什么是进程
·进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础。它不只是程序的代码,还包括当前的活动,通过程序计数器的值和处理寄存器的内容来示。
·进程的概念主要有两点:第一,进程是一个实体。每一个进程都有它自己的地址空间,一般情况下,包扩文本区域(text region)、数据区域(data region)和堆栈(stack region)。文本区域存储处理器执行的代码;数据区域存储变量和进程执行期间使用的动态分配的内存;堆栈区域存储着活动过程调用的指令和本地变量。第二,进程是一个“执行中的程序”。程序是一个没有生命的实体,只有处理器赋予程序生命时(操作系统执行之),它才能成为一个活动的实体,我们称其为进程。
进程的特征:
2.进程的创建与终止
以下几类操作可以创建和终止线程。
A 创建进程
(1) 系统初始化会创建新的进程
(2) 当一个正在运行的进程中,若执行了创建进程的系统调用,那么也会创建新的进程
(3) 用户发出请求,创建一个进程
(4) 初始化一个批处理作业时,也会创建新的线程
从本质上来说在技术上只有一种创建新进程的方法,即在一个已经存在的进程中,通过系统调用来创建一个新的进程。
Linux中可以使用fork函数来创建新进程。如下列代码所示:
#include<stdio.h> #include<sys/types.h> #include<unistd.h> int main(){ pid_t ret = fork(); printf("hello proc:%d,ret = %d\\n",getpid(),ret); return 0; }
B 进程终止
(1) 正常退出
(2)错误退出
(3) 致命错误
(4) 被其他进程杀死
3.进程的状态的转换
4.进程的调度算法
时间片轮转调度算法:
每个进程被分配一个时间段,称作它的时间片,即该进程允许运行的时间。如果在时间片结束时进程还在运行,则CPU将被剥夺并分配给另一个进程。如果进程在时间片结束前阻塞或结束,则CPU当即进行切换。调度程序所要做的就是维护一张就绪进程列表,当进程用完它的时间片后,它被移到队列的末尾。
·该算法采取了非常公平的方式,即让就绪队列上的每个进程每次仅运行一个时间片。如果就绪队列上有N个进程,则每个进程每次大约都可获得1/N的处理机时间。
·时间片的大小对于系统性能有很大的影响。若选择很小的时间片,将有利于短作业,但意味着会频繁地执行进程调度和进程上下文的切换,这无疑会增加系统的开销。反之,若时间片选择得太长,且为使每个进程都能在一个时间片内完成,时间轮转调度算法便退化为先来先服务算法,无法满足短作业和交互式用户的需求。
算法运行流程图:
程序控制块的定义:
typedef struct node { char name[20]; /*进程的名字*/ int round; /*分配CPU的时间片*/ int cputime; /*CPU执行时间*/ int needtime; /*进程执行所需要的时间*/ char state; /*进程的状态,W--就绪态,R--执行态,F--完成态*/ int count; /*记录执行的次数*/ struct node *next; /*链表指针*/ }PCB;
void RoundRun() /*时间片轮转调度算法*/ { int flag = 1; GetFirst(); while(run != NULL) { while(flag) { run->count++; run->cputime++; run->needtime--; if(run->needtime == 0) { run ->state = \'F\'; InsertFinish(run); flag = 0; } else if(run->count == run->round) { run->state = \'W\'; run->count = 0; InsertTime(run); flag = 0; } } flag = 1; GetFirst(); } }
对于源码的分析:
首先设置一个标志位为1,从就绪队列获取第一个节点,当获取的节点不为空和标志位为1时,这个进程所执行的次数加一,CPU执行的时间也进行自加,进程所需的时间自减,然后进行判断,当进程所需的时间为0也就是进程执行完毕时,把进程的状态设置为完成态,然后将进程插入到完成队列尾部,否则当时间片用完时,进程的状态设置为就绪态,计数器清零,将进程插入到就绪队列尾部,将标志位置为0,重新开始从就绪队列获取第一个节点。直到所有进程执行结束。
5.自己对操作系统模型的看法
操作系统是用户和计算机的接口,同时也是计算机硬件和其他软件的接口。是直接运行在机器上的最基本的系统软件,其他任何软件都必须在操作系统的支持下才能运行。所以操作系统对于计算机和学习计算机的我们是非常重要的。其中,进程又是操作系统最基本和核心的东西,我们需要了解与掌握进程,这对于我们以后更深入的学习操作体统也有很重要的意义。
以上是关于第一次作业:基于Linux操作系统的进程模型分析的主要内容,如果未能解决你的问题,请参考以下文章