杭电操作系统实验报告模板

合集下载

操作系统实验报告模板

操作系统实验报告模板

操作系统实验报告实验1分析实验结果参照实验指导书回答下面的问题:5:6:从实验中得到了两次不同的结果原因是程序采用了多线程的写法,两个线程同时抢占CPU资源,CPU并发处理该程序。

10:11:CPU并发处理程序第一次先运行func2()中的x=x+2 再输出x=2 接着执行func2()中的y=3,然后执行func1() x=3 y=y+x, 输出y 所以结果为x=2 y=7第二次先运行func1()中的x=4 y=4 再运行func2()中y=3 x=x+2得到x=6 y=315:CPU 并发执行程序使得在完成整个循环之前输出x的值19:通过控制turn变量使得程序先完成func2()的完整循环再完成func1()的完整循环最后得到结果10023:由于信号量s 的出现通过wai(s)和signal(s)语句避免了在未完成循环前推出的情况实验2分析实验结果参照实验指导书回答下面的问题:5:11:发生死锁交换p()函数中wait(e)与wait(s)的顺序之后消费者进入缓冲池后没能够出去,一直占用缓冲池,使得生产者无法进入缓冲池生产.使得进程陷入死锁不剥夺.17:发生死锁:c()函数中wait(n)与wait(s)的顺序后.会导致生产者处于一直生产的状态.当缓冲池满后,生产者在缓冲池中,出不去,消费者也进不了缓冲池.仅使进程处于请求保持状态,还有不剥夺,环路等待状态.实验3(该实验为期中考试项目,按照期中考试要求提交报告)实验4问题1:描述内存控制块结构;描述内存控制块与内存分区和内存块的关系只有当把内存控制块与分区关联起来之后,系统才能对其进行相应的管理和控制。

它才是一个真正的动态内存区。

