文档库 最新最全的文档下载
当前位置:文档库 › 东南大学操作系统实验报告

东南大学操作系统实验报告

东南大学操作系统实验报告
东南大学操作系统实验报告

操作系统课程设计操作系统实验——基于WRK的进程工作集实验

1 掌握虚拟机和调试工具等的使用。

2 阅读Windows源码中工作集管理相关部分。

3 修改Windows内核中页面置换算法,深入理解工作集和页面置换算法如何在一个完整的操作系统中实现

1 搭建实验环境

WRK v1.2

Virtual PC 2007

-Windows 2003 Sp1

WinDbg

搭建环境相对简单,只需按照下列步骤完成即可

1)首先把实验需要的文件下载到本地d:\ WRK-CRK目录下。

2)在cmd命令行中输入:

a. mkdir c:\wrk(建立一个新目录)

b. set wrk=c:\wrk(上面建立的目录)

c. xcopy /crehkdq d:\ WRK-CRK\WRK-v1.2 %wrk%(把WRK内核代码和工具拷到新建立的目录下)

d. set arch=x86[amd64](设置机器的CPU架构,x86还是amd64)指定编译目标结构

e. set path=%wrk%\tools\%arch%;%path%(设置WRK平台编译工具路径)

f. cd %wrk%\base\ntos(进入编译工具目录)

g. nmake–nologo %arch%=(编译WRK内核)

3)如果编译成功的话,%wrk%\base\ntos\build\exe目录下会生成两个文件,wrkx86.exe和wrkx86.pdb。

2 源码阅读及算法验证

工作集代码分布

Step1 编写测试程序

程序内容:申请内存分配。

代码如下:

#include

#define locsize 1024*1024

void main()

{

int i=6;

i=i++;

printf("%d",i);

while (1)

{

char * newplace= (char *) malloc(locsize);

sprintf(newplace,"%s","hello!");

printf("%s\n",newplace);

//free (newplace);

}

}

Step2 查看工作集

在虚拟机中运行程序。在内核中设置断点,让内核停下来查看进程状态。在WinDbg的命令行输入命令查看工作集信息。

1.!process 0 0

显示的是当前所有进程信息,查找我们编写的程序的进程信息:

据此地址查看EPROCESS信息

2. dteprocess811d41c8

从显示的EPROCESS信息中查找MMSUPPORT的地址

0x1e8是相对地址。

3.dtnt!_MMSUPPORT 811d41c8+0x1e8

查看MMSUPPORT的信息

4.dtnt!_MMWSL 0xc0502000

查看MMWSL信息

FirstFree下次进行工作集页面添加的位置

FirstDynamic工作集页面中第一个可用页面的下标

LastEntry工作集页面中最后一个可用页面的下标

NextSlot进行页面修剪算法是据此搜索最有替换页面

5.dd 0xc0502698 l 0x40

查看MMWSLE的信息,即工作集页面项(所有页面虚拟地址)的详细信息

Step3 验证页面置换算法

在置换算法中设置断点,图中桃红色标识。

此时的各个变量的值。其中TheNextSlot(0x2b)标识置换算法起始搜索的页面。本地local

置换前

置换完之后

即TheNextSlot指向的页面被置换

分析:

源码:if ((Flags == WsleAllocationReplace) ||

OldestAge>= MI_IMMEDIATE_REPLACEMENT_AGE ||

NumberOfCandidates> MM_WORKING_SET_LIST_SEARCH)

三个条件:

1 Flags 等于WsleAllocationReplace(WsleAllocationReplace表示内存紧张,立即替换)

2 页面年龄大于2(MI_IMMEDIATE_REPLACEMENT_AGE=2)

3 搜索的页面数大于17(MM_WORKING_SET_LIST_SEARCH=17),

满足一个即进行页面替换。我们可以看到置换前

1 Flag = WsleAllocationAny

2内存中从红色框标识页之后的17个页面年龄均为0

所以页面置换算法会在搜索17个页面之后,立即进行置换,置换也为TheNextSlot指向的页。

断点后单步执行的过程,也验证了这一分析。

3 修改算法及验证

Step1 修改页面置换算法

修改代码base\ntos\inc\ps.h:

typedefstruct _MMSUPPORT {

LIST_ENTRY WorkingSetExpansionLinks;

LARGE_INTEGER LastTrimTime;

MMSUPPORT_FLAGS Flags;

ULONG PageFaultCount;

WSLE_NUMBER PeakWorkingSetSize;

WSLE_NUMBER GrowthSinceLastEstimate;

WSLE_NUMBER MinimumWorkingSetSize;

WSLE_NUMBER MaximumWorkingSetSize;

struct _MMWSL *VmWorkingSetList;

WSLE_NUMBER Claim;

WSLE_NUMBER NextEstimationSlot;

WSLE_NUMBER NextAgingSlot;

WSLE_NUMBER EstimatedAvailable;

WSLE_NUMBER WorkingSetSize;

EX_PUSH_LOCK WorkingSetMutex;

ULONG num; // 新增加

} MMSUPPORT, *PMMSUPPORT;

修改代码base\ntos\mm\wslist.c: 272:MiDoReplacement():

算法思想:碰见有效页面就进行替换,每次搜索的的起始索引依然为NextSlot。

VOID

MiReplaceWorkingSetEntry (

IN PMMSUPPORT WsInfo,

IN WSLE_ALLOCA TION_TYPE Flags

)

{

WSLE_NUMBER WorkingSetIndex;

WSLE_NUMBER FirstDynamic;

WSLE_NUMBER LastEntry;

PMMWSL WorkingSetList;

PMMWSLE Wsle;

PMMPTE PointerPte;

WSLE_NUMBER TheNextSlot;

WorkingSetList = WsInfo->VmWorkingSetList;

Wsle = WorkingSetList->Wsle;

LastEntry = WorkingSetList->LastEntry;

FirstDynamic = WorkingSetList->FirstDynamic;

WorkingSetIndex = WorkingSetList->NextSlot;

if (WorkingSetIndex>LastEntry || WorkingSetIndex

}

TheNextSlot = WorkingSetIndex;

while (TRUE) {

while (Wsle[WorkingSetIndex].u1.e1.Valid == 0) {

WorkingSetIndex += 1;

if (WorkingSetIndex>LastEntry) {

WorkingSetIndex = FirstDynamic;

}

if (WorkingSetIndex == TheNextSlot) {

if (Flags == WsleAllocationAny) {

WsInfo->GrowthSinceLastEstimate += 1;

}

return;

}

}

PointerPte = MiGetPteAddress(Wsle[WorkingSetIndex].u1.VirtualAddress);

if (MiFreeWsle (WorkingSetIndex, WsInfo, PointerPte)) {//直接替换WorkingSetList->NextSlot = WorkingSetIndex + 1;

break;

}

WorkingSetIndex += 1;

if (WorkingSetIndex>LastEntry) {

WorkingSetIndex = FirstDynamic;

}

if (WorkingSetIndex == TheNextSlot) {

if (Flags == WsleAllocationAny) {

WsInfo->GrowthSinceLastEstimate += 1;

}

break;

}

}

return;

}

