重庆大学操作系统实验1
操作系统实验报告

实验名称:操作系统进程管理实验实验目的:1. 理解操作系统进程管理的概念和原理。
2. 掌握进程的创建、调度、同步和通信机制。
3. 通过实验加深对进程管理算法的理解和应用。
实验环境:1. 操作系统:Windows 102. 编程语言:C/C++3. 开发环境:Visual Studio实验内容:一、实验一:进程的创建与终止1. 实验目的了解进程的创建和终止机制,掌握进程控制块(PCB)的结构和功能。
2. 实验步骤(1)创建一个进程,使用系统调用创建子进程;(2)设置子进程的属性,如优先级、名字等;(3)终止子进程,释放资源;(4)查看进程信息,确认进程创建和终止过程。
3. 实验代码```c#include <stdio.h>#include <sys/types.h>#include <unistd.h>int main() {pid_t pid;printf("Parent process: %d\n", getpid());pid = fork(); // 创建子进程if (pid == 0) {printf("Child process: %d\n", getpid());printf("Child process is running...\n");sleep(5); // 子进程延时5秒exit(0);} else {printf("Child process created: %d\n", pid);wait(NULL); // 等待子进程结束printf("Child process terminated.\n");}return 0;}```4. 实验结果在运行实验代码后,首先输出父进程的进程号,然后输出子进程的进程号,子进程运行5秒后结束,父进程输出子进程终止信息。
操作系统实验实验报告

操作系统实验实验报告一、实验目的操作系统是计算机系统中最为关键的核心软件,它管理着计算机的硬件资源和软件资源,为用户提供了一个方便、高效、稳定的工作环境。
本次操作系统实验的目的在于通过实际操作和实践,深入理解操作系统的基本原理和核心概念,掌握操作系统的基本功能和操作方法,提高对操作系统的认识和应用能力。
二、实验环境本次实验使用的操作系统为 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 等进行文件的创建、读取和写入操作。
《操作系统》实验报告

《操作系统》实验报告一、实验目的操作系统是计算机系统中最为关键的组成部分之一,本次实验的主要目的是深入理解操作系统的基本原理和功能,通过实际操作和观察,熟悉操作系统的核心概念,包括进程管理、内存管理、文件系统和设备管理等,提高对操作系统的实际应用能力和问题解决能力。
二、实验环境本次实验在以下环境中进行:操作系统:Windows 10开发工具:Visual Studio 2019编程语言:C++三、实验内容1、进程管理实验进程是操作系统中最基本的执行单元。
在这个实验中,我们使用C++编写程序来创建和管理进程。
通过观察进程的创建、执行和结束过程,理解进程的状态转换和资源分配。
首先,我们编写了一个简单的程序,创建了多个子进程,并通过进程标识符(PID)来跟踪它们的运行状态。
然后,使用等待函数来等待子进程的结束,并获取其返回值。
在实验过程中,我们发现进程的创建和销毁需要消耗一定的系统资源,而且进程之间的同步和通信需要谨慎处理,以避免出现死锁和竞争条件等问题。
2、内存管理实验内存管理是操作系统的核心功能之一,它直接影响系统的性能和稳定性。
在这个实验中,我们研究了动态内存分配和释放的机制。
使用 C++中的 new 和 delete 操作符来分配和释放内存。
通过观察内存使用情况和内存泄漏检测工具,了解了内存分配的效率和可能出现的内存泄漏问题。
同时,我们还探讨了内存分页和分段的概念,以及虚拟内存的工作原理。
通过模拟内存访问过程,理解了页表的作用和地址转换的过程。
3、文件系统实验文件系统是操作系统用于管理文件和目录的机制。
在这个实验中,我们对文件的创建、读写和删除进行了操作。
使用 C++的文件流操作来实现对文件的读写。
通过创建不同类型的文件(文本文件和二进制文件),并对其进行读写操作,熟悉了文件的打开模式和读写方式。
此外,还研究了文件的权限设置和目录的管理,了解了如何保护文件的安全性和组织文件的结构。
4、设备管理实验设备管理是操作系统与外部设备进行交互的桥梁。
《操作系统》课内实验报告