问题2:应用程序的源代码(请对内存操作给出注释)#include "includes.h"#define TASK_STK_SIZE 512 //任务堆栈长度OS_STK StartTaskStk[TASK_STK_SIZE];OS_STK MyTaskStk[TASK_STK_SIZE];OS_STK YouTaskStk[TASK_STK_SIZE];OS_STK HerTaskStk[TASK_STK_SIZE];INT16S key; //用于退出uCOS_II的键char *s;char *s1="MyTask--ZYS";char *s2="YouTask-ZYS";char *s3="HerTask-ZYS";INT8U err;INT8U y=0; //字符显示位置INT8U Times=0;OS_MEM *IntBuffer; //定义内存控制块指针INT8U IntPart[8][6]; //划分分区及内存块INT8U *IntBlkPtr;OS_MEM_DATA MemInfo;void StartTask(void *pdata);void MyTask(void *pdata);void YouTask(void *pdata);void HerTask(void *pdata);/************************主函数******************************************/void main (void){OSInit(); //初始化uCOS_IIPC_DOSSaveReturn(); //保存Dos环境PC_VectSet(uCOS, OSCtxSw); //安装uCOS_II中断IntBuffer=OSMemCreate(IntPart,8,6,&err);OSTaskCreate(StartTask,(void*)0,&StartTaskStk[TASK_STK_SIZE - 1], 0);OSStart();}/****************************任务StartTask *************************************************/ void StartTask (void *pdata){#if OS_CRITICAL_METHOD == 3OS_CPU_SR cpu_sr;#endifpdata = pdata;OS_ENTER_CRITICAL();PC_VectSet(0x08, OSTickISR);PC_SetTickRate(OS_TICKS_PER_SEC);OS_EXIT_CRITICAL();OSStatInit();OSTaskCreate(MyTask,(void*)0,&MyTaskStk[TASK_STK_SIZE - 1], 3);OSTaskCreate(YouTask,(void*)0,&YouTaskStk[TASK_STK_SIZE - 1], 4);OSTaskCreate(HerTask,(void*)0,&HerTaskStk[TASK_STK_SIZE - 1], 5);// 按ESC 退出ucosfor (;;){if (PC_GetKey(&key) == TRUE) {if (key == 0x1B) {PC_DOSReturn();}}OSTimeDlyHMSM(0, 0, 3, 0);}}/****************************任务MyTask *************************************************/void MyTask(void *pdata){#if OS_CRITICAL_METHOD==3OS_CPU_SR cpu_sr;#endifpdata=pdata;for(;;){PC_DispStr(10,++y,s1,DISP_BGND_BLACK+DISP_FGND_WHITE);IntBlkPtr=OSMemGet(IntBuffer,&err); //请求内存块,分区指针,错误信息OSMemQuery(IntBuffer,&MemInfo); //查询内存控制块信息,待查询内存控制块指针sprintf(s,"%0x",MemInfo.OSFreeList); // 头指针PC_DispStr(30,y,s,DISP_BGND_BLACK+DISP_FGND_WHITE);sprintf(s,"%d",MemInfo.OSNUsed); //显示已用数目PC_DispStr(40,y,s,DISP_BGND_BLACK+DISP_FGND_WHITE);if(Times>4){OSMemPut(IntBuffer,IntBlkPtr); //释放内存块,}Times++;OSTimeDlyHMSM(0,0,1,0); //等待1s}}/**********************************任务YouTask*************************************/void YouTask(void *pdata){#if OS_CRITICAL_METHOD==3OS_CPU_SR cpu_sr;#endifpdata=pdata;for(;;){PC_DispStr(10,++y,s2,DISP_BGND_BLACK+DISP_FGND_YELLOW);IntBlkPtr=OSMemGet(IntBuffer,&err); //请求内存块,分区指针,错误信息OSMemQuery(IntBuffer,&MemInfo); //查询内存控制块信息,待查询内存控制块指针sprintf(s,"%0x",MemInfo.OSFreeList); // 头指针PC_DispStr(30,y,s,DISP_BGND_BLACK+DISP_FGND_YELLOW);sprintf(s,"%d",MemInfo.OSNUsed); //显示已用数目PC_DispStr(40,y,s,DISP_BGND_BLACK+DISP_FGND_YELLOW);OSMemPut(IntBuffer,IntBlkPtr); //释放内存块,OSTimeDlyHMSM(0,0,2,0); //等待2s}}/**************************任务HerTask******************************/void HerTask(void *pdata){#if OS_CRITICAL_METHOD==3OS_CPU_SR cpu_sr;#endifpdata=pdata;for(;;){PC_DispStr(10,++y,s3,DISP_BGND_BLACK+DISP_FGND_RED);IntBlkPtr=OSMemGet(IntBuffer,&err); //请求内存块,分区指针,错误信息OSMemQuery(IntBuffer,&MemInfo); //查询内存控制块信息,待查询内存控制块指针sprintf(s,"%0x",MemInfo.OSFreeList); // 头指针PC_DispStr(30,y,s,DISP_BGND_BLACK+DISP_FGND_RED);sprintf(s,"%d",MemInfo.OSNUsed); //显示已用数目PC_DispStr(40,y,s,DISP_BGND_BLACK+DISP_FGND_RED);OSMemPut(IntBuffer,IntBlkPtr); //释放内存块,OSTimeDlyHMSM(0,0,1,0); //等待1s}}问题3:上述程序输出结果的截屏画面实验5FCFS磁盘调度算法的实现#include<stdio.h>#include<math.h>int i,j,t;int point=100,distance=0;float sum=0,average=0;int array[9]={55,58,39,18,90,160,150,38,184};int fcfs(int array[9]){int count=0;printf("从100号磁道开始");printf("\n");printf("被访问的下一个磁道号移动磁道数");printf("\n");for(i=0;i<9;i++){count = count+1;printf(" %d ",array[i]);distance= fabs(point-array[i]);point=array[i];sum=sum+distance;printf(" %d ",distance);printf("\n");}average=sum/count;printf("sum= %2f",sum);printf("\n");printf("average= %f",average);printf("\n");}void main(){fcfs(array);}。

操作系统实验实验报告

操作系统实验实验报告

操作系统实验实验报告一、实验目的操作系统是计算机系统中最为关键的核心软件,它管理着计算机的硬件资源和软件资源,为用户提供了一个方便、高效、稳定的工作环境。

