实时操作系统实验报告2
- 格式:doc
- 大小:61.50 KB
- 文档页数:13
操作系统实验实验报告一、实验目的操作系统是计算机系统中最为关键的核心软件,它管理着计算机的硬件资源和软件资源,为用户提供了一个方便、高效、稳定的工作环境。
本次操作系统实验的目的在于通过实际操作和实践,深入理解操作系统的基本原理和核心概念,掌握操作系统的基本功能和操作方法,提高对操作系统的认识和应用能力。
二、实验环境本次实验使用的操作系统为 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。
三、实验内容及步骤(一)进程创建实验1、首先,创建一个新的 C++项目。
2、在项目中,使用 Windows API 函数`CreateProcess`来创建一个新的进程。
3、为新进程指定可执行文件的路径、命令行参数、进程属性等。
4、编写代码来等待新进程的结束,并获取其退出代码。
(二)进程同步实验1、设计一个生产者消费者问题的模型。
2、使用信号量来实现生产者和消费者进程之间的同步。
3、生产者进程不断生成数据并放入共享缓冲区,当缓冲区已满时等待。
4、消费者进程从共享缓冲区中取出数据进行处理,当缓冲区为空时等待。
(三)进程通信实验1、选择使用管道来实现进程之间的通信。
2、创建一个匿名管道,父进程和子进程分别读写管道的两端。
3、父进程向管道写入数据,子进程从管道读取数据并进行处理。
四、实验结果及分析(一)进程创建实验结果成功创建了新的进程,并能够获取到其退出代码。
通过观察进程的创建和执行过程,加深了对进程概念的理解。
(二)进程同步实验结果通过使用信号量,生产者和消费者进程能够正确地进行同步,避免了缓冲区的溢出和数据的丢失。
分析结果表明,信号量机制有效地解决了进程之间的资源竞争和协调问题。
(三)进程通信实验结果通过管道实现了父进程和子进程之间的数据通信。
数据能够准确地在进程之间传递,验证了管道通信的有效性。
五、遇到的问题及解决方法(一)在进程创建实验中,遇到了参数设置不正确导致进程创建失败的问题。
通过仔细查阅文档和调试,最终正确设置了参数,成功创建了进程。
(二)在进程同步实验中,出现了信号量使用不当导致死锁的情况。
操作系统lab2实验报告实验目的:本实验的目的是通过设计和实现一个简单的操作系统内核,加深对操作系统基本概念和原理的理解。
具体实验内容包括进程管理、内存管理和文件系统的设计与实现。
实验环境:1.操作系统:Linux2.编程语言:C语言一、实验背景1.1 操作系统简介操作系统是计算机系统中的一个重要组成部分,负责管理和控制计算机的各种资源,提供用户和应用程序的接口,以及协调和调度各种任务的执行。
1.2 实验目标本实验的主要目标是设计和实现一个简单的操作系统内核,包括进程管理、内存管理和文件系统等功能。
二、实验内容2.1 进程管理①进程创建描述进程创建的过程和相关数据结构,包括创建新进程的系统调用、进程控制块等。
②进程调度描述进程调度的算法和实现方式,包括进程调度队列、调度算法等。
③进程同步与通信描述进程同步和通信的机制和方法,包括信号量、互斥锁、条件变量等。
2.2 内存管理①内存分配描述内存分配的算法和实现方式,包括连续内存分配、非连续内存分配等。
②页面置换描述页面置换的算法和实现方式,包括最优页面置换算法、先进先出页面置换算法等。
2.3 文件系统①文件操作描述文件操作的系统调用和相关数据结构,包括文件打开、读写、关闭等。
②文件系统结构描述文件系统的组织结构和实现方式,包括超级块、索引节点、块位图等。
三、实验步骤3.1 环境搭建搭建实验环境,包括安装Linux操作系统、编译器等。
3.2 进程管理实现根据设计要求,实现进程创建、调度、同步与通信等功能。
3.3 内存管理实现根据设计要求,实现内存分配、页面置换等功能。
3.4 文件系统实现根据设计要求,实现文件操作和文件系统结构。
3.5 测试与调试编写测试用例,对实现的操作系统内核进行测试和调试,并记录实验结果。
四、实验结果分析分析测试结果,评估实验过程中遇到的问题和解决方法,总结操作系统内核的性能和功能特点。
五、实验总结对实验过程中的收获和经验进行总结,提出改进和优化的建议。
操作系统实验报告实验二时间片轮转进程调度算法学号:班级:姓名:【实验题目】: 时间片轮转进程调度算法【实验目的】通过这次实验, 加深对进程概念的理解, 进一步掌握进程状态的转变、进程调度的策略与对系统性能的评价方法。
【实验内容】问题描述:设计程序模拟进程的时间片轮转RR 调度过程。
假设有n 个进程分别在T1, … ,Tn 时刻到达系统, 它们需要的服务时间分别为S1, … ,Sn 。
分别利用不同的时间片大小q, 采用时间片轮转RR 进程调度算法进行调度, 计算每个进程的完成时间, 周转时间和带权周转时间, 并且统计n 个进程的平均周转时间和平均带权周转时间。
程序要求如下:1)进程个数n ;每个进程的到达时间T 1, … ,T n 和服务时间S 1, … ,S n ;输入时间片大小q 。
2)要求时间片轮转法RR 调度进程运行, 计算每个进程的周转时间, 带权周转时间, 并且计算所有进程的平均周转时间, 带权平均周转时间;3)输出: 要求模拟整个调度过程, 输出每个时刻的进程运行状态, 如“时刻3: 进程B开始运行”等等;4)输出:要求输出计算出来的每个进程的周转时间, 带权周转时间, 所有进程的平均周转时间, 带权平均周转时间。
实现提示:用C++语言实现提示:1)程序中进程调度时间变量描述如下:int ArrivalTime[100];int ServiceTime[100];int PServiceTime[100];int FinishTime[100];int WholeTime[100];double WeightWholeTime[100];double AverageWT,AverageWWT;bool Finished[100];➢2)进程调度的实现过程如下:➢变量初始化;➢接收用户输入n, T1, … ,Tn, S1, … ,Sn;时间片大小q;➢按照时间片轮转RR算法进行进程调度, 计算进程的完成时间、周转时间和带权周转时间;➢计算所有进程的平均周转时间和平均带权周转时间;➢按格式输出调度结果。
计算机实验报告(2)操作系统部分一、基本要求和内容1.了解操作系统的基本功能.2.认识WINDOWS桌面的各部分组成,掌握基本的桌面操作.3.掌握各种基本操作对象的操作方法.4.学会使用WINDOWS帮助.5.了解基本的DOS命令和基本的命令行操作方法.6.熟练掌握文件操作方法.7.掌握对图标的操作方法(移动/拖曳/单击/双击/右击等等).8.熟悉资源管理器窗口和”我的电脑”(“计算机”)窗口.9.掌握启动控制面板的方法,了解控制面板的主要功能,掌握使用控制面板对软硬件进行设置的方法。
10.掌握“运行”对话框的使用方法。
11.了解“任务管理器”的简单使用方法。
12.熟悉“画图”“记事本”“计算器”“写字板”等常用应用程序。
13.开始POWERPOINT的基本使用.二、通过上机实验解决下列问题1. CTRL+ALT+DEL 组合键的功能是:打开【任务管理器】窗口2.全角和半角的区别是:半角是一个字符,全角是两个字符3. CTRL+A组合键的功能是:全部选中CTRL+C组合键的功能是:复制CTRL+V组合键的功能是:粘贴CTRL+X组合键的功能是:剪切CTRL+Z组合键的功能是: 撤销ALT+PRINTSCREEN组合键的功能是:复制当前窗口、对话框或其他对象到剪贴板中任务栏隐藏时通过什么组合键可以看到任务栏:Ctrl+Alt+Del进行窗口切换的组合键是:ALT+Tab4.“画图”应用程序默认保存文件类型是:*.png“记事本”应用程序默认保存文件类型是: *.txt.DOC是什么文件类型Word文档.EXE是什么文件类型可执行文件(程序文件)5.鼠标的基本操作方法包括:指向、单击、双击和拖动鼠标指针附近有漏沙钟表示当前的状态是: 沙漏是等待,因为程序先是从硬盘上读取,然后再到内存,芯片在其期间进行运算,再没真正的打开程序时,系统认为它没正真的启动6.资源管理器左下角窗格(即”文件夹”窗口)显示的是:系统中的所有资源以分层树型的结构显示出来7.一般情况下,对文件进行重命名时,不应该修改文件的扩展名,因为: 如果修改了后缀名则会导致文件属性更改,文件无法打开8.文件的属性主要包括哪些:“只读”、“存档”、“隐藏”9.选择多个连续的文件可以采用哪些方法:使用鼠标先选定第一个文件或文件夹,然后按住Shift键,用鼠标单击最后一个文件或文件夹,这样在第一个对象和最后一个对象之间的所有文件或文件夹将全部被选中,包括第一个和最后一个文件或文件夹。
《操作系统》实验二一、实验目的本实验旨在加深对操作系统基本概念和原理的理解,通过实际操作,提高对操作系统设计和实现的认知。
通过实验二,我们将重点掌握进程管理、线程调度、内存管理和文件系统的基本原理和实现方法。
二、实验内容1、进程管理a.实现进程创建、撤销、阻塞、唤醒等基本操作。
b.设计一个简单的进程调度算法,如轮转法或优先级调度法。
c.实现进程间的通信机制,如共享内存或消息队列。
2、线程调度a.实现线程的创建、撤销和调度。
b.实现一个简单的线程调度算法,如协同多任务(cooperative multitasking)。
3、内存管理a.设计一个简单的分页内存管理系统。
b.实现内存的分配和回收。
c.实现一个简单的内存保护机制。
4、文件系统a.设计一个简单的文件系统,包括文件的创建、读取、写入和删除。
b.实现文件的存储和检索。
c.实现文件的备份和恢复。
三、实验步骤1、进程管理a.首先,设计一个进程类,包含进程的基本属性(如进程ID、状态、优先级等)和操作方法(如创建、撤销、阻塞、唤醒等)。
b.然后,实现一个进程调度器,根据不同的调度算法对进程进行调度。
可以使用模拟的方法,不需要真实的硬件环境。
c.最后,实现进程间的通信机制,可以通过模拟共享内存或消息队列来实现。
2、线程调度a.首先,设计一个线程类,包含线程的基本属性(如线程ID、状态等)和操作方法(如创建、撤销等)。
b.然后,实现一个线程调度器,根据不同的调度算法对线程进行调度。
同样可以使用模拟的方法。
3、内存管理a.首先,设计一个内存页框类,包含页框的基本属性(如页框号、状态等)和操作方法(如分配、回收等)。
b.然后,实现一个内存管理器,根据不同的内存保护机制对内存进行保护。
可以使用模拟的方法。
4、文件系统a.首先,设计一个文件类,包含文件的基本属性(如文件名、大小等)和操作方法(如创建、读取、写入、删除等)。
b.然后,实现一个文件系统管理器,包括文件的存储和检索功能。
实时操作系统实验报告专业:11通信工程学号:20110306136姓名: 王帅指导老师:申屠浩实验二 任务管理实验实验目的:1、理解任务管理的基本原理,了解任务的各个基本状态及其变迁过程;2、掌握µC/OS -II 中任务管理的基本方法(挂起、解挂);3、熟练使用µC/OS -II 任务管理的基本系统调用。
实验要求与思路:为了体现任务的各个基本状态及其变迁过程,本实验设计了T0、T1和T3三个任务,它们交替运行,如图2-2所示。
T0 T1 T2 T3 T4 T5 T6 T7 T8图2-2注意:图中的栅格并不代表严格的时间刻度,而仅仅表现各任务启动和执行的相对先后关系。
说明:在系统完成初始化后,可以先创建并启动优先级最低的TaskStart ,由它创建其他3个应用任务T0、T1和T2,之后整个系T0T2T1T0 T1 T2 T1T0统的运行流程如下:1)优先级最高的T0开始执行,之后T0挂起自己;2)然后系统调度选中T1开始执行,之后T1挂起自己;3)接着系统调度选中T2,之后唤醒T0;4)如此循环实现提示:在启动任务中创建三个任务后,应挂起任务1和任务2。
在每个任务恢复其它任务并挂起自己之前,显示当前三个任务的状态,并延时1秒。
函数说明:void PC_GetDateTime (char *s);获取"YYYY-MM-DD HH:MM:SS"格式的时间字串存放在字符串s中,s的长度最少为21字节。
void PC_DispStr (INT8U x, INT8U y, INT8U *s, INT8U color);在y行x列以color颜色值显示字串s,注意color由背景色和前景色两种颜色构成。
INT8U OSTimeDlyHMSM (INT8U hours, INT8U minutes, INT8U seconds, INT16U milli);按时、分、秒、毫秒设置进行延时。
void OSTimeDly (INT16U ticks)按ticks值进行延时,1 ticks一般为10ms。
INT32U OSTimeGet (void)获取从程序开始运行到当前时间,所经过的ticks值。
实验程序:#include "includes.h"#define TASK_STK_SIZE 512OS_STK TaskStk1[TASK_STK_SIZE];OS_STK TaskStk2[TASK_STK_SIZE];OS_STK TaskStk3[TASK_STK_SIZE];OS_STK TaskStartStk[TASK_STK_SIZE];void Task1(void *data);void Task2(void *data);void Task3(void *data); /* Function prototypes of tasks*/void TaskStart(void *data); /* Function prototypes of Startup task */static void TaskStartCreateTasks(void);static void TaskStartDispInit(void);void main (void){PC_DispClrScr(DISP_FGND_WHITE + DISP_BGND_BLACK); /* Clear the screen */OSInit(); /*Initialize uC/OS-II */PC_DOSSaveReturn(); /* Save environment to return to DOS */PC_VectSet(uCOS, OSCtxSw); /* Install uC/OS-II's context switch vector */OSTaskCreate(TaskStart, (void *)0, &TaskStartStk[TASK_STK_SIZE - 1], 4);OSStart(); /* Start multitasking */}void TaskStart (void *pdata){#if OS_CRITICAL_METHOD == 3 /* Allocate storage for CPU status register */OS_CPU_SR cpu_sr;#endifchar s[100];INT16S key;pdata = pdata;TaskStartDispInit(); /* Initialize the display */OS_ENTER_CRITICAL();PC_VectSet(0x08, OSTickISR); /* Install uC/OS-II'sclock tick ISR */PC_SetTickRate(OS_TICKS_PER_SEC); /* Reprogram tick rate */OS_EXIT_CRITICAL();OSStatInit(); /* Initialize uC/OS-II'sstatistics */OSTaskCreate(Task1, (void *)0, &TaskStk1[TASK_STK_SIZE- 1], 1);OSTaskCreate(Task2, (void *)0, &TaskStk2[TASK_STK_SIZE -1], 2);OSTaskCreate(Task3, (void *)0, &TaskStk3[TASK_STK_SIZE -1], 3);OSTaskSuspend(2);/* Prevent compiler warning */OSTaskSuspend(3);for (;;) {if (PC_GetKey(&key) == TRUE) { /* See if keyhas been pressed */if (key == 0x1B) { /* Yes, see if it'sthe ESCAPE key */PC_DOSReturn(); /*Return to DOS */}}OSCtxSwCtr = 0; /* Clear contextswitch counter */OSTimeDly(1);}}static void TaskStartDispInit (void){PC_DispStr( 0, 0, " uC/OS-II,The Real-Time Kernel ",DISP_FGND_WHITE + DISP_BGND_RED + DISP_BLINK);PC_DispStr( 0, 1, " ",DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);PC_DispStr( 0, 2, " ",DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);PC_DispStr( 0, 3, " Time EXAMPLE ",DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);PC_DispStr( 0, 4, " ",DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);PC_DispStr( 0, 5, " ",DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);PC_DispStr( 0, 6, " ",DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);PC_DispStr( 0, 7, " ",DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);PC_DispStr( 0, 8, " ",DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);PC_DispStr( 0, 9, " ",DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);PC_DispStr( 0, 10, " ",DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);PC_DispStr( 0, 11, "",DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);PC_DispStr( 0, 12, " ",DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);PC_DispStr( 0, 13, " ",DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);PC_DispStr( 0, 14, " ",DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);PC_DispStr( 0, 15, " ",DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);PC_DispStr( 0, 16, " ",DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);PC_DispStr( 0, 17, " ",DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);PC_DispStr( 0, 18, " ",DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);PC_DispStr( 0, 19, " ",DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);PC_DispStr( 0, 20, " ",DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);PC_DispStr( 0, 21, " ",DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);PC_DispStr( 0, 22, " <-PRESS'ESC' TO QUIT-> ",DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY + DISP_BLINK);}void Task1 (void *pdata){char ss[30];INT8U err;pdata=pdata;for (;;) {PC_DispStr(35, 10, "Task1 running", DISP_FGND_BLACK +DISP_BGND_LIGHT_GRAY);PC_DispStr(35, 11, "Task2 Suspend ", DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);PC_DispStr(35, 12, "Task3 Suspend ", DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);OSTimeDlyHMSM(0, 0, 1, 0); /* Wait one second */OSTaskResume(2); /* Delay 1 clock tick */OSTaskSuspend(OS_PRIO_SELF);}}void Task2 (void *pdata){char ss[30];INT8U err;pdata=pdata;for (;;) {PC_DispStr(35, 10, "Task1 Suspend ", DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);PC_DispStr(35, 11, "Task2 running ", DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);PC_DispStr(35, 12, "Task3 Suspend ", DISP_FGND_BLACK +DISP_BGND_LIGHT_GRAY);OSTimeDlyHMSM(0, 0, 1, 0); /* Wait one second */ /* Delay 1 clock tick */OSTaskResume(3); /* Delay 1 clock tick */OSTaskSuspend(OS_PRIO_SELF);}}void Task3 (void *pdata){char ss[30];INT8U err;pdata=pdata;for (;;) {PC_DispStr(35, 10, "Task1 Suspend ", DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);PC_DispStr(35, 11, "Task2 Suspend ", DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);PC_DispStr(35, 12, "Task3 running ", DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);OSTimeDlyHMSM(0, 0, 1, 0); /* Wait one second */ /* Delay 1 clock tick */OSTaskResume(1); /* Delay 1 clock tick */OSTaskSuspend(OS_PRIO_SELF);}}实验截图:实验感想通过这次试验我掌握了掌握μC/OS-II 中任务管理的基本方法(挂起、解挂),而且也理解μC/OS-II 中任务的调用方法,根据优先级来进行任务的调度,挂起任务以及恢复任务,也比较深刻的理解到抢占式处理的内涵。