兰州大学操作系统实验七存储管理题目和答案

兰州大学操作系统实验七存储管理题目和答案
兰州大学操作系统实验七存储管理题目和答案

实验七实验报告

实验名称:7

存储管理

实验目的:

1.观察系统存储器使用情况

2.观察进程使用存储器的情况

3.掌握通过内存映像文件提高性能的方法

4.掌握动态内存分配技术

实验时间

3学时

预备知识:

1.存储相关的命令

free 显示系统使用和未被使用的内存数量(可以实时执行)

输出包含的标题有 3 行信息:

Mem。此行包含了有关物理内存的信息。包括以下详细内容:

total。该项显示可用的物理内存总量,单位为KB。该数字小于安装的物理内存的

容量,是因为内核本身也要使用一小部分的内存。

used。该项显示了用于应用程序超速缓存数据的内存容量。

free。该项显示了此时未使用且有效的内存容量。

Shared/buffers 缓冲区/cached。这些列显示了有关内存如何使用的更为详细的信息。

-/+ buffers/cache。Linux 系统中的部分内存用来为应用程序或设备高速缓存数据。这部分内存在需要用于其他目的时可以释放。

free列显示了调整的缓冲区行,显示释放缓冲区或高速缓存时可以使用的内存容量。

Swap。该行显示有关交换内存利用率的信息。该信息包含全部、已使用和释放的可用内存容量。

vmstat 报告进程、内存、分页、IO等多类信息(使用手册页)

size 列出目标文件段大小和总大小(使用手册页)

2./proc文件系统(使用手册页man 5 proc)

/proc/meminfo 内存状态信息

/proc/stat 包含内存页、内存对换等信息。

/proc/$pid/stat 某个进程的信息(包含内存使用信息)

/proc/$pid/maps某个进程的内存映射区信息,包括地址范围、权限、偏移量以及主次设备号和映射文件的索引节点。

/proc/$pid/statm 某个进程的内存使用信息,包括内存总大小、驻留集大小、共享页面数、文本页面数、堆栈页面数和脏页面数。

3.内存映像文件

内存映像文件是指把一个磁盘文件映像到内存中,二者存在逐字节的对应关系。这样做可以加速I/O操作,并可以共享数据。

3.1 mmap(建立内存映射)

表头文件#include

#include

定义函数void *mmap(void *start,size_t length,int prot,int flags,int fd,off_t offsize);

函数说明mmap()用来将某个文件内容映射到内存中,对该内存区域的存取即是直接对该文件内容的读写。参数start指向欲对应的内存起始地址,通常设为NULL,代表让系统自动选定地址,对应成功后该地址会返回。参数length代表将文件中多大的部分对应到内存。

参数prot代表映射区域的保护方式有下列组合

PROT_EXEC 映射区域可被执行

PROT_READ 映射区域可被读取

PROT_WRITE 映射区域可被写入

PROT_NONE 映射区域不能存取

参数flags会影响映射区域的各种特性

MAP_FIXED 如果参数start所指的地址无法成功建立映射时,则放弃映射,不

对地址做修正。通常不鼓励用此旗标。

MAP_SHARED对映射区域的写入数据会复制回文件内,而且允许其他映射该

文件的进程共享。

MAP_PRIV A TE 对映射区域的写入操作会产生一个映射文件的复制,即私人的

“写入时复制”(copy on write)对此区域作的任何修改都不会写回原来的文件

内容。

MAP_ANONYMOUS建立匿名映射。此时会忽略参数fd,不涉及文件,而且映

射区域无法和其他进程共享。

MAP_DENYWRITE只允许对映射区域的写入操作,其他对文件直接写入的操作

将会被拒绝。

MAP_LOCKED 将映射区域锁定住,这表示该区域不会被置换(swap)。

在调用mmap()时必须要指定MAP_SHARED 或MAP_PRIV ATE。参数fd为open()

返回的文件描述词,代表欲映射到内存的文件。参数offset为文件映射的偏移量,

通常设置为0,代表从文件最前方开始对应,offset必须是分页大小的整数倍。

返回值若映射成功则返回映射区的内存起始地址,否则返回MAP_FAILED(-1),错误原因存于errno 中。

错误代码EBADF 参数fd 不是有效的文件描述词

EACCES 存取权限有误。如果是MAP_PRIV ATE 情况下文件必须可读,使

用MAP_SHARED则要有PROT_WRITE以及该文件要能写入。

EINV AL 参数start、length 或offset有一个不合法。

EAGAIN 文件被锁住,或是有太多内存被锁住。

ENOMEM 内存不足。

3.2 munmap(解除内存映射)

表头文件#include

#include

定义函数int munmap(void *start,size_t length);

函数说明munmap()用来取消参数start所指的映射内存起始地址,参数length则是欲取消的内存大小。当进程结束或利用exec相关函数来执行其他程序时,映射内存会自动解除,但关闭对应的文件描述词时不会解除映射。

返回值如果解除映射成功则返回0,否则返回-1,错误原因存于errno中错误代码EINV AL

参数start或length 不合法。

4.动态内存分配

4.1 malloc(配置内存空间)

表头文件#include

定义函数void * malloc(size_t size);

函数说明malloc()用来配置内存空间,其大小由指定的size决定。

返回值若配置成功则返回一指针,失败则返回NULL。

4.2 free(释放原先配置的内存)

表头文件#include

定义函数void free(void *ptr);

函数说明参数ptr为指向先前由malloc()、calloc()或realloc()所返回的内存指针。调用free()后ptr所指的内存空间便会被收回。假若参数ptr所指的内存空间已被收回或是未知的内存地址,则调用free()可能会有无法预期的情况发生。若参数ptr为NULL,则free()不会有任何作用。

4.3 calloc(配置内存空间)

表头文件#include

定义函数void *calloc(size_t nmemb,size_t size);

函数说明calloc()用来配置nmemb个相邻的内存单位,每一单位的大小为size,并返回指向第一个元素的指针。这和使用下列的方式效果相同:malloc(nmemb*size);不过,在利用calloc()配置内存时会将内存内容初始化为0。

返回值若配置成功则返回一指针,失败则返回NULL。

5.其他

getpagesize(取得内存分页大小)4096个字节

表头文件#include

定义函数size_t getpagesize(void);

函数说明返回一分页的大小,单位为字节(byte)。此为系统的分页大小,不一定会和硬件分页大小相同。

返回值内存分页大小。附加说明在Intel x86 上其返回值应为4096bytes。

实验要求:

1.分别使用命令和/proc文件系统列出系统当前内存的使用情况。Free

2.启动几个耗时较长的后台进程(多个grep),分别使用free和vmstat连续实时观察内存

的使用情况。寻找字符串模式匹配

3.用size工具观察三个不同的可执行文件的大小以及它们段的大小。