Step2 通过单步执行查看其执行过程。

置换前:

置换后:

可以看出,即使NextSlot指示页年龄为0,之后的页面年龄为1,也替换当前页。即验证修改的“碰见有效页即替换”的策略。

基于WRK平台的IPC实验

实验背景:

Inter-Process Communication(进程间通信)在现在通用的时分操作系统中的进程管理中扮演着重要的角色,可以说没有同步/互斥机制,就不会实现系统的多线程。在Windows中,内核提供了多种机制防止多个线程对同一个数据结构进行修改。通过对WRK平台的IPC实验,我们可以更加深入地了解到Windows内部是如何实现线程的同步/互斥的。

一、了解WinDbg的一些常用命令

在winDbg中常用到的WinDbg命令:

Kd>!process

Kd>dtnt!_kthread

Kd>dtnt!_kwait_block

Kd>dtnt!_dispatcher_header

Kd>!process 0 0

Kd>!process #thread

二、使用WinDbg联机查看一个线程等待的所有同步对象

(1)在系统初始化时,按下debug的break,进入断点。并通过!process查看当前所有线程的状态。主要用于查看进程状态(如图)。

!process 813f8020 2(813f8020是svchost)

(2)选择其中一个线程查看,比如813f7380,可以看到它正在等待五个事件。

(3)用dtnt!_kthread查看这个线程的全部信息。可以看到等待的列表头为0x80899b28 _KWAIT_BLOCK

dtnt!_kthread 813e0020

(4)查看下一个等待块信息。0x816dc640的具体信息如下:

dtnt!_kwait_block 0x816dc640

三、使用WinDbg联机查看等待一个同步对象的所有线程

(1)用!process 命令,得到当前的线程信息,如图,看到8141e120 被3个线程同时等待!process813f8020 2

(2)用dt命令来解释该对象(8089eb3c)的分发器头:可以看出有多个线程在等待这个对象。

dtnt!_dispatcher_header8141e120

(3)解释等待块0x813927b8.

(4)解释等待块0x813e00c8

持续此过程直到自己等待自己

四.生产者-消费者问题在WRK平台上的实现与调试

1、充分理解“生产者-消费者”算法,编写“生产者-消费者”程序1.1 “生产者-消费者”问题描述

如上图所示,生产者把产品生产出来,送入仓库队列中。给消费者发信号,消费者得到信号后,到仓库取产品,取走产品后给生产者发信号。某时刻,只允许有一个生产者或消费者访问仓库队列,同时在仓库队列中进行操作将导致不可预知的错误。

1.2“生产者-消费者”算法。

1.2.1 “生产者-消费者”问题分析

生产者-消费者问题是相互合作进程关系的一种抽象,其中,生产者作为系统中释放资源的进程,而消费者作为系统中使用同类资源的进程。通过对该问题的分析,可知,消费者想接收数据时,有界缓冲区中至少有一个单元是满的,即对于“消费者”而言,缓冲区空则应等待。而生产者想发送数据时,有界缓冲区中至少有一个单元是空的,即对于“生产者”而言,缓冲区满则应等待。这便表现为一个同步问题。

而由于缓冲区是临界资源,所以生产者和消费者之间必须互斥的访问临界资源。即任何时刻,只能有一个进程在临界区中操作。这便表现为一个互斥问题。

为此,对于同步问题,引入同步信号量“empty”,为0表示缓冲区满及同步信号量“full”,为0表示缓冲区空,对于互斥问题,引入互斥信号量(二元信号量),信号量为0,表明已有进程进入临界区。

1.2.2 “生产者-消费者”算法

设:互斥信号量Mutex表示进入缓冲区的个数初值为1。

(消费者)同步信号量(Semaphore) full表示有界缓冲区中非空单元数初值为0。

(生产者)同步信号量(Semaphore) emptys表示有界缓冲区中空的单元数初值为n

3)在宿主机上编写“生产者-消费者”程序,并运行生成IPC.exe,放入主机共享的工作目录D:\wrk下

生产者消费者源码:

#include

#include

#include

#include

#define buffersize 5

HANDLEMutex;

HANDLEemptys;

HANDLEfull;

int bufferdata[buffersize];

void init_bufferdata()

{

for (int i=0;i

{

bufferdata[i]=0;

}

}

bool InsertInBuffer(int data)

{

for(int i=0;i

{

if (bufferdata[i]==0)

{

bufferdata[i]=data;

returntrue;

}

}

returnfalse;

}

bool RemoveFromBuffer()

{

for (int i=0;i

{

if (bufferdata[i]!=0)

{

bufferdata[i]=0;

returntrue;

}

}

returnfalse;

}

DWORDWINAPIproduce()

{

int produce_data=rand()%10+1;

while(1)

{

WaitForSingleObject(emptys,INFINITE);//wait empty

WaitForSingleObject(Mutex,INFINITE);//wait empty

//data segment

InsertInBuffer(produce_data);

//Sleep(500);

printf("Producer has inserted a %d in data buffer ! \n",produce_data);

ReleaseMutex(Mutex);//signal

ReleaseSemaphore(full,1,NULL);//signal full

}

return 0;

}

DWORDWINAPIconsumer()

{

while(1)

{

WaitForSingleObject(full,INFINITE);//wait empty

WaitForSingleObject(Mutex,INFINITE);//wait empty

//data segment

RemoveFromBuffer();

//Sleep(500);

printf("Consumer removed a data from buffer !\n");

ReleaseMutex(Mutex);//signal

ReleaseSemaphore(emptys,1,NULL);//signal full

}

return 0;

}

int main()

{

Mutex=CreateMutex(NULL,FALSE,NULL);//creat mutex

emptys=CreateSemaphore(NULL,5,5,NULL);//creat empty

full=CreateSemaphore(NULL,0,5,NULL);//creat full

int producernum=10,consumernum=10;

HANDLE *ProducerThread=new HANDLE[producernum];

HANDLE *ConsumerThread=new HANDLE[consumernum];

init_bufferdata();//initialize buffer

for (int i=0;i

{

ProducerThread[i]=CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)produce,N ULL,0,NULL);//creat produce thread

Sleep(100);

}

for (int j=0;j

{

ConsumerThread[j]=CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)consumer, NULL,0,NULL);//creat consumer thread

}

while(1)

{

//wait!

}

return 0;

}

2、“生产者-消费者”问题在WRK平台下调试1)将生成的“生产者-消费者”可执行程序PC.exe放入虚拟机。执行结果如下:

