华科操作系统实验报告

合集下载

华科操作系统实验

华科操作系统实验

华科操作系统实验 Corporation standardization office #QS8QHH-HHGX8Q8-GNHHJ8课程实验报告课程名称:操作系统课程设计专业班级:学号:姓名:指导教师:报告日期:计算机科学与技术学院目录实验1:进程并发实验1.1 实验概述通过本次进程并发实验,让同学更加熟悉和理解Linux编程环境。

1.2 实验内容本次实验的内容主要分为两个任务:1.编写一个C程序,用read、write等系统调用实现文件拷贝功能。

命令形式:copy <源文件名> <目标文件名>2. 编写一个C程序,使用图形编程库 (QT/GTK)分窗口显示三个并发进程的运行(一个窗口实时显示当前系统时间,一个窗口循环显示0到9,一个窗口做1到1000的累加求和,刷新周期均为1秒)。

1.3 实验设计任务1:实验1的第一个阶段需要实现一个简单的C语言程序,首先需要有一个复制的源文件,同时需要创建一个存放复制内容的复制文件,文件复制传输的中间站可以设置一个缓冲数组,此次试验设计了一个大小为10个字节的数组。

打开复制源文件,返回一个INT标识,使用readbuf()函数,每次读取10个字节的内容,将内容存放到缓冲区数组,使用writebuf()函数将缓冲区的10个字节写到复制文件中,重复上述过程直到将整个复制过程完成。

任务2:实验的第二个阶段是实现进程的同步,实现的工具是QT。

主要实现3个进程的同步,3个进程分别为:实时显示系统时间、循环显示0-9、显示1-1000的累加和。

以上程序的刷新时间设置为1秒钟。

使用的是c++编程语言。

为了实现3个进程。

需要为这3个进程分别创建3个不同的类,这3个不用的类具有不同的成员函数,使用成员函数来实现进程的所代表的具体细节。

为了实现进程的结果能实时更新,需要调用connect()函数,该函数的功能是每当其中的timer每次发生变化时,就回调用该类的成员函数,也就是进程的具体实现,从而实时显示进程的细节内容。

操作系统实验报告--华科

操作系统实验报告--华科

实验一哲学家就餐问题一、实验目的1、熟练使用VC++6.0编译环境,调试并正确运行程序。

2、理解哲学家就餐问题中出现的问题,进而掌握死锁的必要条件。

3、理解源程序中产生和防止死锁的算法,及相关窗口操作。

4、熟悉哲学家就餐问题流程。

5、在VC++6.0环境下编译哲学家就餐问题演示程序,考虑其他解决死锁方法.二、实验原理1、问题描述有五个哲学家围坐在一圆桌旁,桌中央有一盘通心粉,每人面前有一只空盘子,每两人之间放一只筷子。

每个哲学家的行为是思考,感到饥饿,然后吃通心粉。

为了吃通心粉,每个哲学家必须拿到两只筷子,并且每个人只能直接从自己的左边或右边去取筷子。

2、分配方式方式一(不会进入死锁)仅当一个哲学家左右两边的筷子都可用时,才允许他拿筷子。

这样要么一次占有两只筷子(所有线程需要的资源)进行下一步的吃通心粉,然后释放所有的资源;要么不占用资源,这样就不可能产生死锁了。

方式二(会进入死锁)当筷子(资源)可用时,先分配左边的筷子,等待一会后再分配右边的筷子,由于这个过程中,左边的筷子一直没有释放,就有可能产生死锁了。

3、程序运行说明程序运行过程中会弹出一个MessageBox提示操作者操作:1)第一个对话框用于选择运行模式a.选择yes 表示采用的是运行的防止死锁的方式,这样的话整个程序可以一直运行下去,不会产生死锁。

b.选择no 表示运行产生死锁的方式会弹出第二个对话框。

