操作系统原理实验报告(最终版)汇总
- 格式:doc
- 大小:878.50 KB
- 文档页数:28
操作系统实验报告书院系名称:电子工程学院电子指导教师:班级:学号:学生姓名:实验题目一:进程一、实验目的通过观察、分析实验现象,深入理解进程及进程在调度执行和内存空间等方面的特点,掌握在POSIX 规范中fork和kill系统调用的功能和使用。
二、实验内容(1)补充POSIX 下进程控制的残缺版实验程序(2)回答下列问题:1. 你最初认为运行结果会怎么样?2. 实际的结果什么样?有什么特点?试对产生该现象的原因进行分析。
3. proc_number 这个全局变量在各个子进程里的值相同吗?为什么?4. kill 命令在程序中使用了几次?每次的作用是什么?执行后的现象是什么?5. 使用kill 命令可以在进程的外部杀死进程。
进程怎样能主动退出?这两种退出方式哪种更好一些?三、实验步骤1.根据题意进入DOC环境中编写程序。
2.编译,链接,运行程序,进行调试。
3.分析实验结果及回答问题。
四、调试情况,回答问题及体会1、对自己设计进行评价,指出合理和不足之处,提出改进的方案。
2、在设计过程中的感受。
调试情况:回答上述实验内容中的问题1.预期结果:会持续输出0-9号进程,直到输入数字键+回车,则会杀死该进程,接下来的输出将不会有该进程号,当输入q+回车,则退出程序。
2.实际结果:与预期差不多,因输入进程总数20大于设定的最大进程数,因此按进程数10来处理。
随机输出0-9号进程,sleep(SLEEP_INTERV AL),循环输出,直到输入数字键,则会杀死该数字对应的进程,直到输入q退出循环,然后杀死本组所有进程。
分析:每创建一个子进程时,将其pid存储在pid[i]中,i存储在proc_number,然后调用死循环函数do_something(),输出该进程的代号proc_number;当输入数字键时,主进程会执行kill(pid[ch-'0'],SIGTERM),从而杀死(ch-‘0’)号进程。
学生学号0121010680225 实验课成绩武汉理工大学学生实验报告书实验课程名称操作系统开课学院计算机科学与技术学院指导老师姓名刘军学生姓名姬琪学生专业班级软件工程SY10012012—2013 学年第一学期实验课程名称:操作系统实验项目名称Linux键盘命令和vi实验成绩实验者姬琪专业班级软件工程SY1001组别同组者实验日期年月日第一部分:实验分析与设计(可加页)一、实验内容描述(问题域描述)Linux键盘命令和vi1.要求:掌握Linux系统键盘命令的使用方法1. 使用mkdir命令建立一个子目录subdir2. 使用cat或more命令查看file1文件的内容。
3. 将date命令的用法附加到文件file1的后面:4. 利用ls -l file1命令列出文件file1的较详细的信息。
5. 利用rm fa命令将文件fa删除。
再利用ls -l命令查看工作目录内容。
6. 运行mv file1 file_a命令,然后用ls命令查看这两个文件是否都还在工作目录中2.vi操作1.了解vi编辑器的作用和功能2.熟悉vi的操作环境和切换方法3.掌握vi操作的方式(几个常用键)4.了解常用的快捷键二、实验基本原理与设计(包括实验方案设计,实验手段的确定,试验步骤等,用硬件逻辑或者算法描述)VI编辑器的常见命令:vi filename :打开或新建文件,并将光标置于第一行首vi +n filename :打开文件,并将光标置于第n行首vi + filename :打开文件,并将光标置于最后一行首vi +/pattern filename:打开文件,并将光标置于第一个与pattern匹配的串处vi -r filename :在上次正用vi编辑时发生系统崩溃,恢复filenamevi filename....filename :打开多个文件,依次进行编辑键盘命令:1. cat,more,less命令2. Is命令3. cp命令4. rm命令5. mv命令VI命令:1.vi进入vi缓冲区2.vi file1:进入文件file13.退出vi三、主要仪器设备及耗材Ubuntu操作体统Vi编辑器第二部分:实验调试与结果分析(可加页)一、调试过程(包括调试方法描述、实验数据记录,实验现象记录,实验过程发现的问题等)1 使用mkdir命令建立一个子目录subdir$ mkdir subdir$2 使用cat或more命令查看file1文件的内容。
一、实验目的1. 理解进程的概念及其在操作系统中的作用。
2. 掌握进程的创建、调度、同步和通信机制。
3. 学习使用进程管理工具进行进程操作。
4. 提高对操作系统进程管理的理解和应用能力。
二、实验环境1. 操作系统:Windows 102. 软件环境:Visual Studio 20193. 实验工具:C++语言、进程管理工具(如Task Manager)三、实验内容1. 进程的创建与销毁2. 进程的调度策略3. 进程的同步与互斥4. 进程的通信机制四、实验步骤1. 进程的创建与销毁(1)创建进程使用C++语言编写一个简单的程序,创建一个新的进程。
程序如下:```cpp#include <iostream>#include <windows.h>int main() {// 创建进程STARTUPINFO si;PROCESS_INFORMATION pi;ZeroMemory(&si, sizeof(si));si.cb = sizeof(si);ZeroMemory(&pi, sizeof(pi));// 创建进程if (!CreateProcess(NULL, "notepad.exe", NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi)) {std::cout << "创建进程失败" << std::endl;return 1;}std::cout << "进程创建成功" << std::endl;// 等待进程结束WaitForSingleObject(pi.hProcess, INFINITE);// 销毁进程CloseHandle(pi.hProcess);CloseHandle(pi.hThread);return 0;}```(2)销毁进程在上面的程序中,通过调用`WaitForSingleObject(pi.hProcess, INFINITE)`函数等待进程结束,然后使用`CloseHandle(pi.hProcess)`和`CloseHandle(pi.hThread)`函数销毁进程。
第1篇一、引言操作系统是计算机系统中最基本的系统软件,它负责管理计算机的硬件资源和软件资源,为用户和其他程序提供运行环境。
为了更好地理解操作系统的原理,我们进行了一次操作系统原理的实践。
以下是本次实践的详细报告。
二、实践目的1. 理解操作系统的基本原理和功能;2. 掌握操作系统的基本操作和命令;3. 熟悉操作系统的调试和优化方法;4. 提高实际操作能力,为今后从事计算机相关工作打下基础。
三、实践内容1. 操作系统概述操作系统是一种系统软件,负责管理计算机的硬件资源和软件资源。
它具有以下功能:(1)进程管理:负责进程的创建、调度、同步和通信等;(2)内存管理:负责内存的分配、回收和保护等;(3)文件管理:负责文件的创建、删除、读写和保护等;(4)设备管理:负责设备的分配、控制和调度等;(5)用户接口:提供用户与计算机交互的界面。
2. 操作系统基本操作和命令在实践过程中,我们学习了以下操作系统的基本操作和命令:(1)进程管理:创建进程、查看进程信息、杀死进程等;(2)内存管理:查看内存信息、释放内存等;(3)文件管理:创建文件、删除文件、查看文件信息等;(4)设备管理:查看设备信息、控制设备等;(5)用户接口:登录、注销、切换用户等。
3. 操作系统调试和优化在实践过程中,我们学习了以下操作系统调试和优化方法:(1)使用调试工具:如gdb、windbg等;(2)分析系统性能:如CPU使用率、内存使用率等;(3)优化代码:如减少循环次数、提高数据结构效率等;(4)调整系统参数:如调整内存分配策略、优化进程调度算法等。
四、实践过程1. 安装操作系统首先,我们需要在计算机上安装一个操作系统,如Windows、Linux或macOS。
在安装过程中,我们需要选择合适的操作系统版本、分区、驱动程序等。
2. 学习操作系统基本操作和命令在安装完成后,我们开始学习操作系统的基本操作和命令。
通过查阅资料和实际操作,我们掌握了进程管理、内存管理、文件管理、设备管理和用户接口等方面的知识和技能。
windows实验报告总结1. 引言Windows操作系统是目前世界上使用最广泛的操作系统之一。
本文档总结了通过实验了解Windows操作系统的一些重要方面的过程和结果。
本实验主要包括Windows系统的安装与卸载、系统配置、软件安装与卸载、网络设置以及系统维护等内容。
通过这些实验,我们能够更好地了解Windows操作系统及其相关功能与操作。
2. 实验目的通过参与实验,我们旨在掌握以下技能和知识:•理解Windows操作系统的安装和卸载过程;•掌握Windows系统的基本配置和优化;•学会安装和卸载软件;•熟悉网络设置和相关配置;•掌握Windows系统的常见故障排查和维护方法。
3. 实验过程和结果3.1 Windows系统的安装与卸载在实验中,我们首先学习了如何在计算机中安装Windows操作系统。
我们需要下载Windows镜像文件,并将其写入到U盘或者光盘上,然后根据提示完成安装过程。
同时,我们还学习了如何备份和还原系统以及如何卸载Windows系统。
3.2 系统配置在系统配置部分的实验中,我们学会了如何设置用户账户和密码、调整电源管理选项、更改日期和时间以及个性化桌面设置等。
我们还了解了如何配置病毒和威胁防护软件,以提高系统的安全性。
3.3 软件安装与卸载在学习软件安装和卸载的实验中,我们学会了使用Windows自带的应用商店或者下载软件包来安装各种常用软件。
我们还学习了如何通过控制面板或者其他卸载程序来卸载不需要的软件。
这些实验让我们更加了解Windows操作系统的应用管理和资源控制。
3.4 网络设置学习网络设置的实验让我们掌握了如何连接无线网络、配置IP地址和DNS服务器,以及设置防火墙和网络共享。
这些技能对于在Windows操作系统中有效地使用网络和维持网络安全至关重要。
3.5 系统维护在系统维护实验中,我们学习了如何进行系统文件和磁盘检查、优化系统性能、清理磁盘空间以及备份重要数据。
一、实验目的1. 理解操作系统基本原理和概念。
2. 掌握操作系统常见操作和命令。
3. 熟悉操作系统实验环境。
4. 提高动手实践能力。
二、实验环境1. 操作系统:Linux Ubuntu 18.042. 编程语言:C/C++3. 开发工具:GCC三、实验内容1. 进程管理实验2. 内存管理实验3. 文件系统实验四、实验步骤及结果1. 进程管理实验(1)实验步骤1)创建一个简单的进程```c#include <stdio.h>#include <stdlib.h>#include <sys/types.h>#include <unistd.h>int main() {pid_t pid = fork();if (pid == 0) {// 子进程printf("Child process, PID: %d\n", getpid()); } else {// 父进程printf("Parent process, PID: %d\n", getpid()); printf("Child process, PID: %d\n", pid);}return 0;}```2)编译并运行程序```gcc -o process process.c./process```3)查看进程信息```ps -ef | grep process```(2)实验结果编译并运行程序后,可以看到父进程和子进程的PID。
2. 内存管理实验(1)实验步骤1)创建一个简单的内存分配和释放程序```c#include <stdio.h>#include <stdlib.h>int main() {int p = (int )malloc(sizeof(int));if (p == NULL) {printf("Memory allocation failed\n"); return -1;}p = 10;printf("Value of p: %d\n", p);free(p);return 0;}```2)编译并运行程序```gcc -o memory memory.c./memory```(2)实验结果程序成功分配和释放内存,并打印出内存中的值。
《操作系统原理》实验报告班级::学号:指导老师:目录:实验题目:实验一线程创建与撤销 (2)实验题目:实验二线程同步 (6)实验题目:实验三线程互斥 (11)实验题目:实验四进程通信 (17)实验题目:实验五读者-写者问题 (22)实验题目:实验六进程调度 (38)实验题目:实验七存储管理之动态库 (52)实验题目:实验八存储管理之存分配 (57)实验题目:实验九存储管理之页面置换算法 (70)实验题目:实验十设备管理 (85)实验题目:实验十一文件管理之文件读写 (99)实验题目:实验一线程创建与撤销完成人:XXX报告日期:2018年3月31日一、实验容简要描述(1)熟悉VC++、Visual Studio开发环境。
(2)使用相关函数创建和撤销线程。
(3)在一个进程中创建3个线程,名字分别为threada、threadb、threadc。
threada输出“hello world! ”。
threadb输出“My name is …”。
threadc输出“Please wait…”,然后sleep 5秒钟,接着输出“I wake up”。
二、程序设计1、设计思路该函数创建一个在调用进程的地址空间中执行的线程。
2、主要数据结构HANDLE CreateThread(LPSECURITY_ATTRIBUTES lpThreadAttributes,DWORD dwStackSize,LPTHREAD_START_ROUTINE lpStartAddress,LPVOID lpParameter,DWORD dwCreationFlags,LPDWORD lpThreadId);VOID ExitThread(DWORD dwExitCode);VOID Sleep(DWORD dwMilliseconds);VOID Sleep(DWORD dwMilliseconds);三、实验结果1、基本数据lpThreadAttributes:指向一个SECURITY_ATTRIBUTES结构,该结构决定了返回的句柄是否可被子进程继承。
操作系统实验报告1. 实验目的本次实验的目的是通过设计一个简单的操作系统,深入理解操作系统的基本原理、结构和功能,并通过实践掌握操作系统的核心概念和实现方式。
2. 实验环境本次实验使用的实验环境如下:- 操作系统:Linux Ubuntu 18.04- 开发语言:C/C++- 开发工具:GCC编译器,GNU Make3. 实验内容及步骤本次实验包括以下几个主要内容和步骤:3.1 系统引导- 在操作系统启动时,首先执行系统引导程序,加载操作系统内核到内存中。
- 系统引导程序负责初始化硬件设备,建立起基本的运行环境,然后将控制权转交给操作系统内核。
3.2 内核初始化- 内核初始化过程包括初始化各种数据结构,建立进程控制块(PCB),初始化设备驱动程序等。
- 内核初始化完成后,操作系统进入空闲状态,等待用户的操作请求。
3.3 进程管理- 操作系统需要支持进程管理功能,包括进程的创建、销毁、调度和切换等。
- 进程管理模块负责分配和回收进程资源,根据调度算法决定进程的执行顺序,实现进程的并发执行。
3.4 内存管理- 操作系统需要支持内存管理功能,包括内存的分配和释放、内存的保护和共享等。
- 内存管理模块负责维护内存的使用情况,并根据进程的需求进行内存的分配和回收。
3.5 文件系统- 操作系统需要支持文件系统,提供对文件的创建、打开、读写和关闭等操作。
- 文件系统模块负责管理文件和目录的结构,以及实现对文件的存储和访问策略。
4. 实验结果与分析我们根据上述步骤,设计并实现了一个简单的操作系统。
通过测试和分析,得出以下实验结果和结论:4.1 系统启动与内核初始化- 当系统启动时,我们能够成功加载操作系统的内核,并初始化各种硬件设备。
- 内核初始化过程能够正确建立进程控制块(PCB),并初始化各个设备驱动程序。
4.2 进程管理- 我们能够成功创建和销毁进程,并按照设定的调度算法进行进程的切换。
- 进程间能够实现正确的互斥和同步操作,避免资源竞争和死锁等问题。
计算机操作系统实验报告一、实验目的本次计算机操作系统实验旨在深入了解计算机操作系统的工作原理和核心功能,通过实际操作和观察,增强对操作系统的认知和理解,提高解决实际问题的能力。
二、实验环境本次实验在以下环境中进行:操作系统:Windows 10开发工具:Visual Studio 2019硬件配置:Intel Core i5 处理器,8GB 内存,512GB 固态硬盘三、实验内容与步骤(一)进程管理实验1、创建进程使用 C++语言编写程序,通过调用系统函数创建新的进程。
在程序中,设置不同的参数和条件,观察进程的创建过程和资源分配情况。
2、进程调度编写模拟进程调度的程序,实现不同的调度算法,如先来先服务(FCFS)、短作业优先(SJF)、时间片轮转(RR)等。
通过改变进程的到达时间、执行时间和优先级等参数,观察不同调度算法对系统性能的影响。
3、进程同步与互斥使用信号量和互斥锁等机制实现进程之间的同步与互斥。
编写多进程程序,模拟生产者消费者问题、读者写者问题等经典的同步互斥场景,观察程序的运行结果,分析同步互斥机制的有效性和性能。
(二)内存管理实验1、内存分配实现不同的内存分配算法,如首次适应算法、最佳适应算法和最坏适应算法。
通过模拟内存请求和释放的过程,观察不同算法下内存的使用情况和碎片产生的情况。
2、虚拟内存配置系统的虚拟内存设置,观察虚拟内存的工作原理。
编写程序访问超过物理内存大小的数据,观察系统如何利用虚拟内存进行数据交换和页面置换。
3、内存保护设置内存访问权限,编写程序尝试越界访问内存,观察系统的保护机制如何防止非法访问和错误操作。
(三)文件系统实验1、文件操作使用系统提供的文件操作接口,进行文件的创建、读写、删除等操作。
观察文件在磁盘上的存储方式和文件系统的目录结构。
2、文件权限管理设置文件的访问权限,包括读取、写入、执行等权限。
通过不同用户身份访问文件,观察权限管理的效果和安全性。
3、磁盘调度实现不同的磁盘调度算法,如先来先服务(FCFS)、最短寻道时间优先(SSTF)、扫描算法(SCAN)等。
[键入文字] XX学校 实验报告
课程名称: 学 院: 专 业 班: 姓 名: 学 号: 指导教师:
2011 年 3 月 1
目录 实验1 进程管理 ......................................... 3 一、实验目的 ......................................... 3 二、实验内容 ......................................... 3 三、实验要求 ......................................... 3 四、程序说明和程序流程图 ............................. 4 五、程序代码 ......................................... 5 六、程序运行结果及分析 ............................... 7 七.指导教师评议 ..................................... 8 实验2 进程通信 ......................................... 9 一、实验目的 ......................................... 9 二、实验内容 ......................................... 9 三、实验要求 ......................................... 9 四、程序说明和程序流程图 ............................. 9 五、程序代码 ........................................ 11 七.指导教师评议 .................................... 14 实验3 存储管理 ........................................ 15 一、实验目的 ........................................ 15 二、实验内容 ........................................ 15 三、实验要求 ........................................ 15 四、程序说明和程序流程图 ............................ 16 六、程序运行结果及分析 .............................. 23 2
七.指导教师评议 .................................... 23 实验4 文件系统 ........................................ 24 一、实验目的 ........................................ 24 二、实验内容 ........................................ 24 三、实验要求 ........................................ 24 四、程序说明和程序流程图 ............................ 24 五、程序代码 ........................................ 26 六、程序运行结果及分析 .............................. 26 七.指导教师评议 .................................... 27 3
实验1 进程管理 一、实验目的 1. 弄清进程和程序的区别,加深对进程概念的理解。 2. 了解并发进程的执行过程,进一步认识并发执行的实质。 3. 掌握解决进程互斥使用资源的方法。
二、实验内容 1. 管道通信 使用系统调用pipe( )建立一个管道,然后使用系统调用fork( )创建2个子进程p1和p2。这2个子进程分别向管道中写入字符串:“Child process p1 is sending message!”和“Child process p2 is sending message!”,而父进程则从管道中读出来自两个子进程的信息,并显示在屏幕上。 2. 软中断通信 使用系统调用fork( )创建2个子进程p1和p2,在父进程中使用系统调用signal( )捕捉来自键盘上的软中断信号SIGINT(即按Ctrl-C),当捕捉到软中断信号SIGINT后,父进程使用系统调用kill( )分别向2个子进程发出软中断信号SIGUSR1和SIGUSR2,子进程捕捉到信号后分别输出信息“Child process p1 is killed by parent!”和“Child process p2 is killed by parent!”后终止。而父进程等待2个子进程终止后,输出信息“Parent process is killed!”后终止。
三、实验要求 1. 根据实验内容编写C程序。 2. 上机调试程序。 3. 记录并分析程序运行结果。 4
四、程序说明和程序流程图 实验1管道通信——所涉及的流程图:
实验2软中断信号——所涉及的流程图: 5 五、程序代码 /*expe1_1.c*/ #include void main( ) { int i, r, p1, p2, fd[2]; char buf[50], s[50]; pipe(fd); /* 父进程建立管道 */ while ((p1=fork())==-1); /* 创建子进程P1,失败时循环 */ if (p1==0) /* 由子进程P1返回,执行子进程P1 */ { lockf(fd[1], 1, 0); /* 加锁锁定写入端 */ sprintf(buf, "Child process P1 is sending messages! \n"); printf("Child process P1! \n"); write(fd[1], buf, 50); /* 把buf中的50个字符写入管道 */ sleep(5); /* 睡眠5秒,让父进程读 */ lockf(fd[1], 0, 0); /* 释放管道写入端 */ exit(0); /* 关闭P1*/ } else /* 从父进程返回,执行父进程 */ { while ((p2=fork())==-1); /* 创建子进程P2,失败时循环 */ if (p2==0) /* 从子进程P2返回,执行子进程P2 */ { lockf(fd[1], 1, 0); /* 锁定写入端 */ sprintf(buf, "Child process P2 is sending messages! \n"); printf("Child process P2! \n"); write(fd[1], buf, 50); /* 把buf中的字符写入管道 */ sleep(5); /* 睡眠5秒,让父进程读 */ lockf(fd[1], 0, 0); /* 释放管道写入端 */ exit(0); /* 关闭P2*/ } wait(0); if ((r=read(fd[0], s, 50))== -1) printf("cannot read pipe! \n"); else printf("%s", s); wait(0); if ((r=read(fd[0], s, 50))== -1) printf("cannot read pipe! \n"); else printf("%s", s); exit(0); } } 6
/*exp1-2.c*/ #include #include #include int p1,p2; void main() { void ppdo(); void p1do(); void p2do(); signal(SIGINT,ppdo); p1=fork(); if(p1==0) { signal(SIGUSR1,p1do); for(;;); } else { p2=fork(); if(p2==0) { signal(SIGUSR2,p2do); for(;;); } } wait(0); wait(0); printf("\nParent process is killed!\n"); exit(0); } void ppdo() { kill(p1,SIGUSR1); kill(p2,SIGUSR2); } void p1do() { printf("\nChild process p1 is killed by parent!\n"); exit(0); } void p2do() { printf("\nChild process p2 is killed by parent!\n"); exit(0); }