上海大学操作系统_实验六

合集下载

上海大学操作系统(二)实验报告(全)

上海大学操作系统(二)实验报告(全)

评分:SHANGHAI UNIVERSITY操作系统实验报告学院计算机工程与科学专业计算机科学与技术学号学生姓名《计算机操作系统》实验一报告实验一题目:操作系统的进程调度姓名:张佳慧学号 :12122544 实验日期: 2015.1实验环境: Microsoft Visual Studio实验目的:进程是操作系统最重要的概念之一,进程调度又是操作系统核心的主要内容。

本实习要求学生独立地用高级语言编写和调试一个简单的进程调度程序。

调度算法可任意选择或自行设计。

例如,简单轮转法和优先数法等。

本实习可加深对于进程调度和各种调度算法的理解。

实验内容:1、设计一个有n个进程工行的进程调度程序。

每个进程由一个进程控制块(PCB)表示。

进程控制块通常应包含下述信息:进程名、进程优先数、进程需要运行的时间、占用CPU的时间以及进程的状态等,且可按调度算法的不同而增删。

2、调度程序应包含2~3种不同的调度算法,运行时可任意选一种,以利于各种算法的分析比较。

3、系统应能显示或打印各进程状态和参数的变化情况,便于观察诸进程的调度过程。

操作过程:1、本程序可选用优先数法或简单轮转法对五个进程进行调度。

每个进程处于运行R(run)、就绪W(wait)和完成F(finish)三种状态之一,并假设起始状态都是就绪状态W。

为了便于处理,程序进程的运行时间以时间片为单位计算。

进程控制块结构如下:进程控制块结构如下:PCB进程标识数链指针优先数/轮转时间片数占用 CPU 时间片数进程所需时间片数进程状态进程控制块链结构如下:其中:RUN—当前运行进程指针;HEAD—进程就绪链链首指针;TAID—进程就绪链链尾指针。

2、算法与框图(1) 优先数法。

进程就绪链按优先数大小从高到低排列,链首进程首先投入运行。

每过一个时间片,运行进程所需运行的时间片数减 1,说明它已运行了一个时间片,优先数也减 3,理由是该进程如果在一个时间片中完成不了,优先级应该降低一级。

(完整word版)操作系统第一次试验报告

(完整word版)操作系统第一次试验报告

北京邮电大学操作系统实验实验报告班号:姓名:学号:实验日期: 2014.11.16 实验名称:操作系统实验一、实验目的1、熟悉LINUX的基本环境,了解LINUX下进程和线程的实现二、实验内容1、熟悉UNIX/LINUX的常用基本命令2、利用fork()生成子进程和clone()生成线程。

3、通过mutex来实现生产者和消费者问题。

三、项目要求及分析(1)下载并安装LINUX,可以使用FEDORA或Ubuntu.(2)熟悉UNIX/LINUX的常用基本命令如ls、who、wc、pwd、ps、pstree、top,cat,cd,chgrp,chmod,chown,comm,cmp,cp,rm,diff,mv,rmdir等,了解环境。

(3)比较fork()和clone()的功能,利用fork()生成子进程和clone()生成线程。

(4)利用pthread库,通过其中的mutex来实现生产者和消费者问题。

(5) 使用System V的信号灯,实现第二类读者-写者问题(写者优先,新来的读者不允许进行写操作)。

四、具体实现(1):熟悉UNIX/LINUX的常用基本命令名称: ls使用权限: 所有使用者使用方式: ls [-alrtAFR] [name...]说明: 显示指定工作目录下之内容(列出目前工作目录所含之档案及子目录)。

参数:-a 显示所有档案及目录(ls内定将档案名或目录名称开头为"."的视为隐藏档,不会列出)-l 除档案名称外,亦将档案型态、权限、拥有者、档案大小等资讯详细列出-r 将档案以相反次序显示(原定依英文字母次序)-t 将档案依建立时间之先后次序列出-A 同-a ,但不列出"." (目前目录) 及".." (父目录)-F 在列出的档案名称后加一符号;例如可执行档则加"*", 目录则加"/"-R 若目录下有档案,则以下之档案亦皆依序列出名称: who使用权限: 所有使用者都可使用使用方式: who - [husfV] [user]说明: 显示系统中有那些使用者正在上面,显示的资料包含了使用者ID,使用的终端机,从哪边连上来的,上限时间,呆滞时间,CPU 使用量,动作等等。

操作系统基础实验,实验一和实验二实验报告

操作系统基础实验,实验一和实验二实验报告
1.掌握Windows XP的基本操作。
2.掌握Windows XP的管理程序。
文件和磁盘管理:
1.掌握“Windows资源管理器”和“我的电脑”的使用。
2.掌握文件和文件夹的常用操作。
3.掌握磁盘管理的方法。
文档的基本操作和排版:
1.掌握Word文档的建立、保存于打开。
2.掌握新建、样式和格式等任务窗格的使用。
(1)启动“画图”程序,然后打开“windows任务管理器”窗口,记录系统当前进程数和“画图”的线程数。
(2)通过“windows任务管理器”终止“画图”程序的运行。
5.在桌面上建立快捷方式和其他对象。
(1)为“控制面板”中的“系统”建立快捷方式。
(2)为“windows资源管理器”建立一个名为“资源管理器”的快捷方式。
(3)为documents and settings文件夹创建快捷方式。
(4)为windows XP主目录中的文件coffee bean .bmp创建快捷方式。
(5)简历名称为myfile.txt的文本文件和名称为“我的数据”的文件夹。
6.“回收站”的使用和设置。
(1)删除桌面上已经建立的“资源管理器”快捷方式和“系统”快捷方式。
山西财经大学《大学计算机基础》实验报告
2014年12月8日
实验题目
操作系统基础实验,实验一实验二
选课课号
(2014-2015-1)-N0810010S0-08019-5
学院
财政金融学院
班级
金融工程1班
姓名
张思静
学号
201404040102
理论课教师
尹耀兰
上机指导教师
尹耀兰
实验目的及要求:
Windows XP的基本操作和程序管理:

上海大学操作系统(1)期末复习整理4.0版

上海大学操作系统(1)期末复习整理4.0版

第一章1.操作系统的目标方便性、有效性、可扩充性、开放性2.操作系统的作用1.OS作为用户与计算机硬件系统之间的接口(命令方式,系统调用方式和图标-窗口方式)2. OS作为计算机系统资源的管理者(处理机、存储器、I/O设备以及文件(数据和程序))3. OS实现了对计算机资源的抽象(铺设在计算机硬件上的多层软件的集合)3.推动操作系统发展的的主要动力1.不断提高计算机资源利用率2.方便用户3. 器件的不断更新换代4. 计算机体系结构的不断发展5. 不断提出新的应用需求4.未配置操作系统的计算机系统1. 人工操作方式2. 脱机输入/输出(Off-Line I/O)方式脱机I/O 是指事先将装有用户程序和数据的纸带或卡片装入纸带输入机或卡片机,在外围机的控制下,把纸带或卡片上的数据或程序输入到磁带上。

