Linux 操作系统设计实践实验报告-实验五图形界面D

Linux 操作系统设计实践实验报告-实验五图形界面D
Linux 操作系统设计实践实验报告-实验五图形界面D

《Linux操作系统设计实践》实验五:简单UI界面

实验环境

Linux操作系统版本:Ubuntu 12.04

虚拟机版本:VMware 10

界面开发工具:Qt Creator 2.7.0

QT版本:Qt 4.8.4 (32 bit)

实验内容

图片浏览器

1.功能

a)打开图片并显示(一次可以打开多张)

b)上一张,下一张浏览

c)提示是否浏览到最后一张或最后一张

2.运行结果

a)打开图片

b)显示图片

c)上一张

d)下一张

e)提示当前是否到最后一张或第一张

3.代码

a)main.cpp

#include

#include

#include "mainwindow.h"

int main(int argc, char *argv[])

{

QApplication app(argc, argv);

QTextCodec::setCodecForTr(QTextCodec::codecForName("utf-8"));

//创建一个主界面对象并显示

MainWindow mw;

mw.show();

return app.exec();

}

b)mainwindow.cpp

#include "mainwindow.h"

MainWindow::MainWindow(QWidget *parent) :

QMainWindow(parent)

{

//启动UI界面

setupUi(this);

//设置对话框标题

this->setWindowTitle(tr("实验五:简单UI界面"));

//设置textedit部件为只读模式

te_show->setReadOnly(true);

//设置工具栏不可移动

toolBar->setMovable(false);

//连接信号和槽

connect(actionOpen, SIGNAL(triggered()), this, SLOT(open()));

connect(actionNext, SIGNAL(triggered()), this, SLOT(next()));

connect(actionLast, SIGNAL(triggered()), this, SLOT(last()));

}

//槽函数(打开图片文件)

void MainWindow::open()

{

//打开文件对话框,并将打开的文件路径保存到fileNames中

QStringList fileNames = QFileDialog::getOpenFileNames(this, tr("打开..."),

"/新建文件夹/简单UI界面", tr("图片(*.jpg *.png)"));

//如果没有打开任何文件

if(fileNames.count() == 0)return;

//用来存储已打开的图片列表为空

if(source.count() == 0)

{

//将新打开的图片文件加入到已打开列表中

source += fileNames;

//当前打开的图片是列表中的第0张

index = 0;

//当前打开的图片张数为source.count()

maxindex = source.count() - 1;

else

{

//已打开列表中已有文件,则要去重

del_repeat_open(fileNames);

}

//显示图片

show_image(fileNames.at(index));

}

//槽函数(下一张)

void MainWindow::next()

{

if(index == maxindex)

{

QMessageBox::information(this, tr("提示"), tr("已经是最后一张"), QMessageBox::Ok);

}

else

{

index += 1;

show_image(source.at(index));

}

}

//槽函数(上一张)

void MainWindow::last()

{

if(index == 0)

{

QMessageBox::information(this, tr("提示"), tr("已经是第一张"), QMessageBox::Ok);

}

else

{

index -= 1;

show_image(source.at(index));

}

}

//去重函数

void MainWindow::del_repeat_open(QStringList files)

{

int i;

for(i = 0; i < files.count(); i++)

{

for(j = 0; i < source.count(); j++)

{

if(source.at(j) == files.at(i))

{

break;

}

}

if(j == source.count())

{

source.append(files.at(i));

}

}

maxindex = source.count() - 1;

index = 0;

}

//打开(显示)图片

void MainWindow::show_image(QString file)

{

te_show->clear();

QUrl Uri ( QString ( "file://%1" ).arg (file) );

QImage image = QImageReader (file).read();

QTextDocument * textDocument = this->te_show->document();

textDocument->addResource( QTextDocument::ImageResource, Uri, QVariant ( image ) );

QTextCursor cursor = this->te_show->textCursor();

QTextImageFormat imageFormat;

imageFormat.setWidth( image.width() );

imageFormat.setHeight( image.height() );

imageFormat.setName( Uri.toString() );

cursor.insertImage(imageFormat);

}

c)mainwindow.h

