操作系统实验报告模板

合集下载

操作系统实验报告模板

操作系统实验报告模板

操作系统实验报告实验1分析实验结果参照实验指导书回答下面的问题:5:6:从实验中得到了两次不同的结果原因是程序采用了多线程的写法,两个线程同时抢占CPU资源,CPU并发处理该程序。

10:11:CPU并发处理程序第一次先运行func2()中的x=x+2 再输出x=2 接着执行func2()中的y=3,然后执行func1() x=3 y=y+x, 输出y 所以结果为x=2 y=7第二次先运行func1()中的x=4 y=4 再运行func2()中y=3 x=x+2得到x=6 y=315:CPU 并发执行程序使得在完成整个循环之前输出x的值19:通过控制turn变量使得程序先完成func2()的完整循环再完成func1()的完整循环最后得到结果10023:由于信号量s 的出现通过wai(s)和signal(s)语句避免了在未完成循环前推出的情况实验2分析实验结果参照实验指导书回答下面的问题:5:11:发生死锁交换p()函数中wait(e)与wait(s)的顺序之后消费者进入缓冲池后没能够出去,一直占用缓冲池,使得生产者无法进入缓冲池生产.使得进程陷入死锁不剥夺.17:发生死锁:c()函数中wait(n)与wait(s)的顺序后.会导致生产者处于一直生产的状态.当缓冲池满后,生产者在缓冲池中,出不去,消费者也进不了缓冲池.仅使进程处于请求保持状态,还有不剥夺,环路等待状态.实验3(该实验为期中考试项目,按照期中考试要求提交报告)实验4问题1:描述内存控制块结构;描述内存控制块与内存分区和内存块的关系只有当把内存控制块与分区关联起来之后,系统才能对其进行相应的管理和控制。

它才是一个真正的动态内存区。