该方式下的输入输出由外围机控制完成,是在脱离主机的情况下进行的。

而联机I/O方式是指程序和数据的输入输出都是在主机的直接控制下进行的。

5.单道批处理系统存中始终只保持一道作业在解决人机矛盾和CPU与I/O设备速度不匹配矛盾的过程中形成的批处理系统旨在提高系统资源的利用率和系统吞吐量缺点:系统中的资源得不到充分的利用(存中仅有一道程序,每逢该程序在运行中发出I/O 请求后,CPU便处于等待状态)6.三大经典OS(1)多道批处理系统从后备队列中选择若干个作业调入存,使它们共享CPU和系统中的各种资源优缺点:(1) 资源利用率高。

(多道程序交替运行,提高CPU,存,I/O利用率)(2) 系统吞吐量大。

(CPU和其他资源保持忙碌状态,系统开销小)(3) 平均周转时间长。

(作业要排队依次进行处理)(4) 无交互能力(修改和调试程序不便)多道批处理系统需要解决的问题(1) 处理机争用问题。

(2) 存分配和保护问题。

(3) I/O设备分配问题。

(4) 文件的组织和管理问题。

(5) 作业管理问题。

(6) 用户与系统的接口问题。

上海大学 计算机网络 实验报告

上海大学 计算机网络 实验报告

上海大学计算机网络实验报告一、实验背景。

在上海大学学计算机网络这门课呀,实验那可是相当重要的一部分呢。

计算机网络就像是一个超级复杂又超级有趣的大迷宫,实验就是我们探索这个迷宫的小冒险。

这门课讲的都是网络怎么连接、数据怎么传输之类超级神奇的东西,所以实验就是让我们把那些听起来有点玄乎的理论变成实际能看到、摸到的操作。

二、实验目的。

咱做这个计算机网络实验呢,主要就是想搞清楚网络的那些原理到底是咋在实际里运作的。

比如说网络拓扑结构,是像星星一样散开的星型结构,还是一环套一环的环形结构,或者是其他奇奇怪怪的形状,通过实验就能很直观地看到不同结构下网络的特点。

还有网络协议,什么TCP/IP协议呀,就像网络世界里的交通规则,实验能让我们知道这个规则是怎么指挥数据在路上跑的。

再就是网络设备的配置,像路由器和交换机这些,就跟交通枢纽一样重要,学会配置它们就像学会怎么管理交通枢纽,让网络这个大城市里的数据车都能跑得顺畅。

三、实验设备和环境。

做实验嘛,当然得有工具啦。

在我们上海大学的实验室里,有一堆超酷的设备。

计算机那肯定是标配啦,而且都是装好了各种网络相关软件的。

还有交换机和路由器,这些小家伙看起来不起眼,但是在网络里可是起着超级大的作用呢。

环境的话,实验室里的网络设置得很有讲究,既有内部的局域网,模拟小范围的网络通信,也能连接到外部网络,这样就能看到网络数据在不同环境下的传输情况啦。

四、实验过程。

1. 网络拓扑结构搭建。

最开始就是搭网络拓扑结构,这就像搭积木一样,不过比搭积木难多了。

我们要根据实验要求,用网线把计算机、交换机和路由器连接起来。

有时候线多得像一团乱麻,但是只要按照规划来,慢慢就能理清楚。

比如说搭一个简单的星型拓扑结构,就把每台计算机的网线都插到交换机上,就像星星的光线都汇聚到中心一样。

这个过程中,要是有一根线插错了,那整个网络可能就不通了,所以得特别小心。

2. 网络设备配置。

搭好结构之后,就要配置网络设备了。

【网络】上海大学计算机网络实验报告1

【网络】上海大学计算机网络实验报告1
Close:终止当前已经建立的联接或正在进行的联接;
Display:显示系统当前的操作参数;
Mode:进入逐行方式;
Open:与指定的主机建立Telnet联接;
Quit:退出Telnet应用进程;
Logout:强制关闭登录的用户帐号;
Send:发送一些信息到远程系统上;
Set:设置所有可以用display命令显示的操作参数;
(Windows 7默认不开启Telnet工具,需要在“控制面板”->“程序”->“打开(OPEN)或关掉windows功能”里,开启“telnet服务器”和“telnet客户端”。)
1.启动cmd控制台;
2.打开连接:输入telnet 80回车;
3.打开回显方便查看正在做什么:
输入Ctrl+],输入set lIP网络中网络测试和网络诊断命令的使用方法
实验内容:
1.使用Windows操作系统,了解Telnet、FTP、WEB服务等网络服务的配置方法;
2.使用Windows操作系统,掌握常用网络测试命令的使用方法。
实验要求:(学生对预习要求的回答)(10分)
得分:
简要说明Telnet的主要命令与作用
-w timeout等待每次回复的超时时间(毫秒)。
-R同样使用路由标头测试反向路由(仅适用于IPv6)。
-S srcaddr要使用的源地址。
-4强制使用IPv4。
-6强制使用IPv6。
命令3:ARP
显示和修改地址解析协议(ARP)使用的“IP到物理”地址转换表。
ARP -s inet_addr eth_addr [if_addr]
-v TOS服务类型(仅适用于IPv4。该设置已不赞成使用,且

上海应用技术学院实验报

上海应用技术学院实验报

上海应用技术学院实验报告
课程名称计算机导论上机实验实验项目Dos操作系统常用命令的使用一、目的及要求:
熟练使用Dos操作系统命令
二、实验准备:
电脑
三、实验内容:
1、打开开始菜单,点击运行命令。

2、输入cmd,单击确定。

3、输入dir,可看到当前文件下的子目录。

4、输入cd+子目录名,可进入此子目录。

5、输入md+目录名,可创建新目录。

6、输入rd+目录名,可删除在此目录。

7、输入date,可修改时间。

8、输入cd .. ,可进入上一级菜单。

9、输入cls,可清空屏幕。

10、输入d:,可进入d盘,其余类似。

11、输入copy+文件名+文件夹名,可复制此文件到此文件夹中。

12、输入del+文件名,可删除此文件。

13、输入dir *.xv ,可显示所有以xv为拓展名的文件。

14、输入help ,可显示所有命令。

15、输入tree,可以树形结构图显示所含文件夹。

16、输入命令/参数,如dir/a,可显示子目录时使用ASC11,而不使用拓展字符。

17、输入exit,可退出窗口。

四、结论及体会:
DOS使用命令来行动,让人不得不记忆许多复杂的命令,十分繁琐,相比于Windows 系统那图文结合的简便而言,这种方法就不太适合广大人群,所以它的衰败结果就成为了一种必然。

第2章 Windows XP操作系统实验指导附答案

第2章 Windows XP操作系统实验指导附答案

第2章Windows XP操作系统2.1 学习指导2.1.1 操作系统概述一、教材导读操作系统的发展与计算机硬件的发展息息相关,早期的计算机没有操作系统,人们通过各种操作按钮来控制计算机,后来出现了汇编语言等一些程序,随着这些程序功能的不断完善和扩充,逐步形成了较为实用的系统软件——操作系统。

在微机上,早期运行的主要操作系统是MS-DOS。

1995年8月,微软公司推出了采用图形化用户界面的操作系统——Windows 95,之后,微软公司又相继推出了Windows 98、Windows NT、Windows 2000、Windows XP等操作系统。

在本节中,主要让学生掌握以下内容:操作系统的概念、发展、主要特性、基本功能和分类。

二、重点分析与补充知识本节的重点和难点:操作系统的主要特性、基本功能和分类。

现在的计算机离不开操作系统,其它软件都是在操作系统的支持下来运行的,掌握操作系统的有关知识,将为今后的学习打下坚实的基础。

三、教材知识巩固1.单项选择题1)下列关于操作系统的主要特性的说法错误的是。

