当前位置:文档之家› 购物车系统实验报告

购物车系统实验报告

购物车系统实验报告
购物车系统实验报告

应用软件开发课程设计报告

----购物车与订单系统

姓名:刘升

学号:201113040117

专业:软件工程

目录

一、实验目的: (3)

二、总体设计: (3)

1、系统的功能 (3)

三、详细设计 (3)

1、数据表的结构 (3)

2、整过系统的设计 (4)

四、实验小结: (12)

一、实验目的:

1.利用用户控件和母版页进行界面设计

2.实现数据表多表之间的同步

3.完成对数据表的显示、修改和统计

二、总体设计:

1、系统的功能

主页面的设计

商品的分类显示

选购和调整购物车

集中结算

存储订单

查看订单

三、详细设计

1、数据表的结构

三张表分别如下:

2、整过系统的设计

首先从母版页开始介绍,模板页主要利用GridView进行设计的,如下图:

然后介绍主页,利用gridview将商品罗列出来如下图:

内部的方法代码如下:

using System;

using System.Collections.Generic;

using System.Linq;

using System.Web;

using System.Web.UI;

using System.Web.UI.WebControls;

namespace ShoppingNET

{

public partial class 主页: System.Web.UI.Page

{

protected void Page_Load(object sender, EventArgs e)

{

}

protected void GridView3_RowCommand(object sender, GridViewCommandEventArgs e)

{

System.Data.DataTable Cart = new System.Data.DataTable();

if (https://www.doczj.com/doc/71505652.html,mandName == "select")

{

if (Session["shoppingCart"] == null)

{

Cart.Columns.Add("商品编号", typeof(int));

Cart.Columns.Add("商品名称", typeof(string));

Cart.Columns.Add("单位含量", typeof(string));

Cart.Columns.Add("单价", typeof(double));

Session["shoppingCart"] = Cart;

}

Cart = (System.Data.DataTable)Session["shoppingCart"];

int index = Convert.ToInt32(https://www.doczj.com/doc/71505652.html,mandArgument);

GridViewRow row = GridView3.Rows[index];

string bhText = row.Cells[0].Text;

string mcText = row.Cells[2].Text;

string dyText = row.Cells[3].Text;

string djText = row.Cells[4].Text;

int bh = int.Parse(bhText);

double dj = double.Parse(djText);

System.Data.DataRow rr = Cart.NewRow();

rr["商品编号"] = bh;

rr["商品名称"] = mcText;

rr["单位含量"] = dyText;

rr["单价"] = dj;

Cart.Rows.Add(rr);

Session["shoppingCart"] = Cart;

}

}

}

}

其次,当运行完主页,点击我们选购的商品,会进入到购物车这一块,利用Gridview进行数据显示,用Session对象保存购货车,并且利用Textbox设计用户标签,在Gridview控件中加入模板列,放入Textbox控件,以便于输入上平数量,然后再Gridview控件中加入Button控件,将其CommondName属性进行设置,如下图:

代码如下:

using System;

using System.Collections.Generic;

using System.Linq;

using System.Web;

using System.Web.UI;

using System.Web.UI.WebControls;

namespace ShoppingNET

{

public partial class 购物车: System.Web.UI.Page

{

protected void Page_Load(object sender, EventArgs e)

{

if (!IsPostBack)

{

GridView2.DataSource = Session["shoppingCart"];

DataBind();

}

}

protected void GridView2_RowCommand(object sender, GridViewCommandEventArgs e)

{

}

protected void GridView2_RowCommand1(object sender, GridViewCommandEventArgs e)

{

System.Data.DataTable C = new System.Data.DataTable();

if (https://www.doczj.com/doc/71505652.html,mandName == "buy")

{

if (Session["SP2"] == null)

{

C.Columns.Add("商品编号", typeof(int));

C.Columns.Add("商品名称", typeof(string));

C.Columns.Add("单元含量", typeof(string));

C.Columns.Add("单价", typeof(double));

C.Columns.Add("订购数量", typeof(int));

C.Columns.Add("折扣", typeof(double));

C.Columns.Add("合计", typeof(double));

Session["SP2"] = C;

}

C = (System.Data.DataTable)Session["SP2"];

if (TextBox1.Text == "")

{

V alidate();

}

else

{

Session["KH"] = TextBox1.Text;

int index = Convert.ToInt32(https://www.doczj.com/doc/71505652.html,mandArgument);

GridViewRow row = GridView2.Rows[index];

TextBox tt = (System.Web.UI.WebControls.TextBox)row.Cells[1].FindControl("TextBox3");

string dg1 = tt.Text;

int dg = int.Parse(dg1);

if (dg < 1) dg = 1;

string bhText = row.Cells[2].Text;

string mcText = row.Cells[3].Text;

string dyText = row.Cells[4].Text;

string djText = row.Cells[5].Text;

int bh = int.Parse(bhText);

double dj = double.Parse(djText);

System.Data.DataRow rr = C.NewRow();

rr["商品编号"] = bh;

rr["商品名称"] = mcText;

rr["单元含量"] = dyText;

rr["单价"] = dj;

rr["订购数量"] = dg;

int zk = 1;

rr["折扣"] = zk;

double hj = dj * dg * zk;

rr["合计"] = hj;

C.Rows.Add(rr);

Session["SP2"] = C;

}

}

}

}

}最后进行结账,在这一块主要涉及的还是GridView,而且要利用复选框对选项进行确定,以及Button控件、Textbox控件,界面如

代码如下:

using System;

using System.Collections.Generic;

using System.Linq;

using System.Web;

using System.Web.UI;

using System.Web.UI.WebControls;

namespace ShoppingNET

{

public partial class结á账? : System.Web.UI.Page

{

protected void Page_Load(object sender, EventArgs e)

{

if (!IsPostBack)

{

TextBox2.Text = (string)Session["KH"];

GridView2.DataSource = Session["SP2"];

GridView2.DataBind();

}

}

protected void GridView2_SelectedIndexChanged(object sender, EventArgs e)

{

}

protected void Button1_Click(object sender, EventArgs e)

{

double sum=0.0;

for (int ii = 0; ii < GridView2.Rows.Count; ii++)

{

CheckBox cc =

(CheckBox)GridView2.Rows[ii].Cells[0].FindControl("CheckBox1");

if (cc.Checked)

{

sum = sum + (double.Parse(GridView2.Rows[ii].Cells[7].Text));

}

}

TextBox3.Text = sum.ToString();

}

}

}

当保存到订单之后,后显示给用户或者售货员查看,主要利用的是Gridview,界面如下:

首先我们进入主页,了解商品种类信息之后,确定购买商品,点击确定:

然后我们需要购买的商品就会加入到购物车,如下:

输入客户姓名,kangsheng,会将结果尽心汇总到账单,如下:

从而汇总到服务员那里,最会生成订单那,供客户查看,该系统完成。

四、实验小结:

1、通过这次试验我弄懂了很多控件的用途以及关于数据绑定的一些基本知识

2、这个系统虽然最后的订单查看这一块我虽然没有完成,但是我还是学会了不少东西

3、通过一学期的学习,基本会一些最简单功能的网页的设计,希望在不断练习下逐渐了解多功能系统的设计,这个购物车系统是一个很典型的例子,我要笑话他,以后遇见了别的网页,不至于无从下手!

Nachos_Project_1_2014-操作系统实验

Nachos实验项目 本实验项目采用纽约大学计算机系相关课程的实验设计。这些实验的内容以及nachos 的完整介绍请参考相关文档。 Nachos实验项目将采用分组方式完成。每4人为一组(个别组除外)。分组确定后,未经特别批准,不得变更。请各组组长在自己的起始目录下创建试验结果提交目录“nachos”(不含引号,均为小写字母)。 每次实验,我们都将指定需要提交的内容和截止时间,第一次试验的提交内容放在起始目录下的“nachos/1”目录内,第二次的放在“nachos/2”内,依次类推。请大家关注,并严格按要求操作。一个小组只要提交一份实验报告即可。对未按实验提交要求操作而造成提交失败的,将被视为实验未完成(提交内容由程序自动收集)。 从第4周起,双周的周二下午2:30~5:30为试验时间并兼做理论课程答疑时间。实验地点在404。 实验一体验Nachos下的并发程序设计 (实验指导:os_lab.ppt) 1内容简述 本次实验的目的在于对nachos进行熟悉,并初步体验nachos下的并发程序设计。实验内容分三部分:安装nachos;用C++实现双向有序链表;在nachos系统中使用你所写的链表程序并演示一些并发错误。 2实验内容(详见英文文档nachos-lab.pdf文档3.1章) 2.1安装nachos 2.2实现双向有序链表(50%) 如对c++不很熟悉,可以参考nachos-3.4/c++example/中的有关实现。 2.3体验nachos线程系统(50%) 需要做的更改有: 1)将dllist.h, https://www.doczj.com/doc/71505652.html,, https://www.doczj.com/doc/71505652.html,等文件拷贝到nachos-3.4/code/threads/目录中。 2)修改https://www.doczj.com/doc/71505652.html,mon中的THREAD_H、THREAD_C、THREAD_O以保证新的文件确 实被编译了。 3)根据实验内容,https://www.doczj.com/doc/71505652.html,,https://www.doczj.com/doc/71505652.html,等文件可能需要改动。 3实验结果的提交 本实验应提交的内容: https://www.doczj.com/doc/71505652.html,mon https://www.doczj.com/doc/71505652.html, https://www.doczj.com/doc/71505652.html, dllist.h https://www.doczj.com/doc/71505652.html,

【精品实验报告】软件体系结构设计模式实验报告

【精品实验报告】软件体系结构设计模式实验报告软件体系结构 设计模式实验报告 学生姓名: 所在学院: 学生学号: 学生班级: 指导老师: 完成日期: 一、实验目的 熟练使用PowerDesigner和任意一种面向对象编程语言实现几种常见的设计模式,包括组合模式、外观模式、代理模式、观察者模式和策略模式,理解每一种设计模式的模式动机,掌握模式结构,学习如何使用代码实现这些模式,并学会分析这些模式的使用效果。 二、实验内容 使用PowerDesigner和任意一种面向对象编程语言实现组合模式、外观模式、代理模式、观察者模式和策略模式,包括根据实例绘制模式结构图、编写模式实例实现代码,运行并测试模式实例代码。 (1) 组合模式 使用组合模式设计一个杀毒软件(AntiVirus)的框架,该软件既可以对某个文件夹(Folder)杀毒,也可以对某个指定的文件(File)进行杀毒,文件种类包括文本文件TextFile、图片文件ImageFile、视频文件VideoFile。绘制类图并编程模拟实现。 (2) 组合模式 某教育机构组织结构如下图所示: 北京总部 教务办公室湖南分校行政办公室 教务办公室长沙教学点湘潭教学点行政办公室

教务办公室行政办公室教务办公室行政办公室 在该教育机构的OA系统中可以给各级办公室下发公文,现采用 组合模式设计该机构的组织结构,绘制相应的类图并编程模拟实现,在客户端代码中模拟下发公文。(注:可以定义一个办公室类为抽象叶子构件类,再将教务办公室和行政办公室作为其子类;可以定义一个教学机构类为抽象容器构件类,将总部、分校和教学点作为其子类。) (3) 外观模式 某系统需要提供一个文件加密模块,加密流程包括三个操作,分别是读取源文件、加密、保存加密之后的文件。读取文件和保存文件使用流来实现,这三个操作相对独立,其业务代码封装在三个不同的类中。现在需要提供一个统一的加密外观类,用户可以直接使用该加密外观类完成文件的读取、加密和保存三个操作,而不需要与每一个类进行交互,使用外观模式设计该加密模块,要求编程模拟实现。参考类图如下: reader = new FileReader();EncryptFacadecipher = new CipherMachine();writer = new FileWriter();-reader: FileReader-cipher: CipherMachine-writer: FileWriter +EncryptFacade () +fileEncrypt (String fileNameSrc,: voidString plainStr=reader.read(fileNameSrc); String fileNameDes)String

操作系统实验报告三

课程实验报告 课程名称姓名实验名称实验目的及要求 实验3进程并发与同步 1、加深对进程概念的理解,区分进程并发执行与串行执行; 2、掌握进程并发执行的原理,理解进程并发执行的特点; 3、了解fork()系统调用的返回值,掌握用fork()创建进程的方法;熟悉wait、exit等系统调用; 4、能利用相应的系统调用实现进程树与进程间的同 步。 实 验操作系统:linux Un bu ntu 11.10 环 境实验工具:Vmware 实验内容 1、编写一C语言程序,实现在程序运行时通过系统调用fork()创建两个子进程,使父、子三进程并发执行,父亲进程执行时屏幕显示“I am father ”,儿子进 程执行时屏幕显示“ I am son ",女儿进程执行时屏幕显示“ I am daughter ”。 要求多次连续反复运行这个程序,观察屏幕显示结果的顺序,直至出现不一样的情况为止。要求有运行结果截图与结果分析 2、连续4个fork()的进程家族树,family1-1.c 程序清单如下: #in clude main () { fork(); fork(); fork(); fork(); printf( A\n ”); } 请根据程序运行结果,画出进程家族树,并分析原 因。

3、 修改程序1,在父、子进程中分别使用 wait 、exit 等系统调用“实现”其同 步推进,父进程必须等待儿子进程与女儿进程结束, 才可以输出消息。 写出相应的同 步控制,并分析运行结果。 4、 创建一个子进程,并给它加载程序,其功能是调用键盘命令“ ls -I ”,已知 该键盘命令的路径与文件名为: /bin/ls 。父进程创建子进程, 并加载./child2 程序。 写出相应的程序代码并分析程序运行结果。 1、编写一 C 语言程序,实现在程序运行时通过系统调用 fork()创建两个子进 程,使父、子三进程并发执行,父亲进程执行时屏幕显示“ I am father ”, 儿子进程执行时屏幕显示“ I am son ”,女儿进程执行时屏幕显示“ I am daughter "。并且反复的测试,观察每一次的执行的顺序有什么不同 2、修改程序1,在父、子进程中分别使用 wait 、exit 等系统调用“实现”其同 步推进,父进程必须等待儿子进程与女儿进程结束,才可以输出消息。 4、创建一个子进程,并给它加载程序,其功能是调用键盘命令“ ls -I ”,已知 该键盘命令的路径与文件名为: /bin/ls 。父进程创建子进程, 并加载./child2 程序。 法 描 述 及 实 验 步 骤 调 试过 程及实 验结果

Nachos实验报告9

计算机科学与技术学院实验报告:9 实验题目:设计并实现具有优先级的线程调度策略姓名:李威 日期:2013-12-1 学号:201100300259 班级:11级软件3班Email:sduliwei@https://www.doczj.com/doc/71505652.html, 实验目的: Nachos系统采用基本的FCFS的线程调度策略,修改成为具有优先级的线程调度策略 硬件环境: 软件环境: linux操作系统,Nachos操作系统 实验步骤: 1.修改Thread类的构造函数,加入优先级priority属性,并且加入getPrioty方法。以便在线程的 等待队列中找到优先级最高的线程。其中,线程优先级的范围从1到7,默认为7,即最低优先级。 修改代码如下:(https://www.doczj.com/doc/71505652.html,,thread.h) class Thread { …………………………………… public: Thread(char* debugName, int priority=7);// initialize a Thread ………………………………………………… int getPriority(){return this->priority; } Thread::Thread(char* threadName, int p) { if(p<1) priority = 1; else if(p>7) priority = 7; else priority = p; name = threadName; stackTop = NULL; stack = NULL; status = JUST_CREATED; #ifdef USER_PROGRAM space = NULL; #endif } 2,首先,了解Nachos系统原来的线程调度方式。通过读https://www.doczj.com/doc/71505652.html,,https://www.doczj.com/doc/71505652.html,,https://www.doczj.com/doc/71505652.html,文件 中的内容了解线程调度的方式。

计算机体系结构实验报告二

实验二结构相关 一、实验目得: 通过本实验,加深对结构相关得理解,了解结构相关对CPU性能得影响。 二、实验内容: 1、用WinDLX模拟器运行程序structure_d、s 。 2、通过模拟,找出存在结构相关得指令对以及导致结构相关得部件。 3、记录由结构相关引起得暂停时钟周期数,计算暂停时钟周期数占总执行 周期数得百分比。 4、论述结构相关对CPU性能得影响,讨论解决结构相关得方法。 三、实验程序structure_d、s LHI R2, (A>>16)&0xFFFF 数据相关 ADDUI R2, R2, A&0xFFFF LHI R3, (B>>16)&0xFFFF ADDUI R3, R3, B&0xFFFF ADDU R4, R0, R3 loop: LD F0, 0(R2) LD F4, 0(R3) ADDD F0, F0, F4 ;浮点运算,两个周期,结构相关 ADDD F2, F0, F2 ; < A stall is found (an example of how to answer your questions) ADDI R2, R2, #8 ADDI R3, R3, #8 SUB R5, R4, R2 BNEZ R5, loop ;条件跳转 TRAP #0 ;; Exit < this is a ment !! A: 、double 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 B: 、double 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 四、实验过程 打开软件,load structure_d、s文件,进行单步运行。经过分析,此程序一 次循环中共有五次结构相关。(Rstall 数据相关Stall 结构相关) 1)第一个结构相关:addd f2,,f0,f2 由于前面得数据相关,导致上一条指令addd f0,f0,f4暂停在ID阶段,所以下一条指令addd f2,,f0,f2发生结构相关,导致相关得部件:译码部件。

操作系统实验报告三

课程实验报告

3、修改程序1,在父、子进程中分别使用wait、exit等系统调用“实现”其同步推进,父进程必须等待儿子进程与女儿进程结束,才可以输出消息。写出相应的同步控制,并分析运行结果。 4、创建一个子进程,并给它加载程序,其功能是调用键盘命令“ls -l”,已知该键盘命令的路径与文件名为:/bin/ls。父进程创建子进程,并加载./child2程序。写出相应的程序代码并分析程序运行结果。 算法描述及实验步骤 1、编写一C语言程序,实现在程序运行时通过系统调用fork( )创建两个子进 程,使父、子三进程并发执行,父亲进程执行时屏幕显示“I am father”, 儿子进程执行时屏幕显示“I am son”,女儿进程执行时屏幕显示“I am daughter”。并且反复的测试,观察每一次的执行的顺序有什么不同 2、修改程序1,在父、子进程中分别使用wait、exit等系统调用“实现”其同 步推进,父进程必须等待儿子进程与女儿进程结束,才可以输出消息。 4、创建一个子进程,并给它加载程序,其功能是调用键盘命令“ls -l”,已知该键盘命令的路径与文件名为:/bin/ls。父进程创建子进程,并加载./child2程序。 调试过程及实验结果

总结 1、实现在程序运行时通过系统调用fork( )创建两个子进程,使父、子三进程并发执行,父亲进程执行时屏幕显示“I am father”,儿子进程执行时屏幕显示“I am son”,女儿进程执行时屏幕显示“I am daughter”。这一点需要注意。返回结果时,由于每一次的不确定性,所以要想得到比较具有说服性的,就必须经过多次的测试。 2、连续4个fork()的进程家族树在进行实验的时候可能会出现进程输出信息一直一样的情况,需要多次执行输出才有可能会看到输出结果不一样的情况

操作系统实验报告心得体会

操作系统实验报告心得体会 每一次课程设计度让我学到了在平时课堂不可能学到的东西。所以我对每一次课程设计的机会都非常珍惜。不一定我的课程设计能够完成得有多么完美,但是我总是很投入的去研究去学习。所以在这两周的课设中,熬了2个通宵,生物钟也严重错乱了。但是每完成一个任务我都兴奋不已。一开始任务是任务,到后面任务就成了自己的作品了。总体而言我的课设算是达到了老师的基本要求。总结一下有以下体会。 1、网络真的很强大,用在学习上将是一个非常高效的助手。几乎所有的资料都能够在网上找到。从linux虚拟机的安装,到linux的各种基本命令操作,再到gtk的图形函数,最后到文件系统的详细解析。这些都能在网上找到。也因为这样,整个课程设计下来,我浏览的相关网页已经超过了100个(不完全统计)。当然网上的东西很乱很杂,自己要能够学会筛选。 不能决定对或错的,有个很简单的方法就是去尝试。就拿第二个实验来说,编译内核有很多项小操作,这些小操作错了一项就可能会导致编译的失败,而这又是非常要花时间的,我用的虚拟机,编译一次接近3小时。所以要非常的谨慎,尽量少出差错,节省时间。多找个几个参照资料,相互比较,

慢慢研究,最后才能事半功倍。 2、同学间的讨论,这是很重要的。老师毕竟比较忙。对于课程设计最大的讨论伴侣应该是同学了。能和学长学姐讨论当然再好不过了,没有这个机会的话,和自己班上同学讨论也是能够受益匪浅的。大家都在研究同样的问题,讨论起来,更能够把思路理清楚,相互帮助,可以大大提高效率。 3、敢于攻坚,越是难的问题,越是要有挑战的心理。这样就能够达到废寝忘食的境界。当然这也是不提倡熬夜的,毕竟有了精力才能够打持久战。但是做课设一定要有状态,能够在吃饭,睡觉,上厕所都想着要解决的问题,这样你不成功都难。 4、最好在做课设的过程中能够有记录的习惯,这样在写实验报告时能够比较完整的回忆起中间遇到的各种问题。比如当时我遇到我以前从未遇到的段错误的问题,让我都不知道从何下手。在经过大量的资料查阅之后,我对段错误有了一定的了解,并且能够用相应的办法来解决。 在编程中以下几类做法容易导致段错误,基本是是错误地使用指针引起的 1)访问系统数据区,尤其是往系统保护的内存地址写数据,最常见就是给一个指针以0地址 2)内存越界(数组越界,变量类型不一致等) 访问到不属于你的内存区域

nachos Lab7实习报告

shell实现实习报告 页脚内容1

目录 内容一:总体概述 (3) 内容二:任务完成情况 (3) 任务完成列表(Y/N) (3) 具体Exercise的完成情况 (4) 内容三:遇到的困难以及解决方法 (19) 内容四:收获及感想 (20) 内容五:对课程的意见和建议 (20) 内容六:参考文献 (20) 页脚内容2

内容一:总体概述 本次实习需要实现用户程序shell。shell是提供使用者使用界面的软件(命令解析器),他接收用户命令,然后调用相应的应用程序。本次shell实现的基础是前面已经完成的相关功能。注意到nachos已经实现简单的shell,我们只需要在此基础上进行相关的修改。 内容二:任务完成情况 任务完成列表(Y/N) 页脚内容3

具体Exercise的完成情况 设计实现一个用户程序shell,通过./nachos -x shell进入用户交互界面中。在该界面中可以查询支持的功能、可以创建删除文件或目录、可以执行另一个用户程序并输出运行结果,类似Linux上跑的bash。你实现的越完善,碰到的问题越多,学到的也会越多。 本实验所修改的代码包括内核和用户程序两部分。 首先,需要解析输入的命令,这部分现有程序已经完成 Write(prompt, 2, output); Read(&buffer[i], 1, input); 因为在Lab6中,我没有考虑标准输入和标准输出的问题,所以需要修改https://www.doczj.com/doc/71505652.html,处理read系统调用和处理write系统调用的部分 针对处理read系统调用的部分,如果系统调用的第3个参数是0(表示标准输入),那么读取从用户界面输入的字符串存入相应的位置 if(fd == 0){ for (int i = 0; i < count; i++) content[i] = getchar(); } 针对处理write系统调用的部分,如果系统调用的第3个参数是1(表示标准输出),那么输出缓冲区 页脚内容4

操作系统实验报告 实验三

昆明理工大学信息工程与自动化学院学生实验报告 (2012 —2013 学年第二学期) 课程名称:操作系统开课实验室:信自楼445 2013 年 5 月 16 日 一、实验要求 对给定的一个页面走向序列,请分别用先进先出算法和二次机会算法,计算淘汰页面的顺序、缺页次数和缺页率,具体的页面走向可参考教材例题或习题。 二、实验目的 存储管理的主要功能之一是合理地分配空间。请求页式管理是一种常用的虚拟存储管理技术。通过本次实验,要求学生通过编写和调试地址转换过程的模拟程序以加强对地址转换过程的了解,通过请求页式存储管理中页面置换算法模拟设计,了解虚拟存储技术的特点,掌握请求页式存储管理的页面置换算法。 三、实验原理及基本技术路线图(方框原理图) 用C或C++语言模拟实现请求式分页管理。要求实现:页表的数据结构、分页式内存空间的分配及回收(建议采用位图法)、地址重定位、页面置换算法(从FIFO,LRU,NRU中任选一种)。 提示:可先用动态申请的方式申请一大块空间,然后假设该空间为内存区域,对该空间进行

流程图:

数据结构定义: 我提供定义了两个类。第一个类就是页面类,在这类里面包括一些重要的数据成员。

有页号(page_no),页框号(frame_no),页面是否在内存的标志(flag(1表示在内存,0表示不在内存)),访问次数(times)。另一个类是进程控制块类PCB。类的数据成员有id(进程编号),name(进程名),size(进程大小),*p(页类指针)。在本类中,有一些成员函数:构造函数(用来初始化本类的所有数据),displayPCB(输出函数),convert(地址映射函数),allocation(分配函数),restore(回收函数)。另外还有一些类外的函数:initMemorySpace(初始化内存空间的函数),displayMemorySpace(输出内存空间的状态1(表示占用)0(表示空))。 四、所用仪器、材料(设备名称、型号、规格等)。 计算机一台 五、实验方法、步骤 程序代码: #include #include #include using namespace std; const int frame_size=1024;//页框长度,固定为 1k const int page_size=1024;//页面长度,固定为 1k const int memory_size=102400;//内存容量,固定为 100k const int frame_number=memory_size/frame_size;// 100k/1k=100 frames int *memory;//指针变量,用来存内存的状态1还是0。 void initMemorySpace()//初始化内存空间 { int i,ran,times; time_t t;//定义time_t对象 t t=time(0); srand(t);//随机改变每秒 times=0;//变量times初始化为0,变量的功能是检查内存空间是否有一半空了没。 memory=new int[frame_number];//申请内存空间,有frame_number 这么大的空间 for(i=0;i

操作系统实验报告

操作系统实验报告 实验名称: 系统的引导 所在班级: 指导老师: 老师 实验日期: 2014年3 月29 日

一、实验目的 ◆熟悉hit-oslab实验环境; ◆建立对操作系统引导过程的深入认识; ◆掌握操作系统的基本开发过程; ◆能对操作系统代码进行简单的控制,揭开操作系统的神秘面纱。 二、实验容 1. 阅读《Linux核完全注释》的第6章引导启动程序,对计算机和Linux 0.11的引导过程进行初步的了解。 2. 按照下面的要求改写0.11的引导程序bootsect.s。 3. 有兴趣同学可以做做进入保护模式前的设置程序setup.s。 4. 修改build.c,以便可以使用make BootImage命令 5. 改写bootsect.s主要完成如下功能: bootsect.s能在屏幕上打印一段提示信息XXX is booting...,其中XXX是你给自己的操作系统起的名字,例如LZJos、Sunix等。 6. 改写setup.s主要完成如下功能: bootsect.s能完成setup.s的载入,并跳转到setup.s开始地址执行。而setup.s 向屏幕输出一行"Now we are in SETUP"。setup.s能获取至少一个基本的硬件参数(如存参数、显卡参数、硬盘参数等),将其存放在存的特定地址,并输出到屏幕上。setup.s不再加载Linux核,保持上述信息显示在屏幕上即可。 三、实验环境

本实验使用的系统是windows系统或者是Linux系统,需要的材料是osexp。 四、实验步骤 1. 修改bootsect.s中的提示信息及相关代码; 到osexp\Linux-0.11\boot目录下会看到图1所示的三个文件夹,使用UtraEdit 打开该文件。将文档中的98行的mov cx,#24修改为mov cx,#80。同时修改文档中的第246行为图2所示的情形。 图1图2 图3 2. 在目录linux-0.11\boot下,分别用命令as86 -0 -a -o bootsect.obootsect.s和 ld86 -0 -s -obootsectbootsect.o编译和bootsect.s,生成bootsect文件; 在\osexp目录下点击MinGW32.bat依此输入下面的命令: cd linux-0.11 cd boot as86 -0 -a -o bootsect.obootsect.s ld86 -0 -s -o bootsectbootsect.o

nachos实验七实验报告

nachos实验报告七 实验题目: Extension of AddrSpace 学号:201200301057 日期:2014-11-29 班级:计软12-3 姓名:高鹏辉 实验目的: 在了解了Nachos 装入并执行单个用户进程的情况后,我们就需要进一步完成用户内存空间的扩充以便多用户程序同时驻留内存,进而使多用户进程并发执行。 硬件环境: Mem:3.9G CPU:Intel? Core?2 Quad CPU Q9500 @ 2.83GHz × 4 Disk:15.5 GB 软件环境: System:ubuntu12.04LST i386 gcc: (Ubuntu 4.6.3-1ubuntu5) 4.6.3 nachos system 实验步骤: 要在Nachos中实现多用户程序同时驻留内存并发执行,首先涉及到Nachos的两个系统调用:Exec()和Exit()。这两个系统调用也是构造父子进程并发执行的基础。假设我们有以下两个用户程序:../test/exec.c和../test/halt.c ../test/halt.c 第65页 用户进程管理设计 1 #include "syscall.h" 2 int 3 main() 4 { 5 Halt() 6 } ../test/exec.c 1 #include "syscall.h" 2 int 3 main() 4 { 5 SpacId pid; 6 pid = Exec("../test/halt.noff");

7 Halt() 8 } 在文件../test/exec.c第5行上的语句Exec是一条Nachos的系统功能调用,它的功能为装入并执行以其参数为名的可执行文件,即创建一个新的用户进程。假设我们先执行../test/exec.noff 程序,则../test/exec.noff 会在它还没有执行结束时又装入并执行另外一个程序halt.noff,并与它同时驻留内存. pageTable[i].physicalPage=usermap-->Find();避免从头开始物理存储覆盖了前一个用户程序的内存内容 利用Nachos在../userprog/bitmap.h 中文件定义的Bitmap类。利用bitmap 记录和申请内存物理帧,使不同的程序装入到不同的物理空间中去,下面是对新的内存分配存储算法,改进了对多个用户程序的同时进驻内存的支持