本次操作系统实验的目的在于通过实际操作和实践,深入理解操作系统的基本原理和核心概念,掌握操作系统的基本功能和操作方法,提高对操作系统的认识和应用能力。

二、实验环境本次实验使用的操作系统为 Windows 10 专业版,开发工具为Visual Studio 2019,编程语言为 C 和 C++。

实验硬件环境为一台配备Intel Core i7 处理器、16GB 内存、512GB SSD 硬盘的个人计算机。

三、实验内容(一)进程管理实验1、进程创建与终止通过编程实现创建新的进程,并在完成任务后终止进程。

在实验中,我们使用了 Windows API 函数 CreateProcess 和 TerminateProcess 来完成进程的创建和终止操作。

通过观察进程的创建和终止过程,深入理解了进程的生命周期和状态转换。

2、进程同步与互斥为了实现进程之间的同步与互斥,我们使用了信号量、互斥量等同步对象。

通过编写多线程程序,模拟了多个进程对共享资源的访问,实现了对共享资源的互斥访问和同步操作。

在实验中,我们深刻体会到了进程同步与互斥的重要性,以及不正确的同步操作可能导致的死锁等问题。

(二)内存管理实验1、内存分配与释放使用 Windows API 函数 VirtualAlloc 和 VirtualFree 进行内存的分配和释放操作。

通过实验,了解了内存分配的不同方式(如堆分配、栈分配等)以及内存释放的时机和方法,掌握了内存管理的基本原理和操作技巧。

2、内存分页与分段通过编程模拟内存的分页和分段管理机制,了解了内存分页和分段的基本原理和实现方法。

在实验中,我们实现了简单的内存分页和分段算法,对内存的地址转换和页面置换等过程有了更深入的理解。

(三)文件系统实验1、文件操作使用 Windows API 函数 CreateFile、ReadFile、WriteFile 等进行文件的创建、读取和写入操作。

《操作系统》实验报告

《操作系统》实验报告

《操作系统》实验报告一、实验目的操作系统是计算机系统中最为关键的组成部分之一,本次实验的主要目的是深入理解操作系统的基本原理和功能,通过实际操作和观察,熟悉操作系统的核心概念,包括进程管理、内存管理、文件系统和设备管理等,提高对操作系统的实际应用能力和问题解决能力。

二、实验环境本次实验在以下环境中进行:操作系统:Windows 10开发工具:Visual Studio 2019编程语言:C++三、实验内容1、进程管理实验进程是操作系统中最基本的执行单元。

在这个实验中,我们使用C++编写程序来创建和管理进程。

通过观察进程的创建、执行和结束过程,理解进程的状态转换和资源分配。

首先,我们编写了一个简单的程序,创建了多个子进程,并通过进程标识符(PID)来跟踪它们的运行状态。

然后,使用等待函数来等待子进程的结束,并获取其返回值。

在实验过程中,我们发现进程的创建和销毁需要消耗一定的系统资源,而且进程之间的同步和通信需要谨慎处理,以避免出现死锁和竞争条件等问题。

2、内存管理实验内存管理是操作系统的核心功能之一,它直接影响系统的性能和稳定性。

在这个实验中,我们研究了动态内存分配和释放的机制。

使用 C++中的 new 和 delete 操作符来分配和释放内存。

通过观察内存使用情况和内存泄漏检测工具,了解了内存分配的效率和可能出现的内存泄漏问题。

同时,我们还探讨了内存分页和分段的概念,以及虚拟内存的工作原理。

通过模拟内存访问过程,理解了页表的作用和地址转换的过程。

3、文件系统实验文件系统是操作系统用于管理文件和目录的机制。

在这个实验中,我们对文件的创建、读写和删除进行了操作。

使用 C++的文件流操作来实现对文件的读写。

通过创建不同类型的文件(文本文件和二进制文件),并对其进行读写操作,熟悉了文件的打开模式和读写方式。

此外,还研究了文件的权限设置和目录的管理,了解了如何保护文件的安全性和组织文件的结构。

4、设备管理实验设备管理是操作系统与外部设备进行交互的桥梁。

《操作系统》课内实验报告

《操作系统》课内实验报告