2)第二个对话框用于选择运行时,线程运行的时间a. 选择res 线程时间比较短,很快就可以死锁b.选择no 线程时间跟选择yes 时候的时间差不多,产生死锁的时间稍微长一点。

三、实验过程及分析1、伪代码:1) 不发生死锁的方式(要么一下占用两支筷子,要么不占用)var mutexleftchopstick,mutexrightchopstick;beging:resting;waiting;p(mutexleftchopstick); //先改变左手筷子信号量p(mutexrightchopstick); //马上改变右手筷子信号量GetResource(leftchopstick,rightchopstick);eating;v(mutexleftchopstick);v(mutexrightchopstick);end2) 发生死锁的方式(一旦可以占用筷子,就马上占用)var mutexleftchopstick,mutexrightchopstick;beging:resting;waiting;p(mutexleftchopstick); //改变左手筷子信号量GetResource(leftchopstick); //获取左手筷子p(mutexrightchopstick); //改变右手筷子信号量GetResource(rightchopstick); //获取右手筷子eating;v(mutexleftchopstick);v(mutexrightchopstick);end2、代码分析:1)不发生死锁的方式:先确定两只筷子均没被占用才获取筷子,这样就打破了死锁的必要条件。

操作系统实验实验报告

操作系统实验实验报告

操作系统实验实验报告一、实验目的操作系统是计算机系统中最为关键的核心软件,它管理着计算机的硬件资源和软件资源,为用户提供了一个方便、高效、稳定的工作环境。

本次操作系统实验的目的在于通过实际操作和实践,深入理解操作系统的基本原理和核心概念,掌握操作系统的基本功能和操作方法,提高对操作系统的认识和应用能力。

二、实验环境本次实验使用的操作系统为 Windows 10 专业版,开发工具为Visual Studio 2019,编程语言为 C 和 C++。

实验硬件环境为一台配备Intel Core i7 处理器、16GB 内存、512GB SSD 硬盘的个人计算机。

三、实验内容(一)进程管理实验1、进程创建与终止通过编程实现创建新的进程,并在完成任务后终止进程。

在实验中,我们使用了 Windows API 函数 CreateProcess 和 TerminateProcess 来完成进程的创建和终止操作。

通过观察进程的创建和终止过程,深入理解了进程的生命周期和状态转换。

2、进程同步与互斥为了实现进程之间的同步与互斥,我们使用了信号量、互斥量等同步对象。

通过编写多线程程序,模拟了多个进程对共享资源的访问,实现了对共享资源的互斥访问和同步操作。

在实验中,我们深刻体会到了进程同步与互斥的重要性,以及不正确的同步操作可能导致的死锁等问题。

(二)内存管理实验1、内存分配与释放使用 Windows API 函数 VirtualAlloc 和 VirtualFree 进行内存的分配和释放操作。

通过实验,了解了内存分配的不同方式(如堆分配、栈分配等)以及内存释放的时机和方法,掌握了内存管理的基本原理和操作技巧。

2、内存分页与分段通过编程模拟内存的分页和分段管理机制,了解了内存分页和分段的基本原理和实现方法。

在实验中,我们实现了简单的内存分页和分段算法,对内存的地址转换和页面置换等过程有了更深入的理解。

(三)文件系统实验1、文件操作使用 Windows API 函数 CreateFile、ReadFile、WriteFile 等进行文件的创建、读取和写入操作。

操作系统实验报告6

操作系统实验报告6

操作系统实验报告6一、实验目的本次操作系统实验的主要目的是深入了解和掌握操作系统中进程管理、内存管理、文件系统等核心概念和相关技术,通过实际操作和观察,增强对操作系统工作原理的理解,并提高解决实际问题的能力。

二、实验环境本次实验使用的操作系统为 Windows 10,实验工具包括 Visual Studio 2019 等。

三、实验内容(一)进程管理实验1、创建多个进程,并观察它们的运行状态和资源占用情况。

通过编写简单的C++程序,使用Windows API 函数创建多个进程。

