搜档网
当前位置:搜档网 › 西北工业大学-操作系统实验报告-实验一

西北工业大学-操作系统实验报告-实验一

西北工业大学-操作系统实验报告-实验一
西北工业大学-操作系统实验报告-实验一

实验一FreeBSD环境

一、实验目的

学习如何操作使用FreeBSD。

二、实验内容与要求

1、查阅资料,了解FreeBSD 项目的各个方面,比如它的历史、目标、开发模式;

2、学习使用FreeBSD,(账号:root;密码:无),学习其常用命令;

3、详细记录探索学习的内容和实验的整个过程,包括资料的查询、资料的来源(资料名称、网址等)、所做的各种尝试、以及最终的结果(包含截屏);

三、实验过程

1、FreeBSD的初步了解

(1).简介

FreeBSD是一个自由的(英文free也可以说是免费的)类UNIX操作系统(Unix-like),经由BSD UNIX由AT&T UNIX衍生而来,FreeBSD由于法律原因不能称为UNIX,但由于直接衍生于BSD UNIX,并且一些原来BSD UNIX的开发者后来转到FreeBSD的开发,使得FreeBSD在内部结构和系统API上和UNIX有很大的兼容性。由于FreeBSD宽松的法律条款,其代码被好多其他系统借鉴包括苹果公司的MacOS X,正因此由于MacOS X的UNIX兼容性,使得Mac OS X获得了UNIX商标认证。FreeBSD支持x86、amd64(x86_64)、ARM、IA-64、PowerPC、PC-98、SPARC等架构(不同版本支持有所不同)。

(2)历史

FreeBSD的发展始于1993年,取源于386BSD。然而,因为386BSD原始码的合理性受到质疑以及Novell(当时UNIX的版权拥有者)与伯克利接连而来的诉讼,FreeBSD在1995年1月发布的 2.0-RELEASE中以加州大学的 4.4BSD-Lite Release全面改写。FreeBSD手册中有更多FreeBSD的发展历史。

FreeBSD 2.0最值得注意的部份也许是对卡内基梅隆的Mach Virtual Memory系统翻修以及FreeBSD Ports system的发明。前者对于高负荷的系统最佳化,后者则是建立了一套简单且强大的机制维护第三方软体。有不少大型站台都使用FreeBSD,不过也有不少企业正转向Linux平台,好多VPS(虚拟个人主机)也提供FreeBSD空间。

FreeBSD 3.0则引入了ELF binary格式,并开始支援多CPU系统(SMP,Symmetric multiprocessing)以及64位元Alpha平台。3.x对于系统做了非常多的改革,这些措施在当时并没有带来好处,但却是4.X成功的基石。

(3)组织结构

FreeBSD的项目是由FreeBSD的志愿者或一些有SVN提交权限的开发者开发维护的。有几种不同类型的提交,包括提交源代码(基本操作系统),DOC提交(文件和网站的作者)和ports(第三方应用程序移植或基础程序)。每隔两年FreeBSD提交者选举9名成员组成的FreeBSD核心团队,负责整个项目的方向,项目规则的制定和实施新的“commit bits”,或SVN提交权限的授予和批准。FreeBSD核心团队,开发团队,包括负责安全公告(安全官团队),发行(工程队)发布工程和管理的端口集合(端口管理团队),被正式分配到一些任务和责任。FreeBSD项目是在开源项目中开发工作超过25年的不寻常的项目,有一些过去美国加州大学开发的一些BSD的计算机系统研究小组的人源参与其中。

(4)分支

FreeBSD的开发者保持至少两个分支的同步发展。在-CURRENT分支的FreeBSD的开发始终代表“ 流血的边缘”(bleeding edge)。一个的FreeBSD -STABLE分支创建的每一个主版本号,从中-RELEASE削减大约每4-6个月一次。如果一个功能是足够稳定和成熟,它可能会和向后来的-STABLE分支的合并。

(5)开发模式

和Windows不同的是,FreeBSD并不是一个商业投资产品。FreeBSD是由一群想把操作系统建得真正像一个系统的开发者开发出来的。FreeBSD的内核是和一整套的系统工具、驱动程序和配置文件一起发布的,这是很有代表性的正式发行。比如说FreeBSD5.2的发行就包括了核心程序、一个拥有完整功能性的防火墙、网络驱动程序、系统管理通用程序以及核心程序的软件工具包。其他的软件工具包由第三方开发者来提供(比如说Mozilla开源组织的Mozilla或是Brian Wotring公司的Osiris),但是这些程序都由FreeBSD打包集成在了整个操作系统里面。在打包集成的过程中,这些软件由FreeBSD团队来进行测试,以确保他们能够与操作系统一起工作正常——但是对于安全问题却没有必需的要求。

