北方工业大学《计算机操作系统》实验报告——进程管理

北方工业大学《计算机操作系统》实验报告——进程管理
北方工业大学《计算机操作系统》实验报告——进程管理

实验报告书

学生姓名

学号

班级

2012 —2013 学年第一学期

2014-1-28 第2页/共9页

2.进程的控制

2014-1-28 第3页/共9页

六、实验结果与分析

1.进程的创建运行结果:acb,abc,其实,从进程执行并发来看,输出

因为fork()创建进程所需的时间虽然可能多于输出一个字符的时间,但各个进程的时间片的获得却不2014-1-28 第4页/共9页

2014-1-28 第5页/共9页

2014-1-28 第6页/共9页

2014-1-28 第7页/共9页

2014-1-28 第8页/共9页

2014-1-28 第9页/共9页

北方工业大学计算机操作系统作业总复习答案

1.1什么是操作系统的基本功能? 答:操作系统的职能是管理和控制计算机系统中的所有硬、软件资源,合理地组织计算机工作流程,并为用户提供一个良好的工作环境和友好的接口。操作系统的基本功能包括:处理机管理、存储管理、设备管理、信息管理(文件系统管理 )和用户接口等。 1.2什么是批处理、分时和实时系统?各有什么特征? 答:批处理系统(batch processing system):操作员把用户提交的作业分类,把一批作业编成一个作业执行序列,由专门编制的监督程序 (monitor) 自动依次处理。其主要特征是:用户脱机使用计算机、成批处理、多道程序运行。 分时系统 (time sharing operation system) :把处理机的运行时间分成很短的时间片,按时间片轮转的方式,把处理机分配给各进程使用。其主要特征是:交互性、多用户同时性、独立性。 实时系统(real time system):在被控对象允许时间范围内作出响应。其主要特征是:对实时信息分析处理速度要比进入系统快、要求安全可靠、资源利用率低。 1.3多道程序(multiprogramming)和多重处理(multiprocessing)有何区别?答:多道程序(multiprogramming) 是作业之间自动调度执行、共享系统资源,并不是真正地同时执行多个作业;而多重处理(multiprocessing)系统配置多个 CPU,能真正同时执行 多道程序。要有效使用多重处理,必须采用多道程序设计技术,而多道程序设计原则上不一定要求多重处理系统的支持。 2.2作业由哪几部分组成?各有什么功能? 答:作业由三部分组成:程序、数据和作业说明书。程序和数据完成用户所要求的业务处理工作,系统通过作业说明书控制文件形式的程序和数据,使之执行和操作。 2.4 试述SPOOLING 系统的工作原理。 答:在 SPOOLING 系统中,多台外围设备通过通道或 DMA 器件和主机与外存连接起来,作业的输入输出过程由主机中的操作系统控制。操作系统中的输人程序包含两个独立的 过程,一个过程负责从外部设备把信息读入缓冲区,另一个过程是写过程,负责把缓冲区中 的信息送人到外存输入井中。 在系统输人模块收到作业输人请求后,输人管理模块中的读过程负责将信息从输人装置读人缓冲区。当缓冲区满时,由写过程将信息从缓冲区写到外存输人井中。读过程和写过程反复循环,直到一个作业输入完毕。当读过程读到一个硬件结束标志后,系统再次驱动写过 程把最后一批信息写入外存并调用中断处理程序结束该次输入。然后,系统为该作业建立作 业控制块JCB,从而使输入井中的作业进人作业等待队列,等待作业调度程序选中后进人内 存。 2.5 操作系统为用户提供哪些接口?它们的区别是什么?答:操作系统为用户提供两个接口,一个是系统为用户提供的各种命令接口,用户利用这些操作命令来组织和控制作业的执行或管理计算机系统。 另一个接口是系统调用,编程人 员使用系统调用来请求操作系统提供服务,例如申请和释放外设等类资源、控制程序的执行速度等。 2.7 什么是系统调用?系统调用与一般用户程序有什么区别?与库函数和实用程序又有什么区别? 答:系统调用是操作系统提供给编程人员的唯一接口。编程人员利用系统调用,在源程序以及动态请求和释放系统资源,调用系统中已有的系统功能来完成那些与机器硬件部分相关的工作以及控制程序的执行速度等。因此,系统调用像一个黑箱子那样,对用户屏蔽了操作系统的具体动作而只提供有关的功能。它

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); } 编译运行,结果如图所示。