4.启动一个耗时较长的后台进程,通过/proc文件系统查看该进程所有内存使用相关信息,

并列出。

5.编写一个程序,打印系统的页面大小。

6.阅读并编译运行以下程序,总结内存映象文件的使用方法。

范例/* 利用mmap()来读取/etc/passwd 文件内容*/

#include

#include

#include

#include

#include

main()

{

int fd;

void *start;

struct stat sb;

fd=open(“/etc/passwd”,O_RDONL Y); /*打开/etc/passwd*/

fstat(fd,&sb); /*取得文件大小*/

start=mmap(NULL,sb.st_size,PROT_READ,MAP_PRIV ATE,fd,0);

if(start= = MAP_FAILED) /*判断是否映射成功*/

return;

printf(“%s”,start);

munmap(start,sb.st_size); /*解除映射*/

closed(fd);

}

7.编写一个程序,利用内存映象文件,实现less工具的功能。manp到内存中

实验要求:

8.分别使用命令和/proc文件系统列出系统当前内存的使用情况。

9.启动几个耗时较长的后台进程(多个grep),分别使用free和vmstat连续实时观察内存

的使用情况。寻找字符串模式匹配

10.用size工具观察三个不同的可执行文件的大小以及它们段的大小。

Size命令的输出不包括stack和heap的部分。只包括文本段(text),代码段(data),未初始化数据段(bss)三部分。

11.启动一个耗时较长的后台进程,通过/proc文件系统查看该进程所有内存使用相关信息,

并列出。

第一个启动的后台进程是上个实验最后一题的读写程序。此程序耗时较长

第二个启动的是xeyes进程。

12.编写一个程序,打印系统的页面大小。

代码非常简单,只用到了getpagesize()语句的应用

13.阅读并编译运行以下程序,总结内存映象文件的使用方法。

范例/* 利用mmap()来读取/etc/passwd 文件内容*/

#include

#include

#include

#include

#include

main()

{

int fd;

void *start;

struct stat sb;

fd=open(“/etc/passwd”,O_RDONL Y); /*打开/etc/passwd*/

fstat(fd,&sb); /*取得文件大小*/

start=mmap(NULL,sb.st_size,PROT_READ,MAP_PRIV ATE,fd,0);

if(start= = MAP_FAILED) /*判断是否映射成功*/

return;

printf(“%s”,start);

munmap(start,sb.st_size); /*解除映射*/

close(fd);

}

总结内存映象文件的使用方法:

内存映像其实就是在内存中创建一个和外存文件完全相同的映像,用户可以将整个文件映射到内存,也可以部分映射。通过内存映像实现对外存文件的操作。

首先Mmap申请虚拟内存,再次调用file指针所指映射函数对其进行映射。判断是否映射成功。进行操作。最后解除映射。

14.编写一个程序,利用内存映象文件,实现less工具的功能。manp到内存中

#include

#include

#include

#include

#include

#include

#include

#include

#include

int lastrow(char * s,int d);

int nextrow(char * s,int d);

int onepage(char * s,int d);

int main()

{

int fd,play=0;

char lab;

char *start;

struct stat sb;

fd=open("test.txt",O_RDONL Y); /*打开*/

fstat(fd,&sb); /*获取文件大小*/

start=mmap(NULL,sb.st_size,PROT_READ,MAP_PRIV ATE,fd,0);

if(start==MAP_FAILED) /*判断是否映射成功*/

return(1);

play=onepage(start,play)+1;

lab=getchar();

while(lab!='q'&&lab!='Q')

{

if(play<40||play>sb.st_size)

{

lab=getchar();

break;

}

else if(lab==' ')

play=play+1+onepage(start,play);

else if(lab=='D'||lab=='d')

play=play+1+nextrow(start,play);

else if(lab=='U'||lab=='u')

play=1+lastrow(start,play);

lab=getchar();

}

munmap(start,sb.st_size); /*解除映射*/

close(fd);

return 0;

}

int onepage(char * s,int d)

{

int i,count=0;

char * buffer=malloc(2048);//配置内存空间,由buffer指向该空间s+=d;

/*每10行作为一页输出*/

for(i=0;i<2048;i++)

{

if(s[i]=='\n')

count++;

if(count==10)

break;

}

memcpy(buffer,s,i);

buffer[i]='\0';

printf("%s\n",buffer);

return i;

}

/*输出下一行*/

int nextrow(char * s,int d)

{

int i;

char * buffer=malloc(100);

s+=d;

for(i=0;i<100;i++)

if(s[i]=='\n')

break;

memcpy(buffer,s,i);

buffer[i]='\0';

printf("%s\n",buffer);

return i;

}

/*输出上一行*/

int lastrow(char * s,int d)

{

int i,count=0;

char * buffer=malloc(100);

int py=d;

for(;d>0;d--)

{

if(s[d]=='\n')

count++;

if(count==2)

break;

}

memcpy(buffer,s+d+1,py-d-2);

buffer[py-d-2]='\0';

printf("%s\n",buffer);

return d;

}

认识和体会:

1.要的体会是,通过内存映像文件可以提高速度,提高性能。Mmap建立内存映射munmap 解除内存映射。动态分配内存空间用malloc free calloc 还有其他的如getpagesize()方法得到页面大小等。

2. linux 内核映像文件有两种:一种是非压缩版本,叫Image;另一种是它的压缩版本,叫zImage。zImage是Image经过压缩形成的,所以它的大小比Image小。为了能使用zImage 这个压缩版本,必须在它的开头加上解压缩的代码,将zImage 解压缩之后才能执行,因此它的执行速度比Image要慢。但考虑到嵌入式系统的存储空容量一般都比较小,内核要常驻内存,采用zImage可以占用较少的存储空间,因此牺牲一点性能上的代价也是值得的,所以一般嵌入式系统均采用压缩的内核映像文件,即zImage。

实验三存储管理实验

实验三存储管理实验 Pleasure Group Office【T985AB-B866SYT-B182C-BS682T-STT18】

实验三存储管理实验 一. 目的要求: 1、通过编写和调试存储管理的模拟程序以加深对存储管理方案的理解。熟悉虚存管理的各种页面淘汰算法。 2、通过编写和调试地址转换过程的模拟程序以加强对地址转换过程的了解。二.实验内容: 1、设计一个固定式分区分配的存储管理方案,并模拟实现分区的分配和回收过程。 可以假定每个作业都是批处理作业,并且不允许动态申请内存。为实现分区的分配和回收,可以设定一个分区说明表,按照表中的有关信息进行分配,并根据分区的分配和回收情况修改该表。 算法描述: 本算法将内存的用户区分成大小相等的四个的分区,设一张分区说明表用来记录分区,其中分区的表项有分区的大小、起始地址和分区的状态,当系统为某个作业分配主存空间时,根据所需要的内存容量,在分区表中找到一个足够大的空闲分区分配给它,然后将此作业装入内存。如果找不到足够大的空闲分区,则这个作业暂时无法分配内存空间,系统将调度另一个作业。当一个作业运行结束时,系统将回收改作业所占据的分区并将该分区改为空闲。 算法原程序 #include "" #include "" #include <>