#ifndef MAINWINDOW_H

#define MAINWINDOW_H

#include

#include "ui_mainwindow.h"

class MainWindow : public QMainWindow, public Ui_My_mainwin

{

Q_OBJECT

public:

MainWindow(QWidget *parent = NULL);

public slots:

void open();

void next();

void last();

void del_repeat_open(QStringList files);

void show_image(QString file); private:

QStringList source;

int index;

int maxindex;

int listNum;

QString fileName;

};

#endif // MAINWINDOW_H

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

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

LINUX实验报告

实验报告 ( 2014/ 2015 学年第一学期) 课程名称操作系统A 实验名称文件系统 实验时间2014 年12 月8 日指导单位计算机学院计算机科学与技术系 指导教师徐鹤 学生姓名王生荣班级学号B12040809 学院(系) 计算机学院专业软件工程

实验名称文件系统指导教师徐鹤 实验类型设计实验学时 2 实验时间2014.12.08 一、实验目的和要求 1. 学习LINUX系统下对文件进行操作的各种命令和图形化界面的使用方法。 2. 深入学习和掌握文件管理系统的基本原理和LINUX等操作系统下常用的系统调用,编写一个使用系统调用的例程。 3.实现一个文本文件的某信息的插入和删除 4.实现一个记录文件的某记录的插入和删除 二、实验环境(实验设备) Windows XP + VMWare + RedHat Linux 8

三、实验过程描述与结果分析 1. 目录/proc下与系统相关的文件和目录 (1) /proc/$pid/fd:这是一个目录,该进程($PID号码进程)每个打开的文件在该目录下有一个对应的文件。 例如:#ls /proc/851/fd 0 1 2 255 这表示,851号进程目前正在使用(已经打开的)文件有4个,它们的描述符分别是0、1、2、255。其中,0、1、2 依次分别是进程的标准输入、标准输出和标准错误输出设备。 (2)/proc/filesystems:该文件记录了可用的文件系统类型。 (3)/proc/mounts:该记录了当前被安装的文件系统信息 例如:#cat /proc/mount (4)/proc/$pid/maps:该文件记录了进程的映射内存区信息。 例如:#cat /proc/851/maps 2.常用命令讲解 ls 命令 用来查看用户有执行权限的任意目录中的文件列表,该命令有许多有趣的选项。例如: $ ls -liah * 22684 -rw-r--r-- 1 bluher users 952 Dec 28 18:43 .profile

操作系统实验报告

操作系统实验报告 ' 学号: 姓名: 指导老师: 完成日期: ~

目录 实验一 (1) 实验二 (2) 实验三 (7) 实验四 (10) 实验五 (15) 实验六 (18) 实验七 (22) \

实验一 UNIX/LINUX入门 一、实验目的 了解 UNIX/LINUX 运行环境,熟悉UNIX/LINUX 的常用基本命令,熟悉和掌握UNIX/LINUX 下c 语言程序的编写、编译、调试和运行方法。 二、实验内容 熟悉 UNIX/LINUX 的常用基本命令如ls、who、pwd、ps 等。 练习 UNIX/LINUX的文本行编辑器vi 的使用方法 熟悉 UNIX/LINUX 下c 语言编译器cc/gcc 的使用方法。用vi 编写一个简单的显示“Hello,World!”c 语言程序,用gcc 编译并观察编译后的结果,然后运行它。 三、实验要求 按照要求编写程序,放在相应的目录中,编译成功后执行,并按照要求分析执行结果,并写出实验报告。 四、实验程序 #include <> #include <> int main() { printf ("Hello World!\n"); return 0; } 五、实验感想 通过第一次室验,我了解 UNIX/LINUX 运行环境,熟悉了UNIX/LINUX 的常用基本命令,熟悉和掌握了UNIX/LINUX 下c 语言程序的编写、编译、调试和运行方法。

