湖南科技大学12级操作系统课程设计报告
- 格式:doc
- 大小:863.09 KB
- 文档页数:28
《操作系统》课程设计(2011/2012学年第二学期第20周)指导教师:XXX班级:学号:姓名:计算机操作系统A课程设计目录一、题目: (3)二、目的和设计要求: (3)(1)、目的: (3)(2)设计要求: (3)三、设计思想或方法: (3)1.读者优先 (3)2.写者优先 (4)3.退出程序 (4)四、实现的功能说明(相关API函数说明): (4)五、设计流程图: (10)六、核心源程序代码和界面图: (10)1、源程序代码 (10)2、主菜单界面: (17)3、读者优先界面: (17)4、写者优先界面: (18)七、实验心得与体会: (19)一、题目:读者写者问题二、目的和设计要求:(1)、目的:①理解读者写者问题的基本概念,读写操作限制;②掌握基于windows的多线程编程的基本流程;③实现读者优先和写者优先的调度算法;(2)设计要求:在windows 2000环境下,创建一个控制台进程,此进程包含n个线程。
用这n个线程来表示n个读者或写者。
每个线程按相应测试数据文件(后面有介绍)的要求进行读写操作。
用信号量机制分别实现读者优先和写者优先的读者—写者问题。
读者—写者问题的读写操作限制(包括读者优先和写者优先):读者优先/写者优先先来先服务,避免并发抢占1)写—写互斥,即不能有两个写者同时进行写操作。
2)读—写互斥,即不能同时有一个线程在读,而另一个线程在写。
3)读—读允许,即可以有一个或多个读者在读。
读者优先的附加限制:如果一个读者申请进行读操作时已有另一个读者正在进行读操作,则该读者可直接开始读操作。
写者优先的附加限制:如果一个读者申请进行读操作时已有另一写者在等待访问共享资源,则该读者必须等到没有写者处于等待状态后才能开始读操作。
运行结果显示要求:要求在每个线程创建、发出读写操作申请、开始读写操作和结束读写操作时分别显示一行提示信息,以确定所有处理都遵守相应的读写操作限制。
三、设计思想或方法:可以将所有读者和所有写者分别存于一个读者等待队列和一个写者等待队列中,每当读允许时,就从读者队列中释放一个或多个读者线程进行读操作;每当写允许时,就从写者队列中释放一个写者进行写操作。
第1篇一、引言随着计算机技术的飞速发展,操作系统作为计算机系统的核心组成部分,其重要性日益凸显。
为了更好地理解和掌握操作系统原理与设计,提高实际操作能力,我们参加了操作系统实践教学课程。
本报告将详细阐述本次实践教学的背景、过程、收获及心得体会。
二、实践背景1. 课程设置:本次实践教学课程旨在通过实际操作,使学生深入了解操作系统的基本原理、功能模块和设计思想,提高学生的实际操作能力和解决实际问题的能力。
2. 实践内容:本次实践教学主要包括以下几个方面:(1)操作系统原理学习;(2)操作系统源代码分析;(3)操作系统实验项目设计与实现;(4)操作系统课程设计。
三、实践过程1. 操作系统原理学习:通过阅读教材、参考书籍和观看相关视频,系统地学习了操作系统的基本原理,包括进程管理、内存管理、文件系统、设备管理、I/O系统等。
2. 操作系统源代码分析:选取了Linux操作系统作为实践对象,分析了其源代码结构、关键模块和设计理念,深入了解操作系统的内部实现。
3. 操作系统实验项目设计与实现:根据课程要求,完成了以下实验项目:(1)进程调度算法实现:实现了多种进程调度算法,如先来先服务(FCFS)、短作业优先(SJF)、轮转调度(RR)等,并对比了它们的性能;(2)内存分配与回收算法实现:实现了多种内存分配与回收算法,如固定分区分配、动态分区分配、最坏适应分配、最佳适应分配等,并分析了它们的优缺点;(3)文件系统实现:实现了简单的文件系统,包括文件创建、删除、读写等操作,了解了文件系统的基本原理。
4. 操作系统课程设计:根据课程要求,独立完成了操作系统课程设计,实现了具有基本功能的简易操作系统。
四、收获与体会1. 理论与实践相结合:通过本次实践教学,使我深刻认识到理论知识与实践操作的重要性。
只有将所学知识运用到实际操作中,才能真正掌握操作系统的原理与设计。
2. 提高编程能力:在实践过程中,我学会了如何运用C语言等编程语言实现操作系统功能,提高了自己的编程能力。
《操作系统原理及应用》课程设计报告 Linux系统服务管理及安全设计学院(系): 计算机科学与工程学院班 级: 学号学生姓名:指导教师:时间: 从 2012 年 05 月14日 到 2012 年05月18日一、课程设计的目的本课程设计是学生学习完《计算机操作系统》课程后,进行的一次全面的综合训练,通过课程设计,让学生更好地掌握操作系统的原理及Linux安全服务管理,加强学生的动手操作能力。
二、课程设计要求设计一套安全的系统 Linux要求:1. 系统不能被破解密码;2. 系统不能被恶意重启;3. 只有指定用户才能ssh 登录系统,保障系统安全;4. 编写防火墙策略,保障系统安全,只开放允许访问的tcp 22, tcp 80,tcp 20 21;5.搭建一个Web网站;6.编写shell程序,阻止恶意攻击服务器的来源IP,连接服务器.三、课程设计内容3.1、 Redhat 基础及权限控制Linux 安装中的重要步骤:引导安装程序、磁盘分区、网络参数配置、密码设置、软件包选择Linux 系统引导过程:服务器硬件自检、引导MBR、引导Kernel、引导驱动及服务、自定义加载项、6种引导方式介绍(/etc/inittab)Linux root 密码破解:单用户模式,进行root密码破解Linux 加密防止 root 密码破解:明文加密 (password) 、非明文加密 (grub-md5-crypt )Linux防止恶意重启:禁用ctrl+alt+del 重启功能 (/etc/inittab)Linux文件权限数字表示:可读 R 4、可写 W 2、可执行 X 1Linux文件权限调整:修改所有者 chown 、修改权限 chmodLinux网络参数配置:网络IP地址配置、同一网卡配置多个IP地址Linux查看IP及route:Ipconfig、 ip add、route -nLinux常用命令文件管理类:ls cat more vi cp rm find paste wc grep head tail 磁盘管理:df du fdisk mkfs mount umount系统状态:uptime last vmstat iostat top free3.2、 软件管理及Shell编程Linux rpm 包的管理 :软件包安装、软件包升级、查询已安装的软件包Linux 源码包的管理 :源码包安装、configure、make、make test、make install、源码包删除Linux 文本处理 :文本编辑器、 vi 编辑器Linux Shell编程中常用命令条件测试:test 或者 []、-d 目录、-f 文件、-s 文件大小非0正则表达示:^ 行首、$ 行尾、以 $ 打头的命令、$? 上一个命令执行结果、$1 输入的第1个参数3.3、存储管理及系统管理Linux 系统常用服务管理 :常用系统服务启动与关闭、系统设置 服务器设置 服务常用系统服务介绍Network 网络服务、sshd ssh 远程连接服务Httpd Apache Web 服务器、Smb 文件共享服务器Vsftp FTP 服务器、Bind DNS 服务器Iptables 防火墙、Linux 进程管理进程查看 top , ps –ef 结束进程 Kill id、Kill –9 idLinux 文件系统管理磁盘分区、fdisk 、格式化分区、mkfs.ext3 、挂载分区、mount、卸载分区、umountLinux 卷管理 LVM磁盘分区 fdisk (disk type id: 8e)建立 PV pvcreate pvdispaly建立 VG vgcreate vgchange -a y (激活VG) vgdisplay建立 LV lvcreate lvdisplay格式化LV make.ext3挂载 LV mount缷载LV umountLinux 系统管理 :以图形化的形式 讲解常用系统管理 、用户和组 、日期和时间、显示Linux 系统日志管理系统日志文件位置 、/var/log/message观察日志变化、tail -f /var/log/message筛选日志内容、grep “error” /var/log/message3.4、常用服务器搭建、安全配置Linux openSSH 安全配置 (/etc/ssh/sshd_config )修改SSH服务端口:# Port 22 修改为 Port 9022修改SSH连接协议为版本2:#Protocol 2,1 修改为 Protocol 2权限只定用户连接SSH:AllowUsers user1重启ssh服务系统设置 服务器设置 服务,启动服务”sshd”、使用命令 service sshd restart使用软件连接SSH服务:在Windows上使用putty.exeLinux http服务器配置检查所需要的软件包[root@rh9 /]# rpm -qa | grep httphttpd-2.0.40-21libghttp-1.0.9-7httpd-manual-2.0.40-21redhat-config-httpd-1.0.1-18安装http服务软件包通过系统的”添加删除程序功能”进行安装、使用rpm –ivh 软件包名进行安装配置HTTP网站网页默认存放位置:/var/启动HTTP网站服务系统设置 服务器设置 服务,启动服务”httpd”、使用命令 service httpd start访问Linux Web网站: IPLinux dns服务器配置检查所需要的软件包[root@rh9 /]# rpm -qa | grep bindredhat-config-bind-1.9.0-13bind-utils-9.2.1-16ypbind-1.11-4bind-9.2.1-16安装DNS服务软件包通过系统的”添加删除程序功能”进行安装、使用rpm –ivh 软件包名进行安装配置DNS服务配置反向解析、配置正向解、异常解决 DNS服务不能启动。
操作系统课程设计实验报告操作系统课程设计实验报告引言:操作系统是计算机科学中的重要课程,通过实验设计,可以帮助学生更好地理解操作系统的原理和实践。
本文将结合我们在操作系统课程设计实验中的经验,探讨实验设计的目的、实验过程和实验结果,以及对操作系统的理解和应用。
一、实验设计目的操作系统课程设计实验的目的是帮助学生深入理解操作系统的工作原理和实际应用。
通过设计和实现一个简单的操作系统,学生可以更好地掌握操作系统的各个组成部分,如进程管理、内存管理、文件系统等。
同时,实验设计还可以培养学生的动手能力和问题解决能力,提高他们对计算机系统的整体把握能力。
二、实验过程1. 实验准备在进行操作系统课程设计实验之前,我们需要对操作系统的基本概念和原理进行学习和理解。
同时,还需要掌握一些编程语言和工具,如C语言、汇编语言和调试工具等。
这些准备工作可以帮助我们更好地进行实验设计和实现。
2. 实验设计根据实验要求和目标,我们设计了一个简单的操作系统实验项目。
该项目包括进程管理、内存管理和文件系统三个主要模块。
在进程管理模块中,我们设计了进程创建、调度和终止等功能;在内存管理模块中,我们设计了内存分配和回收等功能;在文件系统模块中,我们设计了文件的创建、读写和删除等功能。
通过这些模块的设计和实现,我们可以全面了解操作系统的各个方面。
3. 实验实现在进行实验实现时,我们采用了分阶段的方法。
首先,我们实现了进程管理模块。
通过编写相应的代码和进行调试,我们成功地实现了进程的创建、调度和终止等功能。
接下来,我们实现了内存管理模块。
通过分配和回收内存空间,我们可以更好地管理系统的内存资源。
最后,我们实现了文件系统模块。
通过设计文件的读写和删除等功能,我们可以更好地管理系统中的文件资源。
三、实验结果通过实验设计和实现,我们获得了一些有意义的结果。
首先,我们成功地实现了一个简单的操作系统,具备了进程管理、内存管理和文件系统等基本功能。
操作系统课程设计报告概述:本课程设计旨在使学生熟悉文件管理系统的设计方法,加深对所学各种文件操作的了解及其操作方法的特点。
通过模拟文件系统的实现,深入理解操作系统中文件系统的理论知识,加深对教材中的重要算法的理解。
同时通过编程实现这些算法,更好地掌握操作系统的原理及实现方法,提高综合运用各专业课知识的能力。
主要任务:本课程设计的主要任务是设计和实现一个简单的文件系统,包括建立文件存储介质的管理机制、建立目录(采用一级目录结构)、文件系统功能(显示目录、创建、删除、打开、关闭、读、写)和文件操作接口(显示目录、创建、删除、打开、关闭、读、写)。
系统设计:本系统模拟一个文件管理系统,要完成对文件的基本操作,包括文件、文件夹的打开、新建、删除和读取写入文件,创建更改目录,列出目录内容等信息。
系统建立了文件目录树,存储文件系统中的所有文件。
对于用户名下的文件,用文件目录树的分支来存储。
采用命令行操作界面很直观,也方便用户进行操作,用户只要按照操作界面所显示的命令来操作即可。
整体设计框架:系统初始化界面由创建用户存储空间、管理文件、退出系统三个模块组成。
用户创建由创建用户存储空间、进入目录、删除用户存储空间、显示所有用户存储空间等模块组成。
然后各个模块再由一些小模块组成。
其中创建文件、打开关闭文件、读写文件等文件操作模块包括在进入目录模块里面。
系统实现:以下是本课程设计的主要内容的实现程序代码:cincludeincludeincludetypedef struct file{ char name[10];struct file *next; File;typedef struct content{ char name[10];File *file;int f_num;struct content *next; Content;typedef struct user{ char name[10];char psw[10]; Content *con;struct user *next; User;char cur_user[20];XXX;int user_num=0;添加文件:在该函数中,我们首先需要获取文件名,然后检查是否已经存在该文件。
操作系统期末课程设计进程调度算法模拟一、设计目的编程实现进程调度的算法,更好地掌握操作系统的原理及实现方法,从而有利于把握进程调度细节。
二、设计要求(1)要求实现先来先服务,短作业优先,时间片轮转,高优先权调度算法四种算法并进行对比分析.(2)要求界面简单,易懂,关键代码部分要注释.(3)编程语言可以采用自己任意精通的语言三、设计思想说明先来先服务:程序的执行调度顺序按先进入队列的先获得执行,并且其他进程都不能中断正在执行的进程,要等进程完成后才能,让出CPU给其他进程。
执行的时候可以随时在队列中插入进程。
短作业优先:进程的调度顺序按程序的服务时间来决定,进程的执行顺序。
服务时间短的先被调用。
调度时先从队列中选取服务时间最短的进程来执行。
进程中途不能中断,即使此时队列中存在服务时间比其更短的进程,仍需要等待该进程执行完后才能被执行。
高优先权调度:选取进程中优先级最高的一个,以优先级的值大,优先级就大。
调度时总是选取队列中进程优先级最高的来执行,不管是否有某个进程在执行,只要存在比正在执行进程优先级高的进程,则就会立刻中断正在执行的进程,让给跟高优先级的进程。
时间片轮转:本课程设计采用多级反馈队列调度算法,设立4个进程队列,分给队列1的时间片为3秒,队列2的时间片为6秒,队列3的时间片为12秒,队列4的时间片为24秒。
队列1的优先级最高,队列4的优先级最低。
高优先级的队列没执行完,即不为空,就永远不执行其下面的低优先级的队列里面的进程。
当执行低优先级队列里面的进程时,突然间高优先级的队列插入了进程就立刻跳到高优先级的队列执行其里面的进程。
每个队列的进程都是按先来先执行的顺序执行。
进程初次执行肯定要进入队列1。
如何从头到尾执行一遍队列1中的进程是,存在某些进程在队列1的时间片内还没执行完,就把进程移交到下一个队列中。
每个队列都如此类推。
直到最后一个队列4,如果在队列4还有进程在本时间片内还没没执行完,就把该程序放到队尾,从新等待时间片执行。
湖南科技大学计算机科学与工程学院操作系统课程设计报告学号:姓名:班级:指导老师:完成时间: 2017年6月23日目录实验一........................................ 错误!未指定书签。
一、实验题目............................ 错误!未指定书签。
二、实验目的............................ 错误!未指定书签。
三、总体设计............................ 错误!未指定书签。
四、详细设计............................ 错误!未指定书签。
五、实验结果与分析...................... 错误!未指定书签。
六、小结与心得体会...................... 错误!未指定书签。
实验二........................................ 错误!未指定书签。
一、实验题目............................ 错误!未指定书签。
二、实验目的............................ 错误!未指定书签。
三、总体设计............................ 错误!未指定书签。
四、详细设计............................ 错误!未指定书签。
五、实验结果与分析...................... 错误!未指定书签。
六、小结与心得体会...................... 错误!未指定书签。
实验三........................................ 错误!未指定书签。
一、实验题目............................ 错误!未指定书签。
二、实验目的............................ 错误!未指定书签。
操作系统课程设计报告1. 引言操作系统是计算机系统中最核心的软件之一,它负责管理和优化计算机资源的分配和调度,为用户和应用程序提供一个可靠、高效的执行环境。
在操作系统课程设计中,我们通过设计一个简单的操作系统,深入理解操作系统的原理和功能,提升对操作系统的理解和实践能力。
本报告将详细介绍我们小组在操作系统课程设计过程中所完成的工作和实现的目标。
2. 设计目标在本次操作系统课程设计中,我们的设计目标包括:•实现一个基本的中断处理、进程调度和内存管理机制;•设计一个简单的文件系统;•确保操作系统的稳定性和可靠性;•实现用户命令解析和执行功能。
3. 系统架构我们的操作系统设计采用了经典的分层结构,主要由硬件抽象层、内核和用户接口层组成。
1.硬件抽象层:负责与硬件进行交互,提供基本的底层硬件接口,如处理器管理、中断处理、设备控制等。
2.内核:实现操作系统的核心功能,包括进程管理、内存管理、文件系统管理等。
这一层是操作系统的核心,负责管理和调度系统资源。
3.用户接口层:为用户提供简单友好的界面,解析用户输入的命令并调用内核功能进行处理。
用户可以通过命令行或图形界面与操作系统进行交互。
4. 功能实现4.1 中断处理中断是操作系统与外部设备通信的重要机制,我们的操作系统设计中实现了基本的中断处理功能。
通过在硬件抽象层中捕获和处理硬件的中断信号,内核可以对中断进行相应的处理,保证系统的响应能力和稳定性。
4.2 进程调度进程调度是操作系统中的重要任务之一,它决定了系统如何分配和调度上下文切换。
我们的操作系统设计中实现了一个简单的进程调度算法,通过时间片轮转算法和优先级调度算法来管理多个进程的执行顺序,以提高系统的吞吐量和响应性能。
4.3 内存管理内存管理是操作系统中必不可少的功能,它负责对系统内存的分配和回收。
我们的操作系统设计中实现了基本的内存管理功能,包括内存分区、内存空闲管理和地址映射等。
通过合理的内存管理,可以提高系统的内存利用率和性能。
操作系统课程设计报告XX大学计算机科学与教育软件学院计算机系12级计算机专业*班(学号:1200002***)(班内序号:36)2015年1月8日一、设计目的学习完《操作系统》课程后,进行的一次全面的综合训练,通过课程设计,让更好地掌握操作系统的原理及实现方法,加深对操作系统基础理论和重要算法的理解,加强动手能力。
二、设计要求从课程设计的目的出发,通过设计工作的各个环节,达到以下要求:两人一组,每组从所给题目中任选一个(如自拟题目,需经指导教师同意),每个学生必须独立完成课程设计,不能相互抄袭,同组者文档不能相同;设计完成后,将所完成的工作交由指导教师检查;要求写出一份详细的设计报告。
三、设计内容课题、处理机调度程序:选择一个调度算法,实现处理机调度。
设计目的:在多道程序和多任务系统中,系统内同时处于就绪状态的进程可能有若干个。
也就是说能运行的进程数大于处理机个数。
为了使系统中的进程能有条不紊地工作,必须选用某种调度策略,选择一进程占用处理机。
要求设计一个模拟处理机调度算法,以巩固和加深处理机调度的概念。
四、设计要求1)进程调度算法包括:时间片轮转法,短作业优先算法,动态优先级算法。
2)可选择进程数量3)本程序包括三种算法,用C语言实现,执行时在主界面选择算法(可用函数实现)(进程数,运行时间,优先数由随机函数产生)执行,显示结果。
五、设计思路及算法思想1、建立循环链。
节点情况如下:struct pcb{char id; //进程标识数int arrive_time; //进程的到达时间int run_time; //进程运行时间int priority; //进程优先级数int finish_time; //进程完成时间int cycling_time; //进程周转时间float right_cycling_time;//带权周转时间int backup_run_time; //备份进程运行时间int back_priority; //备份进程优先级数struct pcb *next;};注:进程运行在具体调度算法里会改变(减到零),在输出时需要数出运行时间所以要备份。
《操作系统》课程实验报告一、实验目的本次《操作系统》课程实验的主要目的是通过实际操作和观察,深入理解操作系统的工作原理、进程管理、内存管理、文件系统等核心概念,并掌握相关的操作技能和分析方法。
二、实验环境1、操作系统:Windows 10 专业版2、开发工具:Visual Studio Code3、编程语言:C/C++三、实验内容(一)进程管理实验1、进程创建与终止通过编程实现创建新进程,并观察进程的创建过程和资源分配情况。
同时,实现进程的正常终止和异常终止,并分析其对系统的影响。
2、进程同步与互斥使用信号量、互斥锁等机制实现进程之间的同步与互斥。
通过模拟多个进程对共享资源的访问,观察并解决可能出现的竞争条件和死锁问题。
(二)内存管理实验1、内存分配与回收实现不同的内存分配算法,如首次适应算法、最佳适应算法和最坏适应算法。
观察在不同的内存请求序列下,内存的分配和回收情况,并分析算法的性能和优缺点。
2、虚拟内存管理研究虚拟内存的工作原理,通过设置页面大小、页表结构等参数,观察页面的换入换出过程,以及对系统性能的影响。
(三)文件系统实验1、文件操作实现文件的创建、打开、读取、写入、关闭等基本操作。
观察文件在磁盘上的存储方式和文件系统的目录结构。
2、文件系统性能优化研究文件系统的缓存机制、磁盘调度算法等,通过对大量文件的读写操作,评估不同优化策略对文件系统性能的提升效果。
四、实验步骤(一)进程管理实验步骤1、进程创建与终止(1)使用 C/C++语言编写程序,调用系统函数创建新进程。
(2)在子进程中执行特定的任务,父进程等待子进程结束,并获取子进程的返回值。
(3)通过设置异常情况,模拟子进程的异常终止,观察父进程的处理方式。
2、进程同步与互斥(1)定义共享资源和相关的信号量或互斥锁。
(2)创建多个进程,模拟对共享资源的并发访问。
(3)在访问共享资源的关键代码段使用同步机制,确保进程之间的正确协作。
(4)观察并分析在不同的并发情况下,系统的运行结果和资源竞争情况。
操作系统课程设计报告姓名:学号:班级:指导教师:测评:年月日目录实验一WINDOWS进程初识 (3)1、实验目的 (3)2、实验原理 (3)3、流程图 (3)4、实验内容和步骤 (4)5、实验结论 (5)实验二进程管理 (5)1、背景知识 (5)2、实验目的 (5)3、实验原理 (6)4、流程图 (6)5、实验内容和步骤 (7)6、实验结论 (10)实验三进程同步的经典算法 (10)1、实验目的 (10)2、实验原理 (10)3、流程图 (11)4、实验内容和步骤 (11)实验五熟悉UNIX/LINUX系统 (14)1、实验内容 (14)2、实验原理 (14)3、实验目的 (15)4、实验题目 (15)5、实验结论 (18)实验六进程间通信 (18)1、实验内容 (18)2、实验目的 (18)3、实验原理 (18)4、流程图 (18)5、实验题目 (20)实验一WINDOWS进程初识1、实验目的(1)学会使用VC 编写基本的Win32 Consol Application(控制台应用程序)。
(2)掌握WINDOWS API 的使用方法。
(3)编写测试程序,理解用户态运行和核心态运行。
2、实验原理(1) 一个简单的Windows控制台应用程序:编写一个简单的C++程序,调用cout 函数输出”Hello,Win32 Consol Application”;(2) 核心态运行和用户态运行时间比计算:给一个当前正在运行进程名,调用CreateToolhelp32Snapshot函数对操作系统中运行的所有进程拍取“快照”,循环枚举快照中的所有进程,并与给出的进程名进行比较,若是相同,则打开进程,调用GetProcessTimes()函数计算当前进程的时间,并调用GetKernelModePercentage()函数计算内核模式下消耗时间比,并将结果显示到屏幕上。
若是一直不到给出的进程,说明给出的进程没有在运行。
3、流程图(1)略(2)如下图:4、实验内容和步骤(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 子目录,执行编译好的可执行程序,列出运行结果 (如果运行不成功,则可能的原因是什么?)运行结果结论:如果运行不成功,绝对是代码错了(2)计算进程在核心态运行和用户态运行的时间步骤 1:按照(1)中的步骤创建一个新的“Win32 Consol Application”工程,然后将清单 1-2 中的程序拷贝过来,编译成可执行文件。
运行结果步骤 2:在创建一个新的“Win32 Consol Application”工程,程序的参考程序如清单 1-3 所示,编译成可执行文件并执行。
步骤 3:在“命令提示符”窗口中运行步骤 1 中生成的可执行文件,测试步骤2 中可执行文件在核心态运行和用户态运行的时间。
运行结果步骤 4:列出运行结果 (如果运行不成功,则可能的原因是什么?) 原因:可执行文件没有运行。
步骤 5:分别屏蔽 While 循环中的两个 for 循环(i 循环和 j 循环),或调整两个 for 循环的次数,写出运行结果。
注释i循环和j循环5、实验结论计算进程在计算核心态运行和用户态运行的时间时,被计算的进程必须是当前正在运行的进程,没有运行的进程是不能被计算的。
另外,通过实验可以得知运行一个程序CPU的使用情况是不同的,同时与循环的次数无关,和当前计算的复杂情况有关。
实验得出的数据可以可以说明这一点。
实验二进程管理1、背景知识Windows 所创建的每个进程都从调用 CreateProcess() API 函数开始,该函数的任务是在对象管理器子系统内初始化进程对象。
每一进程都以调用ExitProcess() 或TerminateProcess() API函数终止。
通常应用程序的框架负责调用 ExitProcess() 函数。
对于 C++ 运行库来说,这一调用发生在应用程序的 main() 函数返回之后。
2、实验目的1)通过创建进程、观察正在运行的进程和终止进程的程序设计和调试操作,进一步熟悉操作系统的进程概念,理解 Windows 进程的“一生”。
2)通过阅读和分析实验程序,学习创建进程、观察进程、终止进程以及父子进程同步的基本程序设计方法。
3、实验原理1) CreateProcess() 调用的核心参数是可执行文件运行时的文件名及其命令行,主函数通过调用CreateProcess()并给出重要的可执行文件名、命令行参数即可实现进程的创建。
2)通过控制命令行参数的值控制进程的创建数量。
4、流程图1)创建进程开始进程初始化为0读入命令行参数输出进程ID号是进程是否达上限否生成新进程的命令行参数创建进程关闭新进程句柄结束2)父子进程的简单通信及终止进程5、实验内容和步骤(1). 创建进程 本实验显示了创建子进程的基本框架。
该程序只是再一次地启动自身,显示它的系统进程 ID 和它在进程列表中的位置。
步骤 1:创建一个“Win32 Consol Application ”工程,然后拷贝清单 2-1 中的程序,编译成 可执行文件。
步骤 2:在“命令提示符”窗口运行步骤 1 中生成的可执行文件,列出运行结果。
按下 ctrl+alt+del ,调用 windows 的任务管理器,记录进程相关的行为属性。
开始 判断父子进程创建互斥体 克隆子进程 等待键盘输入 结束子进程 结束 打开互斥体 等待父进程的结束命令 结束父子运行结果步骤 3:在“命令提示符”窗口加入参数重新运行生成的可执行文件,列出运行结果。
按下 ctrl+alt+del,调用 windows 的任务管理器,记录进程相关的行为属性。
步骤 4:修改清单 2-1 中的程序,将 nClone 的定义和初始化方法按程序注释中的修改方法进行修改,编译成可执行文件(执行前请先保存已经完成的工作)。
再按步骤2中的方式运行,看看结果会有什么不一样,列出运行结果。
并回答一下问题:从中你可以得出什么结论?说明 nClone 的作用,变量的定义和初始化方法(位置)对程序的执行结果有影响吗?为什么?结论:nClone的赋值位置不同对程序的运行结果会有影响!父程序控制nClone控制调用子程序的深度.nClone变量的定义和初始化方法(位置)对程序的执行结果有影响!注释1的修改方式对程序影响不大,注释2的修改方式对程序结果影响巨大!(2). 父子进程的简单通信及终止进程步骤 1:创建一个“Win32 Consol Application”工程,然后拷贝清单 2-2 中的程序,编译成可执行文件。
步骤 2:在VC的工具栏单击“Execute Program”(执行程序) 按钮,或者按Ctrl + F5 键,或者在“命令提示符”窗口运行步骤 1 中生成的可执行文件,列出运行结果。
运行结果步骤 3:按源程序中注释中的提示,修改源程序 2-2,编译执行(执行前请先保存已经完成的工作),列出运行结果。
在程序中加入跟踪语句,或调试运行程序,同时参考 MSDN 中的帮助文件CreateProcess()的使用方法,理解父子进程如何传递参数。
给出程序执行过程的大概描述。
运行结果CreateProcess()函数:第一个参数是可执行文件,第二个参数是命令行参数父程序调用StartClone函数,StartClone函数中通过GetModuleFileName函数获取父程序的文件路径放在CreateProcess()函数的第一个参数中,然后再调用CreateProcess()函数创建子进程!步骤 4:按源程序中注释中的提示,修改源程序 2-2,编译执行,列出运行结果。
运行结果步骤5:参考MSDN 中的帮助文件CreateMutex() 、OpenMutex() 、ReleaseMutex() 和WaitForSingleObject()的使用方法,理解父子进程如何利用互斥体进行同步的。
给出父子进程同步过程的一个大概描述。
CreateMutex()参数含义:缺省的安全性,最初拥有的,互斥体名称. OpenMutex()参数含义:SYNCHRONIZE 允许互斥体对象同步使用,希望子进程能够继承句柄,则为TRUE,要打开对象的名字.ReleaseMutex()参数含义:一个互斥体的句柄.WaitForSingleObject()参数含义:对象句柄,定时时间间隔.6、实验结论创建进程,实现对进程的简单控制。
创建互斥体,解决了进程的同步问题,两者相互使用,使进程的运行情况得到了很好的管理。
实验三进程同步的经典算法1、实验目的1)回顾系统进程、线程的有关概念,加深对 Windows 2000/xp 线程的理解。
2)了解互斥体对象,通过对生产者消费者等进程间同步与互斥经典算法的实现,加深对 P(即 semWait)、V(即 semSignal)原语以及利用 P、V 原语进行进程间同步与互斥操作的理解。
2、实验原理互斥体:实现了“互相排斥”(mutual exclusion)同步的简单形式(所以名为互斥体(mutex))。
互斥体禁止多个线程同时进入受保护的代码“临界区”(critical section)。
信号量(Semaphore),有时被称为信号灯,是在多线程环境下使用的一种设施,是可以用来保证两个或多个关键代码段不被并发调用。
在进入一个关键代码段之前,线程必须获取一个信号量;一旦该关键代码段完成了,那么该线程必须释放信号量。
其它想进入该关键代码段的线程必须等待直到第一个线程释放信号量。
为了完成这个过程,需要创建一个信号量VI,然后将Acquire Semaphore VI以及Release Semaphore VI分别放置在每个关键代码段的首末端。
确认这些信号量VI引用的是初始创建的信号量。
3、流程图4、实验内容和步骤(1) 生产者消费者问题开始创建互斥体创建表示产品已空的信号量创建表示产品已满的信号量创建若干个生产者线程创建若干个消费者线程等待键盘输入结束命令结束开始判断线程是否结束P(empty)P(mutex)生产将产品入队V(mutexV(full) 结束否是开始判断线程是否结束P(empty)P(mutex)找到生产者消费V(full)V(empty)结束是否主线程消费者线程生产者线程步骤 1:创建一个“Win32 Consol Application”工程,然后拷贝清单 1-1 中的程序,编译成可执行文件。