#include <> #define PCB_NUM 5 行程序."); printf("\n\t\t\t0.退出程序."); scanf("%d",&m); switch(m) { case1: break; case0: system("cls"); menu(); break; default: system("cls"); break; } } void paixu(struct MemInf* ComMem,int n) { int i,j,t; for(j=0; jComMem[i+1].size) { t=ComMem[i].size; ComMem[i].size=ComMem[i+1].size; ComMem[i+1].size=t; } } void paixu2() { int i,j,t; for(j=0; j<4; j++) for(i=0; i<4-j; i++) if(pcbList[i].size>pcbList[i+1].size) { t=pcbList[i].size; pcbList[i].size=pcbList[i+1].size; pcbList[i+1].size=t; } } void main() { DD: menu();

14-15-2操作系统原理实验报告(计131、132)(新)资料

操作系统原理 实验报告 学院:信息与电子工程学院专业:计算机科学与技术班级:计算机130班 学号:1130299000 姓名:某某某 浙江科技学院 2014-2015学年第2学期

实验1 进程管理 一、实验目的 1. 弄清进程和程序的区别,加深对进程概念的理解。 2. 了解并发进程的执行过程,进一步认识并发执行的实质。 3. 掌握解决进程互斥使用资源的方法。 二、实验内容 1. 管道通信 使用系统调用pipe( )建立一个管道,然后使用系统调用fork( )创建2个子进程p1和p2。这2个子进程分别向管道中写入字符串:“Child process p1 is sending message!”和“Child process p2 is sending message!”,而父进程则从管道中读出来自两个子进程的信息,并显示在屏幕上。 2. 软中断通信 使用系统调用fork( )创建2个子进程p1和p2,在父进程中使用系统调用signal( )捕捉来自键盘上的软中断信号SIGINT(即按Ctrl-C),当捕捉到软中断信号SIGINT后,父进程使用系统调用kill( )分别向2个子进程发出软中断信号SIGUSR1和SIGUSR2,子进程捕捉到信号后分别输出信息“Child process p1 is killed by parent!”和“Child process p2 is killed by parent!”后终止。而父进程等待2个子进程终止后,输出信息“Parent process is killed!”后终止。 三、实验要求 1. 根据实验内容编写C程序。 2. 上机调试程序。 3. 记录并分析程序运行结果。

广东海洋大学数据库实验一报告

GDOU-B-11-112广东海洋大学学生实验报告书(学生用表) 实验名称实验1数据库及其对象创建与管理课程名称数据库原理及应用课程号 16732201 学院(系) 信息学院专业信息管理与信息系统班级信管1111 学生姓名陈梓哲学号201111671106 实验地点海安A705 实验日期2013/10/16

实验一数据库及其对象的创建与管理 一、实验目的 1、掌握用SSMS或Transact-SQL语句创建、查看、修改、删除数据库的方法; 2、掌握数据库的备份和恢复方法; 3、掌握数据库的分离和附加方法; 4、掌握用SSMS或Transact-SQL语句创建、修改、删除表及向其添加数据的方法。 二、实验要求 1、实验前做好上机实验的准备,针对实验内容,认真复习与本次实验有关的知识,完 成实验内容的预习准备工作; 2、能认真独立完成实训内容; 3、实验后做好实验总结,根据实验情况完成总结报告。 三、实验内容 1、用SSMS在“对象资源管理器”中完成如下任务: (1) 参数参数值 数据库名Student 逻辑数据文件名Student_dat 操作系统数据文件名D:\ Student_dat.mdf 数据文件的初始大小10MB 数据文件的最大大小100MB 数据文件增长幅度10% 日志逻辑文件名Student_log 操作系统日志文件名D:\ Student_log.ldf 日志文件初始大小5MB 日志文件增长幅度10

(2)再修改学生课程数据库Student的主数据文件的大小,使其扩大两倍,然后查看扩大后的数据库属性。 2、用SSMS,在数据库Student中: (1)创建如下四个表,并设置相关的约束条件: 列名说明数据类型约束 Sno 学号整形主键 Sname 姓名字符(10)非空,唯一 Ssex 性别字符(2)取‘男’或‘女’ Sage 年龄短整形 Sdept 院系字符(20)可取空,默认‘计算机系’ 列名说明数据类型约束 Cno 课程号字符(4)主键 Cname 课程名字符(10)非空 Tno 教师号整形非空 列名说明数据类型约束 Sno 学号整形外键 Cno 课程号字符(4)外键 Grade 成绩整数取0~100 列名说明数据类型约束 Tno 教师号整形主键 Tname 教师名字符(10) S Course SC

操作系统原理-进程调度实验报告

一、实验目的 通过对进程调度算法的设计,深入理解进程调度的原理。 进程是程序在一个数据集合上运行的过程,它是系统进行资源分配和调度的一个独立单位。 进程调度分配处理机,是控制协调进程对CPU的竞争,即按一定的调度算法从就绪队列中选中一个进程,把CPU的使用权交给被选中的进程。 进程通过定义一个进程控制块的数据结构(PCB)来表示;每个进程需要赋予进程ID、进程到达时间、进程需要运行的总时间的属性;在RR中,以1为时间片单位;运行时,输入若干个进程序列,按照时间片输出其执行序列。 二、实验环境 VC++6.0 三、实验内容 实现短进程优先调度算法(SPF)和时间片轮转调度算法(RR) [提示]: (1) 先来先服务(FCFS)调度算法 原理:每次调度是从就绪队列中,选择一个最先进入就绪队列的进程,把处理器分配给该进程,使之得到执行。该进程一旦占有了处理器,它就一直运行下去,直到该进程完成或因发生事件而阻塞,才退出处理器。 将用户作业和就绪进程按提交顺序或变为就绪状态的先后排成队列,并按照先来先服务的方式进行调度处理,是一种最普遍和最简单的方法。它优先考虑在系统中等待时间最长的作业,而不管要求运行时间的长短。 按照就绪进程进入就绪队列的先后次序进行调度,简单易实现,利于长进程,CPU繁忙型作业,不利于短进程,排队时间相对过长。 (2) 时间片轮转调度算法RR