《操作系统》课内实验报告一、实验目的本次《操作系统》课内实验的主要目的是通过实际操作和观察,深入理解操作系统的基本原理和功能,掌握常见操作系统命令的使用,提高对操作系统的实际应用能力和问题解决能力。
二、实验环境本次实验在计算机实验室进行,使用的操作系统为 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)通过“结束任务”按钮可以结束指定的进程,但要注意不要随意结束系统关键进程,以免导致系统不稳定。
操作系统课程实验报告

一、实验概述实验名称:操作系统课程实验实验目的:1. 理解操作系统基本概念、原理及功能;2. 掌握操作系统的基本操作和应用;3. 提高实际操作能力和分析问题、解决问题的能力。
实验内容:1. 操作系统基本概念及原理的学习;2. 操作系统基本操作的应用;3. 实验项目:文件读写、多进程、多线程。
二、实验环境操作系统:Windows 10编译器:Visual Studio语言:C/C++实验平台:Windows 10系统下的虚拟机三、实验过程1. 操作系统基本概念及原理的学习操作系统是计算机系统中最基本的系统软件,负责管理计算机硬件资源、提供用户接口以及执行各种应用程序。
在实验过程中,我们学习了以下基本概念及原理:(1)进程管理:进程是操作系统能够进行运算处理的独立单位,具有动态性、并发性、异步性和独立性等特点。
进程管理主要包括进程的创建、调度、同步、通信和终止等。
(2)内存管理:内存管理是操作系统核心功能之一,主要负责分配、回收、保护和管理内存资源。
内存管理方式有分页、分段、段页式等。
(3)文件系统:文件系统是操作系统用于存储、检索和管理文件的机制。
文件系统主要包括目录结构、文件属性、文件操作等。
(4)设备管理:设备管理负责管理计算机系统中的各种外部设备,包括输入、输出和存储设备。
设备管理主要包括设备分配、设备驱动程序、缓冲区管理等。
2. 操作系统基本操作的应用在实验过程中,我们应用以下基本操作:(1)进程管理:创建、调度、同步、通信和终止进程。
(2)内存管理:分配、回收、保护和管理内存资源。
(3)文件系统:创建、删除、读写文件,实现目录结构的管理。
(4)设备管理:分配、回收、控制和管理设备。
3. 实验项目:文件读写、多进程、多线程(1)文件读写实验实验目的:掌握文件的基本操作,实现文件的创建、打开、读取、写入和关闭。
实验步骤:① 创建一个文件,命名为“test.txt”。
② 打开文件,以读写模式。
操作系统实验

操作系统实验一、实验背景操作系统实验是计算机科学与技术专业中非常重要的一门实践课程,旨在帮助学生加深对操作系统原理的理解,并且通过实际操作,提高学生的实际动手能力。
本文将介绍我在操作系统实验中所进行的一项实验内容和实验结果。
二、实验目的本次实验的目的是通过模拟操作系统的一些核心功能和概念,加深对操作系统内部工作原理的理解,掌握操作系统的调度算法、程序设计和系统优化等技能。
三、实验步骤1. 实验环境准备为了进行本次实验,首先需要搭建相应的实验环境。
我选择使用Linux操作系统作为实验环境,并确保已经安装了必要的工具和软件,如gcc编译器和相关的调试工具。
2. 实验代码编写在实验开始之前,我阅读了相关的文档和教材,理解了实验的要求和任务。
然后,我按照要求开始编写实验所需的代码。
在代码编写过程中,我需要对操作系统内核进行修改和扩展,并且针对具体的实验要求,实现相关的功能和算法。
3. 实验测试与调试完成代码编写后,我进行了一系列的测试和调试工作。
通过编写测试用例,模拟各种场景和输入情况,验证代码的正确性和稳定性。
如果发现错误或问题,我会使用调试工具进行定位和修复。
4. 实验结果分析在完成测试和调试后,我对实验结果进行了详细的分析。
通过比较和统计实验数据,我得出了一些结论,并对实验结果进行了评估和总结。
四、实验结果与讨论通过实验,我成功完成了操作系统实验的任务,并获得了一些有价值的实验结果。
在实验过程中,我遇到了一些挑战和困难,但通过不断努力和学习,最终克服了这些困难,并获得了令人满意的成果。
五、实验心得体会通过参与操作系统实验,我深刻地认识到了操作系统在计算机系统中的重要性和作用。
实验过程中,我不仅学到了新的知识和技能,还提高了自己的动手能力和问题解决能力。
同时,我也感受到了团队合作的重要性,与同学们一起合作完成实验任务,互相学习和交流,共同进步。
六、实验结论通过本次操作系统实验,我对操作系统的工作原理和相关概念有了更深入的了解。
大学实验实验室安全教育考试系统操作说明