《操作系统》课内实验报告一、实验目的本次《操作系统》课内实验的主要目的是通过实际操作和观察,深入理解操作系统的基本原理和功能,掌握常见操作系统命令的使用,提高对操作系统的实际应用能力和问题解决能力。

二、实验环境本次实验在计算机实验室进行,使用的操作系统为 Windows 10 和Linux(Ubuntu 发行版)。

实验所使用的计算机配置为:Intel Core i5 处理器,8GB 内存,500GB 硬盘。

三、实验内容1、进程管理在 Windows 系统中,通过任务管理器观察进程的状态、优先级、CPU 使用率等信息,并进行进程的结束和优先级调整操作。

在 Linux 系统中,使用命令行工具(如 ps、kill 等)实现相同的功能。

2、内存管理使用 Windows 系统的性能监视器和资源监视器,查看内存的使用情况,包括物理内存、虚拟内存的占用和分配情况。

在 Linux 系统中,通过命令(如 free、vmstat 等)获取类似的内存信息,并分析内存的使用效率。

3、文件系统管理在 Windows 系统中,对文件和文件夹进行创建、复制、移动、删除等操作,了解文件的属性设置和权限管理。

在 Linux 系统中,使用命令(如 mkdir、cp、mv、rm 等)完成相同的任务,并熟悉文件的所有者、所属组和权限设置。

4、设备管理在 Windows 系统中,查看设备管理器中的硬件设备信息,安装和卸载设备驱动程序。

在 Linux 系统中,使用命令(如 lspci、lsusb 等)查看硬件设备,并通过安装内核模块来支持特定设备。

四、实验步骤1、进程管理实验(1)打开 Windows 系统的任务管理器,切换到“进程”选项卡,可以看到当前系统中正在运行的进程列表。

(2)选择一个进程,右键点击可以查看其属性,包括进程 ID、CPU 使用率、内存使用情况等。

(3)通过“结束任务”按钮可以结束指定的进程,但要注意不要随意结束系统关键进程,以免导致系统不稳定。

操作系统实验报告模板

操作系统实验报告模板

操作系统实验报告1. 背景操作系统是计算机系统中的核心软件,负责管理和控制计算机硬件资源,为上层应用程序提供运行环境。

操作系统的性能和稳定性对计算机系统的整体效能和可靠性具有重要影响。

本次实验旨在通过设计一个简单的操作系统,深入理解操作系统的原理和功能,并通过实践来加深对操作系统的理解。

2. 分析2.1 实验目标本次实验的主要目标是设计一个简单的操作系统,并完成以下任务: - 实现进程管理功能,包括进程创建、调度、执行和终止等; - 实现内存管理功能,包括内存分配和回收等; - 实现文件管理功能,包括文件读写、文件打开关闭等; - 实现输入输出设备管理功能,包括设备驱动程序设计等。

2.2 实验环境在本次实验中,我们使用C语言进行编程,并借助模拟器来模拟计算机硬件环境。

具体环境配置如下: - 操作系统:Linux - 开发语言:C语言 - 模拟器:QEMU2.3 实验设计本次实验分为以下几个部分: 1. 进程管理:设计并实现进程控制块(PCB),包括进程状态、优先级等信息,并实现进程的创建、调度和终止等功能。

2. 内存管理:设计并实现内存管理单元(MMU),包括内存分配和回收等功能。

3. 文件管理:设计并实现文件控制块(FCB),包括文件的打开、关闭、读写等功能。

4.设备管理:设计并实现设备驱动程序,包括设备的初始化、读写操作等功能。

2.4 实验流程本次实验的主要流程如下: 1. 确定实验目标和环境。

2. 设计并实现进程管理功能。

3. 设计并实现内存管理功能。

4. 设计并实现文件管理功能。

5. 设计并实现设备管理功能。

6. 进行测试和调试,确保操作系统的正确性和稳定性。

3. 结果经过以上的设计和实现,我们成功完成了一个简单的操作系统,并具备以下特点:- 支持多进程管理,包括进程创建、调度、执行和终止等功能; - 支持内存管理,包括内存分配和回收等功能; - 支持文件管理,包括文件打开、关闭、读写等功能; - 支持输入输出设备管理,包括设备驱动程序设计等功能。