问题2:应用程序的源代码(请对内存操作给出注释)#include "includes.h"#define TASK_STK_SIZE 512 //任务堆栈长度OS_STK StartTaskStk[TASK_STK_SIZE];OS_STK MyTaskStk[TASK_STK_SIZE];OS_STK YouTaskStk[TASK_STK_SIZE];OS_STK HerTaskStk[TASK_STK_SIZE];INT16S key; //用于退出uCOS_II的键char *s;char *s1="MyTask--ZYS";char *s2="YouTask-ZYS";char *s3="HerTask-ZYS";INT8U err;INT8U y=0; //字符显示位置INT8U Times=0;OS_MEM *IntBuffer; //定义内存控制块指针INT8U IntPart[8][6]; //划分分区及内存块INT8U *IntBlkPtr;OS_MEM_DATA MemInfo;void StartTask(void *pdata);void MyTask(void *pdata);void YouTask(void *pdata);void HerTask(void *pdata);/************************主函数******************************************/void main (void){OSInit(); //初始化uCOS_IIPC_DOSSaveReturn(); //保存Dos环境PC_VectSet(uCOS, OSCtxSw); //安装uCOS_II中断IntBuffer=OSMemCreate(IntPart,8,6,&err);OSTaskCreate(StartTask,(void*)0,&StartTaskStk[TASK_STK_SIZE - 1], 0);OSStart();}/****************************任务StartTask *************************************************/ void StartTask (void *pdata){#if OS_CRITICAL_METHOD == 3OS_CPU_SR cpu_sr;#endifpdata = pdata;OS_ENTER_CRITICAL();PC_VectSet(0x08, OSTickISR);PC_SetTickRate(OS_TICKS_PER_SEC);OS_EXIT_CRITICAL();OSStatInit();OSTaskCreate(MyTask,(void*)0,&MyTaskStk[TASK_STK_SIZE - 1], 3);OSTaskCreate(YouTask,(void*)0,&YouTaskStk[TASK_STK_SIZE - 1], 4);OSTaskCreate(HerTask,(void*)0,&HerTaskStk[TASK_STK_SIZE - 1], 5);// 按ESC 退出ucosfor (;;){if (PC_GetKey(&key) == TRUE) {if (key == 0x1B) {PC_DOSReturn();}}OSTimeDlyHMSM(0, 0, 3, 0);}}/****************************任务MyTask *************************************************/void MyTask(void *pdata){#if OS_CRITICAL_METHOD==3OS_CPU_SR cpu_sr;#endifpdata=pdata;for(;;){PC_DispStr(10,++y,s1,DISP_BGND_BLACK+DISP_FGND_WHITE);IntBlkPtr=OSMemGet(IntBuffer,&err); //请求内存块,分区指针,错误信息OSMemQuery(IntBuffer,&MemInfo); //查询内存控制块信息,待查询内存控制块指针sprintf(s,"%0x",MemInfo.OSFreeList); // 头指针PC_DispStr(30,y,s,DISP_BGND_BLACK+DISP_FGND_WHITE);sprintf(s,"%d",MemInfo.OSNUsed); //显示已用数目PC_DispStr(40,y,s,DISP_BGND_BLACK+DISP_FGND_WHITE);if(Times>4){OSMemPut(IntBuffer,IntBlkPtr); //释放内存块,}Times++;OSTimeDlyHMSM(0,0,1,0); //等待1s}}/**********************************任务YouTask*************************************/void YouTask(void *pdata){#if OS_CRITICAL_METHOD==3OS_CPU_SR cpu_sr;#endifpdata=pdata;for(;;){PC_DispStr(10,++y,s2,DISP_BGND_BLACK+DISP_FGND_YELLOW);IntBlkPtr=OSMemGet(IntBuffer,&err); //请求内存块,分区指针,错误信息OSMemQuery(IntBuffer,&MemInfo); //查询内存控制块信息,待查询内存控制块指针sprintf(s,"%0x",MemInfo.OSFreeList); // 头指针PC_DispStr(30,y,s,DISP_BGND_BLACK+DISP_FGND_YELLOW);sprintf(s,"%d",MemInfo.OSNUsed); //显示已用数目PC_DispStr(40,y,s,DISP_BGND_BLACK+DISP_FGND_YELLOW);OSMemPut(IntBuffer,IntBlkPtr); //释放内存块,OSTimeDlyHMSM(0,0,2,0); //等待2s}}/**************************任务HerTask******************************/void HerTask(void *pdata){#if OS_CRITICAL_METHOD==3OS_CPU_SR cpu_sr;#endifpdata=pdata;for(;;){PC_DispStr(10,++y,s3,DISP_BGND_BLACK+DISP_FGND_RED);IntBlkPtr=OSMemGet(IntBuffer,&err); //请求内存块,分区指针,错误信息OSMemQuery(IntBuffer,&MemInfo); //查询内存控制块信息,待查询内存控制块指针sprintf(s,"%0x",MemInfo.OSFreeList); // 头指针PC_DispStr(30,y,s,DISP_BGND_BLACK+DISP_FGND_RED);sprintf(s,"%d",MemInfo.OSNUsed); //显示已用数目PC_DispStr(40,y,s,DISP_BGND_BLACK+DISP_FGND_RED);OSMemPut(IntBuffer,IntBlkPtr); //释放内存块,OSTimeDlyHMSM(0,0,1,0); //等待1s}}问题3:上述程序输出结果的截屏画面实验5FCFS磁盘调度算法的实现#include<stdio.h>#include<math.h>int i,j,t;int point=100,distance=0;float sum=0,average=0;int array[9]={55,58,39,18,90,160,150,38,184};int fcfs(int array[9]){int count=0;printf("从100号磁道开始");printf("\n");printf("被访问的下一个磁道号移动磁道数");printf("\n");for(i=0;i<9;i++){count = count+1;printf(" %d ",array[i]);distance= fabs(point-array[i]);point=array[i];sum=sum+distance;printf(" %d ",distance);printf("\n");}average=sum/count;printf("sum= %2f",sum);printf("\n");printf("average= %f",average);printf("\n");}void main(){fcfs(array);}。

操作系统实验实验报告

操作系统实验实验报告

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

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

二、实验环境本次实验使用的操作系统为 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 等进行文件的创建、读取和写入操作。

操作系统安全实验1实验报告

操作系统安全实验1实验报告

操作系统安全实验1实验报告一、实验目的本次操作系统安全实验的主要目的是让我们深入了解操作系统的安全机制,通过实际操作和观察,掌握一些常见的操作系统安全配置和防护方法,提高对操作系统安全的认识和应对能力。

二、实验环境本次实验使用的操作系统为Windows 10 和Linux(Ubuntu 2004),实验设备为个人计算机。

