lab03 数组
- 格式:doc
- 大小:280.50 KB
- 文档页数:3
lab3复杂流⽔线实验报告Lab3复杂流⽔化实验Experiment1: To study the basics of forwarding. For all the programs please select Stall Detection and Forwarding should be ON.(a)Write a sample program that forwards between EXE stage and MEM stage on upper inputof the the program below and show forwarding with arrow. Test it on the simulator and mention what value is being forwarded. DO NOT USE LW INSTRUCTION.其中ADD指令中在MEM阶段的ALUout-555(R2+R3)前递到SUB指令的EXE阶段的upper input。
(b)Write a sample program that forwards between EXE stage and WB stage on upper inputof the the program below and show forwarding with arrow. Test it on the simulator and mention what value is being forwarded. DO NOT USE LW INSTRUCTION.其中ADD指令中在WB阶段的输出555(R2+R3)前递到SUB指令的EXE阶段的upper input。
(c)Write a sample program that forwards between EXE stage and MEM stage on lower inputof the the program below and show forwarding with arrow. Test it on the simulator and mention what value is being forwarded. DO NOT USE LW INSTRUCTION.其中ADD指令中在MEM阶段的ALUout-555(R2+R3)前递到SUB指令的EXE阶段的upper input。
Format String Vulnerability Lab 学号:SA11011083 姓名:汪于波一、发现格式字符串漏洞实验中给出了一个程序,你需要输入一些字符存放在缓冲区,之后这些字符将被printf 函数输出。
但是这个程序存在一些漏洞。
通过所提供的源代码去分析程序的漏洞,并实现:A.让程序崩溃B.输出secret[1]的值C.修改secret[1]的值D.修改secret[1]的值为一个预设的值解:A.程序输出时采用printf(user_input),这样由于user_input是用户自行输入的,只要在user_input包含多个%s,那么printf在输出时就很可能遇到(1)引用一个包含非法值的指针(当然包括空指针);(2)未得到正确的权限的时候进行访问,例如往只读的内存地址写数据;(3)内存越界(数组越界,变量类型不一致等)这些问题,这样程序就会因为段错误崩溃。
如图1-1所示。
B.首先我们用gdb调试程序,查看程序在运行时的堆栈分配情况。
我们在printf函数处设置断点。
输入1给int_input,A0A0A0A0A0A0A0A0(共16个字符)给user_input。
当程序调用printf(user_input)时,因断点停下。
查看堆栈数据,printf在main函数的返回地址为0x080485d8,其后面一个为数据0xbfd5b9fc表示printf的第一个参数(即user_input的地址),如图1-2所示。
紧接着后面是临时变量的a,b,c,d的空间。
我们看到直到0xbfd5b9f4才出现int_input,值为1(输入的);接着后面是secret,里面存放的为指针,值为0x09eba008;接着后面是16个字节的A0A0A0A0A0A0A0A0。
图1-1图1-3图1-2通过上面的调试,我们知道,printf(user_input)函数调用时,第一个参数与int_input相距16个字节。
A aabs 绝对值、模、字符的ASCII 码值acos 反余弦acosh 反双曲余弦acot 反余切acoth 反双曲余切acsc 反余割acsch 反双曲余割align 启动图形对象几何位置排列工具all 所有元素非零为真angle 相角ans 表达式计算结果的缺省变量名any 所有元素非全零为真area 面域图argnames 函数M 文件宗量名asec 反正割asech 反双曲正割asin 反正弦asinh 反双曲正弦assignin 向变量赋值atan 反正切atan2 四象限反正切atanh 反双曲正切autumn 红黄调秋色图阵axes 创建轴对象的低层指令axis 控制轴刻度和风格的高层指令B bbar 二维直方图bar3 三维直方图bar3h 三维水平直方图barh 二维水平直方图base2dec X 进制转换为十进制bin2dec 二进制转换为十进制blanks 创建空格串bone 蓝色调黑白色图阵box 框状坐标轴break while 或for 环中断指令brighten 亮度控制C ccapture (3 版以前)捕获当前图形cart2pol 直角坐标变为极或柱坐标cart2sph 直角坐标变为球坐标cat 串接成高维数组caxis 色标尺刻度cd 指定当前目录cdedit 启动用户菜单、控件回调函数设计工具cdf2rdf 复数特征值对角阵转为实数块对角阵ceil 向正无穷取整cell 创建元胞数组cell2struct 元胞数组转换为构架数组celldisp 显示元胞数组内容cellplot 元胞数组内部结构图示char 把数值、符号、内联类转换为字符对象chi2cdf 分布累计概率函数chi2inv 分布逆累计概率函数chi2pdf 分布概率密度函数chi2rnd 分布随机数发生器chol Cholesky 分解clabel 等位线标识cla 清除当前轴class 获知对象类别或创建对象clc 清除指令窗clear 清除内存变量和函数clf 清除图对象clock 时钟colorcube 三浓淡多彩交叉色图矩阵colordef 设置色彩缺省值colormap 色图colspace 列空间的基close 关闭指定窗口colperm 列排序置换向量comet 彗星状轨迹图comet3 三维彗星轨迹图compass 射线图compose 求复合函数cond (逆)条件数condeig 计算特征值、特征向量同时给出条件数condest 范–1 条件数估计conj 复数共轭contour 等位线contourf 填色等位线contour3 三维等位线contourslice 四维切片等位线图conv 多项式乘、卷积cool 青紫调冷色图copper 古铜调色图cos 余弦cosh 双曲余弦cot 余切coth 双曲余切cplxpair 复数共轭成对排列csc 余割csch 双曲余割cumsum 元素累计和cumtrapz 累计梯形积分cylinder 创建圆柱D ddblquad 二重数值积分deal 分配宗量deblank 删去串尾部的空格符dec2base 十进制转换为X 进制dec2bin 十进制转换为二进制dec2hex 十进制转换为十六进制deconv 多项式除、解卷delaunay Delaunay 三角剖分del2 离散Laplacian 差分demo Matlab 演示det 行列式diag 矩阵对角元素提取、创建对角阵diary Matlab 指令窗文本内容记录diff 数值差分、符号微分digits 符号计算中设置符号数值的精度dir 目录列表disp 显示数组display 显示对象内容的重载函数dlinmod 离散系统的线性化模型dmperm 矩阵Dulmage-Mendelsohn 分解dos 执行DOS 指令并返回结果double 把其他类型对象转换为双精度数值drawnow 更新事件队列强迫Matlab 刷新屏幕dsolve 符号计算解微分方程E eecho M 文件被执行指令的显示edit 启动M 文件编辑器eig 求特征值和特征向量eigs 求指定的几个特征值end 控制流FOR 等结构体的结尾元素下标eps 浮点相对精度error 显示出错信息并中断执行errortrap 错误发生后程序是否继续执行的控制erf 误差函数erfc 误差补函数erfcx 刻度误差补函数erfinv 逆误差函数errorbar 带误差限的曲线图etreeplot 画消去树eval 串演算指令evalin 跨空间串演算指令exist 检查变量或函数是否已定义exit 退出Matlab 环境exp 指数函数expand 符号计算中的展开操作expint 指数积分函数expm 常用矩阵指数函数expm1 Pade 法求矩阵指数expm2 Taylor 法求矩阵指数expm3 特征值分解法求矩阵指数eye 单位阵ezcontour 画等位线的简捷指令ezcontourf 画填色等位线的简捷指令ezgraph3 画表面图的通用简捷指令ezmesh 画网线图的简捷指令ezmeshc 画带等位线的网线图的简捷指令ezplot 画二维曲线的简捷指令ezplot3 画三维曲线的简捷指令ezpolar 画极坐标图的简捷指令ezsurf 画表面图的简捷指令ezsurfc 画带等位线的表面图的简捷指令F ffactor 符号计算的因式分解feather 羽毛图feedback 反馈连接feval 执行由串指定的函数fft 离散Fourier 变换fft2 二维离散Fourier 变换fftn 高维离散Fourier 变换fftshift 直流分量对中的谱fieldnames 构架域名figure 创建图形窗fill3 三维多边形填色图find 寻找非零元素下标findobj 寻找具有指定属性的对象图柄findstr 寻找短串的起始字符下标findsym 机器确定内存中的符号变量finverse 符号计算中求反函数fix 向零取整flag 红白蓝黑交错色图阵fliplr 矩阵的左右翻转flipud 矩阵的上下翻转flipdim 矩阵沿指定维翻转floor 向负无穷取整flops 浮点运算次数flow Matlab 提供的演示数据fmin 求单变量非线性函数极小值点(旧版)fminbnd 求单变量非线性函数极小值点fmins 单纯形法求多变量函数极小值点(旧版)fminunc 拟牛顿法求多变量函数极小值点fminsearch 单纯形法求多变量函数极小值点fnder 对样条函数求导fnint 利用样条函数求积分fnval 计算样条函数区间内任意一点的值fnplt 绘制样条函数图形fopen 打开外部文件for 构成for 环用format 设置输出格式fourier Fourier 变换fplot 返函绘图指令fprintf 设置显示格式fread 从文件读二进制数据fsolve 求多元函数的零点full 把稀疏矩阵转换为非稀疏阵funm 计算一般矩阵函数funtool 函数计算器图形用户界面fzero 求单变量非线性函数的零点G ggamma 函数gammainc 不完全函数gammaln 函数的对数gca 获得当前轴句柄gcbo 获得正执行“回调”的对象句柄gcf 获得当前图对象句柄gco 获得当前对象句柄geomean 几何平均值get 获知对象属性getfield 获知构架数组的域getframe 获取影片的帧画面ginput 从图形窗获取数据global 定义全局变量gplot 依图论法则画图gradient 近似梯度gray 黑白灰度grid 画分格线griddata 规则化数据和曲面拟合gtext 由鼠标放置注释文字guide 启动图形用户界面交互设计工具H hharmmean 调和平均值help 在线帮助helpwin 交互式在线帮助helpdesk 打开超文本形式用户指南hex2dec 十六进制转换为十进制hex2num 十六进制转换为浮点数hidden 透视和消隐开关hilb Hilbert 矩阵hist 频数计算或频数直方图histc 端点定位频数直方图histfit 带正态拟合的频数直方图hold 当前图上重画的切换开关horner 分解成嵌套形式hot 黑红黄白色图hsv 饱和色图I iif-else-elseif 条件分支结构ifft 离散Fourier 反变换ifft2 二维离散Fourier 反变换ifftn 高维离散Fourier 反变换ifftshift 直流分量对中的谱的反操作ifourier Fourier 反变换i, j 缺省的“虚单元”变量ilaplace Laplace 反变换imag 复数虚部image 显示图象imagesc 显示亮度图象imfinfo 获取图形文件信息imread 从文件读取图象imwrite 把图象写成文件ind2sub 单下标转变为多下标inf 无穷大info MathWorks 公司网点地址inline 构造内联函数对象inmem 列出内存中的函数名input 提示用户输入inputname 输入宗量名int 符号积分int2str 把整数数组转换为串数组interp1 一维插值interp2 二维插值interp3 三维插值interpn N 维插值interpft 利用FFT 插值intro Matlab 自带的入门引导inv 求矩阵逆invhilb Hilbert 矩阵的准确逆ipermute 广义反转置isa 检测是否给定类的对象ischar 若是字符串则为真isequal 若两数组相同则为真isempty 若是空阵则为真isfinite 若全部元素都有限则为真isfield 若是构架域则为真isglobal 若是全局变量则为真ishandle 若是图形句柄则为真ishold 若当前图形处于保留状态则为真isieee 若计算机执行IEEE 规则则为真isinf 若是无穷数据则为真isletter 若是英文字母则为真islogical 若是逻辑数组则为真ismember 检查是否属于指定集isnan 若是非数则为真isnumeric 若是数值数组则为真isobject 若是对象则为真isprime 若是质数则为真isreal 若是实数则为真isspace 若是空格则为真issparse 若是稀疏矩阵则为真isstruct 若是构架则为真isstudent 若是Matlab 学生版则为真iztrans 符号计算Z 反变换J j , K kjacobian 符号计算中求Jacobian 矩阵jet 蓝头红尾饱和色jordan 符号计算中获得Jordan 标准型keyboard 键盘获得控制权kron Kronecker 乘法规则产生的数组L llaplace Laplace 变换lasterr 显示最新出错信息lastwarn 显示最新警告信息leastsq 解非线性最小二乘问题(旧版)legend 图形图例lighting 照明模式line 创建线对象lines 采用plot 画线色linmod 获连续系统的线性化模型linmod2 获连续系统的线性化精良模型linspace 线性等分向量ln 矩阵自然对数load 从MAT 文件读取变量log 自然对数log10 常用对数log2 底为2 的对数loglog 双对数刻度图形logm 矩阵对数logspace 对数分度向量lookfor 按关键字搜索M 文件lower 转换为小写字母lsqnonlin 解非线性最小二乘问题lu LU 分解M mmad 平均绝对值偏差magic 魔方阵maple &nb, sp; 运作Maple 格式指令mat2str 把数值数组转换成输入形态串数组material 材料反射模式max 找向量中最大元素mbuild 产生EXE 文件编译环境的预设置指令mcc 创建MEX 或EXE 文件的编译指令mean 求向量元素的平均值median 求中位数menuedit 启动设计用户菜单的交互式编辑工具mesh 网线图meshz 垂帘网线图meshgrid 产生“格点”矩阵methods 获知对指定类定义的所有方法函数mex 产生MEX 文件编译环境的预设置指令mfunlis 能被mfun 计算的MAPLE 经典函数列表mhelp 引出Maple 的在线帮助min 找向量中最小元素mkdir 创建目录mkpp 逐段多项式数据的明晰化mod 模运算more 指令窗中内容的分页显示movie 放映影片动画moviein 影片帧画面的内存预置mtaylor 符号计算多变量Taylor 级数展开N nndims 求数组维数NaN 非数(预定义)变量nargchk 输入宗量数验证nargin 函数输入宗量数nargout 函数输出宗量数ndgrid 产生高维格点矩阵newplot 准备新的缺省图、轴nextpow2 取最接近的较大2 次幂nnz 矩阵的非零元素总数nonzeros 矩阵的非零元素norm 矩阵或向量范数normcdf 正态分布累计概率密度函数normest 估计矩阵2 范数norminv 正态分布逆累计概率密度函数normpdf 正态分布概率密度函数normrnd 正态随机数发生器notebook 启动Matlab 和Word 的集成环境null 零空间num2str 把非整数数组转换为串numden 获取最小公分母和相应的分子表达式nzmax 指定存放非零元素所需内存O oode1 非Stiff 微分方程变步长解算器ode15s Stiff 微分方程变步长解算器ode23t 适度Stiff 微分方程解算器ode23tb Stiff 微分方程解算器ode45 非Stiff 微分方程变步长解算器odefile ODE 文件模板odeget 获知ODE 选项设置参数odephas2 ODE 输出函数的二维相平面图odephas3 ODE 输出函数的三维相空间图odeplot ODE 输出函数的时间轨迹图odeprint 在Matlab 指令窗显示结果odeset 创建或改写ODE 选项构架参数值ones 全1 数组optimset 创建或改写优化泛函指令的选项参数值orient 设定图形的排放方式orth 值空间正交化P ppack 收集Matlab 内存碎块扩大内存pagedlg 调出图形排版对话框patch 创建块对象path 设置Matlab 搜索路径的指令pathtool 搜索路径管理器pause 暂停pcode 创建预解译P 码文件pcolor 伪彩图peaks Matlab 提供的典型三维曲面permute 广义转置pi (预定义变量)圆周率pie 二维饼图pie3 三维饼图pink 粉红色图矩阵pinv 伪逆plot 平面线图plot3 三维线图plotmatrix 矩阵的散点图plotyy 双纵坐标图poissinv 泊松分布逆累计概率分布函数poissrnd 泊松分布随机数发生器pol2cart 极或柱坐标变为直角坐标polar 极坐标图poly 矩阵的特征多项式、根集对应的多项式poly2str 以习惯方式显示多项式poly2sym 双精度多项式系数转变为向量符号多项式polyder 多项式导数polyfit 数据的多项式拟合polyval 计算多项式的值polyvalm 计算矩阵多项式pow2 2 的幂ppval 计算分段多项式pretty 以习惯方式显示符号表达式print 打印图形或SIMULINK 模型printsys 以习惯方式显示有理分式prism 光谱色图矩阵procread 向MAPLE 输送计算程序profile 函数文件性能评估器propedit 图形对象属性编辑器pwd 显示当前工作目录Q qquad 低阶法计算数值积分quad8 高阶法计算数值积分quit 推出Matlab 环境quiver 二维方向箭头图quiver3 三维方向箭头图R rrand 产生均匀分布随机数randn 产生正态分布随机数randperm 随机置换向量range 样本极差rank 矩阵的秩rats 有理输出rcond 矩阵倒条件数估计real 复数的实部reallog 在实数域内计算自然对数realpow 在实数域内计算乘方realsqrt 在实数域内计算平方根realmax 最大正浮点数realmin 最小正浮点数rectangle 画“长方框”rem 求余数repmat 铺放模块数组reshape 改变数组维数、大小residue 部分分式展开return 返回ribbon 把二维曲线画成三维彩带图rmfield 删去构架的域roots 求多项式的根rose 数扇形图rot90 矩阵旋转90 度rotate 指定的原点和方向旋转rotate3d 启动三维图形视角的交互设置功能round 向最近整数圆整rref 简化矩阵为梯形形式rsf2csf 实数块对角阵转为复数特征值对角阵rsums Riemann 和S ssave 把内存变量保存为文件scatter 散点图scatter3 三维散点图sec 正割sech 双曲正割semilogx X 轴对数刻度坐标图semilogy Y 轴对数刻度坐标图series 串联连接set 设置图形对象属性setfield 设置构架数组的域setstr 将ASCII 码转换为字符的旧版指令sign 根据符号取值函数signum 符号计算中的符号取值函数sim 运行SIMULINK 模型simget 获取SIMULINK 模型设置的仿真参数simple 寻找最短形式的符号解simplify 符号计算中进行简化操作simset 对SIMULINK 模型的仿真参数进行设置simulink 启动SIMULINK 模块库浏览器sin 正弦sinh 双曲正弦size 矩阵的大小slice 立体切片图solve 求代数方程的符号解spalloc 为非零元素配置内存sparse 创建稀疏矩阵spconvert 把外部数据转换为稀疏矩阵spdiags 稀疏对角阵spfun 求非零元素的函数值sph2cart 球坐标变为直角坐标sphere 产生球面spinmap 色图彩色的周期变化spline 样条插值spones 用1 置换非零元素sprandsym 稀疏随机对称阵sprank 结构秩spring 紫黄调春色图sprintf 把格式数据写成串spy 画稀疏结构图sqrt 平方根sqrtm 方根矩阵squeeze 删去大小为1 的“孤维”sscanf 按指定格式读串stairs 阶梯图std 标准差stem 二维杆图step 阶跃响应指令str2double 串转换为双精度值str2mat 创建多行串数组str2num 串转换为数strcat 接成长串strcmp 串比较strjust 串对齐strmatch 搜索指定串strncmp 串中前若干字符比较strrep 串替换strtok 寻找第一间隔符前的内容struct 创建构架数组struct2cell 把构架转换为元胞数组strvcat 创建多行串数组sub2ind 多下标转换为单下标subexpr 通过子表达式重写符号对象subplot 创建子图subs 符号计算中的符号变量置换subspace 两子空间夹角sum 元素和summer 绿黄调夏色图superiorto 设定优先级surf 三维着色表面图surface 创建面对象surfc 带等位线的表面图surfl 带光照的三维表面图surfnorm 空间表面的法线svd 奇异值分解svds 求指定的若干奇异值switch-case-otherwise 多分支结构sym2poly 符号多项式转变为双精度多项式系数向量symmmd 对称最小度排序symrcm 反向Cuthill-McKee 排序syms 创建多个符号对象T ttan 正切tanh 双曲正切taylortool 进行Taylor 逼近分析的交互界面text 文字注释tf 创建传递函数对象tic 启动计时器title 图名toc 关闭计时器trapz 梯形法数值积分treelayout 展开树、林treeplot 画树图tril 下三角阵trim 求系统平衡点trimesh 不规则格点网线图trisurf 不规则格点表面图triu 上三角阵try-catch 控制流中的Try-catch 结构type 显示M 文件U uuicontextmenu 创建现场菜单uicontrol 创建用户控件uimenu 创建用户菜单unmkpp 逐段多项式数据的反明晰化unwrap 自然态相角upper 转换为大写字母V vvar 方差varargin 变长度输入宗量varargout 变长度输出宗量vectorize 使串表达式或内联函数适于数组运算ver 版本信息的获取view 三维图形的视角控制voronoi Voronoi 多边形vpa 任意精度(符号类)数值W wwarning 显示警告信息what 列出当前目录上的文件whatsnew 显示Matlab 中Readme 文件的内容which 确定函数、文件的位置while 控制流中的While 环结构white 全白色图矩阵whitebg 指定轴的背景色who 列出内存中的变量名whos 列出内存中变量的详细信息winter 蓝绿调冬色图workspace 启动内存浏览器X x , Y y , Z zxlabel X 轴名xor 或非逻辑yesinput 智能输入指令ylabel Y 轴名zeros 全零数组zlabel Z 轴名zoom 图形的变焦放大和缩小ztrans 符号计算Z 变换。
Matlab实验三答案实验三 MATLAB语⾔的程序设计⼀、实验⽬的:1、熟悉MATLAB程序编辑与设计环境2、掌握各种编程语句语法规则及程序设计⽅法3、函数⽂件的编写和设计4、了解和熟悉跨空间变量传递和赋值⼆、实验基本知识:1、程序流程控制语句for循环结构语法:for i=初值:增量:终值语句1……语句nend说明:1.i=初值:终值,则增量为1。
2.初值、增量、终值可正可负,可以是整数,也可以是⼩数,只须符合数学逻辑。
while 循环结构语法:while 逻辑表达式循环体语句end说明:1、whiIe结构依据逻辑表达式的值判断是否执⾏循环体语勾。
若表达式的值为真,执⾏循环体语句⼀次、在反复执⾏时,每次都要进⾏判断。
若表达式的值为假,则程序执⾏end之后的语句。
2、为了避免因逻辑上的失误,⽽陷⼊死循环,建议在循环体语句的适当位置加break语句、以便程序能正常执⾏。
(执⾏循环体的次数不确定;每⼀次执⾏循环体后,⼀定会改变while 后⾯所跟关系式的值。
)3、while循环也可以嵌套、其结构如下:while逻辑表达式1循环体语句1while逻辑表达式2循环体语句2end循环体语句3endelse if 表达式2(可选)语句2else(可选)语句3endend说明:1.if结构是⼀个条件分⽀语句,若满⾜表达式的条件,则往下执⾏;若不满⾜,则跳出if结构。
2.else if表达式2与else为可选项,这两条语句可依据具体情况取舍。
3.注意:每⼀个if都对应⼀个end,即有⼏个if,记就应有⼏个end。
switch-case结构语法:switch表达式case常量表达式1语句组1case常量表达式2语句组2……otherwise语句组nend说明:1.switch后⾯的表达式可以是任何类型,如数字、字符串等。
2.当表达式的值与case后⾯常量表达式的值相等时,就执⾏这个case后⾯的语句组如果所有的常量表达式的值都与这个表达式的值不相等时,则执⾏otherwise后的执⾏语句。
matlab数组写法
在MATLAB中,数组可以以多种方式进行定义和初始化。
以下是一些常见的数组写法:
1. 手动输入数组元素:
你可以通过手动输入数组元素来定义数组,例如:
matlab.
A = [1, 2, 3, 4, 5];
2. 使用冒号操作符创建等差数列:
你可以使用冒号操作符来创建等差数列,例如:
matlab.
B = 1:5;
3. 使用linspace函数创建等差数列:
你可以使用linspace函数来创建指定范围内等分的数组,例如:
matlab.
C = linspace(1, 5, 5);
4. 使用zeros函数创建全零数组:
你可以使用zeros函数来创建指定大小的全零数组,例如:
matlab.
D = zeros(2, 3);
5. 使用ones函数创建全一数组:
你可以使用ones函数来创建指定大小的全一数组,例如:
matlab.
E = ones(3, 2);
6. 使用rand函数创建随机数组:
你可以使用rand函数来创建指定大小的随机数组,例如: matlab.
F = rand(3, 3);
7. 使用eye函数创建单位矩阵:
你可以使用eye函数来创建指定大小的单位矩阵,例如: matlab.
G = eye(4);
以上是一些常见的MATLAB数组写法,你可以根据自己的需求选择合适的方式来定义和初始化数组。
MATLAB提供了丰富的函数和操作符来方便地进行数组的创建和操作。
Linux 实验三1.分析从schedule()开始,说明几种不同类型的进程之间的调度选择;在相同类型的进程之间的调度选择算法答:在每个进程的task_struct结构中有以下四项policy、priority、counter、rt_priority。
这四项是选择进程的依据。
其中,policy是进程的调度策略,用来区分实时进程和普通进程,实时进程优先于普通进程运行;priority是进程(包括实时和普通)的静态优先级;counter是进程剩余的时间片,它的起始值就是priority的值;由于counter在后面计算一个处于可运行状态的进程值得运行的程度goodness时起重要作用,因此,counter 也可以看作是进程的动态优先级。
rt_priority 是实时进程特有的,用于实时进程间的选择。
当policy分别为以下值时:1) SCHED_OTHER:这是普通的用户进程,进程的缺省类型,采用动态优先调度策略,选择进程的依据主要是根据进程goodness值的大小。
这种进程在运行时,可以被高goodness值的进程抢先。
2) SCHED_FIFO:这是一种实时进程,遵守POSIX1.b标准的FIFO(先入先出)调度规则。
它会一直运行,直到有一个进程因I/O阻塞,或者主动释放CPU,或者是CPU被另一个具有更高rt_priority的实时进程抢先。
在Linux实现中,SCHED_FIFO 进程仍然拥有时间片-只有当时间片用完时它们才被迫释放CPU。
因此,如同POSIX1.b一样,这样的进程就象没有时间片(不是采用分时)一样运行。
Linux中进程仍然保持对其时间片的记录(不修改counter)主要是为了实现的方便,同时避免在调度代码的关键路径上出现条件判断语句if (!(current->policy&SCHED_FIFO)){...}-要知道,其他大量非FIFO进程都需要记录时间片,这种多余的检测只会浪费CPU 资源。
哈尔滨工业大学计算机科学与技术学院2014年秋季学期《软件工程》Lab 3:代码评审与程序性能优化目录1 实验要求 (1)2 在Eclipse中配置代码审查与分析工具 (1)2.1 Checkstyle (1)2.2 PMD (2)2.3 FindBugs (3)2.4 TPTP (4)3 本次实验所评审的代码 (4)4 Checkstyle所发现的代码问题清单及原因分析 (11)5 PMD所发现的代码问题清单及原因分析 (12)5.1 CPD问题 (12)5.2 代码规范问题 (12)6 FindBugs所发现的代码问题清单及原因分析 (14)7 TPTP性能分析结果 (14)7.1 执行时间的统计结果与原因分析 (14)7.2 内存占用的统计结果与原因分析 (14)7.3 代码改进之后的执行时间统计结果 (15)7.4 代码改进之后的内存占用统计结果 (16)8 评述 (17)8.1 对代码规范方面的评述 (17)8.2 对代码性能方面的评述 (17)9 计划与实际进度 (17)10 小结 (17)1实验要求针对Lab1所完成的代码,进行代码评审(走查)和性能分析,从时间性能角度对代码进行优化;1 练习代码评审的两个方面:静态分析、动态分析(profiling);2使用以下四个工具完成实验:–Checkstyle–FindBugs–PMD–TPTP3按Lab1的分组方式,两人一组,随机分配另一组的代码作为本组评审和分析的对象,实验期间不能与原作者进行沟通。
2在Eclipse中配置代码审查与分析工具采用屏幕截图的方式给出你自..己.在Eclipse中配置Checkstyle、PMD、Findbugs和TPTP 的过程。
2.1Checkstyle2.2PMD2.3FindBugs2.4TPTP3本次实验所评审的代码尹首智_1120310203package test;import java.util.*;import java.io.*;import java.math.*;public class test {String gra = new String();boolean a[][]= new boolean[4][26];double q[][] = new double [26][555];double cost[][] = new double [26][555];double req_q[] = new double [4];double req_c[] = new double [4];double ans_Q[] = new double [4];double ans_r[] = new double [4];double ans_c[] = new double [4];int serv[] = new int[26];int sev[][] = new int [4][26];Scanner cin ;//把文本处理为可用数组,并处理异常输入public void readData() throws IOException{//第一个文件处理cin = new Scanner(new File("./PROCESS.txt"));int cnt=0;while(cin.hasNextLine()){String tmp = cin.nextLine();for(int j=0;j<tmp.length();j++){char char_now=tmp.charAt(j);if(char_now>='A'&&char_now<='Z')a[cnt][char_now-'A']=true;}cnt++;}double maxq[]=new double [55];int maxq_num[]=new int[55];//读第二个文件cin = new Scanner(new File("./SERVICE.txt"));while(cin.hasNext()){String tmp = cin.next();int act_num = tmp.charAt(0) - 'A';tmp = tmp.substring(2);int idx = Integer.parseInt(tmp);cin.nextDouble();q[act_num][idx-1] = cin.nextDouble();cin.nextDouble();cost[act_num][idx-1] = cin.nextDouble();if(maxq[act_num]<q[act_num][idx-1]-cost[act_num][idx-1]/100.0){ maxq_num[act_num]=idx;maxq[act_num]=q[act_num][idx-1]-cost[act_num][idx-1]/100.0;}}for(int i=0;i<14;i++){char test_ch = (char) ('A'+i);System.out.println(test_ch+""+maxq_num[i]);}//第三个文件cin = new Scanner(new File("./REQ.txt"));cnt=0;while(cin.hasNext()){String tmp = cin.next();req_q[cnt] = Double.parseDouble(tmp.substring(tmp.indexOf('(')+1,tmp.indexOf(',')));req_c[cnt] = Double.parseDouble(tmp.substring(tmp.indexOf(',')+1,tmp.indexOf(')')));cnt++;}}//算法函数double qal[] = new double[4];double qq[][] = new double [26][11];int min_cost_idx[][] = new int [26][11];void solve() throws FileNotFoundException{FileOutputStream bos = new FileOutputStream("./RESULT.txt");//PrintStream x = System.out;System.setOut(new PrintStream(bos));for(int num=0;num<4;num++){for(int i=0;i<26;i++){for(int j=0;j<11;j++){qq[i][j]=111;}}long sss = System.nanoTime();int ii=0;for(int i=0;i<26;i++){if(!a[num][i])continue;for(int j=0;j<500;j++){int omg_idx=0;if(q[i][j]==0.90){omg_idx=0;}else if(q[i][j]==0.91){omg_idx=1;}else if(q[i][j]==0.92){omg_idx=2;}else if(q[i][j]==0.93){omg_idx=3;}else if(q[i][j]==0.94){omg_idx=4;}else if(q[i][j]==0.95){omg_idx=5;}else if(q[i][j]==0.96){omg_idx=6;}else if(q[i][j]==0.97){omg_idx=7;}else if(q[i][j]==0.98){omg_idx=8;}else if(q[i][j]==0.99){omg_idx=9;}else if(q[i][j]==1.00){omg_idx=10;}if(qq[ii][ omg_idx ] > cost[i][j]){qq[ii][ omg_idx ] = cost[i][j];min_cost_idx[ii][ omg_idx ] = j;}}ii++;}double dp[][]= new double [15][144444];dp[0][0]=1;int opt_idx[][] = new int [14][144444];int req_cost_int = (int)req_c[num]*100;for(int i=0;i<ii;i++){for(int nn=0;nn<11;nn++){double tmp_qal = nn/100.0 + 0.90;int tmp_cost_int = (int)(qq[i][nn]*100);if(qq[i][nn]>108)continue;for(int j=req_cost_int; j >= tmp_cost_int;j--){if(dp[i+1][j] < dp[i][j-tmp_cost_int]*tmp_qal){dp[i+1][j]=dp[i][j-tmp_cost_int]*tmp_qal;opt_idx[i][j]=nn;}}}}int opt_cost = -1;for(int i=1;i<=req_cost_int;i++){if(ans_Q[num] < dp[ii][i]-((double)i)/10000.0){ans_c[num] = opt_cost = i;ans_Q[num] = dp[ii][i]-((double)i)/10000.0;//System.out.println(ans_Q[num]);ans_r[num] = dp[ii][i];}}/*for(int i=0;i<14;i++){for(int j=0;j<144444;j++){if(opt_idx[i][j]!=0&&num==0)System.out.println("aaaa");}}*///System.out.println(""+ans_Q[num]);rev(opt_cost,ii,opt_idx);ii=0;for(int i=0;i<26;i++){if(!a[num][i]) continue;sev[num][i]=serv[ii];//还原编号,让字母对应它的服务项。
实验三nachos下的线程编程1内容简述本次实验的目的在于掌握使用nachos中的线程序解决较为复杂的并发问题。
实验内容分三部分:实现事件栅栏原语并进行正确性测试;实现闹钟原语并进行正确性测试;利用事件栅栏和闹钟原语来解决电梯问题(详细内容请看nachos-labs.pdf)。
2实验内容的几点说明2.1实现事件栅栏原语(30分)2.1.1事件栅栏的概念●事件栅栏(EventBarrier)是一种同步机制,使用事件栅栏可以让一组线程以同步的方式等待和应答某事件。
●事件栅栏的调用者分为两类:或者调用Wait操作,或者调用Signal操作。
使用事件栅栏,无论是Wait操作的调用者或者是Signal操作的调用者最终都将同步地通过栅栏(如果他们原先不同步,则进度较快的线程将通过使自己阻塞而与进度慢的线程同步)。
●Wait操作的调用者在事件栅栏上等待Signal的发出。
●和信号量类似,Signal操作是可以积累的——没有Waiter的Signal将被记录下来。
●执行Wait操作的调用者在收到Signal后必须应答Signal的发出者——调用Complete操作表示应答结束。
●只有在所有的Wait操作的调用者都已经应答后,它们才能通过事件栅栏。
在所有的Wait操作的调用者都已经应答之前,Signal的发出者必须等待,并保持事件栅栏处于“SIGNALED”状态。
类似地,也只有在所有的Wait操作的调用者都已经应答后,Signal 的发出者才能离开事件栅栏,并恢复事件栅栏的初始状态“UNSIGNALED”。
●只允许一个Signal操作的调用者发出Signal并等待应答。
2.1.2实现事件栅栏的几点注意●EventBarrier类的接口定义和实现应分别包含在EventBarrier.h和中,请自己新建这些文件,并注意修改Makefile文件nachos-3.4/code/mon里的有关部分(具体项目可以参考实验一的说明)。
实验三数组
1、实验目的和要求
(1)熟悉PHP数组的概念与定义;
(2)掌握数组的创建;
(3)掌握对数组元素的访问、添加、修改、删除;
(4)理解多维数组的概念;
(5)熟练使用常用的PHP数组相关函数;
(6)掌握数组的多种遍历方法。
2、实验环境
(1)PC机;
(2)操作系统:Windows;
(3)Web服务器:Apache;数据库服务器:MySQL;语言解释器:PHP;
(4)以上软件的集成安装包:XAMPP或WampServer;
(5)开发工具:PhpStorm。
3、实验内容
(1)数组的创建;
(2)数组的遍历;
(3)综合运用所学知识实现要求的页面。
4、实验实现过程
(1)已有成绩数组,如下所示。
请根据成绩数组设计程序,创建一个新的成
绩分组数组,每个成绩段作为数组的一个元素。
成绩数组$scores:
编写程序创建一个新数组:成绩分组数组$scores_group,对成绩进行分
组。
print_r($scores_group)的结果示例:
1
(2)已有$names多维数组,设计程序遍历该数组,打印出其中所有的名字字
符串。
(3)综合练习:
根据以下商品信息表格,设计合理的数组保存数据,并在页面中显示这些商品信息。
2
页面效果示例:
3。