2)调试并查看PC.exe进程中所有线程等待队列中等待块信息。

1.查看IPC.exe进程的信息,输入!process

可以看到相关的线程等待信息(由于截图原因部分未显示)

2.查看线程813913c8 的信息

3.查看线程813913c8等待队列中等待块信息

其他线程和上面的过程一样,由于线程数目很多,只能列出一个线程的信息。

3、修改WRK代码,增加同步/互斥数据结构的输出

KeWaitForSingleObject中的InitializeWaitSingle及KeWaitForMultipleObject中的Initialize WaitMultiple实现了对等待块的赋值操作,等待块负责将线程和等待的同步对象联系起来。我们可以在等待块赋值之后遍历线程的等待队列,添加调试语句DbgPrint,线程调用WaitforSingalObject或WaitforMultipleObject就会自动向调试窗口WinDbg输出线程,等待块和同步对象的数据结构信息,包括线程的地址,线程等待同步对象队列中等待块的地址。根据输出的调试信息,我们可以轻松地查看到线程等待的同步对象队列,而不需要对WRK的调试。

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

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

东南大学高等数学数学实验报告上

Image Image 高等数学数学实验报告 实验人员:院(系) ___________学号_________姓名____________实验地点:计算机中心机房 实验一 1、 实验题目: 根据上面的题目,通过作图,观察重要极限:lim(1+1/n)n =e 2、 实验目的和意义 方法的理论意义和实用价值。 利用数形结合的方法观察数列的极限,可以从点图上看出数列的收敛性,以及近似地观察出数列的收敛值;通过编程可以输出数列的任意多项值,以此来得到数列的收敛性。通过此实验对数列极限概念的理解形象化、具体化。 三、计算公式 (1+1/n)n 四、程序设计 五、程序运行结果 六、结果的讨论和分析 当n足够

Image Image 大时,所画出的点逐渐接近于直线,即点数越大,精确度越高。对于不同解题方法最后均能获得相同结果,因此需要择优,从众多方法中尽可能选择简单的一种。程序编写需要有扎实的理论基础,因此在上机调试前要仔细审查细节,对程序进行尽可能的简化、改进与完善。 实验二一、实验题目 制作函数y=sin cx的图形动画,并观察参数c对函数图形的影响。 二、实验目的和意义 本实验的目的是让同学熟悉数学软件Mathematica所具有的良好的作图功能,并通过函数图形来认识函数,运用函数的图形来观察和分析函数的有关性态,建立数形结合的思想。三、计算公式:y=sin cx 四、程序设计五、程序运行结果 六、结果的讨论和分析 c的不同导致函数的区间大小不同。 实验三 一、实验题目 观察函数f(x)=cos x的各阶泰勒展开式的图形。 二、实验目的和意义 利用Mathematica计算函数的各阶泰勒多项式,并通过绘制曲线图形,来进一步掌握泰勒展开与函数逼近的思想。 三、计算公式

东南大学电路实验实验报告

电路实验 实验报告 第二次实验 实验名称:弱电实验 院系:信息科学与工程学院专业:信息工程姓名:学号:

实验时间:年月日 实验一:PocketLab的使用、电子元器件特性测试和基尔霍夫定理 一、仿真实验 1.电容伏安特性 实验电路: 图1-1 电容伏安特性实验电路 波形图:

图1-2 电容电压电流波形图 思考题: 请根据测试波形,读取电容上电压,电流摆幅,验证电容的伏安特性表达式。 解:()()mV wt wt U C cos 164cos 164-=+=π, ()mV wt wt U R sin 10002cos 1000=??? ? ? -=π,us T 500=; ()mA wt R U I I R R C sin 213.0== =∴,ππ40002==T w ; 而()mA wt dt du C C sin 206.0= dt du C I C C ≈?且误差较小,即可验证电容的伏安特性表达式。 2.电感伏安特性 实验电路: 图1-3 电感伏安特性实验电路 波形图:

图1-4 电感电压电流波形图 思考题: 1.比较图1-2和1-4,理解电感、电容上电压电流之间的相位关系。对于电感而言,电压相位 超前 (超前or 滞后)电流相位;对于电容而言,电压相位 滞后 (超前or 滞后)电流相位。 2.请根据测试波形,读取电感上电压、电流摆幅,验证电感的伏安特性表达式。 解:()mV wt U L cos 8.2=, ()mV wt wt U R sin 10002cos 1000=??? ? ? -=π,us T 500=; ()mA wt R U I I R R L sin 213.0===∴,ππ 40002==T w ; 而()mV wt dt di L L cos 7.2= dt di L U L L ≈?且误差较小,即可验证电感的伏安特性表达式。 二、硬件实验 1.恒压源特性验证 表1-1 不同电阻负载时电压源输出电压 电阻()Ωk 0.1 1 10 100 1000 电源电压(V ) 4.92 4.98 4.99 4.99 4.99 2.电容的伏安特性测量

东南大学微机第四次实验报告

东南大学 《微机实验及课程设计》 实验报告 实验四双列点阵发光二极管显示实验 姓名:董元学号:22011207 专业:测控技术与仪器实验室:计算机硬件技术实验时间:2013年05月15 日报告时间:2013年05月18日评定成绩:审阅教师:

一. 实验目的与内容(概述) 实验目的: 1)进一步掌握TPC实验装置的基本原理和组成结构; 2)了解双色点阵LED显示器的基本原理 3)掌握PC机控制双色点阵LED显示程序的设计方法 实验内容: 4-1、在双色点阵发光二极管上显示一个黄色或红色的“年”字。 4-2、在双色点阵发光二极管上显示你的姓的汉字或拼音的第一个字母。要求该字符红色和黄色相间。 要求: 1、正确设置退出条件:可以按任意键退出,或者显示一定的次数退出 2、注意尽量清晰地显示字符,消除重影问题 4-3、利用双色点阵发光二极管任意设计一款霓虹灯动态图案,要求二极管阵列可以间或发两种颜色的光,并能看清动态变换的效果。 二. 基本实验原理(或基本原理) 点阵LED显示器是将许多LED类似矩阵一样排列在一起组成的显示器件,双色点阵LED是在每一个点阵的位置上有红绿或红黄或红白两种不同颜色的发光二极管。当微机输出的控制信号使得点阵中有些LED 发光,有些不发光,即可显示出特定的信息,包括汉字、图形等。车站广场由微机控制的点阵LED大屏幕广告宣传牌随处可见。 实验仪上设有一个共阳极8×8点阵的红黄两色LED显示器,其点阵结构如图所示。该点阵对外引出24条线,其中8条行线,8条红色列线,8条黄色列线。若使某一种颜色、某一个LED发光,只要将与其相连的行线加高电平,列线加低电平即可。 1、硬件连接: (1)行代码、红色列代码、黄色列代码各用一片74LS273锁存。 (2)行代码输出的数据通过行驱动器7407加至点阵的8条行线上, (3)红和黄列代码的输出数据通过驱动器DS75452反相后分别加至红和黄的列线上。 (4)行锁存器片选信号为CS1,红色列锁存器片选信号为CS2,黄色列锁存器片选信号为CS3。 2、流程图:

嵌入式操作系统实验报告

中南大学信息科学与工程学院实验报告 姓名:安磊 班级:计科0901 学号: 0909090310

指导老师:宋虹

目录 课程设计内容 ----------------------------------- 3 uC/OS操作系统简介 ------------------------------------ 3 uC/OS操作系统的组成 ------------------------------ 3 uC/OS操作系统功能作用 ---------------------------- 4 uC/OS文件系统的建立 ---------------------------- 6 文件系统设计的原则 ------------------------------6 文件系统的层次结构和功能模块 ---------------------6 文件系统的详细设计 -------------------------------- 8 文件系统核心代码 --------------------------------- 9 课程设计感想 ------------------------------------- 11 附录-------------------------------------------------- 12

课程设计内容 在uC/OS操作系统中增加一个简单的文件系统。 要求如下: (1)熟悉并分析uc/os操作系统 (2)设计并实现一个简单的文件系统 (3)可以是存放在内存的虚拟文件系统,也可以是存放在磁盘的实际文件系统 (4)编写测试代码,测试对文件的相关操作:建立,读写等 课程设计目的 操作系统课程主要讲述的内容是多道操作系统的原理与技术,与其它计算机原理、编译原理、汇编语言、计算机网络、程序设计等专业课程关系十分密切。 本课程设计的目的综合应用学生所学知识,建立系统和完整的计算机系统概念,理解和巩固操作系统基本理论、原理和方法,掌握操作系统开发的基本技能。 I.uC/OS操作系统简介 μC/OS-II是一种可移植的,可植入ROM的,可裁剪的,抢占式的,实时多任务操作系统内核。它被广泛应用于微处理器、微控制器和数字信号处理器。 μC/OS 和μC/OS-II 是专门为计算机的嵌入式应用设计的,绝大部分代码是用C语言编写的。CPU 硬件相关部分是用汇编语言编写的、总量约200行的汇编语言部分被压缩到最低限度,为的是便于移植到任何一种其它的CPU 上。用户只要有标准的ANSI 的C交叉编译器,有汇编器、连接器等软件工具,就可以将μC/OS-II嵌入到开发的产品中。μC/OS-II 具有执行效率高、占用空间小、实时性能优良和可扩展性强等特点,最小内核可编译至2KB 。μC/OS-II 已经移植到了几乎所有知名的CPU 上。 严格地说uC/OS-II只是一个实时操作系统内核,它仅仅包含了任务调度,任务管理,时间管理,内存管理和任务间的通信和同步等基本功能。没有提供输入输出管理,文件系统,网络等额外的服务。但由于uC/OS-II良好的可扩展性和源码开放,这些非必须的功能完全 可以由用户自己根据需要分别实现。 uC/OS-II目标是实现一个基于优先级调度的抢占式的实时内核,并在这个内核之上提供最基本的系统服务,如信号量,邮箱,消息队列,内存管理,中断管理等。 uC/OS操作系统的组成 μC/OS-II可以大致分成核心、任务处理、时间处理、任务同步与通信,CPU的移植等5个部分。如下图:

东南大学信息学院微机实验报告九

实验九 一、实验目的 1.熟悉系统功能调用INT 21H的有关功能 2.编写时钟程序 二、实验任务 1.执行时钟程序时,屏幕上显示提示符“:”,由键盘输入当前时、分、秒值,即XX:XX:XX,随即显示时间并不停地计时。 2.当有键盘按下时,立即停止计时,返回DOS。 三、源程序 DATA SEGMENT BUFFER DB 11 DB ? DB 10 DUP(?) DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA OUTCLK: MOV AX,DATA MOV DS,AX MOV DL,':' MOV AH,2 INT 21H MOV DX,OFFSET BUFFER MOV AH,0AH ;输入字符串 INT 21H MOV BX,OFFSET BUFFER+2 MOV AL,[BX] ; 时针,ASCII码转非压缩BCD CMP AL, 03AH JAE ERROR1 CMP AL, 02FH JBE ERROR1 AND AL,0FH MOV [BX],AL INC BX MOV AL,[BX] AND AL,0FH MOV [BX],AL INC BX INC BX MOV AL,[BX] ; 分针

AND AL,0FH MOV [BX],AL INC BX MOV AL,[BX] AND AL,0FH MOV [BX],AL INC BX INC BX MOV AL,[BX] ;秒针 AND AL,0FH MOV [BX],AL INC BX MOV AL,[BX] AND AL,0FH MOV [BX],AL MOV BX,OFFSET BUFFER+2 CALL TOBCD ; 时针,两位非压缩BCD转换成两位压缩BCD MOV CH, AL ADD BX,3 CALL TOBCD MOV DH, AL ; 分针,两位非压缩BCD转换成两位压缩BCD MOV DH,AL ADD BX,3 CALL TOBCD ; 秒针,两位非压缩BCD转换成两位压缩BCD MOV DL,AL CMP CH, 24H JAE ERROR CMP DH, 60H JA ERROR CMP DL, 60H JA ERROR ERROR1: MOV AH,4CH INT 21H AGAIN: CALL DELAY MOV AL,DL ; 秒针加1 ADD AL,1 DAA MOV DL,AL CMP AL,60H JA ERROR JNE DISPY

实时操作系统报告

实时操作系统课程实验报告 专业:通信1001 学号:3100601025 姓名:陈治州 完成时间:2013年6月11日