在程序中,设置不同的进程优先级和执行时间,观察操作系统如何调度这些进程,以及它们对 CPU 使用率和内存的影响。

2、进程间通信实现了进程间的管道通信和消息传递。

通过创建管道,让两个进程能够相互交换数据。

同时,还使用了 Windows 的消息机制,使进程之间能够发送和接收特定的消息。

(二)内存管理实验1、内存分配与释放使用 C++的动态内存分配函数(如`malloc` 和`free`),在程序运行时动态申请和释放内存。

观察内存使用情况,了解内存碎片的产生和处理。

2、虚拟内存管理研究了 Windows 操作系统的虚拟内存机制,通过查看系统的性能监视器,观察虚拟内存的使用情况,包括页面文件的大小和读写次数。

(三)文件系统实验1、文件操作进行了文件的创建、读取、写入、删除等基本操作。

通过编写程序,对不同类型的文件(如文本文件、二进制文件)进行处理,了解文件系统的工作原理。

2、目录操作实现了目录的创建、删除、遍历等功能。

了解了目录结构在文件系统中的组织方式和管理方法。

四、实验步骤(一)进程管理实验步骤1、打开 Visual Studio 2019,创建一个新的 C++控制台项目。

2、在项目中编写代码,使用`CreateProcess` 函数创建多个进程,并设置它们的优先级和执行时间。

3、编译并运行程序,通过任务管理器观察进程的运行状态和资源占用情况。

华科操作系统实验

华科操作系统实验

课程实验报告课程名称:操作系统课程设计专业班级:学号:姓名:指导教师:报告日期:计算机科学与技术学院目录实验1:进程并发实验 (1)实验概述 (1)实验内容 (1)实验设计 (1)实验过程 (2)实验结果 (6)实验小结 (7)实验2:添加系统功能调用 (8)实验概述 (8)实验内容 (8)阶段1 添加源代码 (8)阶段2 连接新的系统功能调用 (9)阶段3 重建内核 (10)阶段4 修改grub文件 (13)实验小结 (14)实验3:添加设备驱动程序 (15)实验概述 (15)实验内容 (15)阶段1 编写设备驱动程序 (15)阶段2 编译设备驱动模块 (16)阶段3 加载设备驱动模块 (17)阶段4 生成设备文件 (18)阶段5 编写应用程序测试 (18)实验小结 (19)实验总结 (20)实验1:进程并发实验实验概述通过本次进程并发实验,让同学更加熟悉和理解Linux编程环境。

实验内容本次实验的内容主要分为两个任务:1.编写一个C程序,用read、write等系统调用实现文件拷贝功能。

命令形式:copy <源文件名> <目标文件名>2.编写一个C程序,使用图形编程库 (QT/GTK)分窗口显示三个并发进程的运行(一个窗口实时显示当前系统时间,一个窗口循环显示0到9,一个窗口做1到1000的累加求和,刷新周期均为1秒)。

实验设计任务1:实验1的第一个阶段需要实现一个简单的C语言程序,首先需要有一个复制的源文件,同时需要创建一个存放复制内容的复制文件,文件复制传输的中间站可以设置一个缓冲数组,此次试验设计了一个大小为10个字节的数组。

打开复制源文件,返回一个INT标识,使用readbuf()函数,每次读取10个字节的内容,将内容存放到缓冲区数组,使用writebuf()函数将缓冲区的10个字节写到复制文件中,重复上述过程直到将整个复制过程完成。

任务2:实验的第二个阶段是实现进程的同步,实现的工具是QT。

《操作系统》课内实验报告

《操作系统》课内实验报告

《操作系统》课内实验报告一、实验目的本次《操作系统》课内实验的主要目的是通过实际操作和观察,深入理解操作系统的基本原理和功能,掌握常见操作系统命令的使用,提高对操作系统的实际应用能力和问题解决能力。