杭电计算机组成原理实验报告.doc

杭电计算机组成原理实验报告.doc

杭电计算机组成原理实验报告篇一:杭电计组实验报告9计组实验九老师:包健一、源代码测试模块代码:moduleTest_Top;// Inputsreginclk;regmem_clk;regrst;reg [3:0] SW;// Outputswire [7:0] LED;// Instantiate the Unit Under TestTop uut ,.mem_clk,.rst,.LED,.SW);reg [2:0] i;initial begin// Initialize Inputsinclk = 0;mem_clk = 0;rst = 0;SW = 0;i=0;// Wait 100 ns for global reset to finish #100;rst = 1;#100;rst =0 ;#100;foreverbegin#100;mem_clk=~mem_clk;i=i+1;ifinclk=~inclk;endendendmodule顶层模块代码:moduleMy_I_CPU;wireclk_n = ~clk;wire[31:0] codes;Inst_Fetch1 inst_fetch,.clk,.Inst_codes);wire[5:0] OP;wire[5:0] func;wire[2:0] ALU_OP;wirerd_rt_s;wireimm_s;wirert_imm_s;wirealu_mem_s;wireWrite_Reg;wireMem_Write;wire [15:0] imm;wire [31:0] imm_data ;assign imm_data = ?{{16{imm[15]}},imm}:{{16{1b0}},imm}; assign OP =codes[31:26];assignfunc = codes[5:0];assignimm = codes[15:0]; OP_Decoderop_decoder,//input.func,//input.ALU_OP,.rd_rt_s,.imm_s,.rt_imm_s,.alu_mem_s,.Write_Reg,.Mem_Write);wire[4:0] rs;wire[4:0] rt;wire[4:0] rd;assigs = codes[25:21];assigt = codes[20:16];assigd = codes[15:11];wire[4:0] W_Addr;assignW_Addr=?rt:rd;wire [31:0]W_Data;wire [31:0]R_Data_A;wire [31:0]R_Data_B; RegisterHeapregister,.R_Addr_B,.W_Addr,.Write_Reg,.Reset,.Clk,.W_Data,.R_Data_A,.R_Data_B);wire [31:0]ALU_A;wire [31:0]ALU_B;assign ALU_A = R_Data_A;assign ALU_B = ?imm_data:R_Data_B;ALU alu,.A,.B,.F,.ZF,.OF);Data_Memdata_mem , // input clka.wea, // input [0 : 0] wea .addra, // input [5 : 0] addra .dina, // input [31 : 0] dina .douta // output [31 : 0] douta);assignW_Data = ?M_R_Data:ALU_F; endmodule二、仿真波形三、电路图四、引脚配置篇二:杭电计算机组成原理取指令与指令译码实验7杭州电子科技大学计算机学院实验报告课程名称:计算机组成原理姓名实验项目:取指令与指令译码实验班级指导教师:学号:实验位置:日期:篇三:杭电计算机组成原理多功能ALU设计实验3杭州电子科技大学计算机学院实验报告课程名称:计算机组成原理姓名:实验项目:多功能ALU设计实验班级:指导教师:学号:实验位置:日期:2015年4月29日。

杭电自动化专业计算机控制系统实验报告

杭电自动化专业计算机控制系统实验报告

实验一、常规PID控制算法仿真仿真框图如下实验参数:shiyanpid Ts=0.1s,b为班号1~5,x为学号后2位,1~45实验要求:(1)画Simulinnk框图(2)设计或凑试PID三个参数,进行仿真(3)使稳态误差为0,且动态性能较满意仿真框图:实验分析:b=1,x=15。

比例系数Kp增大时系统动作灵敏,响应速度加快,过大会使振荡次数增加,系统趋向不稳定,这里取120。

积分环节可以消除稳态误差,Ti减小,系统振荡次数增加,这里取Ki为150。

微分环节可以改善系统动态性能,减小超调和调节时间,这里取Kd为10。

系统在2秒内达到稳态。