A.并发性是指两个或两个以上的运行程序在同一时间间隔段内同时执行B.共享是指操作系统中的资源可被多个并发执行的进程所使用C.异步性(Asynchronism),也称随机性D.采用了并发技术的系统称为单任务系统2)计算机能及时响应外部事件的请求,在规定的严格时间内完成对该事件的处理,并控制所有实时设备和实时任务协调一致地工作的操作系统是。

A.分时操作系统B.实时操作系统C.批处理操作系统D.分布式操作系统3)大量的计算机通过网络联结在一起,可以获得极高的运算能力及广泛的数据共享,这种系统被称为。

A.分时操作系统B.实时操作系统C.网络操作系统D.分布式操作系统4)下面有关操作系统的说法,错误的是______。

A.按运行环境将操作系统分为实时操作系统、分时操作系统和批处理操作系统B.分时操作系统具有多个终端C.实时操作系统是对外来信号及时做出反应的操作系统D.批处理操作系统指利用CPU的空余时间处理成批的作业5)分时操作系统又称为操作系统。

操作系统上海大学实验

操作系统上海大学实验

第一部分《操作系统(一)》课程实验实验一Linux操作系统基本命令一.实验目的1. 了解Linux运行环境,熟悉交互式分时系统、多用户环境的的运行机制。

2. 练习Linux系统命令接口的使用,学会Linux基本命令、后台命令、管道命令等命令的操作要点。

二.实验环境复习操作系统中相关的用户接口概念。

查阅Linux中Shell的资料,它既是一个命令解释程序,又是一个程序设计语言。

熟悉本《实验指导》第二部分,从中你可以学会Shell的一般命令。

三.实验内容通过终端或虚拟终端,在基于字符的交互界面中进行Shell的基本命令的操作。

四.操作过程查看信息命令文件操作命令文件链接的意思——在文件之间创建链接。

作用——给系统中u、已有的某个文件指定另外一个可用于访问它的名称。

对于新的文件名,我们可以为其指定不同的访问权限,以控制对信息的共享和安全性问题。

目录操作思考:Linux文件类型有哪几种?文件的存取控制模式如何描述?文件类型有普通文件(~)、目录文件(d)、块设备特别文件(b)、字符设备特别文件(c)、命名管道文件(p)等。

“存取控制模式”指对不同用户分配不同的操作权。

Linux文件系统将用户分为3类,即文件主、同组人、其他人。

每种人可以执行3种操作,r,w,x。

修改文件属性不能,文件已经不属于本个用户。

进程管理命令思考:系统如何管理系统中的多个进程?进程的家族关系是怎样体现的?有什么用?在linux系统上运行任何东西,每个用户的工作、每个系统监控程序等等都是已进程形式运行的。

因此进程管理师linux系统管理非常重要的一个方面。

交互式进程:一个由shell启动控制的进程,可在前台或后台运行;批处理进程:与终端无关,安排在指定时刻完成一系列进程;守护进程:在引导系统时动,以执行即时的操作系统任务。

当用户管理进程时,必须用到PID号。

实验二用户界面与Shell 命令一实验要求(1)(2)(3)(4)(1)掌握图形化用户界面和字符界面下使用Shell 命令的方法。

上海大学操作系统2实验报告)

上海大学操作系统2实验报告)

SHANGHAI UNIVERSITY计算机操作系统实验报告(实验四、五、六)学院计算机工程与科学学院专业计算机科学与技术学号06122565姓名金玉倩教师吴绍春日期2010-2《计算机操作系统》实验报告实验四题目:Linux文件系统实验姓名:金玉倩学号:06122565 实验日期:2009.1实验目的:1.掌握操作系统中文件分类的概念。

2.了解Linux文件系统管理文件的基本方式和特点。

3.学会使用Linux文件系统的命令界面和程序界面的基本要领。

实验内容:1.用shell命令查看Linux文件类型。

Linux的文件类型包括:普通文件(—)、目录文件(d)、字符设备文件(c)、块设备文件(b)硬链接文件、套接口文件(s)、符号链接文件(l)和管道文件(p)。

2.用shell命令了解Linux文件系统的目录结构。

3.用命令分别建立硬链接文件和符号链接文件。

通过ls -il命令所示的inode、链接计数观察他们的区别。

◆思考题:建立硬链接文件和建立符号链接文件有什么区别?答:硬连接指通过索引节点来进行的连接。

在Linux中,多个文件名指向同一索引节点是存在的。

一般这种连接就是硬连接。

硬连接的作用是允许一个文件拥有多个有效路径名,这样用户就可以建立硬连接到重要文件,以防止“误删”的功能。

其原因如上所述,因为对应该目录的索引节点有一个以上的连接。

只删除一个连接并不影响索引节点本身和其它的连接,只有当最后一个连接被删除后,文件的数据块及目录的连接才会被释放。

也就是说,文件才会被真正删除。

与硬连接相对应的另一种连接,称为符号连接(软连接)。

软链接文件有点类似于Windows的快捷方式。

它实际上是特殊文件的一种。

在符号连接中,文件实际上是一个文本文件,其中包含的有另一文件的位置信息。