实验二进程管理 一、实验目的 加深对进程概念的理解,明确进程与程序的区别;进一步认识并发执行的实质。 二、实验内容 (1)进程创建 编写一段程序,使用系统调用fork()创建两个子进程。当此程序运行时,在系统中有一个父进程和两个子进程活动。让每一个进程在屏幕上显示一个字符:父进程显示“a“;子进程分别显示字符”b“和字符“c”。试观察记录屏幕上的显示结果,并分析原因。 (2)进程控制 修改已编写的程序,将每一个进程输出一个字符改为每一个进程输出一句话,再观察程序执行时屏幕上出现的现象,并分析原因。 (3)进程的管道通信 编写程序实现进程的管道通信。使用系统调用pipe()建立一个管道,二个子进程P1 和P2 分别向管道各写一句话: Child 1 is sending a message! Child 2 is sending a message! 父进程从管道中读出二个来自子进程的信息并显示(要求先接收P1,再接收P2)。 三、实验要求 按照要求编写程序,放在相应的目录中,编译成功后执行,并按照要求分析执行结果,并写出实验报告。 四、实验设计 1、功能设计 (1)进程创建 使用fork()创建两个子进程,父进程等待两个子进程执行完再运行。 (2)进程控制 使用fork()创建两个子进程,父进程等待两个子进程分别输出一句话再运行。 (3)进程的管道通信 先创建子进程1,向管道写入一句话,子进程1结束后创建子进程2,向管道写入一句话,最后父进程从管道中读出。 2、数据结构 子进程和管道。 3、程序框图

嵌入式操作系统实验报告

中南大学信息科学与工程学院实验报告 姓名:安磊 班级:计科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个部分。如下图:

浙江大学Linux程序设计实验报告

Linux程序设计实验报告1 ——操作系统基本命令使用 一、实验目的 1.通过对Emacs、vi、vim、gedit文本编辑器的使用,掌握在Linux环境下文本文件的编辑方法; 2.通过对常用命令mkdir、cp、cd、ls、mv、chmod、rm等文件命令的操作,掌握Linux操作系统中文件命令的用法。 二、实验任务与要求 1.emacs的使用,要求能新建、编辑、保存一个文本文件 2.vi或vim的使用,要求能新建、编辑、保存一个文本文件 3.gedit的使用,要求能新建、编辑、保存一个文本文件 4.掌握mkdir、cd命令的操作,要求能建立目录、进入与退出目录 5.掌握cp、ls、mv、chmod、rm命令的操作,要求能拷贝文件、新建文件、查看文件、文件重命名、删除文件等操作。 三、实验工具与准备 计算机PC机,Linux Redhat Fedora Core6操作系统 四、实验步骤与操作指导 任务1.学习emacs的使用,要求能新建、编辑、保存一个文本文件 (1)启动emacs (2)输入以下C程序 (3)保存文件为kk.c (4)用emacs打开文件kk.c (5)修改程序 (6)另存为文件aa.txt并退出。 任务2.vi或vim的使用,要求能新建、编辑、保存一个文本文件 (1)点击”应用程序”→ “附件”→“终端”,打开终端,在终端输入命令: [root@localhost root]#vi kk.c 按i键,进入插入状态。 (2)输入以下C程序 #include int main( ) {

printf(“Hello world!\n”); return 0; } 此时可以用Backspace、→、←、↑、↓键编辑文本。 (3)保存文件为kk.c 按Esc键,进入最后行状态,在最后行状态输入:wq保存文件,退出vi。 (4)用vi打开文件kk.c,输入命令: [root@localhost root]#vi kk.c (5)修改程序为: #include int main( ) { printf(" Hello world!\n"); printf("*****************\n"); return 0; } (6)按Esc键,进入最后行状态,在最后行状态输入:wq aa.txt保存文件,如图1所示,另存为文件aa.txt并退出vi。。 图1 程序编辑环境 任务3.gedit的使用,要求能新建、编辑、保存一个文本文件 (1)启动gedit,点击”应用程序”→ “附件”→“文本编辑器”,打开文本编辑器,如图所示。

触发器实验报告