三、实验内容与步骤(一)Windows 10 操作系统安全配置1、账户管理创建新用户账户,并设置不同的权限级别,如管理员、标准用户等。

更改账户密码策略,包括密码长度、复杂性要求、密码有效期等。

启用账户锁定策略,设置锁定阈值和锁定时间,以防止暴力破解密码。

2、防火墙配置打开 Windows 防火墙,并设置入站和出站规则。

允许或阻止特定的应用程序通过防火墙进行网络通信。

3、系统更新与补丁管理检查系统更新,安装最新的 Windows 安全补丁和功能更新。

配置自动更新选项,确保系统能够及时获取并安装更新。

4、恶意软件防护安装并启用 Windows Defender 防病毒软件。

进行全盘扫描,检测和清除可能存在的恶意软件。

(二)Linux(Ubuntu 2004)操作系统安全配置1、用户和组管理创建新用户和组,并设置相应的权限和归属。

修改用户密码策略,如密码强度要求等。

2、文件系统权限管理了解文件和目录的权限设置,如读、写、执行权限。

设置特定文件和目录的权限,限制普通用户的访问。

3、 SSH 服务安全配置安装和配置 SSH 服务。

更改 SSH 服务的默认端口号,增强安全性。

禁止 root 用户通过 SSH 登录。

4、防火墙配置(UFW)启用 UFW 防火墙。

添加允许或拒绝的规则,控制网络访问。

四、实验结果与分析(一)Windows 10 操作系统1、账户管理成功创建了具有不同权限的用户账户,并能够根据需求灵活调整权限设置。

严格的密码策略有效地增加了密码的安全性,减少了被破解的风险。

账户锁定策略在一定程度上能够阻止暴力破解攻击。

(完整word版)操作系统实验报告.实验一 WINDOWS进程初识

(完整word版)操作系统实验报告.实验一 WINDOWS进程初识

操作系统教程实验指导书实验一WINDOWS进程初识1、实验目的(1)学会使用VC编写基本的Win32 Consol Application(控制台应用程序)。

(2)掌握WINDOWS API的使用方法。

(3)编写测试程序,理解用户态运行和核心态运行。

2、实验内容和步骤(1)编写基本的Win32 Consol Application步骤1:登录进入Windows,启动VC++ 6.0。

步骤2:在“FILE”菜单中单击“NEW”子菜单,在“projects”选项卡中选择“Win32 Consol Application”,然后在“Project name”处输入工程名,在“Location”处输入工程目录。

创建一个新的控制台应用程序工程。

步骤3:在“FILE”菜单中单击“NEW”子菜单,在“Files”选项卡中选择“C++ Source File”, 然后在“File”处输入C/C++源程序的文件名。

步骤4:将清单1-1所示的程序清单复制到新创建的C/C++源程序中。

编译成可执行文件。

步骤5:在“开始”菜单中单击“程序”-“附件”-“命令提示符”命令,进入Windows “命令提示符”窗口,然后进入工程目录中的debug子目录,执行编译好的可执行程序:E:\课程\os课\os实验\程序\os11\debug>hello.exe运行结果 (如果运行不成功,则可能的原因是什么?) :答:运行成功,结果:(2)计算进程在核心态运行和用户态运行的时间步骤1:按照(1)中的步骤创建一个新的“Win32 Consol Application”工程,然后将清单1-2中的程序拷贝过来,编译成可执行文件。

步骤2:在创建一个新的“Win32 Consol Application”工程,程序的参考程序如清单1-3所示,编译成可执行文件并执行。

步骤3:在“命令提示符”窗口中运行步骤1中生成的可执行文件,测试步骤2中可执行文件在核心态运行和用户态运行的时间。

操作系统实验报告

操作系统实验报告

篇一:操作系统实验报告完全版《计算机操作系统》实验报告班级:姓名:学号:实验一进程控制与描述一、实验目的通过对windows 2000编程,进一步熟悉操作系统的基本概念,较好地理解windows 2000的结构。

通过创建进程、观察正在运行的进程和终止进程的程序设计和调试操作,进一步熟悉操作系统的进程概念,理解windows 2000中进程的“一生”。

二、实验环境硬件环境:计算机一台,局域网环境;软件环境:windows 2000 professional、visual c++6.0企业版。