因为FreeBSD并不仅仅是一个内核,所以安全功能性能够贯穿整个核心程序和核心系

统通用程序,在操作系统开发体系构建的时候建立起来。比如说,在FreeBSD的核心程序里有一个“安全等级”概念。不同的安全等级有不同的限制。例如在安全等级2中,文件系统不能够被安装,一次时间调节不能被调节到多于一秒钟。不仅核心程序了解这个安全等级,核心系统通用程序的修改和帮助都强制性使用安全等级。这可能是因为FreeBSD是作为一个端到端的系统开发出来的。

整个系统的发布步骤有一个具有工程背景的发布团队来控制,这个团队决定操作系统的版本与其所包括的特性,以及下个版本的FreeBSD准备什么时候发布。这个发布团队制作了一个发放时间表,这个表概述了几个将要发放的版本的情况,同时决定了什么时候旧的版本将会到达“寿命终止”(EOL)。对于操作系统来说“寿命终止”日期是非常重要的,因为这也是FreeBSD需要为那几个版本的操作系统发放补丁的日期。如果你想要保持当前的版本(并确保安全),你必须为你的操作系统在“寿命终止”到来的时候进行更新。

2、学习使用FreeBSD

(1)登录

账号:root;密码:无

登录后界面如下图所示:

(2)退出系统

命令:shutdown -h now (3)修改密码

命令:passwd

(4)显示目前的工作目录命令:pwd

(5)查看目录与档案

命令:ls

(6)建立新的目录

命令:mkdir

(7)使用vim编辑器

vi:在命令行中输入vim,进入vi编辑器;

i:插入命令,按一下i键,下端显示 --INSERT--;

Esc:退出i(插入)命令进行其它命令使用;

wq:保存文件并退出

3、实验过程中所涉及资料及其来源

(1)FreeBSD百度百科。

原文链接:https://www.sodocs.net/doc/3a5704326.html,/view/21459.htm?fr=aladdin

(2)Linux开发模式与FreeBSD开发模式的比较。

本篇文章来源于 Linux公社网站(https://www.sodocs.net/doc/3a5704326.html,)

原文链接:https://www.sodocs.net/doc/3a5704326.html,/Linux/2007-06/4738p2.htm

四、实验分析与总结

在实验过程中,遇到了一些问题,主要是因为对FreeBSD的命令不熟悉,导致不知道如何操作FreeBSD。通过查找资料,这些问题都得到了解决。

经过本次实验,我对FreeBSD有了一个初步的了解,并学习了一些FreeBSD的基本命令,掌握了FreeBSD的基本操作。为进一步学习FreeBSD打下了基础。

西工大操作系统-简答题

操作系统 一、1.什么是操作系统?从资源管理看操作系统的功能有哪些?答:(1).操作系统是一个系统软件,它能有效地管理和控制计算机系统中的各种硬件和软件资源、合理组织计算机的工作流程,方便用户使用的程序和数据的集合。 (2).a.处理机管理:分配和控制处理机 b.存储器管理:分配及回收内存 c. I/O(Input/Output)设备管理:I/O分配与操作 d.文件管理:文件存取、共享和保护(详见课本P2-3) 2.什么叫并发性?什么叫并行性? 答:并发性:两个或两个以上事件在同一时间间隔内发生。 并行性:两个或两个以上事件在同一时刻发生。 3.试从交互性、及时性以及可靠性方面,将分时系统与实时系统进行比较。 答:及时性:实时系统要求更高 [分时系统:秒级(一般情况)实时系统: 微秒级甚至更小] 交互性:分时系统交互性更强 可靠性:实时系统要求更高(详见课本P9和P11) 三、1.在操作系统中为什么要引入进程的概念?它与程序的区别和联系是怎样的? 答:(1)程序在并发执行方式下,运行时具有异步性的特征,“程序”这个静态概念已经不足以描述程序的执行过程。这样,就需要一个数据结构PCB来记录程序的状态,以及控制其状态转换所需的一些信息。因此,将PCB、程序、数

据三者组成一个完整的实体,就是进程实体。进程是程序的一次执行,引入进程的概念,便于操作系统对于程序的运行进行控制。 (2)区别:1)程序是指令的有序集合,是静态的,进程是程序的执行,是动态的。2)进程的存在是暂时的,程序的存在是永久的。3)进程的组成应包括程序和数据。除此之外,进程还应由记录进程状态信息的“进程控制块”组成。 联系:程序是构成进程的组成部分之一,一个进程的运行目标是执行它所对应的程序。如果没有程序,进程就失去了其存在的意义。从静态的角度看,进程由程序、数据和进程控制块三部分组成。 2.什么是进程的互斥与同步? 答:进程互斥:指两个或两个以上的进程由于竞争资源而形成的制约关系。 进程同步:指两个或两个以上的进程由于某种时序上的限制而形成的相互合作的制约关系。 3.一个进程进入临界区的调度原则是什么? 答:①如果有若干进程要求进入空闲的临界区,一次仅允许一个进程进入。②任何时候,处于临界区内的进程不可多于一个。如已有进程进入自己的临界区,则其它所有试图进入临界区的进程必须等待。③进入临界区的进程要在有限时间内退出,以便其它进程能及时进入自己的临界区。④如果进程不能进入自己的临界区,则应让出CPU,避免进程出现“忙等”现象。 4.说明进程的结构、特征和基本状态。 答:进程是程序在其数据集合上的一次运行活动,是资源分配和独立调度的基本单位。进程由程序、数据和进程控制块组成 进程的特征:动态性、并发性、独立性、异步性

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

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