体系结构实验报告

中南大学软件学院 软件体系结构 设计模式实验报告 学生姓名:宋昂 所在学院:软件学院 学生学号: 3901080115 学生班级:软件0801 指导老师:刘伟 完成日期: 2010-12-7

一、实验目的 熟练使用PowerDesigner和任意一种面向对象编程语言实现几种常见的设计模式,包括简单工厂模式、工厂方法模式、抽象工厂模式、单例模式和适配器模式,理解每一种设计模式的模式动机,掌握模式结构,学习如何使用代码实现这些模式,并学会分析这些模式的使用效果。 二、实验内容 使用PowerDesigner和任意一种面向对象编程语言实现简单工厂模式、工厂方法模式、抽象工厂模式、单例模式和适配器模式,包括根据实例绘制模式结构图、编写模式实例实现代码,运行并测试模式实例代码。 (1) 简单工厂模式 使用简单工厂模式设计一个可以创建不同几何形状(Shape)的绘图工具类,如可创建圆形(Circle)、方形(Rectangle)和三角形(Triangle) 对象,每个几何图形都要有绘制draw()和擦除erase()两个方法,要求在绘制不支持的几何图形时,提示一个UnsupportedShapeException,绘制类图并编程实现。 (2) 简单工厂模式 使用简单工厂模式模拟女娲(Nvwa)造人(Person),如果传入参数“M”,则返回一个Man 对象,如果传入参数“W”,则返回一个Woman对象,使用任意一种面向对象编程语言实现该场景。现需要增加一个新的Robot类,如果传入参数“R”,则返回一个Robot对象,对代码进行修改并注意女娲的变化。 (3) 工厂方法模式 某系统日志记录器要求支持多种日志记录方式,如文件记录、数据库记录等,且用户可以根据要求动态选择日志记录方式,现使用工厂方法模式设计该系统。用代码实现日志记录器实例,如果在系统中增加一个中的日志记录方式——控制台日志记录(ConsoleLog),绘制类图并修改代码,注意增加新日志记录方式过程中原有代码的变化。