三、实验内容和步骤第一部分:程序1-1windows 2000 的gui 应用程序windows 2000 professional下的gui应用程序,使用visual c++编译器创建一个gui应用程序,代码中包括了winmain()方法,该方法gui类型的应用程序的标准入口点。

:: messagebox( null, “hello, windows 2000” , “greetings”,mb_ok) ;/* hinstance */ , /* hprevinstance */, /* lpcmdline */, /* ncmdshow */ )return(0) ; }在程序1-1的gui应用程序中,首先需要windows.h头文件,以便获得传送给winmain() 和messagebox() api函数的数据类型定义。

接着的pragma指令指示编译器/连接器找到user32.lib库文件并将其与产生的exe文件连接起来。

这样就可以运行简单的命令行命令cl msgbox.cpp来创建这一应用程序,如果没有pragma指令,则messagebox() api函数就成为未定义的了。

这一指令是visual studio c++ 编译器特有的。

接下来是winmain() 方法。

其中有四个由实际的低级入口点传递来的参数。

操作系统实验报告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、编译并运行程序,通过任务管理器观察进程的运行状态和资源占用情况。

《操作系统》实验报告

《操作系统》实验报告

《操作系统》实验报告一、实验目的操作系统是计算机系统中最为关键的组成部分之一,本次实验的主要目的是深入理解操作系统的基本原理和功能,通过实际操作和观察,熟悉操作系统的核心概念,包括进程管理、内存管理、文件系统和设备管理等,提高对操作系统的实际应用能力和问题解决能力。