操作系统实验报告一

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

《操作系统原理》实验报告 开课实验室:年月日学院软件学院年级、专业、班2013级软件工 程2班 姓名胡其友成绩 课程名称操作系统原理 实验项目 名称 指导教师洪明坚 教师 评语教师签名:洪明坚年月日 1.实验目的: ?进入实验环境 –双击expenv/setvars.bat ?检出(checkout)EPOS的源代码 –svn checkout https://www.sodocs.net/doc/3a5704326.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)理解进程的独立空间; (2)理解线程的相关概念。 二、实验内容与要求 1、查阅资料,掌握进程创建和构造的相关知识和线程创建和构造的相关知 识,了解C语言程序编写的相关知识; 2、理解进程的独立空间的实验内容及步骤 (1)编写一个程序,在其 main()函数中定义一个变量 shared,对其进行循环加/减操作,并输出每次操作后的结果; (2)使用系统调用 fork()创建子进程,观察该变量的变化; (3)修改程序把 shared变量定义到 main()函数之外,重复第(2)步操作,观察该变量的变化。 3、理解线程的实验步骤 (1)编写一个程序,在其 main()函数中创建一个(或多个)线程,观察该线程是如何与主线程并发运行的。输出每次操作后的结果; (2)在 main()函数外定义一个变量shared(全局变量),在main()中创建一个线程,在 main()中和新线程shared进行循环加/减操作,观察该变量的变化; (3)修改程序把shared变量定义到 main()函数之内,重复第(2)步操作,观察该变量的变化。