原理:时间片轮转法主要用于进程调度。采用此算法的系统,其程序就绪队列往往按进程到达的时间来排序。进程调度按一定时间片(q)轮番运行各个进程. 进程按到达时间在就绪队列中排队,调度程序每次把CPU分配给就绪队列首进程使用一个时间片,运行完一个时间片释放CPU,排到就绪队列末尾参加下一轮调度,CPU分配给就绪队列的首进程。 固定时间片轮转法: 1 所有就绪进程按 FCFS 规则排队。 2 处理机总是分配给就绪队列的队首进程。 3 如果运行的进程用完时间片,则系统就把该进程送回就绪队列的队尾,重新排队。 4 因等待某事件而阻塞的进程送到阻塞队列。 5 系统把被唤醒的进程送到就绪队列的队尾。 可变时间片轮转法: 1 进程状态的转换方法同固定时间片轮转法。 2 响应时间固定,时间片的长短依据进程数量的多少由T = N × ( q + t )给出的关系调整。 3 根据进程优先级的高低进一步调整时间片,优先级越高的进程,分配的时间片越长。 多就绪队列轮转法: (3) 算法类型 (4)模拟程序可由两部分组成,先来先服务(FCFS)调度算法,时间片轮转。流程图如下:

操作系统实验四存储管理

师学院计算机系 实验报告 (2014—2015学年第二学期) 课程名称操作系统 实验名称实验四存储管理 专业计算机科学与技术(非师)年级2012级 学号B2012102147 姓名秋指导教师远帆 实验日期2015-05-20

图1 word运行情况 “存使用”列显示了该应用程序的一个实例正在使用的存数量。 5) 启动应用程序的另一个实例并观察它的存需求。 请描述使用第二个实例占用的存与使用第一个实例时的存对比情况: 第二个实例占用存22772K,比第一个实例占用的存大很多 4:未分页合并存。 估算未分页合并存大小的最简单法是使用“任务管理器”。未分页合并存的估计值显示在“任务管理器”的“性能”选项卡的“核心存”部分。 总数(K) :________220___________ 分页数:_____________________ 未分页(K) :_________34__________ 图2核心存

C 简单基本NTFS 30G 良好(系 统) D 简单基本NTFS 90G 良好 E 简单基本NTFS 90G 良好 F 简单基本NTFS 88 G 良好 图3磁盘情况 6:计算分页文件的大小。 要想更改分页文件的位置或大小配置参数,可按以下步骤进行: 1) 右键单击桌面上的“我的电脑”图标并选定“属性”。 2) 在“高级”选项卡上单击“性能选项”按钮。 3) 单击对话框中的“虚拟存”区域中的“更改”按钮。 请记录: 所选驱动器的页面文件大小: 驱动器:______________F_____________________ 可用空间:___________9825_____________________ MB 初始大小(MB) :_____ 2048______________________ 最大值(MB) :________4092_____________________ 所有驱动器页面文件大小的总数: 允的最小值:________16____________________ MB

操作系统原理实验-系统内存使用统计5

上海电力学院 计算机操作系统原理 实验报告 题目:动态链接库的建立与调用 院系:计算机科学与技术学院 专业年级:信息安全2010级 学生姓名:李鑫学号:20103277 同组姓名:无 2012年11 月28 日上海电力学院

实验报告 课程名称计算机操作系统原理实验项目线程的同步 姓名李鑫学号20103277 班级2010251班专业信息安全 同组人姓名无指导教师姓名徐曼实验日期2012/11/28 实验目的和要求: (l)了解Windows内存管理机制,理解页式存储管理技术。 (2)熟悉Windows内存管理基本数据结构。 (3)掌握Windows内存管理基本API的使用。 实验原理与内容 使用Windows系统提供的函数和数据结构显示系统存储空间的使用情况,当内存和虚拟存储空间变化时,观察系统显示变化情况。 实验平台与要求 能正确使用系统函数GlobalMemoryStatus()和数据结构MEMORYSTATUS了解系统内存和虚拟空间使用情况,会使用VirtualAlloc()函数和VirtualFree()函数分配和释放虚拟存储空间。 操作系统:Windows 2000或Windows XP 实验平台:Visual Studio C++ 6.0 实验步骤与记录 1、启动安装好的Visual C++ 6.0。 2、选择File->New,新建Win32 Console Application程序, 由于内存分配、释放及系统存储 空间使用情况均是Microsoft Windows操作系统的系统调用,因此选择An application that support MFC。单击确定按钮,完成本次创建。 3、创建一个支持MFC的工程,单击完成。

存储管理实验报告

实验三、存储管理 一、实验目的: ? 一个好的计算机系统不仅要有一个足够容量的、存取速度高的、稳定可靠的主存储器,而且要能合理地分配和使用这些存储空间。当用户提出申请存储器空间时,存储管理必须根据申请者的要求,按一定的策略分析主存空间的使用情况,找出足够的空闲区域分配给申请者。当作业撤离或主动归还主存资源时,则存储管理要收回作业占用的主存空间或归还部分主存空间。主存的分配和回收的实现虽与主存储器的管理方式有关的,通过本实验理解在不同的存储管理方式下应怎样实现主存空间的分配和回收。 在计算机系统中,为了提高主存利用率,往往把辅助存储器(如磁盘)作为主存储器的扩充,使多道运行的作业的全部逻辑地址空间总和可以超出主存的绝对地址空间。用这种办法扩充的主存储器称为虚拟存储器。通过本实验理解在分页式存储管理中怎样实现虚拟存储器。 在本实验中,通过编写和调试存储管理的模拟程序以加深对存储管理方案的理解。熟悉虚存管理的各种页面淘汰算法通过编写和调试地址转换过程的模拟程序以加强对地址转换过程的了解。 二、实验题目: 设计一个可变式分区分配的存储管理方案。并模拟实现分区的分配和回收过程。 对分区的管理法可以是下面三种算法之一:(任选一种算法实现) 首次适应算法 循环首次适应算法 最佳适应算法 三.实验源程序文件名:cunchuguanli.c

执行文件名:cunchuguanli.exe 四、实验分析: 1)本实验采用可变分区管理,使用首次适应算法实现主存的分配和回收 1、可变分区管理是指在处理作业过程中建立分区,使分区大小正好适合作业的需求,并 且分区个数是可以调整的。当要装入一个作业时,根据作业需要的主存量查看是否有足够的空闲空间,若有,则按需要量分割一个分区分配给该作业;若无,则作业不能装入,作业等待。随着作业的装入、完成,主存空间被分成许多大大小小的分区,有的分区被作业占用,而有的分区是空闲的。 为了说明那些分区是空闲的,可以用来装入新作业,必须有一张空闲说明表 ? 空闲区说明表格式如下:? 第一栏 第二栏 其中,起址——指出一个空闲区的主存起始地址,长度指出空闲区的大小。 长度——指出从起始地址开始的一个连续空闲的长度。 状态——有两种状态,一种是“未分配”状态,指出对应的由起址指出的某个长度的区域是空闲区;另一种是“空表目”状态,表示表中对应的登记项目是空白(无效),可用来登记新的空闲区(例如,作业完成后,它所占的区域就成了空闲区,应找一个“空表目”栏登记归还区的起址和长度且修改状态)。由于分区的个数不定,所以空闲区说明表中应有适量的状态为“空表目”的登记栏目,否则造成表格“溢出”无法登记。 2、当有一个新作业要求装入主存时,必须查空闲区说明表,从中找出一个足够大的空闲区。 有时找到的空闲区可能大于作业需要量,这时应把原来的空闲区变成两部分:一部分分