如上图实验所示:touch f1(创建一个f1的文件)ln f1 f2 创佳一个f2的硬连接ln -s f1 f3 创建一个f3的软连接此时如果删除f3,对f1、f2无影响;如果删除f2,对f1、f3也无影响,如果删除f1,那么因为f2也应用f1,所以并不影响f2节点的,cat创建的文件仍然存在;但是此时f3因为是软连接,导致f3失效。

操作系统A实验指导书(宋亚奇)12页word文档

操作系统A实验指导书(宋亚奇)12页word文档

《操作系统A》实验指导书实验一进程调度实验实验名称:进程调度实验实验类型: 验证性实验学时: 4适用对象: 信息与计算科学专业一、实验目的通过通过实验使学生更好地掌握操作系统的基本概念、基本原理、及基本功能。

特别是进程的概念、进程控制块的概念以及进程的三种基本状态等概念。

培养学生程序设计的方法和技巧,提高学生编制清晰、合理、可读性好的系统程序的能力,加深对操作系统课程的理解,拓宽学生的知识领域,锻炼学生的实践技能。

二、实验要求本实验模拟单处理器系统的进程调度,加深对进程的概念及进程调度算法的理解。

用某种语言编写和调试一个进程调度的算法程序,有一些简单的界面,能够运行,仿真操作系统中进程调度的原理和过程。

进程调度要求使用高响应比优先的动态优先级调度算法。

三、实验原理动态优先权是指,在创建进程时所赋予的优先权,是可以随进程的推进或随其等待时间的增加而改变的,以便获得更好的调度性能。

例如,我们可以规定,在就绪队列中的进程,随其等待时间的增长,其优先权以速率a提高。

若所有的进程都具有相同的优先权初值,则显然是最先进入就绪队列的进程,将因其动态优先权变得最高而优先获得处理机,此即FCFS算法。

若所有的就绪进程具有各不相同的优先权初值,那么,对于优先权初值低的进程,在等待了足够的时间后,其优先权便可能升为最高,从而可以获得处理机。

当采用抢占式优先权调度算法时,如果再规定当前进程的优先权以速率b下降,则可防止一个长作业长期地垄断处理机。

高响应比优先调度算法是一种动态优先权调度算法,其优先权的变化规律可描述为:由于等待时间与服务时间之和,就是系统对该作业的响应时间,故该优先权又相当于响应比RP。

据此,又可表示为T=0:只有作业A已到达,调度作业A运行。

T=4:作业A完成,作业B、C、D、E已到达,计算作业B、C、D、E响应比RP分别为: 1+3/3、1+2/5、1+1/2、1+0/4,作业B响应比最大调度运行。

[工学]操作系统实验指导

[工学]操作系统实验指导

前言操作系统是计算机科学与技术专业的一门非常重要的专业课程,操作系统课程的学习能使学生在操作系统层面上提升自己的应用计算机解决问题的能力;使学生系统的理解和应用计算机本科阶段学习的各种知识;使学生获得开发复杂的大型软件系统的直接经验;使学生体会多目标下的折衷技术……可以概括的说:“理解了操作系统就真正的理解了计算机”。

所以,操作系统课程对于计算机科学与技术专业的本科学习非常重要,但要真正的学好这门课并不容易。

完全掌握一个客观事物首先必须充分认识这个事物的内在规律,操作系统课程具有鲜明的自身特点:概念多、技术杂、抽象性强、涉及的东西非常广泛,但同时也是一个实实在在的东西。

所以许多学生在学完操作系统课程后都有一个感觉:操作系统不难,考试成绩还不错,但要在一个实际的操作系统上作一些深层次的实际应用,虽然脑子里一大堆进程、页表、LRU、目录等概念,却根本无从下手。

这样的话,操作系统课程就成了完全的纸上谈兵,成为了枯燥的理论,具有讽刺意义的是,操作系统是实实在在的软件,我们天天在上面做各种各样的事。

所以实践对于操作系统课程是至关重要的,而且这种实践决不应该仅仅停留在某些算法的模拟实现上:就算在编程实现了一个完整的“文件系统”,但如果没有和磁盘驱动、高速缓存、内存管理等模块联系在一起,即使编写了大量的代码,也只是实现了某些概念(更象是一个数据结构课程设计),仍然不能控制可实际运行的操作系统。

所以操作系统课程的实践应该强调可实际运行的操作系统上的实践。

在这里,可实际运行的完整的操作系统很重要,因此本操作系统实验指导书上要求的实验以实际操作系统为基础,考虑到第一次接触课程时所需要的简单性、参考资料应该容易获取、以及将来可进行进一步的挖掘,本指导书选取在Linux 0.11上进行操作系统的课程实验。

本实验指导书给出了8个验证型实验和2个设计型实验,使学生深入了解操作系统的各个方面;锻炼学生控制操作系统的能力;帮助学生建立能自己开发完整操作系统的信心和能力。

操作系统实验指导书

操作系统实验指导书

操作系统实验指导书《操作系统原理》实验指导书适用专业:课程代码: 8400220 学时: 10 学分:编写单位:编写人:审核人:审批人:年月《操作系统原理》实验指导书适用于计算科学与技术专业、信息科学专业前言操作系统原理是一门理论性与实践性较强的学科,开设本实验课程的目的在于培养学生的实践能力,促使理论与实践的结合。

实现操作系统功能和高级程序设计语言编程的应用,已成为我校计算机学科教学的主要内容。

本实验指导书介绍了实验环境、上机实验步骤、各实验项目的目的要求及内容,最后附有实验报告的格式,作为我校操作系统课程上机实验指导的主要依据。

根据实验大纲要求,包含两个实验及其相关实验作业。

要完成上述内容,单纯依靠课内上机是不够的,希望同学们课外多多花时间练习,熟能生巧。

对不同年级或专业的学生可根据学生具体情况调整实验内容。

目录前言 (1)一、实验环境 (3)二、上机实验步骤 (3)1.启动V ISUAL C++6.0开发环境 (3)2.创建一个项目 (3)3.关闭工作空间 (7)三、实验项目 (8)实验一进程的调度(5学时) (8)实验二存储管理(5学时) (10)四. 参考文献 (11)西华大学计算机系上机实践报告 (12)一、实验环境操作系统原理课程的实验环境如下:1. 硬件环境微型计算机(Intel x86系列CPU)一台2. 软件环境Windows98/2000/XP操作系统VC++6.0或其它的开发工具。

二、上机实验步骤下面以Visual C++ 6.0为例简单介绍开发Windows应用程序的步骤。

Visual C++ 6.0中的MFC AppWizard(应用程序向导)可以使用户自动生成一些常用的标准程序结构和编程风格。

例如一般的Windows 应用程序结构、DLL应用程序结构、单文档(SDI)应用程序结构、多文档(MDI)应用程序结构等。