4、对整个实验过程进行分析总结,给出详细步骤; (1) 观察上述进程执行结果,并分析原因; (2) 提交源程序清单,并附加流程图与注释。 三、实验过程 1、进程的与线程的创建和构造 (1).进程的创建和构造 进程简单来说就是在操作系统中运行的程序,它是操作系统资源管理的最小单位。但是进程是一个动态的实体,它是程序的一次执行过程。进程和程序的区别在于:进程是动态的,程序是静态的,进程是运行中的程序,而程序是一些保存在硬盘上的可执行代码。 新的进程通过克隆旧的程序(当前进程)而建立。fork()和clone()(对于线程)系统调用可用来建立新的进程。 (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个部分。如下图:

操作系统实验报告4

《操作系统》实验报告 实验序号: 4 实验项目名称:进程控制

Printf(“child Complete”); CloseHandle(pi.hProcess); CloseHandle(pi hThread); ﹜ 修改后: #include #include int main(VOID) { STARTUPINFO si; PROCESS_INFORMA TION pi; ZeroMemory(&si,sizeof(si)); si.cb=sizeof(si); ZeroMemory(&pi,sizeof(pi)); if(!CreateProcess(NULL, "c:\\WINDOWS\\system32\\mspaint.exe", NULL, NULL, FALSE, 0, NULL, NULL, &si,&pi)) { fprintf(stderr,"Creat Process Failed"); return -1; } WaitForSingleObject(pi.hProcess,INFINITE); printf("child Complete"); CloseHandle(pi.hProcess); CloseHandle(pi.hThread); } 在“命令提示符”窗口运行CL命令产生可执行程序4-1.exe:C:\ >CL 4-1.cpp

实验任务:写出程序的运行结果。 4.正在运行的进程 (2)、编程二下面给出了一个使用进程和操作系统版本信息应用程序(文件名为4-5.cpp)。它利用进程信息查询的API函数GetProcessVersion()与GetVersionEx()的共同作用。确定运行进程的操作系统版本号。阅读该程序并完成实验任务。 #include #include

西北工业大学操作系统实验_OS3(10)

评语: 课中检查完成的题号及题数: 课后完成的题号与题数: 成绩: 指导教师: 实验报告三 实验名称:七、八日期:2013.05.23 班级:10011007 学号:2010302555 姓名:杨宏志实验七理解线程的相关概念 1. 实验目的 理解当操作系统引入线程的概念后,进程是操作系统独立分配资源的单位,线程成为系统调度的单位,与同一个进程中的其他线程共享程序空间。 2. 实验预习内容 预习线程创建和构造的相关知识,了解C语言程序编写的相关知识。 3. 实验内容及步骤 (1)编写一个程序,在其main()函数中创建一个(或多个)线程,观察该线程是如何与主线程并发运行的。输出每次操作后的结果; (2)在main()函数外定义一个变量shared(全局变量),在main()中创建一个线程,在main()中和新线程shared 进行循环加/减操作,观察该变量的变化; (3)修改程序把shared 变量定义到main()函数之内,重复第(2)步操作,观察该变量的变化。

4. 实验总结 (1) 观察上述程序执行结果,并分析原因; (2) 提交源程序清单,并附加流程图与注释。思考:分析进程和线程的不同之处。 5. 具体实现 1)观察线程并发性: #include #include #include void * func(void *params) { while(1) { printf("i am the thread 2\n"); sleep(1); } return NULL; } int main() { pthread_t tid; int res=pthread_create(&tid, NULL,func,NULL); while(1) { printf("i am main thread\n"); sleep(1); } return 0; }

实时操作系统报告

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

操作系统实验报告

操作系统教程 实 验 指 导 书 姓名: 学号: 班级:软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的循环次数:

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

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

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

西工大作业机考《计算机操作系统》标准

试卷总分:100 得分:98 一、单选题 (共 50 道试题,共 100 分) 1. 在()中,不可能产生系统抖动的现象。 A.固定分区管理 B.请求页式管理 C.段式管理 D.机器中不存在病毒时 正确答案: 2. 主要由于()原因,使UNIX易于移植。 A.UNIX是由机器指令编写的 B.UNIX大部分用汇编少部分用C语言编写 C.UNIX是用汇编语言编写的 D.UNIX小部分用汇编大部分用C语言编写 正确答案: 3. 磁盘是共享设备,每一时刻()进程与它交换信息。 A.可有任意多个 B.限定n个 C.至少有一个 D.最多有一个 正确答案: 4. 操作系统是一种()。 A.应用软件 B.系统软件 C.通用软件 D.工具软件 正确答案: 5. 操作系统提供的系统调用大致可分为()等几类。 A.文件操作类、资源申请类、控制类、设备调用类 B.文件操作类、资源申请类、控制类、信息维护类 C.文件操作类、资源申请类、信息维护类、设备调用类 D.资源申请类、控制类、信息维护类、设备调用类 正确答案: 6. 并发性是指若干事件在()发生。

B.同一时间间隔内 C.不同时刻 D.不同时间间隔内 正确答案: 7. 引入多道程序技术后,处理机的利用率()。 A.降低了 B.有所改善 C.大大提高 D.没有变化,只是程序的执行方便了 正确答案: 8. 一个进程被唤醒意味着()。 A.该进程重新占有了CPU B.进程状态变为就绪 C.它的优先权变为最大 D.其PCB移至就绪队列的队首 正确答案: 9. 进程间的基本关系为()。 A.相互独立与相互制约 B.同步与互斥 C.并行执行与资源共享 D.信息传递与信息缓冲 正确答案: 10. 下列方法中哪一个破坏了“循环等待”条件?() A.银行家算法 B.一次性分配策略(即预分配策略) C.剥夺资源法 D.资源有序分配 正确答案: 11. 存储管理的目的是()。 A.方便用户 B.提高内存利用率 C.A和B D.增加内存实际容量

操作系统实验报告

操作系统实验报告 实验名称: 系统的引导 所在班级: 指导老师: 老师 实验日期: 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

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

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

操作系统实验报告

操作系统教程实验报告 专业班级 学号 姓名 指导教师

