U140358 操作系统

题目描述

操作系统($Operating\ System$,简称$OS$)是管理计算机硬件与软件资源的计算机程序。操作系统需要处理如管理与配置内存、决定系统资源供需的优先次序、控制输入设备与输出设备、操作网络与管理文件系统等基本事务。操作系统也提供一个让用户与系统交互的操作界面。 操作系统主要包括以下几个方面的功能 : ①进程管理,其工作主要是进程调度,在单用户单任务的情况下,处理器仅为一个用户的一个任务所独占, 进程管理的工作十分简单。但在多道程序或多用户的情况 下,组织多个作业或任务时,就要解决处理器的调度、 分配和回收等问题 。 ②存储管理分为几种功能:存储分配、存储共享、存储保护 、存储扩张。 ③设备管理分有以下功能:设备分配、设备传输控制 、设备独立性。 ④文件管理:文件存储空间的管理、目录管理 、文件操作管理、文件保护。 ⑤作业管理是负责处理用户提交的任何要求。 现在,$Seaway$自己尝试着开发了一套操作系统$Seaway-Andr$。但是由于$Seaway$水平有限,其上述部分功能并没有完善,其中bug最多的就是其内存管理系统。 在$Seaway$的开发计划里,$Seaway-Andr$的第一版内存管理系统是这样的: 1、`new n`:在内存中分配$n$字节的空间。此命令将返回已分配的内存块的编号$x$。 在$Seaway$的开发计划中,对`new`操作的说明是这样的: 操作$new$有一个参数$n$,表示需要分配$n$字节大小的内存块。在执行这个操作时,系统将把一块最靠近内存起点的,长度为$n$的**连续空闲字节**分配到一个内存块(这块内存块内的所有字节将被标记为“已使用”)。这个操作的返回值为这块内存块的编号。如果没有符合条件的内存块,返回$NULL$。 2、`delete x`:释放编号为$x$的内存块。 在$Seaway$的开发计划中,对`delete`操作的说明是这样的: 操作$delete$有一个参数$x$,表示需要释放的内存块的编号。它将释放这个内存块(这块内存块内的所有字节将被标记为“空闲”)。如果成功释放,不返回值;如果编号为$x$的内存块不存在,返回$ILLEGAL\_DELETE\_ARGUMENT$。 3、`zhengli`:碎片整理,将所有内存块全部向内存的起点靠拢并且不改变它们的顺序。 在$Seaway$的开发计划中,对`zhengli`操作的说明是这样的: 操作$zhengli$没有任何参数。它只是将所有内存块向前依次(编号小的地方)挪动直到它们紧挨在一起。**(不改变它们的顺序) ** 可以看出,这个内存管理系统是**简单线性**的。在这个内存管理系统中,整个内存条有$m$个字节,依次从$1-m$编号。 那么,现在$Seaway$许下了丰厚的报酬(本题$100pts$)来请你做他的内存管理系统测试员。这是你的工作指南: 你将用**连续的正整数**(1,2,...)作为每一个内存块的编号。比如,第$i$次分配的内存块编号为$i$。你的任务是:依次输出所有`new`指令的返回值,以及所有执行失败的`delete`指令的返回值。

输入格式

从文件$system.in$中读入数据。 第一行包括两个正整数$t$和$m$。$t$表示操作次数,$m$表示内存大小。接下来的$t$行为每一次的命令。命令有以下三种,格式均由题目描述所示:`new`命令,后接一个整数$n$;`delete`命令,后接一个整数$x$;`zhengli`命令。

输出格式

输出到文件$system.out$中。 每一行依次为每次执行的`new`函数的返回值或执行失败的`delete`函数返回的$ILLEGAL\_DELETE\_ARGUMENT$。

说明/提示

【**数据范围**】 对于$30\%$的数据,保证不存在`zhengli`操作。 对于$60\%$的数据,$1\le t,m\le 10$。 对于全部数据,有$1\le t,m\le 100$。