实验3 触发器及其应用 一、实验目的 1、掌握基本RS、JK、D和T触发器的逻辑功能 2、掌握集成触发器的逻辑功能及使用方法 3、熟悉触发器之间相互转换的方法 二、实验原理 触发器具有两个稳定状态,用以表示逻辑状态“1”和“0”,在一定的外界信号作用下,可以从一个稳定状态翻转到另一个稳定状态,它是一个具有记忆功能的二进制信息存贮器件,是构成各种时序电路的最基本逻辑单元。 1、基本RS触发器 图5-8-1为由两个与非门交叉耦合构成的基本RS触发器,它是无时钟控制低电平直接触发的触发器。基本RS触发器具有置“0”、置“1”和“保持”三种功能。通常称S为置“1”端,因为S=0(R=1)时触发器被置“1”;R为置“0”端,因为R=0(S=1)时触发器被置“0”,当S=R=1时状态保持;S=R=0时,触发器状态不定,应避免此 种情况发生,表5-8-1为基本RS触发器的功能表。 基本RS触发器。也可以用两个“或非门”组成,此时为高电平触发有效。 表5-8-1 图5—8—1 基本RS触发器 2、JK触发器 在输入信号为双端的情况下,JK触发器是功能完善、使用灵活和通用性较强的一种触发器。本实验采用74LS112双JK触发器,是下降边沿触发的边沿触发器。引脚功能及逻辑符号如图5-8-2所示。 JK触发器的状态方程为 Q n+1=J Q n+K Q n J和K是数据输入端,是触发器状态更新的依据,若J、K有两个或两个以上输入端时,组

成“与”的关系。Q与Q为两个互补输出端。通常把Q=0、Q=1的状态定为触发器“0”状态;而把Q=1,Q=0定为“1”状态。 图5-8-2 74LS112双JK触发器引脚排列及逻辑符号 下降沿触发JK触发器的功能如表5-8-2 表 注:×—任意态↓—高到低电平跳变↑—低到高电平跳变 Q n(Q n)—现态Q n+1(Q n+1 )—次态φ—不定态 JK触发器常被用作缓冲存储器,移位寄存器和计数器。 3、D触发器 在输入信号为单端的情况下,D触发器用起来最为方便,其状态方程为 Q n+1=D n,其输出状态的更新发生在CP脉冲的上升沿,故又称为上升沿触发的边沿触发器, 触发器的状态只取决于时钟到来前D端的状态,D触发器的应用很广,可用作数字信号的寄存,移位寄存,分频和波形发生等。有很多种型号可供各种用途的需要而选用。如双 D 74LS74、四D 74LS175、六D 74LS174等。 图5-8-3 为双D 74LS74的引脚排列及逻辑符号。功能如表5-8-3。

实时操作系统报告

实时操作系统课程实验报告 专业:通信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];

触发器实验报告

. . . . .. . 实验报告 课程名称:数字电子技术基础实验 指导老师: 周箭 成绩:__________________ 实验名称:集成触发器应用 实验类型: 同组学生姓名:__邓江毅_____ 一、实验目的和要求(必填) 二、实验内容和原理(必填) 三、主要仪器设备(必填) 四、操作方法和实验步骤 五、实验数据记录和处理 六、实验结果与分析(必填) 七、讨论、心得 实验内容和原理 1、D →J-K 的转换实验 设计过程:J-K 触发器和D 触发器的次态方程如下: J-K 触发器:n n 1 +n Q Q J =Q K +, D 触发器:Qn+1=D 若将D 触发器转换为J-K 触发器,则有:n n Q Q J =D K +。 实验结果: J K Qn-1 Qn 功能 0 0 0 0 保持 1 1 0 1 0 0 置0 1 0 1 1 0 1 翻转 1 0 1 0 1 置1 1 1 (上:Qn ,下:CP ,J 为高电平时) 2、D 触发器转换为T ’触发器实验 设计过程:D 触发器和T ’触发器的次态方程如下: D 触发器:Q n+1= D , T ’触发器:Q n+1=!Q n 若将D 触发器转换为T ’触发器,则二者的次态方程须相等,因此有:D=!Qn 。 实验截图: 专业:电卓1501 姓名:卢倚平 学号:3150101215 日期:2017.6.01 地点:东三404