二、实验环境本次实验在以下环境中进行:操作系统: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. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
{
strcpy(fname,"/0");
type=NULL;
size=0;
fatherBlockNum=currentBlockNum=0;
}
};
/*常量设置*/
constchar*FilePath="C://myfiles";
constintBlockSize=512;//盘块大小
constintOPEN_MAX=5;//能打开最多的文件数
FILE*fp;//磁盘文件地址
char*BaseAddr;//虚拟磁盘空间基地址
stringcurrentPath="C://";//当前路径
intcurrent=2;//当前目录的盘块号
stringcmd;//输入指令
structDISK*osPoint;//磁盘操作系统指针
charcommand[16];//文件名标识
实验二进程间的同步
【实验目的】
理解进程同步和互斥模型及其应用
【实验软硬件环境】
Linux、Windows98、Windows2000
【实验内容】
利用通信API实现进程之间的同步:
建立司机和售票员进程;
并实现他们间的同步运行。
【实验程序及分析】
程序总体思路:由于本次试验时用PV操作实现的互斥与同步模型,所以先实现P、V操作的函数,然后在主程序中利用PV操作函数实现司机和售票员的同步。司机和售票员分别为父进程和子进程,假设司机停车开门,此时为父进程中运行,然后申请开车,但是此时乘客没上车,所以只能阻塞。此时进入子进程,乘客上车,关门,售票员检票,释放开车,然后死机开车,到站,释放开车门。如此循环。
操作系统上机
实 验 报 告
成绩
教 师:
2012 年 12月 5日
班 级:
学 号:
姓 名:
实验地点:
实验时间:
实验一进程的建立
【实验目的】
创建进程及子进程
在父子进程间实现进程通信
【实验软硬件环境】
Linux、Windows98、Windows2000
【实验内容】
创建进程并显示标识等进程控制块的属性信息;
设计并实现文件系统的描述结构;
显示文件系统中文件的属性;
给出文件系统最基本操作的仿真实现。
【实验程序及分析】
程序中带有详细的解释。
整体编程思路为:首先建立文件系统的基本存储部分,包括结构体变量等等的定义,主要利用数组的存储功能模拟文件系统。除了基本的目录查看,目录创建、删除,文件创建、删除外,我还增加了文件的读写的函数,实现了文件的读出与写入。但由于用的是数组存储,所以有长度限制,具体可参加程序注释。
{
printf("该文件夹下已经有同名的文件夹存在了!\n");
【实验截图】
【实验心得体会】
通过这次上机练习,我熟悉了用c++实现进程的创建,销毁,父子进程间的通讯等一系列课程中需要学习的内容。本来进程的概念在一开始我始终无法清晰地理解,但是通过自己用mfc的方法去实现它后,我开始慢慢地理解操作系统的进程的运作机制。
虽然,我只是实现了一个父子进程的创建和通讯,但是,管中窥豹,我想自己开始明白一个操作系统正是由很多这种进程实现功能的。其中,系统整体的进程调度,管理等等还有很多东西等着我们去进一步学习、理解。
intformat()
{
current=2;
currentPath="C://";//当前路径
osPoint->format();//打开文件列表初始化
deleteopenlist;
openlist=newOPENLIST;
/*-------保存到磁盘上myfiles--------*/
fp=fopen(FilePath,"w+");
fcb[0].currentBlockNum=_CurrentBlockNum;
fcb[0].type=DIRECTORY;//标记目录文件
for(inti=1;i<BlockFcbCount;i++){
fcb[i].fatherBlockNum=_CurrentBlockNum;//标记为子项
fcb[i].type=NULL;//标记为空白项
else
dir=(structdirFile*)(osPoint->data[current-3]);
/*--------为了避免该目录下同名文件夹--------*/
for(i=1;i<BlockFcbCount;i++)
{
if(dir->fcb[i].type==DIRECTORY&&strcmp(dir->fcb[i].fname,sonfname)==0)
#include<stdio.h>
#include<memory.h>
#include<string>
#include<iostream>
usingnamespacestd;
//1代表普通文件2代表目录文件0表示空文件
//基本变量常量定义去
#defineGENERAL1
#defineDIRECTORY2
intmkdir(char*sonfname)
{
//判断是否有重名
//寻找空白子目录项
//寻找空白盘块号
//当前目录下增加该子目录项
//分配子目录盘块,并且初始化
//修改fat表
inti,temp,iFAT;
structdirFile*dir;//当前目录的指针
if(current==2)
dir=&(osPoint->root);
{
intfiles;//当前打开文件数
FCBf[OPEN_MAX];//FCB拷贝
OPENLIST()
{
files=0;
for(inti=0;i<OPEN_MAX;i++){
f[i].fatherBlockNum=-1;//为分配打开
f[i].type=GENERAL;
}
}
};
/*-------------目录文件结构---------------*/
}
}
};
/**********************************************************************/
structDISK
{
intFAT1[BlockCount];//FAT1
intFAT2[BlockCount];//FAT2
structdirFileroot;//根目录
structOPENLIST*openlist;//用户文件列表指针
/*-----------函数事先申明--------------------*/
intmkdir(char*sonfname);
intcreate(char*name);
intlistshow();
intdelfile(char*name);
总之,此次实验不但帮我进一步理解了进程同步和互斥模型,还使我了解Linux系统下的C编程。
实验三文件系统的设计与基本操作的实现
【实验目的】
理解文件系统的组织结构
理解文件系统的描述结构
【实验软硬件环境】
Linux、Windows98、Windows2000
【实验内容】
选择一种操作系统(UNIX),理解其文件系统结构。
//intchangePath(char*sonfname);
intwrite(char*name);
intexit();
intopen(char*file);
intclose(char*file);
intread(char*file);
/*------------初始化-----------------------*/
{
while(1)
{
P(runid);
printf("\n");
printf("汽车启动\n");
printf("汽车到站\n");
V(stopid);
}
}
else
{
while(1)
{
printf("乘务员开车门\n");
printf("乘务员关车门\n");
V(runid);
printf("售票\n");
显示父子进程的通信信息和相应的应答信息。
(进程间通信机制任选)
【实验程序及分析】
编程思路:首先本程序在Linux用C语言完成的,父子进程的创建用fork函数来实现,然后是父子进程间的通信,这里用pipe实现。可以定义chan1[2],chan1[2],chanx[0]表示读,chanx[1]表示写。他们配合使用。
chardata[BlockCount-3][BlockSize];
voidformat()
{
memset(FAT1,0,BlockCount);//FAT1
memset(FAT2,0,BlockCount);//FAT2
FAT1[0]=FAT1[1]=FAT1[2]=-2;//0,1,2盘块号依次代表FAT1,FAT2,根目录区
structdirFile
{
structFCBfcb[BlockFcbCount];
voidinit(int_FatherBlockNum,int_CurrentBlockNum,char*name)//父块号,当前块号,目录名
相关文档
最新文档