进程管理实验报告

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

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

进程管理实验报告

进程的控制 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()); }

操作系统实验

操作系统实验报告 学生姓名依力夏提江·艾买尔 学号 12101020129 班级计12-1

2015-1-7 第2页/共16页

四、关键数据结构与函数的说明 具体各功能模块设计 进程创建(用来存储进程信息):进程号,进程名,进程优先级,需要运行时 间。 typedefstructpcb { char name[10]; //进程名 char state; //状态 int id; //id号 int super; //优先级 intntime; //需运行的时间 intrtime; //已运行的时间 structpcb *next; }*pcb1; 打印就绪进程队列:void print(); 打印阻塞进程队列:void print1(); 判断进程是否结束:int check(); 对进程进行优先排列:void sort(pcb1 &r,pcb1 p); 判断就绪队列是否为空:void block(); 唤醒进程函数:void wake(); 运行进程:void runing(); 进程: void input(); 2015-1-7 第3页/共16页

七、调试时遇到的问题及解决方法 结果分析 首先创建进程,并按优先级高低排列到队列中,优先级高的排到队列的队头;通过查看就绪函数查看就绪进程的信息,这时,所有的进程都是属于就绪状态;再通过唤醒函数进行唤醒进程,这时所有进程都属于就绪状态,没有需要唤醒的进程;通过阻塞函数阻塞当前进程,这是阻塞队列中有1个被阻塞的进程,就绪状态就有3个就绪函数;再通过运行进程,这时有2个进程被阻塞,2个进程位于就绪队列;再通过唤醒进程将被阻塞的进程唤醒。 问题与总结 设计中所遇到的问题及其解决 想借鉴之前我们做过的实验,但是因为自己的电脑没有安装LINUX系统,只 有安装了虚拟机,而虚拟机运行的程序又保存不到自己的系统中,所以只好写了一个在Windows 中能够运行的模拟进程管理的C++程序。 在设计之初,没有想好要用什么来存储进程信息,之后在网上看见一个用C++写的进程管理的程序,它里面用的是结构体来储存,所以就借鉴了他的写法。至于在设计进程运行的等待状态的时候没有想到要用什么来反映进程的等待状态,在翻阅了孙钟秀主编的《操作系统教程》后,发现可以用队列来表示。

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

实验一进程管理 一、目的 进程调度是处理机管理的核心内容。本实验要求编写和调试一个简单的进程调度程序。通过本实验加深理解有关进程控制块、进程队列的概念,并体会和了解进程调度算法的具体实施办法。 二、实验内容及要求 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;

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

实验一进程管理 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

完整word版北方工业大学计算机操作系统作业总复习答案

1.1 什么是操作系统的基本功能? 答:操作系统的职能是管理和控制计算机系统中的所有硬、软件资源,合理地组织计算机工作流程,并为用户提供一个良好的工作环境和友好的接口。操作系统的基本功能包括:处理机管理、存储管理、设备管理、信息管理(文件系统管理 )和用户接口等。 1.2什么是批处理、分时和实时系统?各有什么特征? 答:批处理系统(batch processing system):操作员把用户提交的作业分类,把一批作业编成一个作业执行序列,由专门编制的监督程序 (monitor) 自动依次处理。其主要特征是:用户脱机使用计算机、成批处理、多道程序运行。 分时系统 (time sharing operation system) :把处理机的运行时间分成很短的时间片,按时间片轮转的方式,把处理机分配给各进程使用。其主要特征是:交互性、多用户同时性、独立性。 实时系统(real time system):在被控对象允许时间范围内作出响应。其主要特征是:对实时信息分析处理速度要比进入系统快、要求安全可靠、资源利用率低。 1.3多道程序(multiprogramming)和多重处理(multiprocessing)有何区别?答:多道程序(multiprogramming) 是作业之间自动调度执行、共享系统资源,并不是真正地同时执行多个作业;而多重处理(multiprocessing)系统配置多个 CPU,能真正同时执行 多道程序。要有效使用多重处理,必须采用多道程序设计技术,而多道程序设计原则上不一定要求多重处理系统的支持。 2.2作业由哪几部分组成?各有什么功能?答:作业由三部分组成:程序、数据和作业说明书。程序和数据完成用户所要求的业务处理工作,系统通过作业说明书控制文件形式的程序和数据,使之执行和操作。 2.4 试述SPOOLING 系统的工作原理。 答:在 SPOOLING 系统中,多台外围设备通过通道或 DMA 器件和主机与外存连接起来,作业的输入输出过程由主机中的操作系统控制。操作系统中的输人程序包含两个独立的 过程, 一个过程负责从外部设备把信息读入缓冲区, 另一个过程是写过程, 负责把缓冲区中 的信息送人到外存输入井中。 在系统输人模块收到作业输人请求后, 输人管理模块中的读过程负责将信息从输人装置读人缓冲区。 当缓冲区满时, 由写过程将信息从缓冲区写到外存输人井中。读过程和写过程反复循环, 直到一个作业输入完毕。当读过程读到一个硬件结束标志后, 系统再次驱动写过程把最后一批信息写入外存并调用中断处理程序结束该次输入。然后, 系统为该作业建立作 业控制块JCB,从而使输入井中的作业进人作业等待队列,等待作业调度程序选中后进人内 存。 2.5操作系统为用户提供哪些接口?它们的区别是什么?答:操作系统为用户提供两个接口, 一个是系统为用户提供的各种命令接口, 用户利用这些操作命令来组织和控制作业的执行或管理计算机系统。另一个接口是系统调用, 编程人 员使用系统调用来请求操作系统提供服务, 例如申请和释放外设等类资源、控制程序的执行速度等。

进程管理_实验报告一流程图

实验一 课程名称:操作系统 课程类型:必修 实验项目名称:进程管理 实验题目:短作业优先算法、动态可剥夺优先数算法和基本循环轮转算法。 一、实验目的 进程是操作系统最重要的概念之一,进程调度又是操作系统核心的主要内容。本实验要求学生独立的用高级语言编写和调试一个简单的模拟进程调度的程序。通过本实验,加深学生理解有关进程控制块、进程队列的概念,并体会和了解短作业优先、优先数和时间片轮转调度算法的具体实施办法。 二、实验要求及实验环境 (1)设计一个有n 个进程的进程调度程序(具体个数可由键盘输入)。每一个进程用一个进程控制块PCB 来代表。PCB 中应包含下列信息:进程名、进程优先数、进程的状态、进程需要运行的时间及利用CPU运行的时间等。进程的个数、各进程的优先数、轮转时间片数以及进程运行需要地时间可由

键盘输入。 (2)调度程序应包含2~3 种不同的调度算法,运行时可任选一种。 (3)每个进程处于运行Run、就绪ready 和完成Finish 三种状态之一,假定初始状态都为就绪状态ready。(也可没有Finish状态,可以在设计程序时实现处以Finish状态的进程删掉)。 (4)系统能显示各进程状态和参数的变化情况。(5)动态可剥夺优先数算法是:在创建进程时给定一个初始的优先数,当进程获得一次cpu后其优先数就减少1,如果就绪队列中有优先级更高的将剥夺运行中的进程。 三、设计思想 (本程序中的用到的所有数据类型的定义,主程序的流程图及各程序模块之间的调用关系) 1.程序流程图 (见下图) 2.逻辑设计 使用链表表示就绪队列,每个元素包括进程名、进程优先数、进程的状态、进程需要运行的时间及利用CPU运行的时间等信息。 该结构需支持以下操作:取头节点,在表尾插入节

进程管理实验报告

进程管理实验报告 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.编写并调试一个模拟的进程调度程序,采用“最高优先数优先”调度算法对五个进程进行调度。 “最高优先数优先”调度算法的基本思想是把CPU分配给就绪队列中优先数最高的进程。 静态优先数是在创建进程时确定的,并在整个进程运行期间不再改变。 动态优先数是指进程的优先数在创建进程时可以给定一个初始值,并且可以按一定原则修改优先数。例如:在进程获得一次CPU后就将其优先数减少1。或者,进程等待的时间超过某一时限时增加其优先数的值,等等 该题根据老师给的代码用Visual C++运行,结果以及分析如下: 预习情况操作情况考勤情况数据处理情况

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

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

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

计算机与信息工程学院实验报告 一、实验内容 1.练习在shell环境下编译执行程序 (注意:①在vi编辑器中编写名为sample.c的c语言源程序 ②用linux自带的编译器gcc编译程序,例如:gcc –o test sample.c ③编译后生成名为test.out的可执行文件; ④最后执行分析结果;命令为:./test) 注意:linux自带的编译程序gcc的语法是:gcc –o 目标程序名源程序名,例如:gcc –o sample1 sample1.c,然后利用命令:./sample 来执行。如果仅用“gcc 源程序名”,将会把任何名字的源程序都编译成名为a.out的目标程序,这样新编译的程序会覆盖原来的程序,所以最好给每个源程序都起个新目标程序名。 2.进程的创建 仿照例子自己编写一段程序,使用系统调用fork()创建两个子进程。当此程序运行时,在系统中有一个父进程和两个子进程活动。让每一个进程在屏幕上显示一个字符:父进程显示“a”,子进程分别显示字符“b”和“c”。观察记录屏幕上的显示结果,并分析原因。 3.分析程序 实验内容要在给出的例子程序基础上,根据要求进行修改,对执行结果进行分析。二、

实验步骤 1. 利用fork()创建一个小程序 (1)编写程序 #include main () { int i=5; pid_t pid; pid=fork(); for(;i>0;i--) { if (pid < 0) printf("error in fork!"); else if (pid == 0) printf("i am the child process, my process id is %d and i=%d\n",getpid(),i); else printf("i am the parent process, my process id is %d and i=%d\n",getpid(),i); } for(i=5;i>0;i--) { if (pid < 0) printf("error in fork!"); else if (pid == 0) printf("the child process, my process id is %d and i=%d\n",getpid(),i); else printf("the parent process, my process id is %d and

北方工业大学数据库课程期末复习题

一、选择题 1.SQL的数据操纵语言包括_____ _______。 A. ROLLBACK ,COMMIT B. CREATE,DROP,ALTER C. SELECT,JOIN,PROJECT,UNIN D. SELECT,INSERT,DELETE,UPDATE 2.数据库DB,数据库系统DBS,数据库管理系统DBMS这三者之间的关系是___________。 A. DBS包括DB和DBMS B. DBMS包括DB和DBS C. DB包括DBS和DBMS C. DBS就是DB也就是DBMS 3、以下关于二维表的论述,不正确。 A.表中的每一个元组都是不可再分的 B.表中行的次序不可以任意交换,否则会改变关系的性质 C.表中各列取自同一个域,且性质相同 D.表中的每一行通常称为一个元组 4.一个数据库有___________内模式 A. 多个 B.一个 C. 最多二个 D. 多个 5、在数据库的三级模式结构中____________是数据库中全体数据的结构和特征的描述。 A. 外模式 B. 模式 C. 内模式 D. 物理模式 6、E-R图是数据库设计的工具之一,它一般适用于建立数据库的____________。 A. 概念模型 B. 结构模型 C. 物理模型 D. 逻辑模型 7、数据库系统中,数据独立性是指。 A.数据之间相互独立 B.应用程序与数据库的结构之间相互独立 C.数据的逻辑结构与物理结构相互独立 D.数据与磁盘之间相互独立 8、基本关系代数运算是 A. ∪,-,×,π和σ B. ∪,-,∞,π和σ C.∪,∩,x,π和σ D. ∪,∩,∞,π和σ 9、关系模型是目前最重要的一种数据模型,它的三个要素分别是。 A.实体完整性、参照完整性、用户自定义完整性 B.关系结构、关系操作、完整性约束 C.数据增加、数据修改、数据查询 D.外模式、模式、内模式 10、数据库中的投影操作是指从关系中。 A.抽出特定记录 B.抽出特定字段 C.建立相应的影像 D.建立相应的图形 11、设两个关系R(A,B)和S(B,C),与下列SELECT语句 SELECT A,B FROM R WHERE B NOT IN(SELECT B FROM S WHERE C='C56'); 等价的关系代数表达式是 A.π A,B (σ C≠'C56' (R?S))B.π A,B (R ? S) C.R-π A,B (σ C= 'C56' (R?S))D.R-π A,B (σ C≠'C56' (R?S)) 12、关系模式R(A,B,C,D),F是R上成立的函数依赖集,F={ B→D,AD→C },那么分解 ρ={ ABC,BCD }相对于F是。 C≠'C56'

进程管理实验报告

实验报告纸 (院、系)专业班组课 实验一、进程管理(3学时、必做) 一、实验目的 通过实验使学生进一步了解进程、进程状态、进程控制等基本概念。基本能达到下列具体的目标: 1、理解进程PCB 的概念,以及PCB 如何实现、如何组织以及管理。 2、复习数据结构中如何对链的操作,包括建链、删除、插入结点等,来实现进程的管 理。 二、实验内容 1、建立一个结点,即PCB 块包括用户标识域、状态域(执行、等待、就绪)、link 域。 2、建立三个队列(执行队列、就绪队列、等待队列)。 3、根据进程状态转换实现对三个队列的具体操作。具体的驱动可以采用时间片算法或

手动调度的形式完成三个状态之间的转换4、用switch 选择语句选择状态。 5、按照自己的设定能完成所有的状态转换的运行(包括创建和运行结束)。 三、实验步骤 1、复习进程管理三状态模型部分内容。 2、预习C++ Builder或VC++、Delphi、JBuilder线程编程。 3、运行示例程序,进一步明确实验要求。可以采用控制台模式或窗口模式。 4、上机编程、调试程序。 5、完成实验报告。 四、实验过程 1、进程管理三状态模型部分内容 进程从因创建而产生直至撤销而消亡的整个生命周期中,有时占用处理器执行,有时虽然可以运行但分不到处理器,有时虽然处理器空闲但因等待某个事件发生而无法执行,这一切都说明进程和程序不同,进程是活动的且有状态变化,状态及状态之间的转换体现进程的动态性,为了便于系统管理,一般来说,按照进程在执行过程中的不同情况至少要定义三种进程状态。 (1)运行态:进程占用处理器运行的状态。

(2)就绪态:进程具备运行条件,等待系统分配处理器以便起运行的状态。(3)等待态:进程不具备运行条件,正在等待某个时间完成的状态。2、程序设计环境

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

进程管理 2.1 实验目的 ●加深对进程概念的理解,明确进程和程序的区别。 ●进一步认识并发执行的实质。 ●分析进程争用资源的现象,学习解决进程互斥的方法。 2.2 背景知识 1、fork() 创建一个新进程 int fork() 其中返回int取值意义如下: 0:创建子进程,从子进程返回的id值 大于0:从父进程返回的子进程id值 -1:创建失败 2、lockf(files,function,size):用于锁定或打开锁定一个共享文件 用作锁定文件的某些段或者整个文件,本函数适用的头文件为: #include 参数定义: int lockf(files,function,size) int files,function; long size; 其中:files是文件描述符,习惯上,标准输入(standard input)的文件描述符是0,标准输出(standard output)是1,标准错误(standard error)是2(lockf(1,1,0)是锁定屏幕输出,不让其他进程输出到屏幕)lockf(1,0,0)则是解锁。function是锁定和解锁;1表示锁定,0表示解锁。size是锁定和解锁的字节数,若用0,表示从文件的当前位置到文件尾。

2.3实验内容 2.3.1进程创建 编写一段程序,利用系统调用fork( )创建两个进程。当此程序运行时,在系统中有一个父进程和两个子进程活动。让每一个进程在屏幕上显示一个字符:父进程显示字符“a”;子进程分别显示字符“b”和字符“c”。 2.3.2进程控制 修改已经编好的程序,将每个进程输出一个字符改为每个进程输出一句话,在观察程序执行时屏幕上出现的现象,并分析原因。 如果在程序中使用系统调用lockf()来给每一个进程加锁,可以实现进程之间的互斥,观察并分析出现的现象。 2.3.3参考程序 #include Main() { Int p1,p2; While ((p1=fork())= =-1); If (p1= =0) Putchar(…b?); Else { While ((p2=fork()= =-1); If (p2= =0) Putchar(…c?); Else Putchar(…a?); } } 分析:从进程并发执行来看,输出bac,acb或bca都有可能。 原因:fork()创建进程所需要的时间要多于输出一个字符的时间,因此在主进程创建进程2的同时,进程1就输出了”b”,而进程2和主程序的输出次序是有随机性的,所以会出现多种可能结果。 进程控制源程序:

北方工业大学计算机组成原理综合实验报告

计算机组成原理实验系统实验指导书 北方工业大学计算机系

《数字逻辑与计算机组成原理》课程 实验报告 实验名称实验一运算器实验 姓名专业计算机科学与技术学号 实验日期2012.4.27 班级成绩 一、实验目的和要求 实验目的: 1.掌握运算器的组成及工作原理; 2.了解4 位函数发生器74LS181 的组合功能,熟悉运算器执行算术操作和逻辑操作的具体实现过程; 3.验证带进位控制的74LS181 的功能。 实验要求: 1.复习本次实验所用的各种数字集成电路的性能及工作原理; 2.预习实验步骤,了解实验中要求的注意之处。 二、实验内容(包括实验原理,必要实验原理图、连接图等) 1.实验原理及原理图: 运算器的结构框图见图1-5:

算术逻辑单元ALU是运算器的核心。集成电路74LS181是4位运算器,四片74LS181以并/串形式构成16位运算器。它可以对两个16位二进制数进行多种算术或逻辑运算,74LS181 有高电平和低电平两种工作方式,高电平方式采用原码输入输出,低电平方式采用反码输入输出,这里采用高电平方式。 三态门74LS244 作为输出缓冲器由ALU-G 信号控制,ALU-G 为“0”时,三态门开通,此时其输出等于其输入;ALU-G 为“1”时,三态门关闭,此时其输出呈高阻。 四片74LS273作为两个16数据暂存器,其控制信号分别为LDR1和LDR2,当LDR1和LDR2 为高电平有效时,在T4脉冲的前沿,总线上的数据被送入暂存器保存。 2.电路组成: 本模块由算术逻辑单元ALU 74LS181(U7、U8、U9、U10)、暂存器74LS273(U3、U4、U5、U6)、三态门74LS244(U11、U12)和控制电路(集成于EP1K10 内部)等组成。电路图见图1-1(a)、1-1(b)。

Linux进程管理-实验报告

《Linux 操作系统设计实践》实验一:进程管理 实验目的: (1)加深对进程概念的理解,明确进程和程序的区别。 (2)进一步认识并发执行的实质。 (3)学习通过进程执行新的目标程序的方法。 (4)了解Linux 系统中进程信号处理的基本原理。 实验环境:Red Hat Linux 实验内容:(1)进程的创建 编写一段程序,使用系统调用fork()创建两个子进程,当此进程运行时,在系统中有一个父进程和两个子进程活动,让每一个进 程在屏幕上显示一个字符,父进程显示字符“a”;子进程分别显示字符“b”和字符“c”,试观察记录屏幕上的显示结果,并分析原 因。 程序代码: #include int main() { int p1 ,p2 ; while((p1=fork())==-1); if(p1==0) putchar('b'); else { while((p2=fork())==-1); if(p2==0) putchar('c'); else putchar('a');

return 0; } 运行结果:bca 分析:第一个while里调用fork() 函数一次,返回两次。子进程P1得到的返回值是0,父进程得到的返回值是新子进程的进程ID(正整数);接下来父进程和子进程P1两个分支运行,判断P1==0,子进程P1符合条件,输出“b”;接下来else里面的while里再调用fork()函数一次,子进程P2得到的返回值是0,父进程得到的返回值是新子进程的进程ID(正整数);接下来判断P2==0,子进程P2符合条件,输出“c”,接下来父进程输出“a”,程序结束。 (2)进程的控制 ①修改已编写的程序,将每个进程输出一个字符改为每个进程输出一句话,在观察程序执行时屏幕上出现的现象,并分析原因。 程序代码: #include int main() { int p1,p2; while((p1=fork())==-1); if(p1==0) printf("Child1 is running!\n"); else { while((p2=fork())==-1); if(p2==0) printf("Child2 is running!\n"); else printf("Father is running!\n"); } return 0;

相关文档
最新文档