中国海洋大学数据库系统课程大纲(理论课程)-中国海洋大学信息科学

中国海洋大学数据库系统课程大纲(理论课程) 英文名称(Database System) 【开课单位】信息学院【课程模块】专业知识 【课程编号】0711******** 【课程类别】必修 【学时数】64 (理论48 实践16 )【学分数】 3.5 一、课程描述 本课程大纲根据2011年本科人才培养方案进行修订或制定。 (一)教学对象 计算机科学与技术专业本科生 (二)教学目标及修读要求 1、教学目标(课程结束后学生在知识、技能和态度三个层面达到的目标) 通过本课程的学习可以使学生了解数据库系统的基本理论和内容,了解数据库系统的核心技术及其实现,了解有关数据库系统研究的最新进展,能够设计和实现大型的数据库应用系统。从而认识到数据库系统在大型应用系统中的地位和作用,尤其是认识到我们国家在数据库系统方面与世界的差距,为学生将来参与有关数据库系统方面的研究奠定必要的知识基础。2、修读要求(简要说明课程的性质,与其他专业课程群的关系,学生应具备的基本专业素质和技能等) 《数据库系统》是计算机科学与应用专业的专业课,是专业知识教育层面的必修课,其先修课为集合论与代数结构、数据结构与算法,是数据库系统课程设计的先修课。 (三)先修课程(参照2011版人才培养方案中的课程名称,课程名称要准确)先修课为集合论与代数结构、数据结构与算法。 二、教学内容 (一)第一章绪论 1、主要内容: 阐述数据库的基本概念,介绍数据管理技术的进展情况、数据库技术产生和发展的背景,数据模型的基本概念、组成要素和主要的数据模型,概念模型的基本概念及ER方法,数据库系统的三级模式结构以及数据库系统的组成。 2、教学要求:(按照掌握、理解、了解三个层次对学生学习提出要求) 本章讲解的数据库基本概念和基本知识是学习后续各个章节的基础。学习本章的目的在于了解基本知识,掌握基本概念,为以后的学习打好扎实的基础。 3、重点、难点: 重点:牢固掌握概念模型的基本概念及其主要建模方法ER方法;掌握关系数据模型的相关概念、数据库系统三级模式和两层映像的体系结构、数据库系统的逻辑独立性和物理独立性等;对于如何通过ER方法描述现实世界的概念模型要做到能够举一反三的程度。 难点:本章的难点是需要掌握数据库领域大量的基本概念。有些概念一开始接触会感到比较抽象,但不要紧,随着学习的逐渐推进,在后续章节中,这些抽象的概念会逐渐变得清晰具体起来。此外,数据模型及数据库系统的体系结构也是本章的难点。 4、其它教学环节(如实验、习题课、讨论课、其它实践活动): 布置第一章习题及作业。 实验1 对一个简单的教务系统进行分析,并使用PowerDesigner软件画出E-R图。 (二)第二章关系数据库

操作系统原理实验四

实验4 进程控制 1、实验目的 (1)通过对WindowsXP进行编程,来熟悉和了解系统。 (2)通过分析程序,来了解进程的创建、终止。 2、实验工具 (1)一台WindowsXP操作系统的计算机。 (2)计算机装有Microsoft Visual Studio C++6.0专业版或企业版。 3、预备知识 (3)·CreateProcess()调用:创建一个进程。 (4)·ExitProcess()调用:终止一个进程。 4、实验编程 (1)编程一利用CreateProcess()函数创建一个子进程并且装入画图程序(mspaint.exe)。阅读该程序,完成实验任务。源程序如下: # include < stdio.h > # include < windows.h > int main(VOID) ﹛STARTUPINFO si; PROCESS INFORMA TION pi; ZeroMemory(&si,sizeof(si)); Si.cb=sizeof(si); ZeroMemory(&pi,sizeof(pi)); if(!CreateProcess(NULL, “c: \ WINDOWS\system32\ mspaint.exe”, NULL, NULL, FALSE, 0, NULL, NULL, &si,&pi)) ﹛fprintf(stderr,”Creat Process Failed”); return—1; ﹜ WaitForSingleObject(pi.hProcess,INFINITE); Printf(“child Complete”); CloseHandle(pi.hProcess); CloseHandle(pi hThread); ﹜

广东海洋大学数据库实验报告

实验四数据的完整性、安全性 一、实验目的 1.掌握数据安全性和完整性的概念,以及如何保证数据库中数据安全及完整性。 2.掌握SQL Server中有关用户、角色及操作权限的管理方法. 3.学会创建和使用规则、缺省。 二、实验内容 1 数据库的安全性实验,通过SSMS设置SQL Server的安全认证模式.实现对SQL Server 的用户和角色管理,设置和管理数据操作权限. 2数据库的完整性实验。使用Transact-SQL设计规则、缺省、约束和触发器。 三、实验要求 1.数据的完整性实验 ⑴用SQL语句创建一学生成绩数据库(XSCJ),包括学生(XSQK)、课程(KC)和成绩表(XS_KC): 学生情况表(XSQK) 列名数据类型长度是否允许为空值 学号Char 6 N 姓名Char 8 N 性别Bit 1 N 出生日期smalldatetime 2 专业名Char 10 所在系Char 10 联系电话char 11 Y

课程表(KC) 列名数据类型长度是否允许为空值课程号Char 3 N 课程名Char 20 N 教师Char 10 开课学期Tinyint 1 学时Tinyint 1 学分Tinyint 1 N 成绩表(XS_KC) 列名数据类型长度是否允许为空值学号Char 6 N 课程号成绩Char Smallint 3 2 N ⑵数据的实体完整性实验 用SSMS分别将学生情况表(XSQK)的学号字段、课程表(KC)的课程号字段设置为主健 ②用T-SQL语句将成绩表(XS_KC)的学号、课程号字段设置为主健

⑶数据的参照完整性实验 ①用SSMS为成绩表(XS_KC)创建外键FK_ XSQK_ID,外键FK_ XSQK_ID参照学生情况表(XSQK)表的学号 ②用T-SQL语句成绩表(XS_KC)创建外键FK_ KC_ID,外键FK_ KC _ID参照课程表(KC)表的课程号 ⑷数据的用户定义完整性实验 用T-SQL语句为学生情况表(XSQK)的姓名列创建一个唯一约束 ②用SSMS为学生情况表(XSQK)的性别列创建一个检查约束,使得性别的值为男或女