大学实验实验室安全教育考试系统操作说明重庆大学实验实验室安全教育考试系统操作说明1.登录到note cqu。
埃杜。
cn图1测试站点登陆界面用户名是统一身份验证号。
未指定用户名的用户可以单击用户名查询按钮并使用ID 号进行查询。
身份证后的登录密码为6。
如果ID号的最后一个数字是x,请输入小写字母x。
2.登录后进入考试系统主页。
图2测试站点主页申请进入实验室的学生需进入该考试站点培训课件页面,学习实验室安全相关知识,并进入测试中心完成测试。
注意:如果出现以下界面,请在地址栏cqu中重新输入备注。
埃杜。
Cn,然后再次登录。
3.点击培训课件按钮,进入图3。
图3培训课件界面在该界面上,平台为学生提供学习材料、学习视频和安全制度三类资料。
4.在培训课件界面,点击学习资料按钮,进入图4。
图4学习材料界面学习材料分为两类:主要知识点和安全规范。
其中,主要知识点涵盖了学生在实验室可能遇到的化学、电学和生物学五个类别。
点击主要知识点按钮,进入相应的学习界面。
安全规范的使用方法与主要知识点相同。
5.在培训课件界面上,点击培训视频按钮进入图5。
图5培训视频界面进入该界面后,学生可观看实验室安全概论、实验室电气安全等视频资料。
6.在培训课件界面,点击安全系统按钮,进入图6。
图6安全制度界面安全系统接口提供与实验室安全相关的国家系统和学校发布的详细规定。
7.完成以上学习后即可点击测试中心按钮,进入图7开始测试。
图7测试中心界面8.完成所有的题目后点击完成,提交本次测试。
9.确认是否有未回答的问题。
如果问题序列前面有一个三角形,则表示问题尚未回答。
单击问题完成答案,单击不完成。
10.请查看本次考试得分,考试达到90分以上才算通过考试,若未达到,则需重新考试。
重庆邮电大学操作系统实验实验一