实验名称:集成触发器应用实验 姓名: 卢倚平 学号: 2 (上:Qn ,下:!Qn )CP 为1024Hz 的脉冲。 3、J-K →D 的转换实验。 ①设计过程: J-K 触发器:n n 1 +n Q Q J =Q K +, D 触发器:Qn+1=D 若将J-K 触发器转换为D 触发器,则二者的次态方程须相等,因此有:J=D ,K=!D 。 实验截图: (上:Qn ,下:CP ) (上:Qn ,下:D ) 4、J-K →T ′的转换实验。 设计过程: J-K 触发器:n n 1 +n Q Q J =Q K +, T ’触发器:Qn+1=!Qn 若将J-K 触发器转换为T ’触发器,则二者的次态方程须相等,因此有:J=K=1 实验截图:

操作系统实验报告一

重庆大学 学生实验报告 实验课程名称操作系统原理 开课实验室DS1501 学院软件学院年级2013专业班软件工程2 班学生姓名胡其友学号20131802 开课时间2015至2016学年第一学期 总成绩 教师签名洪明坚 软件学院制

《操作系统原理》实验报告 开课实验室:年月日学院软件学院年级、专业、班2013级软件工 程2班 姓名胡其友成绩 课程名称操作系统原理 实验项目 名称 指导教师洪明坚 教师 评语教师签名:洪明坚年月日 1.实验目的: ?进入实验环境 –双击expenv/setvars.bat ?检出(checkout)EPOS的源代码 –svn checkout https://www.360docs.net/doc/803303284.html,/svn/epos ?编译及运行 –cd epos/app –make run ?清除所有的临时文件 –make clean ?调试 –make debug ?在“Bochs Enhanced Debugger”中,输入“quit”退出调试 –调试指令,请看附录A 2.实验内容: ?编写系统调用“time_t time(time_t *loc)” –功能描述 ?返回从格林尼治时间1970年1月1日午夜起所经过的秒数。如果指针loc 非NULL,则返回值也被填到loc所指向的内存位置 –数据类型time_t其实就是long ?typedef long time_t; 3.实验步骤: ?Kernel space –K1、在machdep.c中,编写系统调用的实现函数“time_t sys_time()”,计算用户秒数。需要用到 ?变量g_startup_time,它记录了EPOS启动时,距离格林尼治时间1970年1午夜的秒数 ?变量g_timer_ticks

数电实验触发器及其应用

数电实验触发器及其应用 数字电子技术实验报告 实验三: 触发器及其应用 一、实验目的: 1、熟悉基本RS触发器,D触发器的功能测试。 2、了解触发器的两种触发方式(脉冲电平触发和脉冲边沿触发)及触发特点 3、熟悉触发器的实际应用。 二、实验设备: 1 、数字电路实验箱; 2、数字双综示波器; 3、指示灯; 4、74LS00、74LS74。 三、实验原理: 1、触发器是一个具有记忆功能的二进制信息存储器件,是构成多种时序 电路的最基本逻辑单元,也是数字逻辑电路中一种重要的单元电路。在数字系统和计算机中有着广泛的应用。触发器具有两个稳定状态,即“0”和“ 1 ”,在一定的外界信号作用下,可以从一个稳定状态翻转到另一个稳定状态。触发器有集成触发器和门电路(主要是“与非门” )组成的触发器。 按其功能可分为有RS触发器、JK触发器、D触发器、T功能等触发器。触发方式有电平触发和边沿触发两种。 2、基本RS触发器是最基本的触发器,可由两个与非门交叉耦合构成。 基本RS触发器具有置“ 0”、置“ 1”和“保持”三种功能。基本RS触发器