实验简易电饭煲的模拟 一.实验目的: 掌握在基于嵌入式实时操作系统μC/OS-II的应用中,基于多任务的模式的编程方法。锻炼综合应用多任务机制,任务间的通信机制,内存管理等的能力。 二.实验要求: 1.按“S”开机,系统进入待机状态,时间区域显示当前北京时间,默认模式“煮饭”; 2.按“C”选择模式,即在“煮饭”、“煮粥”和“煮面”模式中循环选择; 3.按“B”开始执行模式命令,“开始”状态选中,时间区域开始倒计时,倒计时完成后进入“保温”状态,同时该状态显示选中,时间区域显示保温时间; 4.按“Q”取消当前工作状态,系统进入待机状态,时间区域显示北京时间,模式为当前模式; 5.按“X”退出系统,时间区域不显示。 6.煮饭时长为30,煮粥时长为50,煮面时长为40. 三.实验设计: 1.设计思路: 以老师所给的五个程序为基础,看懂每个实验之后,对borlandc的操作有了大概的认识,重点以第五个实验Task_EX为框架,利用其中界面显示与按键扫描以及做出相应的响应,对应实现此次实验所需要的功能。 本次实验分为界面显示、按键查询与响应、切换功能、时钟显示与倒计时模块,综合在一起实验所需功能。 2.模块划分图: (1)界面显示: Main() Taskstart() Taskstartdispinit() 在TaskStartDispInit()函数中,使用PC_DispStr()函数画出界面。

(2)按键查询与响应: Main() Taskstart() 在TaskStart()函数中,用if (PC_GetKey(&key) == TRUE)判断是否有按键输入。然后根据key 的值,判断输入的按键是哪一个;在响应中用switch语句来执行对应按键的响应。 (3)切换功能: l计数“C”按 键的次数 M=l%3 Switch(m) M=0,1,2对应于煮饭,煮粥,煮面,然后使用PC_DispStr()函数在选择的选项前画上“@”指示,同时,在其余两项钱画上“”以“擦出”之前画下的“@”,注意l自增。 四.主要代码: #include "stdio.h" #include "includes.h" #include "time.h" #include "dos.h" #include "sys/types.h" #include "stdlib.h" #define TASK_STK_SIZE 512 #define N_TASKS 2 OS_STK TaskStk[N_TASKS][TASK_STK_SIZE]; OS_STK TaskStartStk[TASK_STK_SIZE]; INT8U TaskData[N_TASKS];

高等数学下实验报告