操作系统实验报告

操作系统实验报告 Document number:NOCG-YUNOO-BUYTT-UU986-1986UT

许昌学院 《操作系统》实验报告书学号: 姓名:闫金科 班级:14物联网工程 成绩: 2016年02月

实验一Linux的安装与配置 一、实验目的 1.熟悉Linux系统的基本概念,比如Linux发行版、宏内核、微内核等。 2.掌握Linux系统的安装和配置过程,初步掌握Linux系统的启动和退出方 法。 3.熟悉Linux系统的文件系统结构,了解Linux常用文件夹的作用。 二、实验内容 1.从网络上下载VMware软件和两个不同Linux发行版镜像文件。 2.安装VMware虚拟机软件。 3.在VMware中利用第一个镜像文件完成第一个Linux的安装,期间完成网络 信息、用户信息、文件系统和硬盘分区等配置。 4.在VMware中利用第二个镜像文件完成第二个Linux的安装,并通过LILO或 者GRUB解决两个操作系统选择启动的问题。 5.启动Linux系统,打开文件浏览器查看Linux系统的文件结构,并列举出 Linux常用目录的作用。 三、实验过程及结果 1、启动VMware,点击新建Linux虚拟机,如图所示: 2、点击下一步,选择经典型,点击下一步在选择客户机页面选择 Linux,版本选择RedHatEnterpriseLinux5,如图所示: 3、点击下一步创建虚拟机名称以及所要安装的位置,如图所示: 4、点击下一步,磁盘容量填一个合适大小,此处选择默认值大小 10GB,如图所示: 5、点击完成,点击编辑虚拟机设置,选择硬件选项中的CD-ROM (IDE...)选项,在右侧连接中选择“使用ISO镜像(I)”选项,点 击“浏览”,找到Linux的镜像文件,如图所示:

nachos01

实验一体验Nachos下的并发程序设计 一、小组成员及分工 汪于波(23020078104116):https://www.doczj.com/doc/71505652.html,的修改、https://www.doczj.com/doc/71505652.html,的修改和实验报告 潘羽龙(23020078104100):https://www.doczj.com/doc/71505652.html,的实现 吴道裕(23020078104132):https://www.doczj.com/doc/71505652.html,的实现和实验报告的完成 谭原(23020078104111):dllist.h的实现和https://www.doczj.com/doc/71505652.html,mon的修改 二、实验目的 对nachos进行熟悉,并初步体验nachos下的并发程序设计。 三、实验内容 1.安装nachos; 2.用C++实现双向有序链表; 3.在nachos系统中使用你所写的链表程序并演示一些并发错误 四、实验步骤 1.首先明确Nachos各部分的关系 在~/nachos/nachos-3.4/code/下有一个https://www.doczj.com/doc/71505652.html,mon,在code/的各个子目录下的Makefile都继承这个https://www.doczj.com/doc/71505652.html,mon。通过阅读https://www.doczj.com/doc/71505652.html,知道,main函数一旦启动,立即调用Initialize,进行初始化的操作,然后对相应的参数进行处理,之后在分模块进行相应模块下的函数调用,执行相应的功能。 2.编写相应的函数 实验要求利用对双向链表的操作来演示并发程序可能出现的错误,首先需要实现双向链表dllist,包括dllist.h,https://www.doczj.com/doc/71505652.html,。当DLList类实现后,需要编写链表驱动函数Insert 和Remove来对链表进行驱动。通过改写https://www.doczj.com/doc/71505652.html,,使得多个线程在没有进行任何互斥操作的情况下对同一数据结构进行操作,在这个过程中就可能出现并发错误。改写https://www.doczj.com/doc/71505652.html,mon和https://www.doczj.com/doc/71505652.html,。 3.详细设计 a)dllist.h(~/nachos/nachos-3.4/code/threads/) 类DLList的声明 class DLLElement { public: DLLElement(void *itemPtr,int sortKey);//initialize a list element DLLElement *next;//next element on list DLLElement *prev;//previous element on list int key; void *item; }; class DLList { public: DLList();//initialize the list DLList(int type); ~DLList();//de-allocate the list