二、实验环境本次实验在计算机实验室进行,使用的操作系统为 Windows 10 和Linux(Ubuntu 发行版)。

实验所使用的计算机配置为:Intel Core i5 处理器,8GB 内存,500GB 硬盘。

三、实验内容1、进程管理在 Windows 系统中,通过任务管理器观察进程的状态、优先级、CPU 使用率等信息,并进行进程的结束和优先级调整操作。

在 Linux 系统中,使用命令行工具(如 ps、kill 等)实现相同的功能。

2、内存管理使用 Windows 系统的性能监视器和资源监视器,查看内存的使用情况,包括物理内存、虚拟内存的占用和分配情况。

在 Linux 系统中,通过命令(如 free、vmstat 等)获取类似的内存信息,并分析内存的使用效率。

3、文件系统管理在 Windows 系统中,对文件和文件夹进行创建、复制、移动、删除等操作,了解文件的属性设置和权限管理。

在 Linux 系统中,使用命令(如 mkdir、cp、mv、rm 等)完成相同的任务,并熟悉文件的所有者、所属组和权限设置。

4、设备管理在 Windows 系统中,查看设备管理器中的硬件设备信息,安装和卸载设备驱动程序。

在 Linux 系统中,使用命令(如 lspci、lsusb 等)查看硬件设备,并通过安装内核模块来支持特定设备。

四、实验步骤1、进程管理实验(1)打开 Windows 系统的任务管理器,切换到“进程”选项卡,可以看到当前系统中正在运行的进程列表。

(2)选择一个进程,右键点击可以查看其属性,包括进程 ID、CPU 使用率、内存使用情况等。

(3)通过“结束任务”按钮可以结束指定的进程,但要注意不要随意结束系统关键进程,以免导致系统不稳定。

华科操作系统实验报告

华科操作系统实验报告

华科操作系统实验报告一、实验目的操作系统是计算机系统的核心组成部分,对于理解计算机的工作原理和提高计算机应用能力具有重要意义。

本次华科操作系统实验的主要目的是通过实际操作和实践,深入理解操作系统的基本概念、原理和功能,掌握操作系统的核心技术和应用方法,提高我们的实践能力和问题解决能力。

二、实验环境本次实验使用的操作系统为Windows 10 和Linux(Ubuntu 2004),开发工具包括 Visual Studio Code、GCC 编译器等。

实验硬件环境为个人计算机,配置为英特尔酷睿 i7 处理器、16GB 内存、512GB 固态硬盘。

三、实验内容1、进程管理进程创建与销毁进程调度算法模拟进程同步与互斥2、内存管理内存分配与回收算法实现虚拟内存管理3、文件系统文件操作与管理文件系统的实现与优化4、设备管理设备驱动程序编写设备分配与回收四、实验步骤及结果1、进程管理实验进程创建与销毁首先,使用 C 语言编写程序,通过系统调用创建新的进程。

在程序中,使用 fork()函数创建子进程,并在子进程和父进程中分别输出不同的信息,以验证进程的创建和执行。

实验结果表明,子进程和父进程能够独立运行,并输出相应的信息。

进程调度算法模拟实现了先来先服务(FCFS)、短作业优先(SJF)和时间片轮转(RR)三种进程调度算法。

通过模拟多个进程的到达时间、服务时间和优先级等参数,计算不同调度算法下的平均周转时间和平均等待时间。

实验结果显示,SJF 算法在平均周转时间和平均等待时间方面表现较好,而 RR 算法能够提供较好的响应时间和公平性。

进程同步与互斥使用信号量和互斥锁实现了进程的同步与互斥。

编写了生产者消费者问题的程序,通过信号量控制生产者和消费者对缓冲区的访问,避免了数据竞争和不一致的情况。

实验结果表明,信号量和互斥锁能够有效地实现进程间的同步与互斥,保证程序的正确性。