高等数学实验报告 实验人员:院(系)化学化工学院 学号19013302 姓名 黄天宇 实验地点:计算机中心机房 实验七:空间曲线与曲面的绘制 一、 实验目的 1、利用数学软件Mathematica 绘制三维图形来观察空间曲线和空 间曲面图形的特点,以加强几何的直观性。 2、学会用Mathematica 绘制空间立体图形。 二、实验题目 利用参数方程作图,做出由下列曲面所围成的立体图形: (1) x y x y x z =+--=2 222,1及xOy 平面; (2) 01,=-+=y x xy z 及.0=z 三、实验原理 空间曲面的绘制 作参数方程],[],,[,),(),() ,(max min max min v v v u u v u z z v u y y v u x x ∈∈? ?? ??===所确定的曲面图形的 Mathematica 命令为: ParametricPlot3D[{x[u,v],y[u,v],z[u,v]},{u,umin,umax}, {v,vmin,vmax},选项] 四、程序设计及运行 (1)

(2)

六、结果的讨论和分析 1、通过参数方程的方法做出的图形,可以比较完整的显示出空 间中的曲面和立体图形。 2、可以通过mathematica 软件作出多重积分的积分区域,使积分能够较直观的被观察。 3、从(1)中的实验结果可以看出,所围成的立体图形是球面和圆柱面所围成的立体空间。 4、从(2)中的实验结果可以看出围成的立体图形的上面曲面的方程是xy z =,下底面的方程是z=0,右边的平面是01=-+y x 。 实验八 无穷级数与函数逼近 一、 实验目的 (1) 用Mathematica 显示级数部分和的变化趋势; (2) 展示Fourier 级数对周期函数的逼近情况; (3) 学会如何利用幂级数的部分和对函数进行逼近以及函数值的近似计算。 二、实验题目 (1)、观察级数 ∑ ∞ =1 ! n n n n 的部分和序列的变化趋势,并求和。 (2)、改变例2中m 及x 0的数值来求函数的幂级数及观察其幂级数逼近函数的情况 (3)、观察函数? ? ?<≤<≤--=ππx x x x f 0,10 ,)(展成的Fourier 级数

东南大学数字图像处理实验报告

数字图像处理 实验报告 学号:04211734 姓名:付永钦 日期:2014/6/7 1.图像直方图统计 ①原理:灰度直方图是将数字图像的所有像素,按照灰度值的大小,统计其所出现的频度。 通常,灰度直方图的横坐标表示灰度值,纵坐标为半个像素个数,也可以采用某一灰度值的像素数占全图像素数的百分比作为纵坐标。 ②算法: clear all PS=imread('girl-grey1.jpg'); %读入JPG彩色图像文件figure(1);subplot(1,2,1);imshow(PS);title('原图像灰度图'); [m,n]=size(PS); %测量图像尺寸参数 GP=zeros(1,256); %预创建存放灰度出现概率的向量 for k=0:255 GP(k+1)=length(find(PS==k))/(m*n); %计算每级灰度出现的概率end figure(1);subplot(1,2,2);bar(0:255,GP,'g') %绘制直方图 axis([0 255 min(GP) max(GP)]); title('原图像直方图') xlabel('灰度值') ylabel('出现概率') ③处理结果:

原图像灰度图 100 200 0.005 0.010.0150.020.025 0.030.035 0.04原图像直方图 灰度值 出现概率 ④结果分析:由图可以看出,原图像的灰度直方图比较集中。 2. 图像的线性变换 ①原理:直方图均衡方法的基本原理是:对在图像中像素个数多的灰度值(即对画面起主 要作用的灰度值)进行展宽,而对像素个数少的灰度值(即对画面不起主要作用的灰度值)进行归并。从而达到清晰图像的目的。 ②算法: clear all %一,图像的预处理,读入彩色图像将其灰度化 PS=imread('girl-grey1.jpg'); figure(1);subplot(2,2,1);imshow(PS);title('原图像灰度图'); %二,绘制直方图 [m,n]=size(PS); %测量图像尺寸参数 GP=zeros(1,256); %预创建存放灰度出现概率的向量 for k=0:255

嵌入式实时操作系统实验报告

嵌入式实时操作系统实验报告 任务间通信机制的建立 系别计算机与电子系 专业班级***** 学生姓名****** 指导教师 ****** 提交日期 2012 年 4 月 1 日

一、实验目的 掌握在基于嵌入式实时操作系统μC/OS-II的应用中,任务使用信号量的一般原理。掌握在基于优先级的可抢占嵌入式实时操作系统的应用中,出现优先级反转现象的原理及解决优先级反转的策略——优先级继承的原理。 二、实验内容 1.建立并熟悉Borland C 编译及调试环境。 2.使用课本配套光盘中第五章的例程运行(例5-4,例5-5,例5-6),观察运行结果,掌握信号量的基本原理及使用方法,理解出现优先级反转现象的根本原因并提出解决方案。 3.试编写一个应用程序,采用计数器型信号量(初值为2),有3个用户任务需要此信号量,它们轮流使用此信号量,在同一时刻只有两个任务能使用信号量,当其中一个任务获得信号量时向屏幕打印“TASK N get the signal”。观察程序运行结果并记录。 4. 试编写一个应用程序实现例5-7的内容,即用优先级继承的方法解决优先级反转的问题,观察程序运行结果并记录。 5.在例5-8基础上修改程序增加一个任务HerTask,它和YouTask一样从邮箱Str_Box里取消息并打印出来,打印信息中增加任务标识,即由哪个任务打印的;MyTask发送消息改为当Times为5的倍数时才发送,HerTask接收消息采用无等待方式,如果邮箱为空,则输出“The mailbox is empty”, 观察程序运行结果并记录。 三、实验原理 1. 信号量 μC/OS-II中的信号量由两部分组成:一个是信号量的计数值,它是一个16位的无符号整数(0 到65,535之间);另一个是由等待该信号量的任务组成的等待任务表。用户要在OS_CFG.H中将OS_SEM_EN开关量常数置成1,这样μC/OS-II 才能支持信号量。

东南大学自控实验报告实验三闭环电压控制系统研究

东南大学自控实验报告实验三闭环电压控制系统研究

东南大学 《自动控制原理》 实验报告 实验名称:实验三闭环电压控制系统研究 院(系):专业: 姓名:学号: 实验室: 416 实验组别: 同组人员:实验时间:年 11月 24日评定成绩:审阅教师:

实验三闭环电压控制系统研究 一、实验目的: (1)经过实例展示,认识自动控制系统的组成、功能及自动控制原理课程所要解决的问题。 (2)会正确实现闭环负反馈。 (3)经过开、闭环实验数据说明闭环控制效果。 二、实验原理: (1)利用各种实际物理装置(如电子装置、机械装置、化工装置等)在数学上的“相似性”,将各种实际物理装置从感兴趣的角度经过简化、并抽象成相同的数学形式。我们在设计控制系统时,不必研究每一种实际装置,而用几种“等价”的数学形式来表示、研究和设计。又由于人本身的自然属性,人对数学而言,不能直接感受它的自然物理属性,这给我们分析和设计带来了困难。因此,我们又用替代、模拟、仿真的形式把数学形式再变成“模拟实物”来研究。这样,就能够“秀才不出门,遍知天下事”。实际上,在后面的课程里,不同专业的学生将面对不同的实际物理对象,而“模拟实物”的实验方式能够做到举一反三,我们就是用下列“模拟实物”——电路系统,替代各种实际物理对象。 (2)自动控制的根本是闭环,尽管有的系统不能直接感受到它的

闭环形式,如步进电机控制,专家系统等,从大局看,还是闭环。闭环控制能够带来想象不到的好处,本实验就是用开环和闭环在负载扰动下的实验数据,说明闭环控制效果。自动控制系统性能的优劣,其原因之一就是取决调节器的结构和算法的设计(本课程主要用串联调节、状态反馈),本实验为了简洁,采用单闭环、比例调节器K。经过实验证明:不同的K,对系性能产生不同的影响,以说明正确设计调节器算法的重要性。 (3)为了使实验有代表性,本实验采用三阶(高阶)系统。这样,当调节器K值过大时,控制系统会产生典型的现象——振荡。本实验也能够认为是一个真实的电压控制系统。 三、实验设备: THBDC-1实验平台 四、实验线路图: 五、实验步骤: (1)如图接线,建议使用运算放大器U8、U10、U9、U11、U13。

操作系统实验报告

实验报告 实验课程名称:操作系统 实验地点:南主楼七楼机房 2018—2019学年(一)学期 2018年 9月至 2019 年 1 月 专业: 班级: 学号: 姓名: 指导老师:刘一男

实验一 实验项目:分时系统模拟 实验学时:2实验日期: 2018-10-25 成绩: 实验目的利用程序设计语言模拟分时系统中多个进程按时间片轮转调度算法进行进程调度的过程; 假设有五个进程A,B,C,D,E,它们的到达时间及要求服务的时间分别为:进程名 A B C D E 到达时间0 1 2 3 4 服务时间 4 3 4 2 4 时间片大小为1,利用程序模拟A,B,C,D,E五个进程按时间片轮转的调度及执行过程并计算各进程的周转时间及带权周转时间。 执行过程并计算各进程的周转时间及带权周转时间。 轮转调度:BDACE

(1)修改时间片大小为2,利用程序模拟A,B,C,D,E五个进程按时间片轮转的调度及执行过程并计算各进程的周转时间及带权周转时间。 轮转调度:ADBCE (2)修改时间片大小为4,利用程序模拟A,B,C,D,E五个进程按时间片轮转的调度及执行过程并计算各进程的周转时间及带权周转时间.

顺序:ABCDE 1、思考 时间片的大小对调度算法产生什么影响?对计算机的性能产生什么影响?答:通过对时间片轮转调度算法中进程最后一次执行时间片分配的优化,提出了一种改进的时间片轮转调度算法,该算法具有更好的实时性,同时减少了任务调度次数和进程切换次数,降低了系统开销,提升了CPU的运行效率,使操作系统的性能得到了一定的提高。 A B C D E 时间片为1 周转时间12 9 14 8 13 3 3 3.5 4 3.25 带权周转 时间 时间片为2 周转时间8 12 13 7 13 2 4 3.25 3.5 3.25 带权周转 时间 时间片为4 周转时间 4 6 9 10 13 1 2 2.25 5 3.25 带权周转 时间

东南大学微机实验报告一

微机实验报告 实验一指令与汇编语言基础 姓名:学号: 专业:测控技术与仪器实验室: 时间:2013年04月23号报告时间:2013年04 月23号评定成绩:审阅教师:

一、实验目的 1)了解命令行操作基本方式和基本命令,掌握PC环境下命令行方式的特点; 2)掌握汇编语言程序指令编辑、宏汇编、连接、运行基本概念;3)熟练掌握动态调试程序TD的常用命令和窗口功能,学会用TD调试程序,修改环境; 4)学会利用DEBUG或TD检查认识指令功能的正确方法。 二、实验内容 (一)必做实验 1-1、要求计算两个多字节十六进制数之差: 3B74AC60F8-20D59E36C1=? 式中被减数和减数为5个字节,存放在DATA1和DATA2的内存区,低位在前,高位在后。试编写减法的程序段,要求相减的结果存放在首址为DATA3的内存区。 1-2、以BUFFER为首地址的内存区存放了10个十六位带符号数,编写程序比较它们的大小,找出其中最小的带符号数,存入MIN和MIN+1单元。 三实验源程序和流程图 1、十六进制相减 A、实验要求: 计算两个多字节十六进制数之差:

3B74AC60F8-20D59E36C1=? 式中被减数和减数为5个字节,存放在DATA1和DATA2的内存区,低位在前,高位在后。试编写减法的程序段,要求相减的结果存放在首址为DATA3的内存区。 B、实验源代码和流程图 DATA SEGMENT DATA1 DB 0F8H,60H,0ACH,74H,3BH DATA2 DB 0C1H,36H,9EH,0D5H,20H DATA3 DB 5 DUP(?) DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START: MOV AX,DATA MOV DS,AX MOV CX,5 MOV DI,0 CLD LOOPER: MOV AL,DATA1[DI] SBB AL,DATA2[DI] MOV DATA3[DI],AL INC DI DEC CX JNZ LOOPER MOV AH,4CH INT 21H CODE ENDS END START C、实验过程及实验结果

实时操作系统实验报告2

实时操作系统实验报告 专业:11通信工程 学号:20110306136 姓名: 王帅 指导老师:申屠浩

实验二 任务管理实验 实验目的: 1、理解任务管理的基本原理,了解任务的各个基本状态及其变迁过程; 2、掌握μC/OS -II 中任务管理的基本方法(挂起、解挂); 3、熟练使用μC/OS -II 任务管理的基本系统调用。 实验要求与思路: 为了体现任务的各个基本状态及其变迁过程,本实验设计了T0、T1和T3三个任务,它们交替运行,如图2-2所示。 T0 T1 T2 T3 T4 T5 T6 T7 T8 图2-2 注意: 图中的栅格并不代表严格的时间刻度,而仅仅表现各任务启动和执行的相对先后关系。 说明: 在系统完成初始化后,可以先创建并启动优先级最低的TaskStart ,由它创建其他3个应用任务T0、T1和T2,之后整个系 T0 T2 T1 T0 T1 T2 T1 T0

统的运行流程如下: 1)优先级最高的T0开始执行,之后T0挂起自己; 2)然后系统调度选中T1开始执行,之后T1挂起自己; 3)接着系统调度选中T2,之后唤醒T0; 4)如此循环 实现提示: 在启动任务中创建三个任务后,应挂起任务1和任务2。 在每个任务恢复其它任务并挂起自己之前,显示当前三个任务的状态,并延时1秒。 函数说明: void PC_GetDateTime (char *s); 获取"YYYY-MM-DD HH:MM:SS"格式的时间字串存放在字符串s中,s的长度最少为21字节。 void PC_DispStr (INT8U x, INT8U y, INT8U *s, INT8U color); 在y行x列以color颜色值显示字串s,注意color由背景色和前景色两种颜色构成。 INT8U OSTimeDlyHMSM (INT8U hours, INT8U minutes, INT8U seconds, INT16U milli); 按时、分、秒、毫秒设置进行延时。 void OSTimeDly (INT16U ticks) 按ticks值进行延时,1 ticks一般为10ms。 INT32U OSTimeGet (void)

高等数学(下册)数学实验报告

