操作系统实验报告
- 格式:pdf
- 大小:458.32 KB
- 文档页数:23
实验报告实验课程: 计算机操作系统学生姓名:XXX学号:XXXX专业班级:软件2014年12月25日目录实验一熟悉Windows XP中的进程和线程 (3)实验二进程调度 (7)实验三死锁避免—银行家算法的实现 (16)实验四存储管理 (22)实验一熟悉Windows XP中的进程和线程一、实验名称熟悉Windows XP中的进程和线程二、实验目的1、熟悉Windows中任务管理器的使用。
2、通过任务管理器识别操作系统中的进程和线程的相关信息。
3、掌握利用spy++.exe来察看Windows中各个任务的更详细信息。
三、实验结果分析1、启动操作系统自带的任务管理器:方法:直接按组合键Ctrl+Alt+Del,或者是在点击任务条上的“开始”“运行”,并输入“taskmgr.exe”。
2、调整任务管理器的“查看”中的相关设置,显示关于进程的以下各项信息,并完成下表:表一:统计进程的各项主要信息3、启动办公软件“Word”,在任务管理器中找到该软件的登记,并将其结束掉。
再从任务管理器中分别找到下列程序:winlogon.exe、lsass.exe、csrss.exe、smss.exe,试着结束它们,观察到的反应是任务管理器无法结束进程,原因是该系统是系统进程。
4、在任务管理器中找到进程“explorer.exe”,将之结束掉,并将桌面上你打开的所有窗口最小化,看看你的计算机系统起来什么样的变化桌面上图标菜单都消失了、得到的结论 explorer.exe是管理桌面图标的文件(说出explorer.exe进程的作用)。
5、运行“spy++.exe”应用软件,点击按钮“”,切换到进程显示栏上,查看进程“explorer.exe”的各项信息,并填写下表:进程:explorer.exe 中的各个线程6、注意某些线程前有“+”,如图所示:,说明二者之间的差异前有“+”其器线程下有窗口。
四、心得体会通过本次实验,我了解到了windows系统中进程的管理与操作,我了解了如何切出任务管理器,任务管理器应用与其他与进程相关的知识,明白了有些系统程序不能够关闭,系统中的进程与线程虽然很多,但是其中有许多关联,只要弄清楚其中的关联那么就能够运用好进程与线程,达到我们的目的。
操作系统接口实验报告一、实验目的本次实验旨在深入理解操作系统接口的概念、功能和使用方法,通过实际操作和编程实践,掌握操作系统提供的接口在程序开发中的应用,提高对操作系统的认知和编程能力。
二、实验环境操作系统:Windows 10开发工具:Visual Studio 2019编程语言:C++三、实验内容1、文件操作接口创建、打开、读取和写入文件文件属性的获取和设置文件的复制、移动和删除2、进程管理接口创建和终止进程获取进程的信息,如进程 ID、内存使用等进程间的通信,如管道、消息队列等3、线程管理接口创建和终止线程线程同步机制,如互斥锁、条件变量等线程的优先级设置和调度4、内存管理接口动态内存分配和释放内存映射文件的使用虚拟内存的操作四、实验步骤1、文件操作接口实验使用`CreateFile` 函数创建或打开一个文件。
通过`ReadFile` 和`WriteFile` 函数进行文件的读写操作。
利用`GetFileAttributes` 函数获取文件属性,并使用`SetFileAttributes` 函数设置文件属性。
运用`CopyFile` 、`MoveFile` 和`DeleteFile` 函数实现文件的复制、移动和删除。
2、进程管理接口实验调用`CreateProcess` 函数创建一个新的进程,并获取进程的 ID 和句柄。
使用`GetProcessMemoryInfo` 函数获取进程的内存使用情况。
通过管道或消息队列实现进程间的通信。
3、线程管理接口实验使用`CreateThread` 函数创建线程,并设置线程的执行函数。
利用互斥锁和条件变量来实现线程间的同步,确保数据的一致性和正确性。
调整线程的优先级,观察线程调度的效果。
4、内存管理接口实验运用`malloc` 和`free` 函数进行动态内存的分配和释放。
使用`CreateFileMapping` 和`MapViewOfFile` 函数实现内存映射文件。
计算机操作系统课程实验报告专业信息管理与信息系统班级 1203601学号 120360117姓名乐云指导教师周学权计算机操作系统课程实验报告专业信息管理与信息系统班级 1203601学号 120360114姓名郭鑫指导教师周学权操作系统实验实验1 使用虚拟机安装系统 4学时【实验目的】1.了解虚拟机软件的使用。
2.了解使用虚拟机安装Windows及Ubuntu操作系统。
【实验内容】1. 安装虚拟机软件VirtualBox。
2. 配置VirtualBox环境安装WindowsXP,并在虚拟机中启动windowsXP。
3. 配置VirtualBox环境安装Ubuntu 10.10,并在虚拟机中启动Ubuntu。
【实验环境】VirtualBox4.0Windows XPUbuntu 8.04【实验过程】一、创建虚拟机首先运行VirtualBox,单击左上角的“新建”。
单击下一步。
出现如下图的界面,在名称后输入自己起的名字,如test选择自己想要安装的系统类型和版本,本次试验是安装windows xp系统设置完成后,单击下一步。
接下来是设置虚拟机的内存大小,本次实验操作的计算机内存为4GB,所以我选择分配给我的虚拟机的内存为512MB,然后单击下一步。
接着创建虚拟硬盘,选择创建新的虚拟硬盘,单击下一步。
选择虚拟硬盘的类型,默认选择了VDI类型,单击下一步。
接下来选择为动态扩展类型,因为计算机的存储空间不大。
单击下一步。
动态扩展:如果你为你的虚拟磁盘分配的是10G空间,虚拟磁盘占用真实磁盘空间的范围就为0~10G。
固定大小:如果你为你的虚拟磁盘分配的是10G空间,虚拟磁盘占用真实磁盘空间永远不是10G,不管虚拟磁盘空间是否被全部使用。
选择虚拟机在本地磁盘中的位置和大小,单击下一步。
确认虚拟机的详细情况,点击下一步。
这时我们已经成功的创建了一个虚拟机了,接下来我们要开始配置这个虚拟机安装操作系统选择刚才创建的虚拟机,然后单击上方的“开始”弹出了首次运行向导,单击下一步。
华北电力大学实验报告||实验名称操作系统实验课程名称操作系统综合实验||专业班级:学生姓名:学号:成绩:指导教师:实验日期:华北电力大学实验报告工具包集合。
EOS SDK文件夹主要包括INC头文件、LIB文件夹导入库文件和BIN文件夹动态链接库,可执行程序,二进制文件。
EOS SDK包含的头文件有:eos.h负责导出API函数声明;eosdef.h负责导出函数类型的定义;error.h 负责导出错误码。
四.实验过程1.新建Windows控制台应用程序生成项目:执行项目:调试项目:2.使用断点终端执行:查看EOS SDK(Software Development Kit)文件夹:修改EOS应用程序项目名称:五.实验心得这次是验证性试验,具体步骤和操作方法都是与实验教程参考书上一致,实验很顺利,实验过程没有遇到困难。
通过这次实验,我掌握了OS Lab启动和退出操作;练习使用OS Lab编写一个Windows控制台应用程序,熟悉OS Lab 的基本使用方法新建项目、生成项目、调试项目等。
第页共页华北电力大学实验报告第页共页华北电力大学实验报告第页共页2. 当loop线程在控制台1中执行,并且在控制台2中执行suspend命令时,为什么控制台1中的loop线程处于就绪状态而不是运行状态?3. 在本实验3.2节中只调试了图5-3中显示的最主要的四种转换过程,对于线程由新建进入就绪状态,或者由任意状态进入结束状态的转换过程还没有调试,请读者找到这两个转换过程执行的源代码,自己练习调试。
4. 总结一下在图5-3中显示的转换过程,哪些需要使用线程控制块中的上下文(将线程控制块中的上下文恢复到处理器中,或者将处理器的状态复制到线程控制块的上下文中),哪些不需要使用,并说明原因。
5. 在本实验3.2节中总结的所有转换过程都是分步骤进行的,为了确保完整性,显然这些转换过程是不应该被打断的,也就是说这些转换过程都是原语操作(参见本书第2.6节)。
哈尔滨工业大学(威海)操作系统实验报告说明:本实验报告实验答案,是本人在上实验时的测试数据,由于操作系统实验中后面实验与当时所做实验的计算机的配置有关,因此本实验报的数据仅供参考。
实验1进程的描述与控制Windows 2000编程(实验估计时间:100分钟)1.1 背景知识Windows 2000 可以识别的应用程序包括控制台应用程序、GUI应用程序和服务应用程序。
控制台应用程序可以创建GUI,GUI应用程序可以作为服务来运行,服务也可以向标准的输出流写入数据。
不同类型应用程序间的惟一重要区别是其启动方法。
Windows 2000是以NT技术构建的,它提供了创建控制台应用程序的能力,使用户可以利用标准的C++工具,如iostream库中的cout和cin对象,来创建小型应用程序。
当系统运行时,Windows 2000的服务通常要向系统用户提供所需功能。
服务应用程序类型需要ServiceMail()函数,由服务控制管理器(SCM)加以调用。
SCM是操作系统的集成部分,负责响应系统启动以开始服务、指导用户控制或从另一个服务中来的请求。
其本身负责使应用程序的行为像一个服务,通常,服务登录到特殊的LocalSystem账号下,此账号具有与开发人员创建的服务不同的权限。
当C++编译器创建可执行程序时,编译器将源代码编译成OBJ文件,然后将其与标准库相链接。
产生的EXE文件是装载器指令、机器指令和应用程序的数据的集合。
装载器指令告诉系统从哪里装载机器代码。
另一个装载器指令告诉系统从哪里开始执行进程的主线程。
在进行某些设置后,进入开发者提供的main()、Servicemain()或WinMain()函数的低级入口点。
机器代码中包括控制逻辑,它所做的事包括跳转到Windows API函数,进行计算或向磁盘写入数据等。
Windows允许开发人员将大型应用程序分为较小的、互相有关系的服务模块,即动态链接库(DLL)代码块,在其中包含应用程序所使用的机器代码和应用程序的数据。
windows操作实验报告一、实验目标通过本实验掌握是用硬件厂商提供的驱动程序,或从网络上下载驱动程序压缩包各类硬件设备的驱动程序。
二、实验内容练习使用硬件厂商提供的驱动程序或从网络上下载在驱动程序压缩包。
三、知识准备1、驱动程序概述驱动程序是对基本系统功能不能支持的各种硬件设备进行解释,是计算机能识别这些硬件设备,从而保证它们的正常运行。
2、什么情况下需要安装设备驱动程序在安装微机系统时,硬件设备虽然已经安装连接好了,但却无法正常使用,这时就需要安装厂商提供的驱动程序了。
3、安装驱动程序的原则4、常见驱动程序安装方式四、操作步骤1、利用驱动盘安装程序(1)找到硬件安装向导,选择安装方式(2)、如果操作系统没有支持这个硬件的驱动的话,那么如图4,就无法完成驱动程序的安装。
如果操作系统包含了支持这个硬件的驱动程序的话,如图5,那么系统将自动为这个硬件安装驱动。
2、安装intel芯片组主板的驱动程序(1)将购买的主板时附带的驱动光盘放入光驱中,程序自动运行,出现安装向导,在主菜单界面单击“intelchipsetsoftwareinstallationutility”选项,进入安装向导。
(2)单击“下一步”按钮,出现许可协议,单击“是”。
(3)浏览自述文件,单击“下一步”,程序开始复制文件。
(4)复制文件完成后,单击“完成”按钮,程序重启计算机,完成安装工作。
五、实验结论通过实验我学会了硬件厂商提供的驱动程序或从网络上下载在驱动程序压缩包。
一、实验任务:通过学习本次实验了解系统备份的重要性,掌握使用ghost 软件实现系统数据备份和还原的方法。
二、实验内容:练习使用ghost软件实现系统备份和还原以及硬盘的复制。
三、实验要点:通过学习了解系统数据的重要性,熟练掌握利用软件对系统进行备份、还原及备份。
四、知识准备:1、系统的备份和还原2、了解ghost软件的概述3、了解什么情况下应该备份和还原系统。
4、掌握ghost的各种界面。
计算机操作系统实验报告一、实验目的本次实验旨在深入了解计算机操作系统的基本原理和功能,通过实际操作和观察,掌握操作系统的进程管理、内存管理、文件系统管理等核心内容,提高对计算机系统的整体认识和实践能力。
二、实验环境操作系统:Windows 10开发工具:Visual Studio 2019编程语言:C++三、实验内容与步骤(一)进程管理实验1、创建进程使用 C++中的`CreateProcess`函数创建一个新的进程。
在代码中指定要执行的程序路径和相关参数,并观察新进程的创建和运行情况。
```cppinclude <windowsh>include <iostream>int main(){STARTUPINFO si;PROCESS_INFORMATION pi;ZeroMemory(&si, sizeof(si));sicb = sizeof(si);ZeroMemory(&pi, sizeof(pi));//要执行的程序路径LPCWSTR path = L"C:\\Windows\\System32\\notepadexe";if (!CreateProcess(path, NULL, NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi)){std::cout <<"CreateProcess failed Error code: "<<GetLastError()<< std::endl;return 1;}//等待进程结束WaitForSingleObject(pihProcess, INFINITE);CloseHandle(pihProcess);CloseHandle(pihThread);}```2、进程同步与互斥通过编写代码实现生产者消费者问题,使用信号量来实现进程之间的同步与互斥。
```cppinclude <windowsh>include <iostream>include <queue>const int BUFFER_SIZE = 5;std::queue<int> buffer;HANDLE fullSemaphore;HANDLE emptySemaphore;HANDLE mutex;DWORD WINAPI Producer(LPVOID lpParam) {int item = 0;while (true) {WaitForSingleObject(emptySemaphore, INFINITE);WaitForSingleObject(mutex, INFINITE);if (buffersize()< BUFFER_SIZE) {bufferpush(item);std::cout <<"Producer produced: "<< item << std::endl;}ReleaseMutex(mutex);ReleaseSemaphore(fullSemaphore, 1, NULL);}return 0;}DWORD WINAPI Consumer(LPVOID lpParam) {int item = 0;while (true) {WaitForSingleObject(fullSemaphore, INFINITE);WaitForSingleObject(mutex, INFINITE);if (!bufferempty()){item = bufferfront();bufferpop();std::cout <<"Consumer consumed: "<< item << std::endl;}ReleaseMutex(mutex);ReleaseSemaphore(emptySemaphore, 1, NULL);}return 0;}int main(){fullSemaphore = CreateSemaphore(NULL, 0, BUFFER_SIZE, NULL);emptySemaphore = CreateSemaphore(NULL, BUFFER_SIZE, BUFFER_SIZE, NULL);mutex = CreateMutex(NULL, FALSE, NULL);HANDLE hProducerThread = CreateThread(NULL, 0, Producer, NULL, 0, NULL);HANDLE hConsumerThread = CreateThread(NULL, 0, Consumer, NULL, 0, NULL);WaitForSingleObject(hProducerThread, INFINITE);WaitForSingleObject(hConsumerThread, INFINITE);CloseHandle(fullSemaphore);CloseHandle(emptySemaphore);CloseHandle(mutex);CloseHandle(hProducerThread);CloseHandle(hConsumerThread);return 0;}```(二)内存管理实验1、内存分配与释放使用 C++中的`new`和`delete`操作符进行内存的动态分配和释放,并观察内存使用情况。
操作系统原理实验报告一、实验目的操作系统是计算机系统中最为关键的软件之一,它负责管理和控制计算机的硬件和软件资源,为用户和应用程序提供一个方便、高效、稳定的运行环境。
本次实验的目的在于通过实际操作和观察,深入理解操作系统的核心原理和关键机制,包括进程管理、内存管理、文件系统管理、设备管理等方面,提高对操作系统的认识和应用能力。
二、实验环境本次实验使用的操作系统为 Windows 10 专业版,开发工具为Visual Studio 2019,编程语言为 C++。
三、实验内容及步骤(一)进程管理实验1、进程创建与终止编写程序,使用系统调用创建一个新的进程,并在新进程中执行特定的任务,如打印一段文本。
观察新进程的创建过程和资源分配情况。
编写程序,实现父进程等待子进程终止,并获取子进程的退出状态。
2、进程调度编写程序,模拟多个进程的并发执行,设置不同的优先级和时间片。
观察进程的调度顺序和执行时间,分析调度算法的效果。
(二)内存管理实验1、内存分配与释放编写程序,使用动态内存分配函数(如 malloc、new 等)申请一定大小的内存空间,并进行读写操作。
观察内存的分配和释放过程,检查是否存在内存泄漏。
2、内存分页与分段了解操作系统的内存分页和分段机制。
编写程序,模拟内存分页和分段的过程,展示地址转换和页面置换算法的效果。
(三)文件系统管理实验1、文件创建与读写编写程序,创建一个新文件,并向文件中写入一定的数据。
读取文件中的数据,并进行验证。
2、文件目录操作编写程序,实现对文件目录的创建、删除、遍历等操作。
观察文件目录的结构和变化。
(四)设备管理实验1、设备驱动程序了解设备驱动程序的基本概念和工作原理。
编写一个简单的设备驱动程序,实现对特定设备的控制和数据传输。
2、设备中断处理模拟设备中断的产生和处理过程。
编写中断处理程序,处理设备中断事件。
四、实验结果与分析(一)进程管理实验结果与分析1、进程创建与终止成功创建了新进程,并在新进程中打印出指定的文本。
四 川 大 学 操作系统课程设计报告
学 院: 软件 学 院 专 业: 软件工程 专 业 年 级: 2007级 组 编 号: 第 14组 组 成 员: XXXXXXXXXXXX XXXXXXXXXXXX XXXXXXXXXXXX
提交时间: 2009年 6月 20 日 指导教师评阅意见: . . .
. .
指导教师评阅成绩:XXX1: XXX1: XXX1: XXX1: XXX1: 实验项目三 实验项目名称:Nachos内存管理模块升级
实验项目目的:
本实验要实现对Nachos内存管理升级,使其能弥补原来Nachos平台一次只能运行一个用户程序,以及用户程序大小必须小于物理内存空间的不足。能够实现多个线程共同在Nachos上运行和“分页式”存储管理机制,并且使程序可用空间不限制大小。即需要改进Nachos的内存分配方式,实现虚拟内存的管理,完善和优化Nachos的内存管理功能,提升整体系能。
参与人员及分工:
XXX 核心代码的编写,错误的改进与实验报告
XXX 程序的测试与程序算法的思路 XXX 查阅资料, 以及程序原理的分析
实验环境:Vmware虚拟机的Linux平台上的Nachos系统
实验内容:
【实验简述】 1. 原Nachos系统描述: 原Nachos系统由于加载程序的时候,在AddrSpace的构造函数中,构造了线程页表,并执行了清零操作。因此,Nachos系统一次只能运行一个线程。并且线程的虚拟地址与物理地址是相等的,并没有完成虚拟地址与物理地址之间的高级映射。并且,在加载用户程序的时候,在Load函数载入一个用户程序的时候,限制了程序大小。因此,Nachos系统只能加载大小小于系统限制的程序。 2. 实验要求 本次实验希望通过对Nachos核心代码的修改来实现一下几个目标: 1. 通过改进Nachos的内存分配方式,使得多个线程可以同时存在于内存之中,这些线程可以按照“优先级”的方式进行调度。
2. 实现“分页式”存储管理机制(基于分页机制的虚拟内存),也就是说不需要实现真正的内存管理,只需要建立一个虚拟页表,当加载用户程序的时候为其分配一个虚拟页号,方便之后的存储管理。
3. (可选)实现缺页中断,即当所需的页不在内存中的时候,可以有一个缺页中断处理程序,当遇到缺页的时候,用户程序停止运行,跳转到中断服务程序,经过处理之后,置换出一个页,将需要的页置换到内存中。
4. (可选)不限制程序的大小,由于现在Nachos中的程序加载要受到系统的限制。因此,本实验希望通过改变底层代码,实现Nachos系统可以加载任意大小的用户程序。
【实验过程】 1. 问题分析 Nachos系统在Machine.h中定义了pageSize = 128,NumPhysPage = 128,而MemorySize = (NumPhysPages*PageSize)=16384 bytes.用来表示对物理内存的分页,并且限制了物理内存的大小。因此,要加载多个线程,必须要有一个虚拟页表来维护多个线程的页表中页的虚拟地址和物理地址的映射操作,并且可以方便之后的缺页中断管理和页的置换。 系统在创建AddrSpace的每个地址空间对象的时候后,都维护了一个页表。这个页表是线程页表也就是用户程序页表,AddrSpace构造的时候,只是简单的将虚拟页表与物理分页一一对应,并且执行了bzero函数,将mainMemory清零。这样的话,Nachos系统便无法同时运行多个互用程序。而要解决这个问题,我们首先需要删除AddrSpace中的维护线程页表以及内存的清零操作。将线程也表的维护转移到load函数中去,而内存的清零操作在~AddrSpace中执行。并且在维护线程页表的时候,不能简单的将虚拟页表与物理分页一一对应,而是要采取一定的转换机制。 要实现缺页中断,则必须有一定的原则来进行页的换入换出操作。在这里,我们采用的是最近使用的原则。在TranslateEntry中增加了一个新的属性recUsed来记录当前页的使用状态,当发生缺页中断的时候进行页的换入换出。首先,系统发送一个缺页中断的报告,然 后用一个for循环找出最近最少使用的页表实体,将实体进行标志,然后换出当前的页表实体记录的内容,返回空闲页号。 总的来说,要解决Nachos系统一次只能运行一个用户程序的问题,系统需要同时维护三类页表:实页页表,虚页页表和用户程序页表。其中实页页表与用户程序页表系统已经自己定义了,因此,我们需要在Mahine.h中定义一个虚页页表来进行管理。 其中整个Nachos系统之维护一个实页页表和虚页页表,它们都占用宿主机的内存。每个执行的用户进程都有一张页表,该页表在其进程控制结构中,同样是占用宿主机的内存。实页页表中的每个页表项对应于一个实页,记录该实页的使用状态。虚页页表中的每个页表项对应于一个虚页,记录虚页的映射信息、使用状态等情况;每个虚页内容或者对应于一个实页内容,或者不在内存里;线程页表中的每一项都对应于一个虚页。系统中的共享层次位于虚页页表和线程页表之间,多个线程页表项可共享同一个虚页,而一个虚页最多只能对应于一个实页。系统页表的总体布局如图 fig3.1所示: fig3.1 2. 具体实现 以下是小组在具体实践该实验的步骤: Step1:在userprog中增加MemManager.h和MemManger.cc两个文件。 根据老师PPT的提示以及小组的思考讨论,我们决定增加一个新的类来专门
… … ……
线程页
线程页
虚页页实页页……
…………进行内存管理,这样可以方便很多操作。以下是MemManger.h的头文件的定义: class MemManeger{ public: MemManeger(TranslationEntry *pt); ~MemManeger(); /* * Assing a physical page */ int assignPage(); /* * Release a physical page */ void Release(int pn); private: TranslationEntry *m_pageTable; }
Step2:在c++example中增加queue.h 和queue.cc。 由于Nachos给我们提供的只有List和Stack结构,并且都不符合我所希望的要求,因此创建了一个新的数据结构来管理后面所要实现的内容。具体的类的定义如下所示: class Queue{ public: Queue(); ~Queue();
void push(int value,SpaceId spId); QueueElement remove(); void empty(); private: QueueElement *first; QueueElement *last; }
Step3:删除AddrSpace中的线程初始化部分(pageTable = new TranslationEntry[NumPhysPages]„„)和内存的清零操作(bzero(kernel->machine->mainMemory, MemorySize))。在AddrSpace构造函数中创建MemManager的对象,并且全局只设置一个MemManager的对象,改对象用来管理内存。
Step4:实现创建虚拟页表和增加维护空闲页表等操作,用来为实现多道系统做准备。 ① 在Mahine中创建一个全局变量的虚页页表VirPageTable,此表用来记录全局页表。 ② 修改Machine的构造函数,初始化pageTable和virPageTable,具体的函数实现如下所示: Machine::Machine(bool debug) { int i; pageTableSize = NumPhysPages; virtPTSize = NumPhysPages*2; for (i = 0; i < NumTotalRegs; i++) registers[i] = 0; mainMemory = new char[MemorySize]; for (i = 0; i < MemorySize; i++) mainMemory[i] = 0; #ifdef USE_TLB tlb = new TranslationEntry[TLBSize]; for (i = 0; i < TLBSize; i++) tlb[i].valid = FALSE; pageTable = NULL; #else // use linear page table tlb = NULL; pageTable = new TranslationEntry[pageTableSize]; for( i =0;ipageTable[i].virtualPage = i; pageTable[i].physicalPage = i; pageTable[i].valid = FALSE; pageTable[i].readOnly = FALSE; pageTable[i].use = FALSE; pageTable[i].dirty = FALSE;