太原理工大学《操作系统B》实验报告
《操作系统》实验报告

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

一、实验目的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)`函数销毁进程。
《操作系统》课内实验报告

《操作系统》课内实验报告一、实验目的本次《操作系统》课内实验的主要目的是通过实际操作和观察,深入理解操作系统的基本原理和功能,掌握常见操作系统命令的使用,提高对操作系统的实际应用能力和问题解决能力。
二、实验环境本次实验在计算机实验室进行,使用的操作系统为 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开发工具:Visual Studio Code三、实验内容1、进程管理观察进程的创建、终止和状态转换。
使用任务管理器查看系统中的进程信息,包括进程 ID、CPU 使用率、内存占用等。
通过编程实现创建和终止进程的功能。
2、内存管理了解内存的分配和回收机制。
使用 Windows 系统提供的性能监视器查看内存的使用情况。
编程实现简单的内存分配和释放算法。
3、文件系统管理熟悉文件和目录的操作,如创建、删除、复制、移动等。
研究文件的属性,如文件名、文件大小、创建时间等。
通过编程实现文件的读写操作。
4、设备管理认识设备的驱动程序和设备管理策略。
查看系统中的设备信息,如磁盘驱动器、打印机等。
模拟设备的中断处理过程。
四、实验步骤1、进程管理实验打开任务管理器,观察当前系统中正在运行的进程。
可以看到进程的名称、进程 ID、CPU 使用率、内存占用等信息。
使用 C++语言编写一个简单的程序,创建一个新的进程。
在程序中,使用`CreateProcess`函数来创建新进程,并设置进程的属性和参数。
编写另一个程序,用于终止指定的进程。
通过获取进程 ID,然后使用`TerminateProcess`函数来终止进程。
2、内存管理实验打开 Windows 性能监视器,选择“内存”选项卡,可以查看内存的使用情况,包括物理内存、虚拟内存、页面文件等的使用量和使用率。
编写一个 C 程序,使用动态内存分配函数(如`malloc`和`free`)来分配和释放内存。
在程序中,不断分配和释放一定大小的内存块,观察内存的使用情况和性能变化。
操作系统课程 实验报告(完整版)

中南大学《操作系统》实验报告姓名:孙福星专业班级:软件 1006班学号:3902100610完成日期:2011.11.22进程调度与内存管理一、实验目的在采用多道程序设计的系统中,往往有若干个进程同时处于就绪状态。
当就续进程个数大于处理器数时,就必须依照某种策略来决定哪些进程优先占用处理器。
实验模拟实现处理机调度,以加深了解处理机调度的工作,并体会优先级和时间片轮转调度算法的具体实施方法。
帮助了解在不同的存储管理方式下,应怎样实现主存空间的分配和回收。
二、实验要求1、可随机输入若干进程,并按优先权排序;2、从就绪队首选进程运行:优先权-1/要求运行时间-1要求运行时间=0时,撤销该进程3、重新排序,进行下轮调度。
4、可随时增加进程;5、规定道数,设置后备队列和挂起状态。
若内存中进程少于规定道数,可自动从后备队列调度一作业进入。
被挂起进程入挂起队列,设置解挂功能用于将指定挂起进程解挂入就绪队列。
6、每次调度后,显示各进程状态。
7、自行假设主存空间大小,预设操作系统所占大小并构造未分分区表;表目内容:起址、长度、状态(未分/空表目)8、结合以上实验,PCB增加为:{PID,要求运行时间,优先权,状态,所需主存大小,主存起始位置,PCB指针}9、采用最先适应算法分配主存空间;10、进程完成后,回收主存,并与相邻空闲分区合并。
11、采用图形界面;三、实验内容选择一个调度算法,实现处理机调度。
1、设计一个按优先权调度算法实现处理机调度的程序;2、设计按时间片轮转实现处理机调度的程序。
3、主存储器空间的分配和回收。
在可变分区管理方式下,采用最先适应算法实现主存空间的分配和回收。
四、实验原理该模拟系统采用java语言实现,要实现的功能有新建进程、进程调度、挂起进程、解挂进程、删除进程,道数和时间片大小可以由用户自己调整,有两种调度策略:按优先权调度和按时间片轮转调度。
每个进程可能有5种状态:新建(new)、就绪(ready)、运行(running)、阻塞(waiting)、挂起(suspend)。
太原理工大学系统分析实验报告

本科实验报告课程名称:系统分析与设计实验项目:《系统分析与设计》实验实验地点:行逸楼B114专业班级:软件学号:学生姓名:指导教师:孟东霞2015年11月4日一、实验目的通过《系统分析与设计》实验,使学生在实际的案例中完成系统分析与系统设计中的主要步骤,并熟悉信息系统开发的有关应用软件,加深对信息系统分析与设计课程基础理论、基本知识的理解,提高分析和解决实际问题的能力,使学生在实践中熟悉信息系统分析与设计的规,为后继的学习打下良好的基础。
二、实验要求学生以个人为单位完成,自选题目,班题目不重复,使用UML进行系统分析与设计,并完成实验报告。
实验报告以纸质版(A4)在课程结束后二上提交(12)。
三、实验主要设备:台式或笔记本计算机四、实验容1 选题及项目背景美食评价系统背景:互联网时代下网络评论越来越随意,希望可以规化的进行。
2 定义美食评价系统为用户提供美食指导和参考。
任人都可注册为会员,个人资料包括姓名,性别,收藏的餐厅以及口味爱好。
会员可以收藏餐馆,浏览餐馆信息以及其他会员的评价。
餐厅必须向管理人员提出注册并审核通过后才能显示。
管理人员需到工商局和餐厅具体审查后才能通过。
会员可以提供来自餐馆提供的小票在次日来对用餐进行评价,一小票仅可提供一次评价。
餐馆则提供当日用餐小票记录给管理人员,用以核对用户提供的小票是否正确,然后系统则会审核评价有无不良信息,审核通过发布在餐厅信息上,并根据会员评价次数对给会员评星(1-5)。
个人信息和餐馆信息可被所有人访问,管理员信息只能管理员访问。
3 参考资料1.GB8567-88 《计算机软件产品文件编制规》2.GB/T11457-1995 《软件工程术语》3.GB 1526—89 信息处理--数据流程图、程序流程图、系统流程图、程序网络图和系统资源图的文件编制符号及约定4.GB8566-88 《软件开发规》4 系统分析与设计4.1需求分析4.1.1识别参与者用户,餐厅,管理人员4.1.2 对需求进行捕获与描述1用例名称:注册个人用户执行者:用户目的:完成一次注册个人用户的完整过程。
太原理工大学嵌入式系统实验报告

课程名称:嵌入式系统B 实验项目:嵌入式系统B 实验地点:明向实验楼308 专业班级:班学号:201 学生姓名:指导教师:2016 年11 月 6 日实验一嵌入式虚拟开发环境的搭建以及内核编译一、实验目的和要求1.熟悉ARM虚拟平台Skyeye的搭建2.熟悉交叉编译开发环境的搭建3.熟悉编译ARM-Linux4.熟悉在Skyeye平台上仿真ARM-Linux5.拓展:尝试移植其他版本的Linux,并且在Skyeye上运行二、实验内容和原理本实验是通过在PC机上搭建嵌入式开发环境虚拟环境(Skyeye),熟悉嵌入式交叉编译开发环境以及ARM-Linux系统移植的主要步骤。
实验虚拟平台SMDK2410CPU三星S3C2410(ARM920T),核心频率为62.400MHz,I-Cache 16K,D-Cache 16K内存32MB,内存频率62.400MHz实验软件介绍SkyEye是一个开源软件(OpenSource Software)项目,中文名字是“天目”,SkyEye的目标是在通用的Linux和Windows平台上实现一个纯软件集成开发环境,模拟常见的嵌入式计算机系统(这里假定“仿真”和“模拟”的意思基本相同);可在SkyEye上运行u CLinux以及u C/OS-II等多种嵌入式操作系统和各种系统软件(如TCP/IP,图形子系统,文件子系统等),并可对它们进行源码级的分析和测试。
SkyEye是一个指令级模拟器,可以模拟多种嵌入式开发板,可支持多种CPU 指令集,在SkyEye上运行的操作系统意识不到它是在一个虚拟的环境中运行,而且开发人员可以通过SkyEye调试操作系统和系统软件。
由于SkyEye的目标不是验证硬件逻辑,而是协助开发,调试和学习系统软件,所以在实现上SkyEye 与真实的硬件环境相比还是有一定差别的。
编译ARM-Linux内核,熟悉ARM-Linux的移植过程。
编译成功后,同学们需要将ARM内核在SkyEye的ARM硬件模拟环境运行测试。
太原理工大学《操作系统B》实验报告

insert(int q)
/*INSERT A PROCESS*/
{
int p,s;
p=head;
s=prochain[head].next;
while((prochain[q].priority<prochain[s].priority)&&(s!=0))
{ p=s;
s=prochain[s].next;}
查看目录:dir
学生姓编名辑文本:edit
删除文件:del
专业班级 学号
实验成绩 实验日期
实验室名称
指导教师签名
太原理工大学学生实验报告
课程名称
操作系统 B
实验题目
进程调度程序设计
一、目的和要求
(一) 目的 进程是操作系统最重要的概念之一,进程调度是操作系统的主要内容,本实验要求学生独立
地用高级语言编写一个进程调度程序,调度算法可任意选择或自行设计,本实验可使学生加深对进 程调度和各种调度算法的理解。
{
int i;
head=0;
if (algo==2)
{ for (i=1;i<furthest+1;i++)
{ prochain[i].id=i;
prochain[i].priority=(rand()+11)%41;
prochain[i].cputime=0;
prochain[i].alltime=(rand()+1)%7;
prochain[i].state='W';
prochain[i].next=(i+1)%(furthest+1);}
head=1; tail=furthest; prochain[furthest].next=0; } run=head; prochain[run].state='R'; head=prochain[head].next; prochain[run].next=0; print(); }
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
学院:现代科技学院 专业:计算机科学与技术 姓名: 班级:计算机 学号: 指导教师: 时间: 年 月
学院名称 学生姓名 课程名称
太原理工大学学生实验报告
现代科技学院 操作系统 B
专业班级 学号
实验题目
实验成绩 实验日期 几种操作系统的界面
一、目的和要求
(一)目的 本实验的目的是使学生熟悉 1—2 种操作系统的界面,在熟练使用机器的基础上,能了解各种 操作命令和系统调用在系统中的大致工作过程。也就是通过操作系统的外部特征,逐步深入到操作 系统的内部实质内容中去。 (二)要求 1. 能熟练的在 1—2 种操作系统的环境下工作,学会使用各种命令,熟悉系统提供的各种功 能,主动而有效地使用计算机。
(2)简单轮转法。 进程就绪链按各进程进入的先后次序排列,链首进程首先投入运行。进程 每次占用处理机的轮转时间按其重要程度登入进程控制块中的轮转时间片数记录项(相应于优先数 法的优先数记录项位置)。每过一个时间片,运行进程占用处理机的时间片数加 1,然后比较占用 处理机的时间片数是否与该进程的轮转时间片数相等,若相等说明已到达轮转时间,应将现运行进 程排到就绪链末尾,调度链首进程占用处理机,且改变它们的进程状态,直至所有进程完成各自的 时间片。
QUEUE AND PCB SEQUENCE LIST*/
{
int k,p;
for (k=1;k<=40;k++)
printf("=");
printf("\nrunning proc.
");
printf("waiting queue.");
printf("\n %d
",prochain[run].id);
(二) 要求 1. 设计一个有几个进程并发执行的进程调度程序,每个进程由一个进程控制块(PCB)表示, 进程控制块通常应包括下述信息:进程名,进程优先数,进程需要运行的时间,占用 CPU 的时间以 及进程的状态等,且可按照调度算法的不同而增删。 2. 调度程序应包含 2—3 种不同的调度算法,运行时可以任选一种,以利于各种方法的分析 和比较。 3. 系统应能显示或打印各进程状态和参数的变化情况,便于观察。
char state;
int next; }prochain[furthest-1];
int procnum;
int rand();
int algo;
int run,head,tail,j;
main() /*MAIN PROGRAM*/ { agan: printf("type the algorithm is (1:RR,2:PRIO):"); scanf("%d",&algo); if (algo==2) { printf("output of priority.\n"); init(); prisch();} else { if (algo==1) { printf("output of round robin.\n"); init(); timesch();} else { printf("try again,please\n"); goto agan;} } for (j=1;j<=40;j++)
2. 算法与框图 程序框图如图 2-2 所示。
priority
生成并按优先数大小 排列进程控制块链 链首进程投入运行
开始 输入调度算法 alog alog=priority/round robin?
round robin
生成并按进入次序 排列进程控制块链 链首进程投入运行
时间片到,进程时间片
数减 1,优先数减 3 是
是 撤消该进程
从链首取一个 进程投入运行
否 进程队列空?
是 结束
(1)优先数法。 进程就绪链按优先数大小从大到小排列,链首进程首先投入运行。每过一个 时间片,运行进程所需运行的时间片数减 1,说明它已运行了一个时间片,优先数也减 3。理由是
该进程如果在一个时间片中完成不了,优先级应降低一级。接着比较现行进程和就绪链链首进程的 优先数,如果仍是现行进程高或者相同,就让现行进程继续运行,否则,调度就绪链链首进程投入 运行。原运行进程再按其优先数大小插入就绪链,且改变它们对应的进程状态,直至所有进程都运 行完各自的时间片数。
printf("操作系统实验报告!\n"); return 0; } /*--------->over*/
DOS 命令截图:
1.cpp 文件截图:
由于 MS-DOS 中不能显示中文,所以图中显示为乱码,此处为:操作系统实验报告! 2. DEV-CPP 编译、连接并运行程序。
运行截图: 3. 用 DOS 命令删除程序清单 1.cpp 与执行文件 1.exe 文件。
printf("%5d",prochain[k].id);
printf("\n");
printf("priority
");
for (k=1;k<furthest+1;k++)
printf("%5d",prochain[k].priority);
printf("\n");
printf("cputime
二、实验内容
(一) 实验原理
1. 题目 本程序可选用优先数法或简单轮转法对五个进程进行调度。每个进程处于运行
R(run)、就绪 W(wait)和完成 F(finish)三种状态之一,并假定起始状态都是就绪状态 W。
为了便于处理,程序中进程的运行时间以时间片为单位计算。各进程的优先数或轮转时间片
数、以及进程需要运行的时间片数,均由伪随机数发生器产生。
{ printf("="); } printf("\n\n"); for (j=1;j<=40;j++) { printf("="); } printf("\n\n"); printf("system finished\n"); getch();}
print() /*PRINT THE RUNNING PROCESS,WAITING
三、总结
本次实验在 WINDOWS XP 操作系统下完成,考察了对 WINDOWS XP 操作系统的基本操作和 DOS 命 令的使用,通过编译工具学会基本的编译、连接操作。
本次实验中使用到的 DOS 命令与工具:
操作系统:WINDOWS XP
C 语言编译工具:DEV-CPP
DOS 命令:
学院名称
现代科技学院
进程控制块结构如表 2-1 所示:
表 2-1
PCB
进程标识符
链指针
优先数/轮转时间片数
占用 CPU 时间片数
进程所需时间片数
进程状态
进程控制块链结构如图 2-1 所示:
RUN
HEAD
1
3
┇
┇
R
W
TAIL
5
2
0
┇
┇
W
W
图 2-1 进程控制块链结构
其中:RUN—当前运行进程指针; HEAD—进程就绪链链首指针; TAIL—进程就绪链链尾指针。
");
for (k=1;k<furthest+1;k++)
printf("%5d",prochain[k].cputime);
printf("\n");
printf("alltime
");
for (k=1;k<furthest+1;k++)
printf("%5d",prochain[k].alltime);
prochain[i].state='W';
prochain[i].next=(i+1)%(furthest+1);}
head=1; tail=furthest; prochain[furthest].next=0; } run=head; prochain[run].state='R'; head=prochain[head].next; prochain[run].next=0; print(); }
head= prochain[i].id;}
}
}
else
{ for (i=1;i<furthest+1;i++)
{ prochain[i].id=i;
prochain[i].priority=(rand()+1)%3+1;
prochain[i].cputime=0;
prochain[i].alltime=(rand()+1)%7;
insert(int q)
/*INSERT A PROCESS*/
{
int p,s;
p=head;
s=prochain[head].next;
while((prochain[q].priority<prochain[s].priority)&&(s!=0))
{ p=s;
s=prochain[s].next;}
2. 熟悉系统实用程序的调用方法和各种系统调用模块的功能和作用
二、内容
(一)实验步骤 在某种操作系统的环境下建立、修改、运行、打印源程序和结果,最后撤消一个完整的程序。 提示:可按下述步骤进行 1. 编写一个完整的源程序,通过编辑命令送入机器,建立源程序文件; 2. 编译该源文件,建立相应的目标文件; 3. 编译有错时,再用编辑命令修改源文件,消除全部词法和语法错误; 4. 连接目标文件,形成可执行文件; 5. 执行该文件,得到结果; 6. 打印输出源程序和运行结果; 7. 撤消本次实验中形成的所有文件。 (二)实验内容 1. 利用 DOS 命令建立一个 1.cpp 文件,程序清单如下: /*--------->1.cpp */ #include <stdio.h> #include <conio.h> int main() {