Windows操作系统实验三实验报告

Windows操作系统C/C++ 程序实验 姓名:___________________ 学号:___________________ 班级:___________________ 院系:___________________ ______________年_____月_____日

实验三Windows 2000/xp线程同步 一、背景知识 二、实验目的 在本实验中,通过对事件和互斥体对象的了解,来加深对Windows 2000/xp线程同步的理解。 1) 回顾系统进程、线程的有关概念,加深对Windows 2000/xp线程的理解。 2) 了解事件和互斥体对象。 3) 通过分析实验程序,了解管理事件对象的API。 4) 了解在进程中如何使用事件对象。 5) 了解在进程中如何使用互斥体对象。 6) 了解父进程创建子进程的程序设计方法。 三、工具/准备工作 在开始本实验之前,请回顾教科书的相关内容。 您需要做以下准备: 1) 一台运行Windows 2000/xp Professional操作系统的计算机。 2) 计算机中需安装V isual C++ 6.0专业版或企业版。 四、实验内容与步骤 1. 事件对象 清单4-1程序展示了如何在进程间使用事件。父进程启动时,利用CreateEvent() API创建一个命名的、可共享的事件和子进程,然后等待子进程向事件发出信号并终止父进程。在创建时,子进程通过OpenEvent() API打开事件对象,调用SetEvent() API使其转化为已接受信号状态。两个进程在发出信号之后几乎立即终止。 步骤1:登录进入Windows 2000/xp Professional。 步骤2:在“开始”菜单中单击“程序”-“Microsoft V isual Studio 6.0”–“Microsoft V isual C++ 6.0”命令,进入V isual C++窗口。 步骤3:在工具栏单击“打开”按钮,在“打开”对话框中找到并打开实验源程序3-1.cpp。 步骤4:单击“Build”菜单中的“Compile 3-1.cpp”命令,并单击“是”按钮确认。系统