实验二、积分分离PID控制算法仿真实验参数:shiyanpidjffl Ts=0.1s,b为班号1~5,x为学号后2位,1~45实验要求:(1)画Simulinnk框图(2)使稳态误差为0,且动态性能较满意(3)尝试不同的积分分离的阈值(比如ε=0,0.1,0.2,……,0.9,1),观察阶跃响应,并确定最佳的阈值实验框图:翻译后Switch模块的说明:如果2输入满足规则,则1通道通过,否则3输入通过。

输入被标号。

1输入通过规则是输入2(偏差e)大于或等于阀值。

第一三输入为数据输入,第二输入为控制输入。

原理:|e(k)|<=ε,ki起作用|e(k)|>ε,ki不起作用,由于阶跃输入,(treshhold )ε=0.1,0.2,……,0.9,1。

由于参数原因去kp=50,ki=kd=0时,曲线最好为了体现ε的作用,积分值不取0,改为Ki=10取不同ε后的曲线ε=0.1ε=0.5ε=1分析:ε=0.1时曲线最好,ε过大起不到积分分离的作用,比如ε=1,总会存在积分作用,ε过小可能是控制不能跳出积分分离的区域,从而只存在PD作用,长时间存在静差。

实验三、不完全微分PID控制算法仿真1、不完全微分PID控制器的阶跃响应实验参数:Shiyanpidbwqwfstep Ts=0.1s,仿真时间设为10s,5s,3s P=1 I=1 D=1滤波器参数a=0.1,0.2,……,0.8,1.2,实验框图:框图1:积分输出:微分输出:可见微分只在第一个单位时间有相应,而且较大框图2:a=0.1时a=0.5时:a=1时:分析:引入惯性环节后,对微分环节对阶跃响应有明显的改善作用。

(最新版)杭电 计算机网络实验报告

(最新版)杭电 计算机网络实验报告

目录实验一、使用数据拷贝线组网 (1)实验二、制作直通双绞线组网 (4)实验三、制作交叉双绞线组网 (7)实验四、Cisco IOS基本使用 (10)实验五、交换机基本使用 (14)实验六、VLAN的使用 (18)实验七、路由器的基本使用 (25)实验八、动态路由配置 (30)实验一、使用数据拷贝线组网实验一使用数据拷贝线组网实验台号:实验时间:实验小组号:成员及本次实验分工:实验目的:学会使用并行电缆(数据拷贝线)实现双机通信和资源共享。

使用直接电缆实现两台PC机之间的通信。

实验环境说明:硬件:2台计算机、2-3根并行电缆软件:Windows XP操作系统实验过程及步骤(可另附页、使用网络拓扑图等辅助说明):(1)、使用并行电缆将两台PC机,进行物理互连;(2)、分别在两台PC机上的网上邻居中创建一个新连接。

按照新建连接向导的指示来做。

首先网络连接类型选为“设置高级连接”;然后其中作为服务器的那台PC机创建为“接受传入的连接”,作为客户机的则创建为“直接连接到其他计算机的连接”,并让此计算机担任“来宾”的角色。

接下去根据向导直至完成创建新连接。

(3)、测试两机的可通用性。

创建好连接之后可以用ping命令测试一下两台机器之间是否已经连通。

(4)、连接创建成功之后,客户机可以找到并登入到服务器,就可以实现对服务器上的资源的共享了。

当然在此之前作为服务器的主机还需要将文件夹属性设置成为可共享的。

测试数据线连接以后Ping对方说明能够Ping通在一台PC上设置共享,然后在另外一台PC上查看共享截图如下:说明通过数据拷贝线成功地连接了两台PC,实现了他们之间的通信。

实验总结(遇到的问题及解决办法、体会):刚开始配置客户机的时候出了点问题。

需要输入对方计算机的名字,我们却输入了服务器上的计算机用户的帐号,所以一直没有连接成功。

后来终于发现了这个问题。

配置也就顺利了。

实验器材、工具领用及归还负责人:验收人:实验执笔人:实验记录人:报告协助人:实验报告完成时间:小组成员签名:指导教师评议成绩评定:指导教师签名:实验二、制作直通双绞线组网实验二制作直通双绞线组网实验台号:实验时间:实验小组号:成员及本次实验分工:实验目的:1.了解双绞线的相关知识;2.学会制作直通双绞线;3.掌握用双绞线实现集线器和计算机之间的互连。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