实验一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 运行结果 (如果运行不成功,则可能的原因是什么?) : (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循环:

操作系统实验报告

操作系统实验报告 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的镜像文件,如图所示:

西工大计算机操作系统实验报告OS2

评语: 成绩: 指导教师: 实验报告二 日期:2013-5-16 实验名称:构造进程家族树 理解进程的独立空间 一、实验目的: 1. 通过创建若干个子进程,构造进程家族树,分析进程家族树的结构关系;学 习相关系统调用(例如,getpid()和getppid()等)的使用方法。 2. 理解进程是操作系统独立分配资源的单位,进程拥有自己相对独立的程序空 间。 二、实验内容: 1. 进程的创建:编制一段程序,使用系统调用fork()创建三个子进程,在各个子 进程中再使用系统调用fork()进一步创建子进程,如此重复,构造一棵进程家 族树。分别使用系统调用getpid()和getppid()获取当前进程和父进程的 进程标识号并输出。 2. (1)编写一个程序,在其main()函数中定义一个变量shared,对其进行循 环加/减操作,并输出每次操作后的结果; (2)使用系统调用fork()创建子进程,观察该变量的变化; (3)修改程序把shared 变量定义到main()函数之外,重复第(2)步操作,观察该变量的变化。 三、项目要求及分析: 1.学习进程构造的相关知识,学习获取进程相关信息的系统调用函数。利用系统调用getpid()和getppid()所获得的进程标识号信息,验证是否进程间关系是否满足要求的进程家族树。 2.了解进程创建和构造的相关知识,了解C语言程序编写的相关知识。 观察进程执行结果,根据进程间的执行关系思考原因,并和线程进行比较。 四、具体实现:

4.1 流程图 1.进程家族树 Pid_1=fork() Pid_2=fork() Pid_1<0? error Pid_1==0? 输出pid 和ppid Pid_2<0? ERROR Y N Y Y Pid_2==0? Pid_2_1=fork() Pid_2_1<0? ERROR Y Y Pid_2_1==0? 输出pid 和ppid Pid_2_2=fork() N Y pid1>0?Pid_2_1>0? Pid_2_2<0? ERROR Pid_2_2==0? 输出pid 和ppid N Y Pid_2>0? Pid_3=fork() Pid_3<0? ERROR Pid_3==0? 输出pid 和ppid N N Y Y Y Y N N Y N Y 2.

操作系统实验报告

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

操作系统实验一实验报告

操作系统实验一实验报告 基本信息 1.1 实验题目 进程控制实验 1.2完成人 王召德 1.3报告日期 2015-4-8 实验内容简要描述 2.1实验目标 加深对于进程并发执行概念的理解。实践并发进程的创建和控制方法。观察和 体验进程的动态特性。进一步理解进程生命期期间创建、变换、撤销状态变换的过 程。掌握进程控制的方法,了解父子进程间的控制和协作关系。练习Linux 系统中 进程创建与控制有关的系统调用的编程和调试技术。 2.2实验要求 参考以上示例程序中建立并发进程的方法,编写一个多进程并发执行程序。父进程首先创建一个执行ls命令的子进程然后再创建一个执行ps命令的子进程,并控制ps 命令总在ls 命令之前执行。 2.3实验的软硬件环境

Ubuntu14.04 intelPC 报告的主要内容 3.1实验的思路 按照上面的实例,先生成一个子进程让其等待,然后生成第二个子进程,父进程等待其执行ps命令后唤醒第一个子进程执行ls即可。 3.2实验模型的描述 无 3.3主要数据结构的分析说明 无 3.4主要算法代码的分析说明 无 3.5项目管理文件的说明 无 实验过程和结果 4.1实验投入的实际学时数 1学时 4.2调试排错过程的记录 曾尝试让第二个子进程激活第一个子进程,结果发现当运行ps后,后面的代码将不再执行,所以不可行。 4.3多种方式测试结果的记录

实验结果: 父进程启动 (12239) ls子进程启动 (12240) ps子进程启动 (12241) PID TTY TIME CMD 12239 pts/27 00:00:00 born 12240 pts/27 00:00:00 born 12241 pts/27 00:00:00 ps ps子进程结束 (12241) 唤醒ls子进程 (12240) 键盘中断信号产生... ls子进程被唤醒 (12240) . born born.c~ hello.c pctl pctl.c~ pctl.o .. born.c helelo.h~ hello.c~ pctl.c pctl.h ls子进程结束 (12240) 父进程结束 (12239) 4.4实验结果的分析综合 无 实验的总结 父进程可以通过fork()函数生成子进程,子进程会从fork()函数开始执行原来的代码,当

相关主题