下面详细介绍利用MFC AppWizard创建一个Windows应用程序的步骤:1.启动Visual C++ 6.0开发环境从“开始”菜单中选择“程序”| Microsoft Visual Studio 6.0 | Microsoft Visual C++6.0,显示Visual C++ 6.0开发环境主窗口。

操作系统实验报告-1041902217-施亮

操作系统实验报告-1041902217-施亮

1 .内存可变分区存储管理一.实验目的通过编写和调试存储管理的模拟程序以加深对存储管理方案的理解,熟悉可变分区存储管理的内存分配和回收。

二.实验内容1.确定内存空间分配表;2.采用最优适应算法完成内存空间的分配和回收;3.编写主函数对所做工作进行测试。

源代码:#define n 10 //假定系统允许的最大作业数量为n#define m 10 //假定系统允许的空闲区最大为m#define minisize 100struct{ float address; //已分分区起始地址float length; //已分分区长度、单位为字节int flag; //已分分区表登记栏标志,“0”表示空栏目,实验中只支持一个字符的作业名}used_table[n]; //已分分区表struct{ float address; //空闲区起始地址float length; //空闲区长度、单位为字节int flag; //空闲区表登记栏标志,“0”表示空栏目,“1”表示未分配}used_table[n]; //空闲区表allocate(J,xk) //采用最优分配算法分配xk大小的空间char J;floatxk;{inti,k;float ad;k=-1;for(i=0;i<m;i++) //寻找空间大于xk的最小空闲区登记项if(free_table[i].length>=xk&&free_table[i].flag==1)if(k==-1||free_table[i].length<free_table[k].length)k=i;if(k==-1) //未找到空闲区,返回{printf("无可用的空闲区\n");return;}//找到可用空闲区,开始分配;若空闲区大小与要求分配的空间差小于minisize大小,则空闲区全部分配;//若空闲区大小与要求分配的空间差大于minisize大小,则从空闲区划分一部分分配if(free_table[k].length-xk<=minisize){free_table[k].flag=0;ad=free_table[k].address;xk=free_table[k].length;}else{free_table[k].length=free_table[k].length-xk;ad=free_table[k].address+free_table[k].length;}//修改已分配区表i=0;while(used_table[i].flag!=0&&i<n) //寻找空表目i++;if(i>=n) //无表目填写已分分区{printf("无表目填写以分分区,错误\n");if(free_table[k].flag==0) //前面找到的是整个空闲区free_table[k].flag=1;else //前面找到的是某个空闲区的一部分free_table[k].length=free_table[k].length+xk;return;}else //修改已分配区表{used_table[i].address=ad;used_table[i].length=xk;used_table[i].flag=J;}return;}//内存分配函数结束reclaim(J) //回收作业名为J的作业所占的内存空间char J:{inti,k,j,s,t;float S,L;//寻找已分分区表中对应的登记项S=0;while((used_table[S].flag!=J||used_table[S].flag==0)&&S<n)S++;if(S>=n) //在已分分区表中找不到名字为J的作业{printf("找不到该作业\n");return;}//修改已分分区表used_table[S].flag=0;//取得归还分区的起始地址S和长度LS=used_table[S].address;L=used_table[S].length;j=-1;k=-1;i=0;//寻找回收分区的上下邻空闲区,上邻表目K,下邻表目Jwhile(i<m&&(j==-1||k==-1)){if(free_table[i].flag==0){if(free_table[i].address+free_table[i].length==0) k=i; //找到上邻{if(free_table[i].address==S+L) j=1; //找到下邻}i++;}if(k!=-1)if(j!=-1) //上邻空闲区,下邻空闲区,三项合并{free_table[k].length=free_table[j].length+free_table[k].length+L;free_table[j].flag+0;}else //上邻空闲区,下邻非空闲区,与上邻合并free_table[k].length=free_table[k].length+L;elseif(j!=-1) //上邻非空闲区,下邻空闲区,与下邻合并{free_table[j].address=S;free_table[j].length=free_table[j].length+L;}else{ //上下邻均为非空闲区,回收区域直接填入 t=0; //在空闲区表中寻找空栏目while(free_table[t].flag==1&&t<m)t++;if(t>=m) //空闲区表满,回收空间失败,将已分配分区表复原{printf("内存空闲表没有空间,回收空间失败\n");used_table[S].flag=J;return;}free_table[t].address=s;free_table[t].length=l;free_table[t].flag=1;}return(true);} //内存回收函数结束main(){ inti,a;floatxk;char J;//空闲区表初始化free_table[0].address=10240;free_table[0].length=102400;free_table[0].flag=1;for(i=1;i<m;i++)free_table[i].flag=0;//已分分区表初始化for(i=1;i<n;i++)used_table[i].flag=0;while(1){printf("选择功能项(0—退出,1—分配内存,2-回收内存,3-显示内存)\n");printf("选择功项(0-3):");scanf("%d",&a);switch(a){case 0;exit(0); //a=0程序结束case 1; //a=1 分配内存空间printf("输入作业名J和作业所需长度XK:");scanf("%c%c%f",&j,&xk);allocate(j,xk); //分配内存空间break;case 2; //a=2 回收内存空间printf("输入要回放分区的作业名");scanf("%c%c",&j);reclaim(j); //回收内存空间break;case 3; //a=3显示内存情况,输出空闲区表和已分分区表printf("输出空闲区表:\n起始地址分区长度标志\n");for(i=0;i<m;i++)printf("%5.0f%10.0f%6d\n",free_table[i].address,free_table[i].length,free _table[i].flag);printf("按任意键,输出已分分区表\n");getch();printf("输出已分分区表:\n起始地址分区长度标志\n");for(i=0;i<n;i++)if(used table[i].flag!=0)printf("%6.0f%9.0f%6c\n",used_table[i].address,used_table[i].length,used_ table[i].flag);elseprintf("%6.0f%9.0f%6c\n",used_table[i].address,used_table[i].length,used_ table[i].flag);break;default:printf("没有该选项\n");}}}2.Linux 进程间通信一.管道普通的Linux shell都允许重定向,而重定向使用的就是管道。

上海大学计算机学院计算机组成原理实验报告

上海大学计算机学院计算机组成原理实验报告

上海大学 计算机学院《计算机组成原理实验》报告十实验名称:中断机制和应用(综合实验)一、 实验目的1. 学习实验箱感知中断的硬件结构和工作原理。

2. 学习使用中断系统。

3. 学习使用扩展外设。

二、实验原理1. 程序中断:因“随机性”原因,使一个程序暂停执行,转而执行另一个程序,以处理随机事件,然后再返回原程序继续执行的过程成为“中断”。