操作系统课程设计报告
基于DOS的多任务系统的实现
专业:信息工程学院(软件工程)
班级:
姓名:
学号:
指导老师:
20101223
一、课程设计的目的
1. 加深多线程和进程概念的理解,明确进程和程序的区别。

2. 加深对CPU调度过程(现场保护、CPU的分派和现场恢复)的理解。

3. 进一步认识并发执行的概念,明确顺序执行和并发执行的区别。

4. 加深对临界资源,临界区,信号量以及同步机制的理解。

5. 加深对消息缓冲通信的理解。

二、课程设计要求
1. 用C语言完成线程的创建和撤消,并按优先权加时间片轮转算法对多个线程进行调度;
2. 改变时间片的大小,观察结果的变化。

思考:为什么时间片不能太小或太大;
3. 假设两个线程共用同一软件资源(如某一变量,或某一数据结构),请用记录型信号量来实现对它的互
斥访问;
4. 假设有两个线程共享一个可存放5个整数的缓冲,一线程不停的计算1到50的平方,并将结果放入缓冲
中,另一个线程不断的从缓冲中取出结果,并将他们打印出来,请用记录型信号量实现这一生产者和消费者的同步问题;
5. 实现消息缓冲通信,并于3,4中的简单通信进行比较;
6. 思考:在线程间进行消息缓冲通信时,若对消息队列的访问没有满足互斥要求,情况会怎么样?
三、程序的设计细想和框图[根据自己的代码写]
1.调度算法:用TCB数组下标音隐含把所有线程排成一个循环队列,当时间片到时,有线程正在执行,则停止它,将其变为就绪,把现场信息压入私有栈堆。

2.调度原因:时间片到时,线程执行完毕,正在执行的线程等待某种事件而不能继续执行。

3.时钟中断的截取
4. 线程的阻塞及唤醒
引起进程阻塞的典型事件为等待操作的完成:相对高速的而言,设备的速度显得较慢,这里引起线程阻塞的典型事件有两个:一是并发执行的线程间临界资源的竞争;二是相互合作的线程间的同步。

一个正在只在执行的线程因某种原因而阻塞时,必须给出因该原因而阻塞的阻塞队列的对手信息,阻塞原语所做的主要工作有:将线程的状态改为阻塞态,将线程插入指定的阻塞队列末尾,并重新进行CPU调度。

当阻塞线程所等待的事件完成后,必须唤醒相应线程。

阻塞原语中同样需指出跟指定事件有关的阻塞队列队首信息。

另外,有可能同时有多个线程在等待该事件完成,食粮中采取的方法是首先唤醒阻塞队列头上的第一个线程,所做的工作主要有:把阻塞队列头上的第一个线程的TCB取下来,并将起状态改为就绪态。

5. 线程的同步与互斥
在许多线程并发执行时,由于它们共享资源,相互协作的完成总的任务,线程之间存在着同步和互斥的问题,所以必须有一同步机制来实现线程的同步和互斥。

6. 利用消息缓冲队列进行线程间的通信——消息的发送与接收
在发送消息时,消息的发送者必须提供接受者的标识符、消息的长度及消息正文的起始地址等信息。

然后在发送原语里申请一空闲的消息缓冲区,用相应的信息来装配该消息缓冲区,并将它插到接受者的消息队列中去。

在接受时,接受者必须指出发送者的标识符、接受区的起始地址等信息,然后从自己的消息队列中取得相应发送者发来的消息缓冲区,将消息正文复制到接收区中,并释放相应的消息缓冲区。

在线程通信时,发送者和接受者都有可能在消息处理以前被撤消。

其中,当一接受者等待一来自己终止的线程的消息时,若不采取相应的动作,接收者将无限期阻塞下去。

系统一旦发现这种情况,应结束接收动作,而避免接收者被无限期阻塞。

7. 本程序流程图如下:
四、程序调试遇到的问题的分析
1 自己添加
五、结果分析和总结
自己写
六、程序清单如下:
程序的源代码
七、参考文献。

相关文档
最新文档