2、内存管理实验内存分配与回收算法实现实现了首次适应(First Fit)、最佳适应(Best Fit)和最坏适应(Worst Fit)三种内存分配算法。

华科操作系统实验

华科操作系统实验

课程实验报告课程名称:操作系统课程设计专业班级:学号:姓名:指导教师:报告日期:计算机科学与技术学院目录实验1:进程并发实验............................ 错误!未定义书签。

实验概述................................................. 错误!未定义书签。

实验内容................................................. 错误!未定义书签。

实验设计................................................. 错误!未定义书签。

实验过程................................................. 错误!未定义书签。

实验结果................................................. 错误!未定义书签。

实验小结................................................. 错误!未定义书签。

实验2:添加系统功能调用......................... 错误!未定义书签。

实验概述................................................. 错误!未定义书签。

实验内容................................................. 错误!未定义书签。

阶段1 添加源代码.................................... 错误!未定义书签。

阶段2 连接新的系统功能调用.......................... 错误!未定义书签。

阶段3 重建内核...................................... 错误!未定义书签。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

课程实验报告课程名称:操作系统原理专业班级:cs1209学号:姓名:指导教师:报告日期: 2015年1月5日计算机科学与技术学院目录1 实验一Linux线程及信号灯..........................................................................11.1 实验目的与内容................................................................................. (1)1.1.1实验目的................................................................................. (1)1.1.2 实验内容...................................................................................... (1)1.2 实验过程................................................................................................11.2.1 预备知识.........................................................................................11.2.2实验测试与结果.............................................................................2 1.3实验总结................................................................................................31.4 源代码....................................................................................................4 2 实验二Linux进程及同步..............................................................................7 2. 1 实验目的与内容.............................................................................. (7)2.1.1实验目的.........................................................................................72.1.2实验内容...................................................................................... (7)2.2实验过程................................................................................................72.2.1预备知识.........................................................................................72.2.2 实验测试与结果.............................................................................82. 3 实验总结................................................................................................92.4 源代码....................................................................................................9 3实验三Linux文件目录操作................................................................ (13)3.1实验目的与内容...................................................................................133.1.1 实验目的........................................................................................133.1. 2 实验内容........................................................................................133.2 实验过程...............................................................................................13 3.2.1预备知识........................................................................................133.2. 2 实验测试与结果............................................................................14 3.3 实验总结...............................................................................................153.4源代码...................................................................................................15实验一Linux线程及信号灯1.1实验目的与内容1.1.1实验目的1、熟悉Linux线程接口。

ﻩ2、熟悉Linux信号灯编程。

3、了解Linux进程同步与通信的主要机制,并通过信号灯操作实现进程间的同步与互斥。

1.1.2 实验内容1、编程模拟实现飞机售票:创建多个售票线程;ﻩ使用公用全局变量保存已售票数量;ﻩ创建互斥信号灯;ﻩﻩ对售票线程临界区实施P、V操作;2、编程模拟实现双线程单缓冲区的合作创建一个计算线程与一个输出线程;创建同步信号灯;缓冲区用全局公用数组变量;对计算线程与输出线程实施P、V操作;1.2实验过程ﻩ1.2.1 预备知识Linux下的信号灯及其P、V操作:表1. 错误!未定义书签。

P、V操作定义线程:表1. 错误!不能识别的开关参数。

线程相关函数共享内存:使用共享内存是运行在同一计算机上的进程进行进程间通信的最快的方法,shmget与shmat 系统调用。

进程控制:fork与execv系统调用;编译、编辑、调试表1. 错误!不能识别的开关参数。

编译、编辑、调试1.2.2 实验测试与结果测试结果:模拟售票说明(图1.1.1和1.1.2):共有300张票,有三个线程分别代表三个售票窗口图1.1.1图1.1.2说明(图1.1.3和1.1.4):每个窗口每次只卖出一张,直到卖完图1.1.3图1.1.4 测试结果:双线程单缓冲区的合作图1.21.3 实验总结本次实验刚做的时候用三个线程做依次访问卖几张来卖出,后来老师让我改成每次买一张直到卖完,做出来了,但是我加的循环体加的位置不对,运行一两次可能没问题,但运行几万次可能会出现问题,此bug老师给我指出的,程序还有待优化。