也可以用二个“或非门”组成,此时为高电平触发有效。 3、D触发器在CP的前沿发生翻转,触发器的次态取决于CP脉冲上升沿n+1来到之前D端的状态,即Q = D。因此,它具有置“ 0”和“T两种功能。由于在CP=1期间电路具有阻塞作用,在CP=1期间,D端数据结构变RS化,不会影响触发器的输出状态。和分别是置“ 0”端和置“ 1” DD 端,不需要强迫置“ 0”和置“ 1”时,都应是高电平。74LS74(CC4013, 74LS74(CC4042均为上升沿触发器。以下为74LS74的引脚图和逻辑图。 馬LD 1CP 1云IQ LQ GM) 四、实验原理图和实验结果: 设计实验: 1、一个水塔液位显示控制示意图,虚线表示水位。传感器A、B被水浸沿时

操作系统实验报告

《操作系统原理》实验报告 实验项目名称:模拟使用银行家算法判断系统的状态 一、实验目的 银行家算法是操作系统中避免死锁的算法,本实验通过对银行家算法的模拟,加强对操作系统中死锁的认识,以及如何寻找到一个安全序列解除死锁。 二、实验环境 1、硬件:笔记本。 2、软件:Windows 7 , Eclipse。 三、实验内容 1.把输入资源初始化,形成资源分配表; 2.设计银行家算法,输入一个进程的资源请求,按银行家算法步骤进行检查; 3.设计安全性算法,检查某时刻系统是否安全; 4.设计显示函数,显示资源分配表,安全分配序列。 四、数据处理与实验结果 1.资源分配表由进程数组,Max,Allocation,Need,Available 5个数组组成; 实验采用数据为下表: 2.系统总体结构,即菜单选项,如下图

实验的流程图。如下图 3.实验过程及结果如下图所示

1.首先输入进程数和资源类型及各进程的最大需求量 2.输入各进程的占有量及目前系统的可用资源数量 3.初始化后,系统资源的需求和分配表 4.判断线程是否安全

5.对线程进行死锁判断 五、实验过程分析 在实验过程中,遇到了不少问题,比如算法无法回滚操作,程序一旦执行,必须直接运行到单个任务结束为止,即使产生了错误,也必须等到该项任务结束才可以去选择别的操作。但总之,实验还是完满的完成了。 六、实验总结 通过实验使我对以前所学过的基础知识加以巩固,也对操作系统中抽象理论知识加以理解,例如使用Java语言来实现银行家算法,在这个过程中更进一步了解了银行家算法,通过清晰字符界面能进行操作。不过不足之处就是界面略显简洁,对于一个没有操作过计算机的人来说,用起来可能还是有些难懂。所以,以后会对界面以及功能进行完善,做到人人都可以看懂的算法。

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

嵌入式实时操作系统实验报告 任务间通信机制的建立 系别计算机与电子系 专业班级***** 学生姓名****** 指导教师 ****** 提交日期 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 才能支持信号量。

Linux文件系统实验报告

黄冈师学院 提高型实验报告 实验课题文件系统的设计与实现(实验类型:□综合性 设计性□应用性) 实验课程操作系统原理 实验时间2015-2016 第二学期 学生何正发 专业班级软件工程1401 学号07

成绩: 一、实验目的和要求 1、熟悉操作系统设计的过程,巩固操作系统的基本知识,加深对操作原理、功能及各种不同的存储管理方法理解与应用; 2、学会运用各种语言、软件开发新软件的基本方法; 3、增强实际应用能力和动手操作能力。 二、实验条件 Win7 /Windows 8.1/Linux等操作系统,装有java、C、C++、C#等语言工具的环境。 三、实验原理分析 可以选择最佳适应算法,按照从小到大的次序组成空闲区自由链,当用户作业或进程申请一个空闲区时,存储管理 程序从表头开始查找,当找到第一个満足要求的空闲区时,停止查找。如果该空闲区大于请求表中的请求长 度,将减去请求长度后的剩余空闲区部分留在可用表中。回收时,从作链中删去要回收的作业块,同时在空 闲链中插入该作业大小的空闲区,并按顺序排列 四、实验方案或步骤 1、应用环境、需求分析 本模拟系统主要针对文件的管理和操作名主要有:创建用户、文件、文件夹,读文件,写文件,执行文件,关闭文件,删除用户、文件夹、文件的功能。 创建用户、文件、文件夹:在对系统发出操作命令之前必须先登录用户,然而登录之前必须创建该用户。在创建完后,可通过登录用户来创建文件和文件夹。在创建文件时可设置文件的属性和输入文件的容。 读文件:读取任何已创建的只读或读写文件的容;如果所要读的文件不是可读文件时,系统会显示该文件不可读;如果所读文件不存在,系统会显示文件不存在。 写文件用户可写或重写读写文件中的容,并保存文件中的重写容,以供下次读取;当所要写的文件不是可写的文件时,系统会显示该文件不可写;当所要写的文件并不存在时,系统会显示该文件不存在。

实验四 触发器 实验报告

实验四触发器实验报告 徐旭东 11180243 物理112班 一、实验目的 1. 熟悉并掌握R-S、D、J-K触发器的特性和功能测试方法。 2. 学会正确使用触发器集成芯片。 3. 了解不同逻辑功能FF相互转换的方法。 二、实验仪器及材料 1. 实验仪器设备:双踪示波器、数字万用表、数字电路实验箱 2. 器件 74LS00 二输入端四与非门 1片 74LS74 双D触发器 1片 74LS76 双J-K触发器 1片 三、实验内容步骤及记录 1. 基本RS触发器功能测试: 两个TTL与非门首尾相接构成的基本RS触发器的电路。如图5.1所示。

(1)试按下面的顺序在S R 端加信号: d S =0 d R =1 d S =1 d R =1 d S =1 d R =0 d S =1 d R =1 观察并记录触发器的Q 、Q _ 端的状态,将结果填入 下表4.1中,并说明在上述各种输入状态下,RS 执行的是什么逻辑功能? 表4.1 d S d R Q 逻辑功能 0 1 1 1 1 1 0 1 1 1 0 0 0 0 1 1 置1 保持 置0 保持 (2)当d S 、d R 都接低电平时,观察Q 、Q _ 端的状态,当d S 、d R 同时由低电平跳为高电平时,注意观察Q 、Q _ 端的状态,重复3~5次看Q 、Q _ 端的状态是否相同,以正确理解“不定” 状态的含义。 结论: 当d S 、d R 都接低电平时,Q 和Q _ 端的状态不定。 2. 维持- 阻塞型D 触发器功能测试 双D 型正边沿维持-阻塞型触发器74LS74的逻辑符号如图4.2所示。 图中d S 、d R 端为异步置1端,置0端(或称异步置位,复位端),CP 为时钟脉冲端。试按下面步骤做实验: (1)分别在d S 、d R 端加低电平,观察并记录Q 、Q _ 端的状态。 (2)令d S 、d R 端为高电平,D 端分别接高,低电平,用点动脉 冲作为CP ,观察并记录当CP 为0、 、1、 时Q 端状态的变化。 图4.1 基本RS 触发器电 图4.2D 逻辑符号

操作系统实验报告

操作系统教程 实 验 指 导 书 姓名: 学号: 班级:软124班 指导老师:郭玉华 2014年12月10日

实验一WINDOWS进程初识 1、实验目的 (1)学会使用VC编写基本的Win32 Consol Application(控制台应用程序)。 (2)掌握WINDOWS API的使用方法。 (3)编写测试程序,理解用户态运行和核心态运行。 2、实验内容和步骤 (1)编写基本的Win32 Consol Application 步骤1:登录进入Windows,启动VC++ 6.0。 步骤2:在“FILE”菜单中单击“NEW”子菜单,在“projects”选项卡中选择“Win32 Consol Application”,然后在“Project name”处输入工程名,在“Location”处输入工程目录。创建一个新的控制台应用程序工程。 步骤3:在“FILE”菜单中单击“NEW”子菜单,在“Files”选项卡中选择“C++ Source File”, 然后在“File”处输入C/C++源程序的文件名。 步骤4:将清单1-1所示的程序清单复制到新创建的C/C++源程序中。编译成可执行文件。 步骤5:在“开始”菜单中单击“程序”-“附件”-“命令提示符”命令,进入Windows“命令提示符”窗口,然后进入工程目录中的debug子目录,执行编译好的可执行程序: E:\课程\os课\os实验\程序\os11\debug>hello.exe 运行结果 (如果运行不成功,则可能的原因是什么?) : 有可能是因为DOS下路径的问题 (2)计算进程在核心态运行和用户态运行的时间 步骤1:按照(1)中的步骤创建一个新的“Win32 Consol Application”工程,然后将清单1-2中的程序拷贝过来,编译成可执行文件。 步骤2:在创建一个新的“Win32 Consol Application”工程,程序的参考程序如清单1-3所示,编译成可执行文件并执行。 步骤3:在“命令提示符”窗口中运行步骤1中生成的可执行文件,测试步骤2中可执行文件在核心态运行和用户态运行的时间。 E:\课程\os课\os实验\程序\os12\debug>time TEST.exe 步骤4:运行结果 (如果运行不成功,则可能的原因是什么?) : 因为程序是个死循环程序 步骤5:分别屏蔽While循环中的两个for循环,或调整两个for循环的次数,写出运行结果。 屏蔽i循环: 屏蔽j循环: _______________________________________________________________________________调整循环变量i的循环次数:

操作系统实验报告

实验报告 实验课程名称:操作系统 实验地点:南主楼七楼机房 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 带权周转 时间

触发器的使用实验报告

实验II、触发器及其应用 一、实验目的 1、掌握基本RS、JK、D和T触发器的逻辑功能 2、掌握集成触发器的逻辑功能及使用方法 3、熟悉触发器之间相互转换的方法 二、实验原理 触发器具有两个稳定状态,用以表示逻辑状态“1”和“0”,在一定的外界信号作用下,可以从一个稳定状态翻转到另一个稳定状态,它是一个具有记忆功能的二进制信息存储器件,是构成各种时序电路的最基本逻辑单元。 1、基本RS触发器 如图1为两个与非门交叉耦合构成的基本RS触发器,它是无时钟控制低电平直接触发的触发器。基本RS触发器具有置“0”、置“1”和“保持”三种功能。通常称为置“1” 段,因为=0(=1)时触发器被置为“1”;为置“0”端,因为=0(=1)时触发器被置“0”,当==1时状态保持;==0时,触发器状态不定,应避免此种情况发生,表1为基本RS 触发器的状态表。 图1、基本RS触发器 表1、基本RS触发器功能表 输入输出 0 1 1 0 1 0 0 1 1 1 0 0 不定不定 基本RS 2、JK触发器

在输入信号为双端的情况下,JK触发器的功能完善、使用灵活和通用性较强的一种触发器。本实验采用74LS112双JK触发器,是下降沿出发的边沿触发器。引脚功能及逻辑符号如图2所示。 图2、74LS112双JK触发器引脚排列及逻辑符号 JK触发器的状态方程为:=J+ J和K是数据输入端,是触发器状态更新的依据,若J、K有两个或者两个以上输入端时,组成“与”的关系。和为两个互补输出端。通常把=0,=1的状态定为触发器“0” 状态;而把=1,=0定为“1”状态。下降沿触发JK触发器功能表如表2所示。 表2、JK触发器功能表 JK触发器常被用作缓冲存储器,移位寄存器和计数器。 3、D触发器 在输入信号为单端的情况下,D触发器用起来最为方便,其状态方程为=D,其输出状态的更新发生在CP脉冲的上升沿,故又称为上升沿触发的边沿触发器,触发器的状态只取决于时钟到来前D端的状态,D触发器的应用很广,可用作数字信号的寄存,移位寄存,分频和波形发生等。有很多种型号可供各种用途的需要而选用。如双D 74LS74、四D 74LS175、六D 74LS174等。 下图为双D774LS74的引脚排列及逻辑符号。功能表如表3.

实时操作系统实验报告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)

相关文档
最新文档