中断发生的时间是随机的(不可预知,但发生后应该如何处理是安排好的),中断发生的“随机性”决定了“必须用硬件感知中断请求”、“不仅要保存断点,还必须保存现场”。

2. 实验箱的中断感知硬件:当执行取指微指令时,IREN =0,于是②号或门输出0,这时①号“或门”对IREQ 的Q 端开放,若有中断请求就会在这时被CPU 感知。

所以无论中断请求在何时提出,都只能在取指阶段被感知!当 ①号“或门”输出0时中断被感知,同时这个低电平使IACK 的SD 有效,迫使其Q 端输出1,ACK 灯亮,并使②号“或门”对IREN 关闭并输出1;这个1又使①号上海大学计算机学院 计算机组成原理实验报告【最新资料,WORD 文档,可编辑修改】“或门”对中断请求关闭并输出1,这个1又返回IACK的SD端,使IACK保持Q=1的状态。

所以系统进入中断服务子程序后,ACK灯保持亮,且不响应新的中断请求(仅一级中断)。

3. ICOE向下经“与门”控制PC+1信号,ICOE的另一个作用是通过③号“或门”控制EM中指令的输出,保证在输出中断指令B8H时,EM不输出。

4.5.试验箱外扩系统6.74LS08结构俯视图三、实验内容1. 用74LS 08芯片搭建当电键K1和K2都为1时不产生中断请求信号的外部电路。

2. 编制中断服务子程序使OUT交替显示AA、BB三次后返回源程序。

源程序为实验七完成的交替显示11和55的程序。

(1). 运行上述程序,在完成AA、BB交替显示三次之前恢复K1K2都为1的状态。

记录OUT显示的现象、REQ灯和ACK灯的情况以及ST寄存器的值及改变情况。

最新上海大学微机实践报告4-6

最新上海大学微机实践报告4-6

上海大学微机实践报告4-6上海大学微机实践报告实验四:D/A转换器实验【实验目的】了解D/A转换的基本原理,掌握DAC0832芯片的性能、使用方法及对应的硬件电路。

【实验内容】编写程序,要求输出锯齿波、三角波及方波,分别用示波器观察波形;如有能力,把三段程序编在一起,循环输出三种波形。

【实验区域电路连接图】连线:CS5→8000H;IOWR→IOWR;JX2→JX17;AOUT→示波器。

【程序框图】三角波【编程】1)方波CODE SEGMENT ;定义代码段ASSUME CS:CODEORG 1200HSTART:MOV DX,8000HMOV AL,00HLOOP1:OUT DX,ALCALL DELAYXOR AL,0FFH ;高低电平转换JMP LOOP1DELAY: ;若干秒延时MOV BX,0FFHLOOP2:DEC BXJNZ LOOP2RETCODE ENDSEND START2)锯齿波CODE SEGMENT ;定义代码段ASSUME CS:CODEORG 1200HSTART:MOV DX,8000HMOV AL,00HLOOP1: ;逐步累加到5V,到最大值后又从零开始累加OUT DX,ALNOPINC ALJMP LOOP1CODE ENDSEND STARTLOOP2:OUT DX,ALMOV AL,00H ;达到最大值后,再从00H不断累加,使波形上升JMP LOOP1 ;循环输出锯齿波CODE ENDSEND START3)三角波CODE SEGMENT ;定义代码段ASSUME CS:CODEORG 1200HSTART:MOV DX,8000HMOV AL,00HLOOP1:OUT DX,ALINC ALCMP AL,0FFHJZ LOOP2 ;进行三角波下降沿JMP LOOP1LOOP2:OUT DX,ALDEC ALNOPJZ LOOP1 ;重新进行三角波上升沿JMP LOOP2CODE ENDSEND START【问答题】1、DAC产生波形的频率如何调节?频率上限的限制取决于那些因素?解:如果是方波只要调节延时程序就可以实现改变频率。

操作系统实验指导完整版

操作系统实验指导完整版

操作系统实验指导适用课程:操作系统适用专业:计算机科学与技术软件工程目录实验环境的使用 (3)操作系统的启动 (11)进程的创建 (16)进程的同步 (22)时间片轮转调度 (29)分页存储器管理 (33)设备驱动程序 (40)FAT12文件系统 (46)实验环境的使用实验性质:验证建议学时:2学时一、实验目的●熟悉操作系统集成实验环境OS Lab的基本使用方法。

●练习编译、调试EOS操作系统内核以及EOS应用程序。

二、预备知识阅读《EOS实验指南》第一章,对EOS操作系统和集成实验环境有一个初步的了解。

三、实验内容3.1 启动OS Lab1.在安装有OS Lab的主机上,可以使用两种不同的方法来启动OS Lab:●在桌面上双击“Tevation OS Lab”图标。

●点击“开始”菜单,在“程序”中的“Tevation OS Lab”中选择“TevationOS Lab”。

2.OS Lab每次启动后都会首先弹出一个用于注册用户信息的对话框(可以选择对话框标题栏上的“帮助”按钮获得关于此对话框的帮助信息)。

在此对话框中填入学号和姓名后,点击“确定”按钮完成本次注册。

3.观察OS Lab主窗口的布局。

OS Lab主要由下面的若干元素组成:菜单栏、工具栏以及停靠在左侧和底部的各种工具窗口,余下的区域用来放置编辑器窗口。

3.2 学习OS Lab的基本使用方法通过练习使用OS Lab编写一个Windows控制台应用程序,熟悉OS Lab的基本使用方法(包括新建项目、生成项目、调试项目等)。

3.2.1 新建Windows控制台应用程序项目新建一个Windows控制台应用程序项目的步骤如下:1.在“文件”菜单中选择“新建”,然后单击“项目”。

2.在“新建项目”对话框中,选择项目模板“控制台应用程序(c)”。

3.在“名称”中输入新项目使用的文件夹名称“oslab”。

4.在“位置”中输入新项目保存在磁盘上的位置“C:\Test”。

计算机操作系统实验6

计算机操作系统实验6

计算机操作系统实验实验报告六姓名:冯毓权学号:11121370 上海大学计算机工程与科学学院实验六SHELL 编程一. 实验目的掌握vi 的三种工作方式,熟悉vi 编辑程序的使用。

学习Shell 程序设计方法。

掌握编程要领。

二.实验准备复习操作系统课程相关的用户接口概念。

熟悉本《实验指导》第三、四部分。

三.实验内容学习使用vi 编辑程序。

编写Shell 程序。

将程序文件设置为可执行文件(用chmod 命令)。

在命令行方式中运行Shell 程序。

四.实验步骤1. 按本《实验指导》第三部分的内容。

熟悉vi 的三种工作方式。

熟悉使用各种编辑功能。