1.4源代码1:#include <stdio.h>#include<pthread.h>#include<linux/sem.h>#include <sys/types.h>#include<stdlib.h>intticket=300;int mutex;void p(int semid,int semno){struct sembuf sop;sop.sem_num=semno;sop.sem_op=-1;sop.sem_flg=0;semop(semid,&sop,1);}void v(int semid,intsemno){struct sembuf sop;sop.sem_num=semno;sop.sem_op=1;sop.sem_flg=0;semop(semid,&sop,1);}void thread1(void){int i;p(mutex,0);printf("窗口1:本航班共有%d个座位,请问您需要买几张?\n",ticket);scanf("%d",&i);if(i>ticket)printf("窗口1:剩余票数不够");elseticket=ticket-i;v(mutex,0);}void thread2(void){inti;p(mutex,0);printf("窗口2:本航班共有%d个座位,请问您需要买几张?\n",ticket);scanf("%d",&i);if(i>ticket)printf("窗口2:剩余票数不够");elseticket=ticket-i;v(mutex,0);}void thread3(void){2:#include<sys/types.h>int q[100];int m;int w=0;void P(intsemid,int semno){struct sembuf sop;sop.sem_num=semno;sop.sem_op=-1;sop.sem_flg=0;semop(semid,&sop,1);}void V(int semid,int semno){struct sembuf sop;sop.sem_num=semno;sop.sem_op=1;sop.sem_flg=0;semop(semid,&sop,1);}void pa(){P(m,1);w++;q[w]+=1;V(m,0);}void pb(){P(m,0);printf("jieguo =%d\n",q[w]);w--;V(m,1);}int main(void){pthread_t id1;pthread_t id2;pthread_t id3;pthread_t id4;int i,ret1,ret2;union semun arg;arg.val=0;m=semget(IPC_PRIVATE,2,IPC_CREAT|066); semctl(m,0,SETVAL,arg);arg.val=1;semctl(m,1,SETVAL,arg);ret1=pthread_create(&id1,NULL,(void*)pa,NULL); if(ret1!=0){实验二Linux进程及同步2.1 实验目的与内容2.1.1实验目的了解并掌握Linux进程及同步2.2.2 实验内容编程模拟实现誊抄;创建三个誊抄进程;基于共享内存建立缓冲区;创建同步信号灯;对各誊抄进程施加P、V操作;2.2实验过程2.2.1 预备知识①并发程序的誊抄:get程序:负责从输入序列f中读取字符并送到缓冲区s中;copy程序:把缓冲区s中的数据复制到缓冲区t中去;put程序:从缓冲区t中取出数据打印;②誊抄的实现:在相应的圆圈对应的进程中,通过修改箭头上对应序号的信号灯控制进程的运行,设有4个信号灯分别为0、1、2、3get() {p(0); ﻩget操作;v(2); } copy(){ﻩp(1);ﻩp(2);copy操作;v(0);v(3);}put(){p(3);put操作;ﻩv(1);}通过设置信号灯0的初值和利用c opy对信号灯0做v操作,使得当信号灯0的资源个数>0时,可以进行get操作通过设置信号灯1、2的初值和利用put对信号灯1做v操作、利用get对信号灯2做v操作,使得当信号灯1和信号灯2的资源个数均>0时,可以进行copy操作通过设置信号灯3的初值和利用copy对信号灯3做v操作,使得当信号灯3的资源个数>0时,可以进行put操作2.2.2实验测试与结果运行结果:图2使用./main打开程序2.3实验总结通过此次实验了解了进程的创建,知道了进程与线程的区别。

相关文档
最新文档