实验操作系统存储管理实验报告

实验四操作系统存储管理实验报告 一、实验目的 存储管理的主要功能之一是合理地分配空间。请求页式管理是一种常用的虚拟存储管理技术。 本实验的目的是通过请求页式管理中页面置换算法模拟设计,了解虚拟存储技术的特点,掌握请求页式存储管理的页面置换算法。 二、实验内容 (1)通过计算不同算法的命中率比较算法的优劣。同时也考虑了用户内存容量对命中率的影响。 页面失效次数为每次访问相应指令时,该指令所对应的页不在内存中的次数。 在本实验中,假定页面大小为1k,用户虚存容量为32k,用户内存容量为4页到32页。 (2)produce_addstream通过随机数产生一个指令序列,共320条指令。 A、指令的地址按下述原则生成: 1)50%的指令是顺序执行的 2)25%的指令是均匀分布在前地址部分 3)25%的指令是均匀分布在后地址部分 B、具体的实施方法是: 1)在[0,319]的指令地址之间随机选取一起点m; 2)顺序执行一条指令,即执行地址为m+1的指令; 3)在前地址[0,m+1]中随机选取一条指令并执行,该指令的地址为m’; 4)顺序执行一条指令,地址为m’+1的指令 5)在后地址[m’+2,319]中随机选取一条指令并执行; 6)重复上述步骤1)~5),直到执行320次指令 C、将指令序列变换称为页地址流

在用户虚存中,按每k存放10条指令排列虚存地址,即320条指令在虚存中 的存放方式为: 第0条~第9条指令为第0页<对应虚存地址为[0,9]); 第10条~第19条指令为第1页<对应虚存地址为[10,19]); 。。。。。。 第310条~第319条指令为第31页<对应虚存地址为[310,319]); 按以上方式,用户指令可组成32页。 (3)计算并输出下属算法在不同内存容量下的命中率。 1)先进先出的算法

操作系统实验四存储管理

宁德师范学院计算机系 实验报告 (2014—2015学年第二学期) 课程名称操作系统 实验名称实验四存储管理 专业计算机科学与技术(非师)年级2012级 学号B2012102147 姓名王秋指导教师王远帆 实验日期2015-05-20

2) 右键单击任务栏以启动“任务管理器”。 3) 在“Windows任务管理器”对话框中选定“进程”选项卡。 4) 向下滚动在系统上运行的进程列表,查找想要监视的应用程序。 请在表4-3中记录: 表4-3 实验记录 映像名称PID CPU CPU时间内存使用 WINWORD.EXE 5160 00 0:00:10 22772k 图1 word运行情况 “内存使用”列显示了该应用程序的一个实例正在使用的内存数量。 5) 启动应用程序的另一个实例并观察它的内存需求。 请描述使用第二个实例占用的内存与使用第一个实例时的内存对比情况: 第二个实例占用内存22772K,比第一个实例占用的内存大很多 4:未分页合并内存。 估算未分页合并内存大小的最简单方法是使用“任务管理器”。未分页合并内存的估计值显示在“任务管理器”的“性能”选项卡的“核心内存”部分。 总数(K) :________220___________ 分页数:__________167___________ 未分页(K) :_________34__________

图2核心内存 还可以使用“任务管理器”查看一个独立进程正在使用的未分页合并内存数量和分页合并内存数量。操作步骤如下: 1) 单击“Windows任务管理器”的“进程”选项卡,然后从“查看”菜单中选择“选择列”命令,显示“进程”选项卡的可查看选项。 2) 在“选择列”对话框中,选定“页面缓冲池”选项和“非页面缓冲池”选项旁边的复选框,然后单击“确定”按钮。 返回Windows “任务管理器”的“进程”选项卡时,将看到其中增加显示了各个进程占用的分页合并内存数量和未分页合并内存数量。 仍以刚才打开观察的应用程序(例如Word) 为例,请在表4-4中记录: 表4-4 实验记录 映像名称PID 内存使用页面缓冲池非页面缓冲池 WINWORD.EXE 2964 37488 951 42 从性能的角度来看,未分页合并内存越多,可以加载到这个空间的数据就越多。拥有的物理内存越多,未分页合并内存就越多。但未分页合并内存被限制为256MB,因此添加超出这个限制的内存对未分页合并内存没有影响。 5:提高分页性能。 在Windows 2000的安装过程中,将使用连续的磁盘空间自动创建分页文件(pagefile.sys) 。用户可以事先监视变化的内存需求并正确配置分页文件,使得当系统必须借助于分页时的性能达到最高。 虽然分页文件一般都放在系统分区的根目录下面,但这并不总是该文件的最佳位置。要想从分页获得最佳性能,应该首先检查系统的磁盘子系统的配置,以了解它是否有多个物理硬盘驱动器。 1) 在“开始”菜单中单击“设置”–“控制面板”命令,双击“管理工具”图标,再双击“计算机管理”图标。 2) 在“计算机管理”窗口的左格选择“磁盘管理”管理单元来查看系统的磁盘配置。 如果系统只有一个硬盘,那么建议应该尽可能为系统配置额外的驱动器。这是因为:Windows 2000最多可以支持在多个驱动器上分布的16个独立的分页文件。为系统配置多个分页文件可以实现对不同磁盘I/O请求的并行处理,这将大大提高I/O请求的分页文件性能。 请在表4-5中记录: 表4-5 实验记录

操作系统原理实验五