.思考:试一试vi 的三种工作方式各用在何时?用什么命令进入插入方式?怎样退出插入方式?文件怎样存盘?注意存盘后的提示信息。

Vi的3种模式分别是命令模式,插入模式,末行模式。

进入插入模式:i 在光标左侧输入正文a 在光标右侧输入正文o 在光标所在行的下一行增添新行O 在光标所在行的上一行增添新行I 在光标所在行的开头输入正文A 在光标所在行的末尾输入正文退出插入模式:ESC文件怎样存盘:在末行模式中w来保存,wq是保存退出和x一样,而w!是强制保存。

2.创建和执行Shell 程序用前面介绍的Vi 或其他文本编辑器编写Shell 程序,并将文件以文本文件方式保存在相应的目录中。

用chmod 将文件的权限设置为可执行模式,如若文件名为shdemo.h,则命令如下:$ chmod 755 shdemo.h(文件主可读、写、执行,同组人和其他人可读和执行) 在提示符后执行Shell 程序:$ shdemo.h (直接键入程序文件名执行)或$ sh shdemo.h (执行Shell 程序)或$ .shdemo.h (没有设置权限时可用点号引导)3. 用vi 编写《实验指导》“第四部分Shell 程序设计”中的例1(假设文件名为prog1.h),练习内部变量和位置参数的用法。

上海大学操作系统_实验六

上海大学操作系统_实验六
7. 编程验证:实现父子进程通过管道进行通信。进一步编程,验证子进程
结束,由父进 程执行撤消进程的操作。测试父进程先于子进程结束时, 系统如何处理“孤儿进程” 的。 把上题中的父进程中的wait()都去掉,运行结果如下:
9
思考:对此作何感想,自己动手试一试?解释一下你的实现方法。 答: 只要在父进程后加上wait()函数,然后打印“子进程已经结束”, 一旦子进程结束,父进程撤销进程。把父进程中的wait()去掉,父进程 先于子进程终止时.所有子进程的父进程改变为init进程,称为进程由 init进程领养。
10. 怎么样,试一下吗?用信号量机制编写一个解决生产者—消费者问
12
题的程序,这可是 受益匪浅的事。本《实验指导》第五部分有关进程通 信的系统调用中介绍了信号量机 制的使用。
#include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <pthread.h> #include <semaphore.h> #include <signal.h>
#define N 5 // 消费者或者生产者的数目 #define M 10 // 缓冲数目 //int M=10; int in = 0; // 生产者放置产品的位置 int out = 0; // 消费者取产品的位置
int buff[M] = { 0 }; // 缓冲初始化为 0,开始时没有产品
printf("信号量初始化失败!\n"); exit(1); } //初始化互斥信号量 intini3 = pthread_mutex_init(&mutex, NULL); if(ini3 != 0) { printf("线程同步初始化失败!\n"); exit(1); } // 创建 N 个生产者线程 for(i = 0; i < N; i++) { ret[i]= pthread_create(&id1[i], NULL, product, (void *) (&i)); if(ret[i] != 0) {
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

《操作系统》实验报告指导老师:***实验三进程管理及进程通信一.实验目的利用Linux提供的系统调用设计程序,加深对进程概念的理解。

体会系统进程调度的方法和效果。

了解进程之间的通信方式以及各种通信方式的使用。

二.实验准备复习操作系统课程中有关进程、进程控制的概念以及进程通信等内容(包括软中断通信、管道、消息队列、共享内存通信及信号量概念)。

熟悉本《实验指导》第五部分有关进程控制、进程通信的系统调用。

它会引导你学会怎样掌握进程控制。

阅读例程中的程序段。

三.实验方法用vi 编写c 程序(假定程序文件名为prog1.c)编译程序$ gcc -o prog1.o prog1.c 或$ cc -o prog1.o prog1.c运行$./prog1.o四.实验内容及步骤用v i编写使用系统调用的C语言程序。

1.编写程序。

显示进程的有关标识(进程标识、组标识、用户标识等)。

经过5 秒钟后,执行另一个程序,最后按用户指示(如:Y/N)结束操作。

编译运行结果:2.编写程序。

实现父进程创建一个子进程。

体会子进程与父进程分别获得不同返回值,进而执行不同的程序段的方法。

编译运行:思考:子进程是如何产生的?又是如何结束的?子进程被创建后它的运行环境是怎样建立的?答:子进程由fork()函数创建,通过exit()函数自我结束,子进程被创建后核心将为其分配一个进程表项和进程标识符,检查同时运行的进程数目,并且拷贝进程表项的数据,由子进程继承父进程的所有文件。

3.编写程序。

父进程通过循环语句创建若干子进程。

探讨进程的家族树以及子进程继承父进程的资源的关系。

程序如下:编译运行:思考:①画出进程的家族树。

子进程的运行环境是怎样建立的?反复运行此程序看会有什么情况?解释一下。

183922472248 2252 22542249 2251 22532250每一次运行返回的进程号都不相同,但是都符合家族进程树,出现这样的情况是由于系统本身就是随机分配进程号的。

②修改程序,使运行结果呈单分支结构,即每个父进程只产生一个子进程。

画出进程树,解释该程序。

用一个break;语句使父进程在子进程结束后跳出循环,运行结果如下:进程家族树如下:200424012402240324044.编写程序。

使用fork( )和exec( )等系统调用创建三个子进程。

子进程分别启动不同程序,并结束。

反复执行该程序,观察运行结果,结束的先后,看是否有不同次序。

编译代码如下:编译运行:思考:子进程运行其它程序后,进程运行环境怎样变化的?反复运行此程序看会有什么情况?解释一下。

答:子进程运行其他程序后,这个进程就完全被新程序代替。

由于并没有产生新进程所以进程标识号不改变,除此之外的旧进程的其他信息,代码段,数据段,栈段等均被新程序的信息所代替。

新程序从自己的main()函数开始进行。

反复运行此程序发现结束的先后次序是不可预知的,每次运行结果不一样。

原因是当每个子进程运行其他程序时,他们的结束随着其他程序的结束而结束,所以结束的先后次序在改变。

5.编译程序,验证子进程继承父进程的程序、数据等资源。

如用父、子进程修改公共变量和私有变量的处理结果;父、子进程的程序区和数据区的位置。

编译源代码如下:编译运行结果:思考:子进程被创建后,对父进程的运行环境有影响吗?解释一下。

答:子进程被创建后,对父进程的运行环境无影响,因为当子进程在运行时,他有自己的代码段和数据段,这些都可以作修改,但是父进程的代码段和数据段是不会随着子进程数据段和代码段的改变而改变。

6.参照《实验指导》第五部分中“管道操作的系统调用”。