高等数学A(下册)实验报告 院(系): 学号:姓名: 实验一 利用参数方程作图,作出由下列曲面所围成的立体: (1) 2 2 1Y X Z- - = , X Y X= +2 2 及 xOy 面 ·程序设计: -1, 1},Axe s2=ParametricPlot3D[{1/2*Cos[u]+1/2,1/2*Sin[u],v},{u,- s3=ParametricPlot3D[{u,v,0},{u,-1,1},{v,- DisplayFunction 程序运行结果: 实验二 实验名称:无穷级数与函数逼近 实验目的:观察的部分和序列的变化趋势,并求和

实验内容: (1)利用级数观察图形的敛散性 当n 从1~400时,输入语句如下: 运行后见下图,可以看出级数收敛,级数和大约为1.87985 (2先输入: 输出: 输出和输入相同,此时应该用近似值法。输入: 输出: 1.87985 结论:级数大约收敛于1.87985 实验三: 1. 改变例2中m 的值及的数值来求函数的幂级数及观察其幂级数逼近函数的情况

·程序设计: m 5; f x_:1 x^m;x0 1; g n_,x0_ :D f x, x, n .x x0; s n_,x_: Sum g k,x0/k x x0 ^k, k, 0, t Table s n, x, n, 20; p1 Plot Evaluate t ,x,1,2,3 2; p2 Plot 1 x ^m , x,1 2,3 2, PlotStyle RGBColor 0,0,1; Show p1,p2 ·程序运行结果 实验四 实验名称:最小二乘法 实验目的:测定某种刀具的磨损速度与时间的关系实验内容:

东南大学系统实验报告

实验八:抽样定理实验(PAM ) 一. 实验目的: 1. 掌握抽样定理的概念 2. 掌握模拟信号抽样与还原的原理和实现方法。 3. 了解模拟信号抽样过程的频谱 二. 实验内容: 1. 采用不同频率的方波对同一模拟信号抽样并还原,观测并比较抽样信号及还原信号的波形和频谱。 2. 采用同一频率但不同占空比的方波对同一模拟信号抽样并还原,观测并比较抽样信号及还原信号的波形和频谱 三. 实验步骤: 1. 将信号源模块、模拟信号数字化模块小心地固定在主机箱中,确保电源接触良好。 2. 插上电源线,打开主机箱右侧的交流开关,在分别按下两个模块中的电源开关,对应的发光二极管灯亮,两个模块均开始工作。 3. 信号源模块调节“2K 调幅”旋转电位器,是“2K 正弦基波”输出幅度为3V 左右。 4. 实验连线 5. 不同频率方波抽样 6. 同频率但不同占空比方波抽样 7. 模拟语音信号抽样与还原 四. 实验现象及结果分析: 1. 固定占空比为50%的、不同频率的方波抽样的输出时域波形和频谱: (1) 抽样方波频率为4KHz 的“PAM 输出点”时域波形: 抽样方波频率为4KHz 时的频谱: 50K …… …… PAM 输出波形 输入波形

分析: 理想抽样时,此处的抽样方波为抽样脉冲,则理想抽样下的抽样信号的频谱应该是无穷多个原信号频谱的叠加,周期为抽样频率;但是由于实际中难以实现理想抽样,即抽样方波存在占空比(其频谱是一个Sa()函数),对抽样频谱存在影响,所以实际中的抽样信号频谱随着频率的增大幅度上整体呈现减小的趋势,如上面实验频谱所示。仔细观察上图可发现,某些高频分量大于低频分量,这是由于采样频率为4KHz ,正好等于奈奎斯特采样频率,频谱会在某些地方产生混叠。 (2) 抽样方波频率为8KHz 时的“PAM 输出点”时域波形: 2KHz 6K 10K 14K 输入波形 PAM 输出波形

【微机实验】2018东南大学微型计算机原理及应用实验二

实验二基本算术和逻辑运算 学院:信息科学与工程学院姓名:周信元学号:04016523 实验日期:2018.4.4 一、实验目的 1.熟悉算术和逻辑运算指令的功能。 2.进一步了解标志寄存器各标志位的意义和指令执行对它的影响。 二、实验任务 1.采用单步执行方式执行下列各程序段,检查各标志位的情况。 程序段1 MOV AX, 10101H ;AX=1010H MOV SI, 2000H ;SI=2000H ADD AL, 30H ;AX=1040H ADD AX, SI ;AX=3040H MOV BX, 03FFH ;BX=03FFH ADD AX, BX ;AX=343FH MOV[0020],1000H ;DS:[0020]=1000H ADD 0020, AX ;DS:[0020]=443FH 程序段2: MOV AX, OA0AOIH ;AX=A0A0H ADO AX, OFFFFH ;AX=A09FH MOV CX, OFFOOH ;CX=FF00H ADD AX, CX ;AX=9F9FH SUB AX, AX ;AX=0000H INC AX ;AX=0001H OR CX, OOFFH ;CX=FFFFH AND CX, OFOFH ;CX=0F0FH M0V[0010],CX ;DS:[0010]=OFOFH 程序段3: MOV BL, 25H ;BX=0025H MO[0010],04H ;DS:[0010]=04H MOV AL, [0010] ;AX=0004H MUL BL ;AX=0094H 程序段4: MOV BL, 04H ;BX=0004H MOV WORD PTR L0010], 0080H;DS:[0010]=0080H MOV AX, [0010] ;AX=0080H DIV BL ;AX=0020H 程序段5:

计算机操作系统进程调度实验报告材料

操作系统实验题:设计一若干并发进程的进程调度程序 一、实验目的 无论是批处理系统、分时系统还是实时系统,用户进程数一般都大于处理机数,这将导致用户进程互相争夺处理机。这就要求进程调度程序按一定的策略,动态地把处理及分配给处于就绪队列中的某一进程,以使之执行。进程调度是处理机管理的核心内容。本实验要求采用最高优先数优先的调度算法(即把处理机分配给优先数最高的进程)和先来先服务算法编写和调试一个简单的进程调度程序。通过本实验可以加深理解有关进程控制块、进程队列的概念。并体会了优先数和先来先服务调度算法的具体实施办法。 二、实验要求 用高级语言编写和调试一个进程调度程序,以加深对进程的概念及进程调度算法的理解. 三、实验内容 进程调度算法:采用最高优先数优先的调度算法(即把处理机分配给优先数最高的进程)和先来先服务算法(将用户作业和就绪进程按提交顺序或变为就绪状态的先后排成队列,并按照先来先服务的方式进行调度处理)。 每个进程有一个进程控制块(PCB)表示。进程控制块可以包含如下信息:进程名、优先数、到达时间、需要运行时间、已用CPU时间、进程状态等等。 进程的优先数及需要的运行时间可以事先人为地指定(也可以由随机数产生)。进程的到达时间为进程输入的时间。 进程的运行时间以时间片为单位进行计算。

每个进程的状态可以是就绪W(Wait)、运行R(Run)、或完成F(Finish)三种状态之一。 就绪进程获得CPU后都只能运行一个时间片。用已占用CPU时间加1来表示。 如果运行一个时间片后,进程的已占用CPU时间已达到所需要的运行时间,则撤消该进程,如果运行一个时间片后进程的已占用CPU时间还未达所需要的运行时间,也就是进程还需要继续运行,此时应将进程的优先数减1(即降低一级),然后把它插入就绪队列等待CPU。 每进行一次调度程序都打印一次运行进程、就绪队列、以及各个进程的PCB,以便进行检查。重复以上过程,直到所要进程都完成为止。 四、实验算法流程 调度算法的流程图如下:

高等数学实验报告

课程实验报告 专业年级2016级计算机类2班课程名称高等数学 指导教师张文红 学生姓名李发元 学号20160107000215 实验日期2016.12 .21 实验地点勤学楼4-24 实验成绩 教务处制 2016 年9月21 日

实验项 目名称 Matlab软件入门与求连续函数的极限 实验目的 及要求 实验目的: 1.了解Matlab软件的入门知识; 2.掌握Matlab软件计算函数极限的方法; 3.掌握Matlab软件计算函数导数的方法。 实验要求: 1.按照实验要求,在相应位置填写答案; 2.将完成的实验报告,以电子版的形式交给班长, 转交给任课教师,文件名“姓名+ 学号”。 实验内容利用Matlab完成下列内容: 1、(1) 2 2 1 lim 471 x x x x →∞ - -+ ;(2) 3 tan sin lim x x x x → - ;(3) 1 lim 1 x x x x →∞ - ?? ? + ??2、(1)x x y ln 2 =,求y';(2)ln(1) y x =+,求()n y 实验步骤1.开启MATLAB编辑窗口,键入编写的命令,运行; 2.若出现错误,修改、运行直到输出正确结果; 3.将Matlab输入输出结果,粘贴到该实验报告相应的位置。第一题 2 2 1 lim 471 x x x x →∞ - -+ 运行编码是 >> syms x >> limit((x^2-1)/(4x^2x+1),x,inf) ans =

1/4 第二题3 0tan sin lim x x x x →- >> syms x >> limit((tanx-sinx)/(x^3),x,0) ans = 1 第三题1lim 1x x x x →∞-?? ?+?? >> syms x >> limit(((x-1)^x)/(x+1),x,inf) ans = 2 第四题(1)x x y ln 2=,求y '; >> syms x >>f(x)=x^2in(x) f(x)=x^2in(x) >>diff(f(x)), ans = 2xinx+x 第五题ln(1)y x =+,求()n y >> syms x >>f(x)In(1+x) f(x)In(1+x) >>diff(f(x),n), ans =

相关文档
相关文档 最新文档