实验五线程的同步 1、实验目的 (1)进一步掌握Windows系统环境下线程的创建与撤销。 (2)熟悉Windows系统提供的线程同步API。 (3)使用Windows系统提供的线程同步API解决实际问题。 2、实验准备知识:相关API函数介绍 ①等待对象 等待对象(wait functions)函数包括等待一个对象(WaitForSingleObject ())和等待多个对象(WaitForMultipleObject())两个API函数。 1)等待一个对象 WaitForSingleObject()用于等待一个对象。它等待的对象可以为以下对象 之一。 ·Change ontification:变化通知。 ·Console input: 控制台输入。 ·Event:事件。 ·Job:作业。 ·Mutex:互斥信号量。 ·Process:进程。 ·Semaphore:计数信号量。 ·Thread:线程。 ·Waitable timer:定时器。 原型: DWORD WaitForSingleObject( HANDLE hHandle, // 对象句柄 DWORD dwMilliseconds // 等待时间 ); 参数说明: (1)hHandle:等待对象的对象句柄。该对象句柄必须为SYNCHRONIZE访问。 (2)dwMilliseconds:等待时间,单位为ms。若该值为0,函数在测试对象的状态后立即返回,若为INFINITE,函数一直等待下去,直到接收到 一个信号将其唤醒,如表2-1所示。 返回值: 如果成功返回,其返回值说明是何种事件导致函数返回。

Static HANDLE hHandlel = NULL; DWORD dRes; dRes = WaitForSingleObject(hHandlel,10); //等待对象的句柄为hHandlel,等待时间为10ms 2)等待对个对象 WaitForMultiple()bject()在指定时间内等待多个对象,它等待的对象与 WaitForSingleObject()相同。 原型: DWORD WaitForMultipleObjects( DWORD nCount, //句柄数组中的句柄数 CONST HANDLE * lpHandles, //指向对象句柄数组的指针 BOOL fWaitAll, //等待类型 DWORD dwMilliseconds //等待时间 ); 参数说明: (1)nCount:由指针 * lpHandles指定的句柄数组中的句柄数,最大数是MAXIMUM WAIT OBJECTS。 (2)* lpHandles:指向对象句柄数组的指针。 (3)fWaitAll:等待类型。若为TRUE,当由lpHandles数组指定的所有对象被唤醒时函数返回;若为FALSE,当由lpHandles数组指定的某一个 对象被唤醒时函数返回,且由返回值说明是由于哪个对象引起的函数 返回。 (4)dwMilliseconds:等待时间,单位为ms。若该值为0,函数测试对象的状态后立即返回;若为INFINITE,函数一直等待下去,直到接收到 一个信号将其唤醒。 返回值:、 如果成功返回,其返回值说明是何种事件导致函数返回。 各参数的描述如表2-2所示。

实验四 操作系统存储管理实验报告

实验四 操作系统存储管理实验报告 一、实验目的 存储管理的主要功能之一是合理地分配空间。请求页式管理是一种常用的虚拟存储管理技术。 本实验的目的是通过请求页式管理中页面置换算法模拟设计,了解虚拟存储技术的特点,掌握请求页式存储管理的页面置换算法。 二、实验内容 (1) 通过计算不同算法的命中率比较算法的优劣。同时也考虑了用户内存容量对命 中率的影响。 页面失效次数为每次访问相应指令时,该指令所对应的页不在内存中的次数。 在本实验中,假定页面大小为1k ,用户虚存容量为32k ,用户内存容量为4页到32页。 (2) produce_addstream 通过随机数产生一个指令序列,共320条指令。 A 、 指令的地址按下述原则生成: 1) 50%的指令是顺序执行的 2)25%的指令是均匀分布在前地址部分 3) 25%的指令是均匀分布在后地址部分 B 、 具体的实施方法是: 1) 在[0,319]的指令地址之间随机选取一起点m ; 2) 顺序执行一条指令,即执行地址为m+1的指令; 3) 在前地址[0,m+1]中随机选取一条指令并执行,该指令的地址为m ’; 4) 顺序执行一条指令,地址为m ’+1的指令 5) 在后地址[m ’+2,319]中随机选取一条指令并执行; 6) 重复上述步骤1)~5),直到执行320次指令 页地址流长度页面失效次数命中率- =1

C、将指令序列变换称为页地址流 在用户虚存中,按每k存放10条指令排列虚存地址,即320条指令在虚存中 的存放方式为: 第0条~第9条指令为第0页(对应虚存地址为[0,9]); 第10条~第19条指令为第1页(对应虚存地址为[10,19]); 。。。。。。 第310条~第319条指令为第31页(对应虚存地址为[310,319]); 按以上方式,用户指令可组成32页。 (3)计算并输出下属算法在不同内存容量下的命中率。 1)先进先出的算法(FIFO); 2)最近最少使用算法(LRU); 3)最佳淘汰算法(OPT); 4)最少访问页面算法(LFR); 其中3)和4)为选择内容

操作系统原理实验报告(终版)

操作系统原理实验报告(终版)

————————————————————————————————作者:————————————————————————————————日期:

[键入文字] XX学校 实验报告 课程名称: 学院: 专业班: 姓名: 学号: 指导教师: 2011 年3 月

目录 实验1 进程管理 (3) 一、实验目的 (3) 二、实验内容 (3) 三、实验要求 (3) 四、程序说明和程序流程图 (4) 五、程序代码 (5) 六、程序运行结果及分析 (7) 七.指导教师评议 (8) 实验2 进程通信 (9) 一、实验目的 (9) 二、实验内容 (9) 三、实验要求 (9) 四、程序说明和程序流程图 (9) 五、程序代码 (11) 七.指导教师评议 (14) 实验3 存储管理 (15) 一、实验目的 (15) 二、实验内容 (15) 三、实验要求 (15) 四、程序说明和程序流程图 (16) 六、程序运行结果及分析 (23)

七.指导教师评议 (23) 实验4 文件系统 (24) 一、实验目的 (24) 二、实验内容 (24) 三、实验要求 (24) 四、程序说明和程序流程图 (24) 五、程序代码 (26) 六、程序运行结果及分析 (26) 七.指导教师评议 (27)

实验1 进程管理 一、实验目的 1. 弄清进程和程序的区别,加深对进程概念的理解。 2. 了解并发进程的执行过程,进一步认识并发执行的实质。 3. 掌握解决进程互斥使用资源的方法。 二、实验内容 1. 管道通信 使用系统调用pipe( )建立一个管道,然后使用系统调用fork( )创建2个子进程p1和p2。这2个子进程分别向管道中写入字符串:“Child process p1 is sending message!”和“Child process p2 is sending message!”,而父进程则从管道中读出来自两个子进程的信息,并显示在屏幕上。 2. 软中断通信 使用系统调用fork( )创建2个子进程p1和p2,在父进程中使用系统调用signal( )捕捉来自键盘上的软中断信号SIGINT(即按Ctrl-C),当捕捉到软中断信号SIGINT后,父进程使用系统调用kill( )分别向2个子进程发出软中断信号SIGUSR1和SIGUSR2,子进程捕捉到信号后分别输出信息“Child process p1 is killed by parent!”和“Child process p2 is killed by parent!”后终止。而父进程等待2个子进程终止后,输出信息“Parent process is killed!”后终止。 三、实验要求 1. 根据实验内容编写C程序。 2. 上机调试程序。 3. 记录并分析程序运行结果。

《操作系统原理实验》试卷A及答案