课程名称操作系统课程编号A2130330实验地点综合实验楼A511/A512 实验时间2019-04-29校外指导教师校内指导教师常光辉实验名称实验一进程控制描述与控制评阅人签字成绩一、实验目的实验1.1 Windows“任务管理器”的进程管理通过在Windows任务管理器中对程序进程进行响应的管理操作,熟悉操作系统进程管理的概念,学习观察操作系统运行的动态性能。
实验1.2 Windows Server 2016进程的“一生”1)通过创建进程、观察正在运行的进程和终止进程的程序设计和调试操作,进一步熟悉操作系统的进程概念,理解Windows Server 2016进程的“一生”;2)通过阅读和分析实验程序,学习创建进程、观察进程和终止进程的程序设计方法。
二、工具/准备工作1. 回顾教材相关内容;2. 在VMware WorkStation Pro中安装Windows Server 2016,如图1-1到图1-4;图1-1 新建虚拟机图1-2 Windows Server 2016安装程序图1-3 Windows Server 2016安装过程图1-4 Windows Server 2016安装完成3. 并在系统中安装Visual Studio 2019或Visual C++ 6.0或其他C++编译软件。
三、实验环境操作系统:Windows Server 2016(虚拟机)编程语言:C++集成开发环境:Visual Studio 2019四、实验步骤与实验过程实验1.1 Windows“任务管理器”的进程管理启动并进入Windows环境,单击Ctrl + Alt + Del键1,或者右键单击任务栏,在快捷菜单中单击“任务管理器”命令,打开“任务管理器”窗口2。
图1-5 任务管理器在本次实验中,使用的操作系统版本是: Windows Server 2016当前机器中由你打开,正在运行的应用程序有:1)Task Manager (任务管理器,即当前应用)2)记事本(打开了测试文件new.txt,如图1-6所示)图1-6 记事本Windows“任务管理器”的窗口由 5 个选项卡组成,分别是:1)进程2)性能3)用户4)详细信息5)服务当前“进程”选项卡显示的栏目分别是(可移动窗口下方的游标/箭头,或使窗口最大化进行观察):1)应用2)后台进程3)Windows进程1. 使用任务管理器终止进程步骤1:单击“进程”选项卡,一共显示了 45 个进程。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
gcc example.c -lpthread -o example
基础知识介绍 线程编程基础知识
2)pthread系统调用 pthread_create():创建一个线程。 pthread_join():阻塞当前的线程,直到另外一个线程运行结束。 pthread_exit():终止当前线程。 pthread_cancel():中断另外一个线程的运行。 pthread_attr_init():初始化线程的属性。 pthread_attr_setdetachstate():设置脱离状态的属性(决定这 个线程在终止时是否可以被结合)。 pthread_attr_getdetachstate():获取脱离状态的属性。 pthread_attr_destroy():删除线程的属性。 pthread_kill():向线程发送一个信号。
学号为奇数同学完成
实验内容-多进程和多线程
进程创建关系如图所示 1号进程创建2,3号两个进程 2号进程执行系统命令,ls,ps,cp等 3号进程创建4,5号两个进程 4号进程创建两个线程Thread1,Thread2
1
2 4 3 5
Thread1:求(1~n)之间的素数 Thread2:生成Fibonacci序列
Thread1:求(1~n)之间的素数 Thread2:生成Fibonacci序列
4 5 3号进程创建4,5号两个进程 4号进程执行系统命令,ls,ps,cp等 5号进程执行一个用户编写的可执行文件 每个进程输出自己的进程ID和父进程的进程ID,观察分析, 并画出程序的进程树结构。
基础知识介绍 进程编程基础知识
wait系统调用 wait函数用于使父进程阻塞,直到一个子进程结束。父进程调用 wait,该父进程可能会: a) 阻塞 b) 带子进程的终止状态立即返回 c) 出错立即返回 格式:pid_t wait(int *status) 参数status是一个指向int类型的指针,用来保存被收集进程退出时的一 些状态。但如果我们对子进程是如何死掉的毫不在意,则pid=wait (NULL); 头文件:#include<sys/types.h> #include<sys/wait.h >
有六种不同的exec函数,它们被统称为exec函数。
基础知识介绍 进程编程基础知识
execl (const char * filepath, const char* arg1, char* arg2......) execv (const char* filepath,char* argv[]) execle(const char*filepath,const char*arg1,const char*arg2,....., char* cons envp[]) execve (const char* filepath,char*argv[],char* const envp[]) execlp(const char *filename, const char *arg1, const char *arg2.....) execvp (const char * filename, char* argv[])
基础知识介绍 进程编程基础知识
进程创建的时机
用户登录:为用户创建一个进程。 作业调度:将作业装入内存,分配资源,创建进程。
提供服务:服务于某种服务请求,创建一系列的后台服务进程。
应用请求:由应用进程本身创建,让子进程和自己并发运行。
基础知识介绍 进程编程基础知识
进程的创建过程:
基础知识介绍 进程编程基础知识
当一个程序中调用fork函数后,内核会完成如下工作:
内核系统分配新的内存块和内核数据结构。 复制原来的进程到新的进程。
向运行进程集添加新的进程。
将进程号返回给两个进程。
基础知识介绍 进程编程基础知识
1. 父进程为什么要创建子进程? 多用户操作系统、竞争资源、创建子进程争夺资源、父子进程 一起从fork处继续执行。 2.父进程创建子进程后,子进程能不能执行不同的程序? 答案是可以的,这种情况下,子进程从fork返回后要立即调 用exec系统调用来实现。 3.怎样才能使父进程在子进程结束之后才执行? 调用wait系统调用来实现父子进程同步执行。
实验目确进程与线程的区别。 掌握Linux进程创建和撤销的方法,进一步认识并发执行的实 质。 了解多线程的程序设计方法。
实验内容-多进程和多线程
进程创建关系如图所示 1号进程创建2,3号两个进程 2号进程创建两个线程Thread1,Thread2
1
2 3
基础知识介绍 线程编程基础知识
pthread_create函数用来创建一个线程,它的原型为: int pthread_create ( pthread_t *tidp, pthread_attr_t *attr, void*(*start_routine) (void *), void *arg ); 参数1:指向线程标识符的指针。 参数2:用来设置线程属性,若为NULL,则用默认属性。 参数3:新线程运行函数的起始地址。 参数4:运行函数的参数。 正确返回:0。线程标识存放在thread中 错误返回:非0的错误代码。
实验1 多线程和多进程的管理
目录
基础知识介绍
进程编程基础知识 线程编程基础知识
实验目的 实验内容
实验要求
基础知识介绍 进程编程基础知识
进程标识符:每个进程都有一个非负整型表示的唯一进程ID,除 了进程ID,每个进程还有一些其他的标识符。可通过下列函数来 返回。 pid_t getpid(void); //返回调用进程的进程ID pid_t getppid(void); //返回调用进程的父进程ID uid_t getuid(void); //返回调用进程的实际用户ID uid_t geteuid(void); //返回调用进程的有效用户ID gid_t getgid(void); //返回调用进程的实际组ID gid_t getegid(void); //返回调用进程的有效组ID
基础知识介绍 进程编程基础知识
进程终止 1)进程正常结束 在进程执行期间调用exit系统调用。 2)进程的异常结束 在进程运行期间,由于出现错误或故障而被迫结束。 exit系统调用 格式:void exit(status) 参数status是调用进程终止时传递给父进程的值。如果调用进程 还有子进程,则将其所用子进程的父进程改为1号进程。
基础知识介绍 线程编程基础知识
1.线程标识 就像每个进程都有一个进程ID一样,每个线程也有一个线程ID, 但线程ID只在它所属的进程环境中有效。 定义方法为:pthread_t id; 2.线程创建 1)pthread库 Linux下的多线程遵循POSIX线程接口,称为pthread。pthread是 一套用户级线程库,具有很好的移植性。但在linux上实现时,却使用了内 核级线程来完成,这样提高的线程的并发性。 Linux下的多线程程序, 需要使用头文件pthread.h,连接时需要使用库pthread。
取空白PCB,生成惟一的进程标识号。 为新进程分配必要的资源(包括程序段、数据段、栈段)。
初始化PCB。
将新进程的PCB插入就绪队列。
基础知识介绍 进程编程基础知识
Linux中进程的创建
Linux启动在内核态,在系统初始化结束时,初始进程启 动一个核心进程(称为init),除了init进程外,Linux 中的所有进程都是由其他进程创建的。
基础知识介绍 线程编程基础知识
pthread_join 函数用来等待一个线程的结束,函数原型为: int pthread_join ( pthread_t th, void** thread_return ); 参数1:为等待终止的子线程标识符。 参数2:用户定义的指针,它可以用来存储被等待线程的返回值。 这个函数是一个线程阻塞的函数,调用它的函数将一直等待 到被等待的线程结束为止。
基础知识介绍 线程编程基础知识
pthread_exit函数用来终止线程,函数原型为: void pthread_exit ( void *_retval );
唯一的参数是函数的返回代码.
只要pthread_join中的第二个参数thread_return不是NULL, 这个值将被传递给thread_return。
基础知识介绍 进程编程基础知识
exec系统调用
用fork函数创建子进程后,子进程往往要调用一种exec函数以执 行另一个程序。 当进程调用一种exec函数时,该进程完全由新程序代换,而新程 序则从其main函数开始执行。 因为调用exec并不创建新进程,所以前后的进程ID并未改变。 exec只是用另一个新程序替换了当前进程的正文、数据、堆和栈 段。
使用系统调用fork()进行进程的创建。 子进程是父进程的映像,子进程除了进程的状态、标识
和与时间有关的控制项外,其余都与父进程相同。
基础知识介绍 进程编程基础知识
fork系统调用 当进程调用fork创建子进程后,根据fork的返回值来判断:当 前执行的是父进程的程序段还是子进程的程序段。 返回值: 等于0,当前进程是子进程。 大于0,当前进程是父进程,返回值是子进程的ID。 等于-1,创建失败。 格式:int pid_t fork(void); 头文件:#include<sys/types.h> //提供pid_t的定义 #include<unistd.h>
5号进程执行一个用户编写的可执行文件 每个进程输出自己的进程ID和父进程的进程ID,观察分析, 并画出程序的进程树结构。