复习管道通信概念,编写一个程序。

父进程创建两个子进程,父子进程之间利用管道进行通信。

要求能显示父进程、子进程各自的信息,体现通信效果。

源代码:编译运行:思考:①什么是管道?进程如何利用它进行通信的?解释一下实现方法。

②修改睡眠时机、睡眠长度,看看会有什么变化。

请解释。

③加锁、解锁起什么作用?不用它行吗?答:1.管道是指能够连接一个写进程和一个读进程,并允许他们以生产者-消费者方式进行通信的一个共享文件,又称pipe文件。

由写进程从管道的入端将数据写入管道,而读进程则从管道出端读出数据来进行通信。

2.修改睡眠时机和睡眠长度都会引起进程被唤醒的时间不一,因为睡眠时机决定进程在何时睡眠,睡眠长度决定进程何时被唤醒。

3.加锁、解锁是为了解决临界资源的共享问题。

不用它将会引起无法有效管理数据,即数据会被修改导致读错了数据。

7.编程验证:实现父子进程通过管道进行通信。

进一步编程,验证子进程结束,由父进程执行撤消进程的操作。

测试父进程先于子进程结束时,系统如何处理“孤儿进程”的。

把上题中的父进程中的wait()都去掉,运行结果如下:思考:对此作何感想,自己动手试一试?解释一下你的实现方法。

答: 只要在父进程后加上wait()函数,然后打印“子进程已经结束”,一旦子进程结束,父进程撤销进程。

把父进程中的wait()去掉,父进程先于子进程终止时.所有子进程的父进程改变为init进程,称为进程由init进程领养。

8.编写两个程序一个是服务者程序,一个是客户程序。

执行两个进程之间通过消息机制通信。

消息标识MSGKEY 可用常量定义,以便双方都可以利用。

客户将自己的进程标识(pid)通过消息机制发送给服务者进程。

服务者进程收到消息后,将自己的进程号和父进程号发送给客户,然后返回。

客户收到后显示服务者的pid 和ppid,结束。

运行结果:服务者:客户程序:思考:想一下服务者程序和客户程序的通信还有什么方法可以实现?解释一下你的设想,有兴趣试一试吗。

答:还可以用信号量机制来实现。

信号量是一个整形计数器,用来控制多个进程对共享资源的访问。

或者通过消息队列信号机制,通过向消息队列发送信息、接收信息来实现进程间的通信。

9.这部分内容涉及《实验指导》第五部分中“有关信号处理的系统调用”。

编程实现软中断信号通信。

父进程设定软中断信号处理程序,向子进程发软中断信号。

子进程收到信号后执行相应处理程序。

源代码如下:编译运行:思考:这就是软中断信号处理,有点儿明白了吧?讨论一下它与硬中断有什么区别?看来还挺管用,好好利用它。

答:硬中断是由外部硬件产生的,而软中断是CPU根据软件的某条指令或者软件对标志寄存器的某个标志位的设置而产生的。

10.怎么样,试一下吗?用信号量机制编写一个解决生产者—消费者问题的程序,这可是受益匪浅的事。

本《实验指导》第五部分有关进程通信的系统调用中介绍了信号量机制的使用。

#include <stdio.h>#include <stdlib.h>#include <unistd.h>#include <pthread.h>#include <semaphore.h>#include <signal.h>#define N 5 // 消费者或者生产者的数目#define M 10 // 缓冲数目//int M=10;int in = 0; // 生产者放置产品的位置int out = 0; // 消费者取产品的位置int buff[M] = { 0 }; // 缓冲初始化为0,开始时没有产品sem_t empty_sem; // 同步信号量,当满了时阻止生产者放产品sem_t full_sem; // 同步信号量,当没产品时阻止消费者消费pthread_mutex_t mutex; // 互斥信号量,一次只有一个线程访问缓冲int product_id = 0; //生产者idint prochase_id = 0; //消费者id//信号处理函数void Handlesignal(int signo){printf("程序退出\n",signo);exit(0);}/* 打印缓冲情况*/void print() {inti;printf("产品队列为");for(i = 0; i < M; i++)printf("%d", buff[i]);printf("\n");}/* 生产者方法*/void *product() {int id = ++product_id;while(1) {//重复进行//用sleep的数量可以调节生产和消费的速度,便于观察sleep(2);sem_wait(&empty_sem);pthread_mutex_lock(&mutex);in= in % M;printf("生产者%d在产品队列中放入第%d个产品\t",id, in);buff[in]= 1;print();++in;pthread_mutex_unlock(&mutex);sem_post(&full_sem);}}/* 消费者方法*/void *prochase() {intid = ++prochase_id;while(1) {//重复进行//用sleep的数量可以调节生产和消费的速度,便于观察sleep(5);sem_wait(&full_sem);pthread_mutex_lock(&mutex);out= out % M;printf("消费者%d从产品队列中取出第%d个产品\t",id, out);buff[out]= 0;print();++out;pthread_mutex_unlock(&mutex);sem_post(&empty_sem);}}int main() {printf("生产者和消费者数目都为5,产品缓冲为10,生产者每2秒生产一个产品,消费者每5秒消费一个产品,Ctrl+退出程序\n");pthread_tid1[N];pthread_tid2[N];inti;intret[N];//结束程序if(signal(SIGINT,Handlesignal)==SIG_ERR){//按ctrl+C产生SIGINT信号printf("信号安装出错\n");}// 初始化同步信号量intini1 = sem_init(&empty_sem, 0, M);//产品队列缓冲同步intini2 = sem_init(&full_sem, 0, 0);//线程运行同步if(ini1 && ini2 != 0) {printf("信号量初始化失败!\n");exit(1);}//初始化互斥信号量intini3 = pthread_mutex_init(&mutex, NULL);if(ini3 != 0) {printf("线程同步初始化失败!\n");exit(1);}// 创建N个生产者线程for(i = 0; i < N; i++) {ret[i]= pthread_create(&id1[i], NULL, product, (void *) (&i));if(ret[i] != 0) {printf("生产者%d线程创建失败!\n", i);exit(1);}}//创建N个消费者线程for(i = 0; i < N; i++) {ret[i]= pthread_create(&id2[i], NULL, prochase, NULL);if(ret[i] != 0) {printf("消费者%d线程创建失败!\n", i);exit(1);}}//等待线程销毁for(i = 0; i < N; i++) {pthread_join(id1[i], NULL);pthread_join(id2[i],NULL);}exit(0);五. 研究并讨论1.讨论Linux 系统进程运行的机制和特点,系统通过什么来管理进程?在Linux中,每个进程在创建时都会被分配一个数据结构,称为进程控制块(Process Control Block,简称PCB)。

相关文档
最新文档