《中山大学授予学士学位工作细则》第六条 考试作弊不授予学士学位 计算机科学系2012第二学期 《操作系统原理实验》期末考试试题(A) 任课教师:李才伟考试形式:开卷考试时间:2小时年级:11 班别:3 专业:计科姓名:________ 学号:___ _ 成绩___ _ 注意:答案一定要写在答卷中,写在本试题卷中不给分。本试卷要和答卷一起交回。 一.填空题(每小题2分,共30分) 1.在我们的操作系统实验中,C与汇编语言混合编程的操作系统环境为___,其所用的虚拟机为___。2.测试用软盘映像文件的大小为___MB,使用的文件系统格式为___。 3.Intel 80386新增加的两个段寄存器分别为___和___。 4.Intel处理器实模式下的中断向量表包含___个中断向量,每个中断向量有___位。 5.Linux中挂载磁盘映像的命令为___,C语言的编译器为___。 6.将程序的入口安排在指定位置的汇编操作符为___、LD的链接选项为___。 7.ELF的英文原文是___,中文译文为___。 8.在FAT的文件条目中,普通文件和子目录的文件属性值分别为___和___。 9.在IA-32的保护模式下,分段用于___,分页用于___。 10.IA-32处理器的4个系统地址寄存器分别为___。 11.IA-32中的描述符和选择符大小分别为___位和___位。 12.TSS的主要功用为___,TSS描述符只能位于___描述符表中。 13.控制保护模式的寄存器为___,激活保护标志位于其___位。 14.IA-32的三种特权级类型分别为___、___和___。 15.在Make文件中,$@ 和$< 分别表示___和___。 二.问答题(每小题5分,共30分) 1.在实模式下的进程调度中是如何实现堆栈切换的? 2.IA-32的保护模式相比实模式的主要优点有哪些? 3.给出IA-32保护模式下的段寄存器的内容、组成和功用。 4.给出GDT和LDT的英文原文和中文译文,它们有哪些主要功用和区别? 5.启动分页机制的主要步骤有哪些? 6.给出IA-32段页式保护模式下(采用4KB页面大小与两级分页方式的)逻辑地址和线性地址的构成及转 换成物理地址的方法。

实验四 存储管理

实验四存储管理 背景知识 耗尽内存是Windows 2000/XP系统中最常见的问题之一。当系统耗尽内存时,所有进程对内存的总需求超出了系统的物理内存总量。随后,Windows 2000/XP必须借助它的虚拟内存来维持系统和进程的运行。虚拟内存机制是Windows 2000/XP操作系统的重要组成部分,但它的速度比物理内存慢得多,因此,应该尽量避免耗尽物理内存资源,以免导致性能下降。解决内存不足问题的一个有效的方法就是添加更多的内存。但是,一旦提供了更多的内存,Windows 2000/XP很可以会立即“吞食”。而事实上,添加更多的内存并非总是可行的,也可能只是推迟了实际问题的发生。因此,应该相信,优化所拥有的内存是非常关键的。 1. 分页过程 当Windows 2000/XP求助于硬盘以获得虚拟内存时,这个过程被称为分页(paging) 。分页就是将信息从主内存移动到磁盘进行临时存储的过程。应用程序将物理内存和虚拟内存视为一个独立的实体,甚至不知道Windows 2000/XP使用了两种内存方案,而认为系统拥有比实际内存更多的内存。例如,系统的内存数量可能只有16MB,但每一个应用程序仍然认为有4GB内存可供使用。 使用分页方案带来了很多好处,不过这是有代价的。当进程需要已经交换到硬盘上的代码或数据时,系统要将数据送回物理内存,并在必要时将其他信息传输到硬盘上,而硬盘与物理内存在性能上的差异极大。例如,硬盘的访问时间通常大约为4-10毫秒,而物理内存的访问时间为60 us,甚至更快。 2. 内存共享 应用程序经常需要彼此通信和共享信息。为了提供这种能力,Windows 2000/XP必须允许访问某些内存空间而不危及它和其他应用程序的安全性和完整性。从性能的角度来看,共享内存的能力大大减少了应用程序使用的内存数量。运行一个应用程序的多个副本时,每一个实例都可以使用相同的代码和数据,这意味着不必维护所加载应用程序代码的单独副本并使用相同的内存资源。无论正在运行多少个应用程序实例,充分支持应用程序代码所需求的内存数量都相对保持不变。 3. 未分页合并内存与分页合并内存 Windows 2000/XP决定了系统内存组件哪些可以以及哪些不可以交换到磁盘上。显然,不应该将某些代码(例如内核) 交换出主内存。因此,Windows 2000/XP将系统使用的内存进一步划分为未分页合并内存和分页合并内存。 分页合并内存是存储迟早需要的可分页代码或数据的内存部分。虽然可以将分页合并内存中的任何系统进程交换到磁盘上,但是它临时存储在主内存的这一部分,以防系统立刻需要它。在将系统进程交换到磁盘上之前,Windows 2000/XP会交换其他进程。 未分页合并内存包含必须驻留在内存中的占用代码或数据。这种结构类似于早期的MS-DOS 程序使用的结构,在MS-DOS中,相对较小的终止并驻留程序(Terminate and Stay Resident,TSR) 在启动时加载到内存中。这些程序在系统重新启动或关闭之前一直驻留在内存的特定部分中。例如,防病毒程序将加载为TSR程序,以预防可能的病毒袭击。 未分页合并内存中包含的进程保留在主内存中,并且不能交换到磁盘上。物理内存的这个部分用于内核模式操作(例如,驱动程序)和必须保留在主内存中才能有效工作的其他进程。

数据库范式设计实验报告

中国海洋大学实验报告年月日姓名系年级2012级专业计算机学号科目数据库题目通过实验体会关系数据理论,函数依赖以及范式。 实验要求 1.设计一个关系,使之满足2NF而不满足3NF; 设计一个关系,使之满足3NF而不满足BCNF; 2.详细描述关系的语义,分析关系中存在的函数依赖; 3.使用商用数据库SQL Server设计实现,录入数据; 4.体会数据冗余、增加异常、删除异常、修改复杂。 实验环境 Windows7系统下 Microsoft SQL Server 实验步骤 1.首先要弄清楚2NF、3NF、BCNF的定义与区别,再开始设计; 2.满足2NF而不满足3NF,则代表了这个关系消除了非主属性对码的部分 依赖,但没有消除非主属性对码的传递函数依赖,那么就可以开始设计 了:设这个关系为R1,设u={Sno,Sclass,Cmon},Sno代表学生的 学号,Sclass代表班号,Cmon代表班主任的工号,且存在这样的函数依 赖:Sno->Sclass,Sclass->Cmon,Sno->Cmon;Sno为主码,Sno为主属 性,Sclass、Cmon为非主属性。容易知道,Sclass与Cmon的真子集都 无法函数确定Sno,所以非主属性Sclass、Cmon对Sno完全函数依赖, 所以满足2NF;而由于Sno->Sclass(Sclass不是Sno的子集,也不能函 数确定Sno),Sclass->Cmon,所以非主属性Cmon对码Sno传递函数依赖, 所以它不是3NF。因此,R1满足2NF而不满足3NF。 3.满足3NF而不满足BCNF,代表了这个关系消除了非主属性对码的部分依 赖、传递依赖,但并不是每一个决定因素都包含码,那门就可以从这里 入手了:设这个关系为R2,要满足要求,则需找到一个或一组属性,让 它既不是码,又能够函数决定另外一个或一组属性,为了简单方便,这

相关文档
最新文档