操作系统实验报告

操作系统实验报告 银行家算法 班级:计算机()班 姓名:李君益 学号:(号) 提交日期: 指导老师: 林穗 一、设计题目 加深了解有关资源申请、避免死锁等概念,并体会和了解死锁和避免死锁的具体实施方法。 要求编写和调试一个系统动态分配资源的简单模拟程序,观察死锁产生的条件,并采用银行家算法,有效的防止和避免死锁的发生。 二、设计要求

内容: 编制银行家算法通用程序,并检测思考题中所给状态的安全性。 要求: (1)下列状态是否安全?(三个进程共享个同类资源) 进程已分配资源数最大需求数 (状态) (状态) (2)考虑下列系统状态 分配矩阵最大需求矩阵可用资源矩阵 问系统是否安全?若安全就给出所有的安全序列。若进程请求(),可否立即分配? 三、设计分析 一.关于操作系统的死锁 .死锁的产生 计算机系统中有许多独占资源,他们在任一时刻只能被一个进程使用,如磁带机,绘图仪等独占型外围设备,或进程表,临界区等软件资源。两个进程同时向一台打印机输出将导致一片混乱,两个进程同时进入临界区将导致数据库错误乃至程序崩溃。正因为这些原因,所有操作系统都具有授权一个进程独立访问某一辞源的能力。一个进程需要使用独占型资源必须通过以下的次序: ●申请资源 ●使用资源 ●归还资源 若申请施资源不可用,则申请进程进入等待状态。对于不同的独占资源,进程等待的方式是有差别的,如申请打印机资源、临界区资源时,申请失败将一位这阻塞申请进程;而申请打开文件文件资源时,申请失败将返回一个错误码,由申请进程等待一段时间之后重试。只得指出的是,不同的操作系统对于同一种资源采取的等待方式也是有差异的。 在许多应用中,一个进程需要独占访问多个资源,而操作系统允许多个进程并发执行共享系统资源时,此时可能会出现进程永远被阻塞的现象。这种现象称为“死锁”。 2.死锁的定义 一组进程处于死锁状态是指:如果在一个进程集合中的每个进程都在等待只能由该集合中的其他一个进程才能引发的时间,则称一组进程或系统此时发生了死锁。 .死锁的防止 .死锁产生的条件: ●互斥条件

山东大学nachos源码解读

Nachos源码解读 山东大学软件学院 2013级软件工程 哈根

1、从Machine.java开始——Nachos内核启动 (3) 2、Nachos 参数解析、设备创建和Debug方法 (4) 1) Nachos 启动参数解析 (4) 2) Nachos配置文件 (5) 3) Nachos 设备创建 (5) 4) Nachos Debug方法 (5) 3、Nachos 中断简述 (6) 1) PendingIntterrupt 中断处理与Intterupt增加中断调度 (6) 2) Intterupt中断查询 (6) 3) Timer 计时器类 (6) 4) Alarm 类 (7) 4、Nachos 内核线程及调度算法简述 (7) 1) 漫谈TCB (7) 3) ThreadQueue线程队列及调度算法关系 (10) 5、Nachos 文件系统简述 (11) 6、Nachos 用户进程、处理器和指令简述 (12) 1) Nachos 用户程序解析 (12) 2) Nachos 处理器和指令简述 (13) 3) Nachos 系统调用 (14) 7、Nachos 安全管理简述 (14)

1、从Machine.java开始——Nachos内核启动 Nachos的程序执行从Machine.java的main方法开始。主要进行的是处理启动参数、载入配置文件、设置工作目录、安装安全管理器、创建设备、并启动第一块TCB等操作,在TCB启动时会调用AutoGrader的start方法,其中启动了内核。 在AutoGrader的start方法执行时,AutoGrader首先会解析启动命令传入的参数,接着执行初始化操作,然后从配置文件中读取Kernel.kernel的值,构造内核,并且执行内核的初始化方法。紧接着,执行run方法,内含kernel的自检、run方法以及最后的终止。 由于不同project使用的内核不同,所以各个内核 的效果也是不一样的。下面以project1的内核为例 简要说明。 在Kernel抽象类中,会检查Kernel中的静态成员 变量kernel是否为空,并把当前对象赋值给Kernel, 这也决定了内核可以通过Kernel.kernel调用。在构 造器结束后,AutoGrader会执行Kernel的initialize 方法,对于phase1的ThreadedKernel而言,在该 方法中初始化了调度器,文件系统,alarm等。在 执行完initialize方法后,会进入AutoGrader的run 方法,依次执行内核自检、运行、停机操作。 对于phase1的ThreadedKernel而言,run方法 是空的,也就是执行完开机自检后就自动停机了。 开机自检依次KThread、Semaphore以及SynchList 的自检操作。 在phase2中,启动的是UserKernel,由UML图继承关系知,该类继承了ThreadedKernel,在该类的方法体中也多见super关键字,即ThreadedKernel做的事情,UserKernel也做了。初始化过程中,UserKernel还初始化了一个控制台,用来接收屏幕中用户的输入,并且还设置processor的异常处理器(exceptionHandler),用来处理指令周期中中断周期的各类系统调用以及其他中断异常。自检(selfTest)过程中还会接收用户字符,来判断控制台是否正常。run

操作系统实验报告.

学生学号0121210680225 实验课成绩 武汉理工大学 学生实验报告书 实验课程名称操作系统 开课学院计算机科学与技术学院 指导老师姓名刘军 学生姓名李安福 学生专业班级软件sy1201 2014 — 2015 学年第一学期

《操作系统》实验教学大纲 课程编号: 课程名称:操作系统/Operating System 实验总学时数:12学时 适应专业:计算机科学与技术、软件工程 承担实验室:计算机科学与技术学院实验中心 一、实验教学的目的和任务 通过实验掌握Linux系统下常用键盘命令、系统调用、SHELL编程、后台批处理和C程序开发调试手段等基本用法。 二、实验项目及学时分配 序号实验项目名称实验学时实验类型开出要求 01 Linux键盘命令和vi 2 设计必开 02 Linux下C编程 2 设计必开 03 SHELL编程和后台批处理 2 设计必开 04 Linux系统调用(time) 2 设计必开 05 Linux进程控制(fork) 4 设计必开 三、每项实验的内容和要求: 1、Linux键盘命令和vi 要求:掌握Linux系统键盘命令的使用方法。 内容:见教材p4, p9, p40, p49-53, p89, p100 2、Linux下的C编程 要求:掌握vi编辑器的使用方法;掌握Linux下C程序的源程序编辑方法;编译、连接和运行方法。 内容:设计、编辑、编译、连接以及运行一个C程序,其中包含键盘输入和屏幕输出语句。 3、SHELL编程和后台批处理 要求:掌握Linux系统的SHELL编程方法和后台批处理方法。 内容:(1) 将编译、连接以及运行上述C程序各步骤用SHELL程序批处理完成,前台运行。 (2) 将上面SHELLL程序后台运行。观察原C程序运行时输入输出情况。 (3) 修改调试上面SHELL程序和C程序,使得在后台批处理方式下,原键 盘输入内容可以键盘命令行位置参数方式交互式输入替代原键盘输入内容, 然后输出到屏幕。 4、Linux系统调用使用方法。

计算机体系结构实验报告二

实验二结构相关 一、实验目的: 通过本实验,加深对结构相关的理解,了解结构相关对CPU性能的影响。 二、实验内容: 1. 用WinDLX模拟器运行程序structure_d.s 。 2. 通过模拟,找出存在结构相关的指令对以及导致结构相关的部件。 3. 记录由结构相关引起的暂停时钟周期数,计算暂停时钟周期数占总执行 周期数的百分比。 4. 论述结构相关对CPU性能的影响,讨论解决结构相关的方法。 三、实验程序structure_d.s LHI R2, (A>>16)&0xFFFF 数据相关 ADDUI R2, R2, A&0xFFFF LHI R3, (B>>16)&0xFFFF ADDUI R3, R3, B&0xFFFF ADDU R4, R0, R3 loop: LD F0, 0(R2) LD F4, 0(R3) ADDD F0, F0, F4 ;浮点运算,两个周期,结构相关 ADDD F2, F0, F2 ; <- A stall is found (an example of how to answer your questions) ADDI R2, R2, #8 ADDI R3, R3, #8 SUB R5, R4, R2 BNEZ R5, loop ;条件跳转 TRAP #0 ;; Exit <- this is a comment !! A: .double 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 B: .double 1, 2, 3, 4, 5, 6, 7, 8, 9, 10

四、实验过程 打开软件,load structure_d.s文件,进行单步运行。经过分析,此程序一 次循环中共有五次结构相关。(R-stall 数据相关Stall- 结构相关) 1)第一个结构相关:addd f2,,f0,f2 由于前面的数据相关,导致上一条指令addd f0,f0,f4暂停在ID阶段,所以下一条指令addd f2,,f0,f2发生结构相关,导致相关的部件:译码部件。 2)第二个结构相关:ADDI R2, R2, #8,与第一个结构相关类似。由于数据相关, 上一条指令暂停在ID阶段,所以导致下一条指令发生结构相关。

相关主题
相关文档 最新文档