搜档网
当前位置:搜档网 › 西安邮电大学操作系统内存管理实验报告含源码

西安邮电大学操作系统内存管理实验报告含源码

西安邮电大学操作系统内存管理实验报告含源码
西安邮电大学操作系统内存管理实验报告含源码

西安邮电大学

(计算机学院)

课内实验报告

实验名称:内存管理

专业名称:软件工程

班级:1201班

学生姓名:

学号(8位):

指导教师:

实验日期:2014年11月25日

一.实验目的及实验环境

(一)、实验环境

1. 硬件

(1) 主机:Pentium III 以上;

(2) 内存:128MB 以上;

(3) 显示器:VGA 或更高;

(4) 硬盘空间:至少100MB 以上剩余空间。

2. 软件

Ubuntu下gcc编译器、gdb调试工具。

(二)、实验目的

(1)、掌握内存分配FF,BF,WF策略及实现的思路;

(2)、掌握内存回收过程及实现思路;

(3)、参考本程序思路,实现内存的申请、释放的管理程序,调试运行,总结程序设计中出现的问题并找出原因。

二、实验内容

(1)补充完整FF,BF,WF等算法的代码;

(2)掌握内存回收过程及实现思路;

(3)实现内存的申请和释放。

三.方案设计

(一)、实现功能

1 - Set memory size (default=1024)

2 - Select memory allocation algorithm

3 - New process

4 - Terminate a process

5 - Display memory usage

0 - Exit

(二)、关键算法思想设计与分析

首次适应算法(First Fit):从空闲分区表的第一个表目起查找该表,把最先能够满足要求的空闲区分配给作业,这种方法目的在于减少查找时间。为适应这种算法,空闲分区表(空闲区链)中的空闲分区要按地址由低到高进行排序。该算法优先使用低址部分空闲区,在低址空间造成许多小的空闲区,在高地址空间保留大的空闲区。最佳适应算法(Best Fit):它从全部空闲区中找出能满足作业要求的、且大小最小的空闲分区,这种方法能使碎片尽量小。为适应此算法,空闲分区表(空闲区链)中的空闲分区要按从小到大进行排序,自表头开始查找到第一个满足要求的自由分区分配。该算法保留大的空闲区,但造成许多小的空闲区。

最差适应算法(Worst Fit):它从全部空闲区中找出能满足作业要求的、且大小最大的空闲分区,从而使链表中的结点大小趋于均匀,适用于请求分配的内存大小范围较窄的系统。为适应此算法,空闲分区表(空闲区链)中的空闲

分区要按大小从大到小进行排序,自表头开始查找到第一个满足要求的自由分区分配。该算法保留小的空闲区,尽量减少小的碎片产生。

四.测试数据及运行结果

设置内存大小

选择算法

创建进程

选择杀死进程

查看内存以及进程

五.总结

这次实验刚开始的时候不知道整个实验的思路,还好老师在课堂上大概讲解了一下,并且给出了大部分代码,剩下的工作就是填写部分代码,这样实验就简单多了。通过本次的内存实验我了解到了内存的管理模型的知识,在内存紧缩合并回收部分还遇到了一些问题,最终通过查资料解决了问题,虽然对内存的管理掌握得不是很熟练,但这激励了我下来后看书,努力学习不懂的知识,通过让我对其有了更加深入的了解,让我认识到了,操作系统是一项真正实用,而且很有意义的学科,增加了我对操作系统的兴趣,也为以后的学习打下理论基础。

六、源代码

#include

#include

#include

#include

#define PROCESS_NAME_LEN 32 //进程名长度

#define MIN_SLICE 10 //最小碎片的大小

#define DEFAULT_MEM_SIZE 1024 //内存大小

#define DEFAULT_MEM_START 0 //起始位置

/*内存分配算法*/

#define MA_FF 1

#define MA_BF 2

#define MA_WF 3

/*描述每一个空闲块的数据结构*/

struct free_block_type

{

int size; //空闲块大小

int start_addr; //空闲块起始地址

struct free_block_type *next; //指向下一个空闲块

};

/*指向内存中空闲块链表的首指针*/

struct free_block_type *free_block = NULL;

/*每个进程分配到的内存块的描述*/

struct allocated_block

{

int pid; //进程标识符

int size; //进程大小

int start_addr; //进程分配到的内存块的起始地址

char process_name[PROCESS_NAME_LEN]; //进程名

struct allocated_block *next; //指向下一个进程控制块

};

/*进程分配内存块链表的首指针*/

struct allocated_block *allocated_block_head = NULL;

int free_block_count = 0; //空闲块个数

int mem_size = DEFAULT_MEM_SIZE; //内存大小

int current_free_mem_size = 0; //当前空闲内存大小

int ma_algorithm = MA_FF; //当前分配算法

static int pid = 0; //初始PID

int flag = 0; //设置内存大小标志,表示内存大小是否设置

/*函数声明*/

struct free_block_type* init_free_block(int mem_size);

void display_menu();

int set_mem_size();

void set_algorithm();

void rearrange(int algorithm);

int rearrange_WF();

int rearrange_BF();

int rearrange_FF();

int new_process();

int allocate_mem(struct allocated_block *ab);

void kill_process();

int free_mem(struct allocated_block *ab);

int dispose(struct allocated_block *free_ab);

int display_mem_usage();

struct allocated_block *find_process(int pid);

int do_exit();

int allocate_FF(struct allocated_block *ab);

int allocate_BF(struct allocated_block *ab);

int allocate_WF(struct allocated_block *ab);

int allocate(struct free_block_type *pre, struct free_block_type *allocate_free_nlock, struct allocated_block *ab);

int mem_retrench(struct allocated_block *ab);

// 通过内存紧缩技术给新进程分配内存空间

int mem_retrench(struct allocated_block *ab)

{

struct allocated_block *allocated_work, *allocated_pre = allocated_block_head;

struct free_block_type *free_work, *free_pre = free_block->next;

if(allocated_pre == NULL)

return -1;

allocated_pre->start_addr = 0;

allocated_work = allocated_pre->next;

while(allocated_work != NULL)

{

allocated_work->start_addr = allocated_pre->start_addr + allocated_pre->size;

allocated_pre = allocated_work;

allocated_work = allocated_work->next;

}

free_block->start_addr = allocated_pre->start_addr + allocated_pre->size;

free_block->size = current_free_mem_size;

free_block->next = NULL;

free_work = free_pre;

while(free_pre != NULL)

{

free(free_pre);

free_pre = free_work;

if(free_pre != NULL)

free_work = free_work->next;

}

allocate(NULL, free_block, ab);

return 1;

}

// 给新进程分配内存空间

int allocate(struct free_block_type *pre, struct free_block_type *allocate_free_block, struct allocated_block *ab)

{

struct allocated_block *p = allocated_block_head;

ab->start_addr = allocate_free_block->start_addr;

if(allocate_free_block->size - ab->size < MIN_SLICE)

{

ab->size = allocate_free_block->size;

if(pre != NULL)

{

pre->next = allocate_free_block;

}

else

{

free_block = allocate_free_block->next;

}

free(allocate_free_block);

}

else

{

allocate_free_block->start_addr += ab->size;

allocate_free_block->size -= ab->size;

}

if(p == NULL)

{

allocated_block_head = ab;

}

else

{

while(p->next != NULL)

p = p->next;

p->next = ab;

}

current_free_mem_size -= ab->size;

if(current_free_mem_size == 0)

free_block = NULL;

return 0;

}

//按照最坏适应算法给新进程分配内存空间

int allocate_WF(struct allocated_block *ab)

{

int ret;

struct free_block_type *wf = free_block;

if(wf == NULL)

return -1;

if(wf->size >= ab->size)

allocate(NULL, wf, ab);

else if(current_free_mem_size >= ab->size)

ret = mem_retrench(ab);

else

ret = -2;

rearrange_WF();

return ret;

}

// 按照最佳适应算法给新进程分配内存空间

int allocate_BF(struct allocated_block *ab)

{

int ret;

struct free_block_type *pre = NULL, *bf = free_block;

if(bf == NULL)

return -1;

while(bf != NULL)

{

if(bf->size >= ab->size)

{

ret = allocate(pre, bf,ab);

break;

}

pre = bf;

pre = pre->next;

}

if(bf == NULL && current_free_mem_size > ab->size) ret = mem_retrench(ab);

else

ret = -2;

rearrange_BF();

return ret;

}

// 按照首次适应算法给新进程分配内存空间

int allocate_FF(struct allocated_block *ab)

{

int ret;

struct free_block_type *pre = NULL, *ff = free_block;

if(ff == NULL)

return -1;

while(ff != NULL)

{

if(ff->size >= ab->size)

{

ret = allocate(pre, ff,ab);

break;

}

pre = ff;

pre = pre->next;

}

if(ff == NULL && current_free_mem_size > ab->size) ret = mem_retrench(ab);

else

ret = -2;

rearrange_FF();

return ret;

}

//分配内存模块

int allocate_mem(struct allocated_block *ab)

{

int ret ;

struct free_block_type *fbt, *pre;

int request_size = ab->size;

fbt = pre = free_block;

switch(ma_algorithm)

{

case MA_FF :

ret = allocate_FF(ab);

break;

case MA_BF :

ret = allocate_BF(ab);

break;

case MA_WF :

ret = allocate_WF(ab);

break;

default :

break;

}

return ret;

}

// 创建一个新的进程。

int new_process()

{

struct allocated_block *ab;

int size;

int ret;

ab = (struct allocated_block *)malloc(sizeof(struct allocated_block));

if(!ab)

exit(-5);

ab->next = NULL;

pid++;

sprintf(ab->process_name, "PROCESS-%02d", pid); //sprintf()函数将格式化的数据写入某字符串中

ab->pid = pid;

printf("Memory for %s:", ab->process_name);

for(; ; )

{

scanf("%d", &size);

getchar();

if(size > 0)

{

ab->size = size;

break;

}

else

printf("The size have to greater than zero! Please input again!");

}

ret = allocate_mem(ab); //从空闲区分配内存,ret==1表示分配ok if((ret == 1) && (allocated_block_head == NULL)) //如果此时allocated_block_head尚未赋值,则赋值

{ //进程分配链表为空

allocated_block_head = ab;

return 1;

}

else if(ret == 1) //分配成功,将该已分配块的描述插入已分配链表{

ab->next = allocated_block_head; //头插法

allocated_block_head = ab;

return 2;

}

else if(ret == -1) //分配不成功

{

printf("Allocation fail\n");

free(ab);

return -1;

}

return 3;

}

//退出程序并释放内存空间。

int do_exit()

{

struct allocated_block *allocated_ab, *allocated_pre;

struct free_block_type *free_ab, *free_pre;

free_pre = free_block;

allocated_pre = allocated_block_head;

if(free_pre != NULL)

{

free_ab = free_pre->next;

while(free_ab != NULL)

{

free(free_pre);

free_pre = free_ab;

free_ab = free_ab->next;

}

}

if(allocated_pre != NULL)

{

allocated_ab = allocated_pre->next;

while(allocated_ab != NULL)

{

free(allocated_pre);

allocated_pre = allocated_ab;

allocated_ab = allocated_ab->next;

}

}

allocated_ab = allocated_ab->next;

return 0;

}

//在进程分配链表中寻找指定进程。

struct allocated_block *find_process(int pid)

{

struct allocated_block *ab = allocated_block_head;

if(ab == NULL)

{

printf("Here??????111111111\n");

return NULL;

}

while(ab->pid != pid && ab->next != NULL)

ab = ab->next;

if(ab->next == NULL && ab->pid != pid)

{

printf("Here??????2222222\n");

return NULL;

}

return ab;

}

//显示当前内存的使用情况,包括空闲区的情况和已经分配的情况。int display_mem_usage()

{

struct free_block_type *fbt = free_block;

struct allocated_block *ab = allocated_block_head;

printf("----------------------------------------------------------\n");

//显示空闲区

printf("Free Memory:\n");

printf("%20s %20s\n", " start_addr", " size");

while(fbt != NULL)

{

printf("%20d %20d\n", fbt->start_addr, fbt->size);

fbt = fbt->next;

}

//显示已分配区

printf("\nUsed Memory:\n");

printf("%10s %20s %10s %10s\n", "PID", "ProcessName", "start_addr", " size");

while(ab != NULL)

{

printf("%10d %20s %10d %10d\n", ab->pid, ab->process_name, ab->start_addr, ab->size);

ab = ab->next;

}

printf("----------------------------------------------------------\n");

return 1;

}

// 释放ab数据结构节点。

int dispose(struct allocated_block *free_ab)

{

struct allocated_block *pre, *ab;

if(free_block == NULL)

return -1;

if(free_ab == allocated_block_head) //如果要释放第一个节点

{

allocated_block_head = allocated_block_head->next;

free(free_ab);

}

else

{

pre = allocated_block_head;

ab = allocated_block_head->next;

//找到free_ab

while(ab != free_ab)

{

pre = ab;

ab = ab->next;

}

pre->next = ab->next;

free(ab);

}

return 1;

}

/*将ab所表示的已分配区归还,并进行可能的合并*/

int free_mem(struct allocated_block *ab)

{

int algorithm = ma_algorithm;

struct free_block_type *fbt, *pre, *work;

fbt = (struct free_block_type*)malloc(sizeof(struct free_block_type));

if(!fbt)

return -1;

pre = free_block;

fbt->start_addr = ab->start_addr;

fbt->size = ab->size;

fbt->next = NULL;

if(pre != NULL)

{

while(pre->next != NULL)

pre = pre->next;

pre->next = fbt;

}

else

{

free_block = fbt;

}

rearrange_FF();

pre = free_block;

work = pre->next;

while(work != NULL)

{

if(pre->start_addr + pre->size == work->start_addr)

{

pre->size += work->size;

free(work);

work = pre->next;

}

else

{

pre = work;

work = work->next;

}

}

current_free_mem_size += ab->size;

return 1;

}

// 删除进程,归还分配的存储空间,并删除描述该进程内存分配的节点。void kill_process()

{

struct allocated_block *ab;

int pid;

printf("Kill Process, pid=");

scanf("%d", &pid);

getchar();

ab = find_process(pid);

if(ab != NULL)

{

free_mem(ab); /*释放ab所表示的分配区*/

dispose(ab); /*释放ab数据结构节点*/

}

}

//按FF算法重新整理内存空闲块链表,按空闲块首地址排序。

int rearrange_FF()

{

struct free_block_type *head = free_block;

struct free_block_type *forehand, *pre, *rear;

int i;

if(head == NULL)

return -1;

//冒泡排序

for(i = 0; i < free_block_count-1; i++)

{

forehand = head;

pre = forehand->next;

rear = pre->next;

while(pre->next != NULL)

{

if(forehand == head && forehand->start_addr >= pre->start_addr) //比较空闲链表中第一个空闲块与第二个空闲块的开始地址的大小

{

head->next = pre->next;

pre->next = head;

head = pre;

forehand = head->next;

pre = forehand->next;

rear = pre->next;

}

else if(pre->start_addr >= rear->start_addr) //比较链表中其他相邻两节点的开始地址的大小

{

pre->next = rear->next;

forehand->next = rear;

rear->next = pre;

forehand = rear;

}

else

{

forehand = pre;

pre = rear;

rear = rear->next;

}

}

}

return 0;

}

// 按BF算法重新整理内存空闲块链表,按空闲块大小从小到大排序。

int rearrange_BF()

{

struct free_block_type *head = free_block;

struct free_block_type *forehand, *pre, *rear;

int i;

if(head == NULL)

return -1;

//冒泡排序

for(i = 0; i < free_block_count-1; i++)

{

forehand = head;

pre = forehand->next;

rear = pre->next;

while(pre->next != NULL)

{

if(forehand == head && forehand->size <= pre->size) //比较空闲链表中第一个空闲块与第二个空闲块的空间的大小

{

head->next = pre->next;

pre->next = head;

head = pre;

forehand = head->next;

pre = forehand->next;

rear = pre->next;

}

else if(pre->size <= rear->size) //比较链表中其他相邻两节点的空间的大小

{

pre->next = rear->next;

forehand->next = rear;

forehand = rear;

rear = pre->next;

}

else

{

forehand = pre;

pre = rear;

rear = rear->next;

}

}

}

return 0;

}

//按WF算法重新整理内存空闲块链表,按空闲块大小从大到小排序。

int rearrange_WF()

{

struct free_block_type *head = free_block;

struct free_block_type *forehand, *pre, *rear;

int i;

if(head == NULL)

return -1;

//冒泡排序

for(i = 0; i < free_block_count-1; i++)

{

forehand = head;

pre = forehand->next;

rear = pre->next;

while(pre->next != NULL)

{

if(forehand == head && forehand->size >= pre->size) //比较空闲链表中第一个空闲块与第二个空闲块空间的大小

{

head->next = pre->next;

pre->next = head;

head = pre;

forehand = head->next;

pre = forehand->next;

rear = pre->next;

}

else if(pre->size >= rear->size) //比较链表中其他相邻两节点的空间的大小

{

pre->next = rear->next;

forehand->next = rear;

rear->next = pre;

forehand = rear;

rear = pre->next;

}

else

{

forehand = pre;

pre = rear;

rear = rear->next;

}

}

}

return 0;

}

//按指定的算法整理内存空闲块链表。

void rearrange(int algorithm)

{

switch(algorithm)

{

case MA_FF:

rearrange_FF();

break;

case MA_BF:

rearrange_BF();

break;

case MA_WF:

rearrange_WF();

break;

}

}

//设置当前的分配算法

void set_algorithm()

{

int algorithm;

//system("clear");

printf("\t1 - First Fit\n"); //首次适应算法printf("\t2 - Best Fit \n"); //最佳适应算法printf("\t3 - Worst Fit \n"); //最坏适应算法printf("\nPlease choose(1~3):");

for(; ; )

{

scanf("%d", &algorithm);

getchar();

if(algorithm >= 1 && algorithm <= 3)

{

ma_algorithm = algorithm;

break;

}

else

{

printf("\nCannot input %d, Please input 1~3 : ", algorithm);

}

}

//按指定算法重新排列空闲区链表

rearrange(ma_algorithm);

}

//设置内存的大小

int set_mem_size()

{

int size;

if(flag != 0) //防止重复设置

{

printf("Cannot set memory size again\n");

return 0;

}

printf("Total memory size = ");

for(; ; )

{

scanf("%d", &size);

getchar();

if(size > 0)

{

current_free_mem_size = size;

mem_size = size; //设置内存大小为size

free_block->size = mem_size; //设置空闲块大小为size

break;

}

else

{

printf("The size must greater than zero! Please input again:");

}

}

flag = 1; //内存大小已经设置

return 1;

}

//显示主菜单

void display_menu()

{

printf("\n");

//system("clear");

printf("1 - Set memory size (default=%d)\n", DEFAULT_MEM_SIZE);

printf("2 - Select memory allocation algorithm\n");

printf("3 - New process \n");

printf("4 - Terminate a process \n");

printf("5 - Display memory usage \n");

printf("0 - Exit\n");

}

// 初始化空闲块,默认为一块,可以指定大小及起始地址

struct free_block_type* init_free_block(int mem_size)

{

struct free_block_type *fb;

fb = (struct free_block_type *)malloc(sizeof(struct free_block_type));

if(fb == NULL) //初始化失败

{

printf("No mem\n");

return NULL;

}

current_free_mem_size = mem_size;

fb->size = mem_size; //设置空闲块大小

fb->start_addr = DEFAULT_MEM_START; //空闲块起始地址

fb->next = NULL; //首地址指向NULL

return fb;

}

/*主函数*/

int main(void)

{

char choice;

pid = 0;

free_block = init_free_block(mem_size); //初始化空闲区

while(1)

{

display_menu(); //显示菜单

fflush(stdin);

choice = getchar(); //获取用户输入

getchar();

switch(choice)

{

case '1': //设置内存大小

set_mem_size();

break;

case '2': //设置算法

set_algorithm();

flag = 1;

break;

case '3': //创建新进程

new_process();

flag = 1;

break;

case '4': //删除进程

kill_process();

flag = 1;

break;

case '5': //显示内存使用

display_mem_usage();

flag = 1;

break;

case '0': //释放链表并退出

do_exit();

exit(0);

default:

break;

}

}

}

西安交通大学接口技术实验报告

西安交通大学 微型计算机接口技术实验报告 班级:物联网 姓名: 学号:

实验一基本I/O扩展实验 一、实验目的 1、了解 TTL 芯片扩展简单 I/O 口的方法,掌握数据输入输出程序编制的方法; 2、对利用单片机进行 I/O 操作有一个初步体会。 二、实验内容 74LS244 是一种三态输出的8 总线缓冲驱动器,无锁存功能,当G 为低电平时,Ai 信号传送到Yi,当为高电平时,Yi 处于禁止高阻状态。 74LS273 是一种8D 触发器,当CLR 为高电平且CLK 端电平正跳变时,D0——D7 端数据被锁存到8D 触发器中。 实验原理图: 三、实验说明 利用74LS244 作为输入口,读取开关状态,并将此状态通过74LS273 再驱动发光二极管显示出来,连续运行程序,发光二极管显示开关状态。

四、实验流程图 五、实验连线 1、244的cs连接到CPU地址A15,Y7—Y0连接开关K1-K8; 2、273的CS连接到CPU地址A14,Q7-Q0连接到发光二极管L1-L8; 3、该模块的WR,RD连接CPU的WR,RD,数据线AD7-AD0,地址线A7-A0分别与CPU的数据线AD7-AD0,地址线A7-A0相连接。

六、程序源代码(略) 七、实验结果 通过开关K01 到K08 可以对应依次控制LED 灯的L1 到L8 ,即当将开关Ki 上拨时,对应的Li 被点亮,Ki 下拨时,对应的Li熄灭。 此外,如果将开关拨到AAH 时,将会产生LED 灯左移花样显示;如果开关拨到55H 时,将会产生LED 灯右移花样显示。 七、实验心得 通过本次实验,我了解了TTL 芯片扩展简单I/O 口的方法,同时也对数据输入输出程序编制的方法有一定的了解与掌握,对利用单片机进行I/O 操作有一个初步体会,实验使我对自己在课堂上学的理论知识更加理解,同时也锻炼了我的动手操作能力。

操作系统实验内存分配

西安邮电大学 (计算机学院) 课内实验报告 实验名称:内存管理 专业名称:软件工程 班级: 学生姓名: 学号(8位): 指导教师: 实验日期:

实验五:进程 1.实验目的 通过深入理解区管理的三种算法,定义相应的数据结构,编写具体代码。充分模拟三种算法的实现过程,并通过对比,分析三种算法的优劣。 (1)掌握内存分配FF,BF,WF策略及实现的思路; (2)掌握内存回收过程及实现思路; (3)参考给出的代码思路,实现内存的申请、释放的管理程序,调试运行,总结程序设计中出现的问题并找出原因,写出实验报告。 2.实验要求: 1)掌握内存分配FF,BF,WF策略及实现的思路; 2)掌握内存回收过程及实现思路; 3)参考本程序思路,实现内存的申请、释放的管理程序,调试运行,总结程序设计中出现的问题并找出原因,写出实验报告。 3.实验过程: 创建进程:

删除其中几个进程:(默认以ff首次适应算法方式排列) Bf最佳适应算法排列方式:

wf最差匹配算法排列方式: 4.实验心得: 这次实验实验时间比较长,而且实验指导书中对内存的管理讲的很详细,老师上课的时候也有讲的很详细,但是代码比较长,刚开始的时候也是不太懂,但是后面经过和同学一起商讨,明白几种算法的含义: ①首次适应算法。在采用空闲分区链作为数据结构时,该算法要求空闲分区链表以地址递增的次序链接。在进行内存分配时,从链首开始顺序查找,直至找到一个能满足进程大小要求的空闲分区为止。然后,再按照进程请求内存的大小,从该分区中划出一块内存空间分配给请求进程,余下的空闲分区仍留在空闲链中。 ②循环首次适应算法。该算法是由首次适应算法演变而形成的,在为进程分配内存空间时,从上次找到的空闲分区的下一个空闲分区开始查找,直至找到第一个能满足要求的空闲分区,并从中划出一块与请求的大小相等的内存空间分配给进程。 ③最佳适应算法将空闲分区链表按分区大小由小到大排序,在链表中查找第一个满足要求的分区。 ④最差匹配算法将空闲分区链表按分区大小由大到小排序,在链表中找到第一个满足要求的空闲分区。 实验中没有用到循环首次适应算法,但是对其他三种的描述还是很详细,总的来说,从实验中还是学到了很多。 5.程序源代码: #include #include #include

2015西安交通大学操作系统考试试卷(带答案)

2015西安交通大学操作系统考试试卷(带答案)

2014—2015学年第 1 学期 (A 卷标准答案) 西安交通大学考试试卷(操作系统)(A /B □卷) 开课单位: 课程名称: 操作系统 课程编码: 106027 时间120分钟,开卷□/闭卷 ,总分100分,占总评成绩80%,2015 年1月11日 提示:本场考试不得携带使用计算器。 阅 卷 评 分 表(评阅人填写) 题号 一 二 三 四 五 六 七 八 总得分 得分 评阅人 诚信承诺: 我保证严格遵守学校考场规则,诚信应考。若有任何违纪、作弊行为,自愿接受学校按相关规定进行处理。 本人签名: 院(系): 专业班级: 姓名: 学号: 装 订

一、选择题(共20分,各选项0.5分) 1、在分时系统中,为使多个用户能够同时与系统交互,最关键的问题是( 4)A;当用户数目为100时,为保证响应时间不超过2s,此时的时间片最大应为( 2)B。 A:(1)计算机具有足够高的运行速度;(2)内存容量应足够大;(3)系统能及时地接收多个用户的输入;(4)能在一较短的时间内,使所有用户程序都得到运行;(5)能快速进行内外存对换。 B:(1)10ms;(2)20ms;(3)50ms;(4)100ms;(5)200ms。 2、设有10个进程共享一个互斥段,如果最多允许有1个进程进入互斥段,则所采用的互斥信号量初值应设置为( 3)A,而该信号量的取值范围为( 4)B;如果最多允许有3个进程同时进入互斥段,则所采用的互斥信号量初值应设置为( 2)C A,C:(1)10;(2)3;(3)1;(4)0。 B:(1)0~1;(2)-1~0;(3)1~-9;(4)0~-9。 3、在引入线程的操作系统中,资源分配和调度的基本单位是(2 ),CPU调度和分配的基本单位是(3)。 (1)程序;(2)进程;(3)线程;(4)作业。 4、设m为同类资源R的数目,n为系统中的并发进程数。当n个进程共享m个互斥资源R 时,每个进程对R的最大需求是w;则下列情况会出现死锁的是(4)。 (1)m=2,n=1,w=2;(2)m=2,n=2,w=1;(3)m=4,n=3,w=2;(4)m=4,n=2,w=3。 5、一个计算机系统的虚拟存储器最大容量是由(5)确定的,其实际容量是由(4)决定的。(1)计算机字长;(2)内存容量;(3)硬盘容量;(4)内存和硬盘容量之和;(5)计算机的地址结构。 6、下列解决死锁的方法中,属于死锁预防策略的是( 2),属于死锁避免策略的是( 1)。(1)银行家算法;(2)资源有序分配法;(3)资源分配图化简法;(4)撤销进程法。 7、为实现设备分配,应为每类设备配置一张( 1),在系统中配置一张( 3);为实现设备独立性,系统中应配置一张( 2)。 (1)设备控制表;(2)逻辑设备表;(3)系统设备表;(4)设备分配表;(5)I/O请求表8、现代操作系统中,提高内存利用率主要是通过(1或4)功能实现的,而使每道程序能在不受干扰的环境下运行,主要是通过(2 )功能实现的。 (1)对换;(2)内存保护;(3)地址映射;(4)虚拟存储器。 9、在请求调页系统中,若逻辑地址中的页号超过页表控制寄存器中的页表长度,则会引起(3);否则,若所需的页不在内存中,则会引起(4)。 (1)输入/输出中断;(2)时钟中断;(3)越界中断;(4)缺页中断。 10、测得某个请求调页的计算机系统部分的状态数据如下:CPU利用率为20%,用于对换空间的硬盘的利用率为97.7%,其它设备的利用率为5%。由此判定系统出现异常。此种情况下,(4)A或(1)B能提高CPU利用率。 A:(1)安装一个更快的硬盘;(2)通过扩大硬盘容量增加对换空间; (3)增加运行进程数;(4)减少运行进程数。 B:(1)加内存条,增加物理空间容量;(2)增加一个更快的CPU; (3)增加其他更快的I/O设备;(4)使用访问速度更快的内存条。 11、静态链接是在(5)A进行的,而动态链接是在(2)B或(3)C进行的,其中在(3)C进行链接可使得内存利用率最高;适用于动态链接的存储方式是(1)D。 A,B,C:(1)编译某段程序时;(2)装入某段程序时;(3)调入某段程序时;(4)紧凑时;(5)装入程序之前。 D:(1)分段存储管理;(2)分页存储管理;(3)可变分区管理;(4)固定分区管理。

西安石油大学数据库实验3索引及视图操作

实验报告 课程名称:学院名称:数据原理与应用计算机学院 专业班级:计1201 学生姓名:张文江 学号:201107010122

实验3 索引及视图操作 一、实验目的 1. 加深对索引和视图概念的理解。 2. 熟练掌握索引的创建和删除。 3. 熟练掌握视图的创建、修改和删除。 4. 熟练运用视图进行各种检索操作。 二、实验环境 硬件环境:PC机 软件环境:操作系统为Microsoft Windows 2000或以上版本。 数据库管理系统为Microsoft SQL Server 2000标准版或企业版。 三、实验内容 1. 熟悉运用SQL Server企业管理器和查询分析器进行索引的创建和删除。 2. 熟悉运用SQL Server企业管理器和查询分析器进行视图的创建、删除和修改。 四、实验步骤 1. 利用实验1已经建立并保存过的学生表、课程表,学生表按学号建立惟一索引,课程表按课程名建立惟一索引; create index S_sno on S(sno) create index C_cno on C(cno) 2. 利用实验1已经建立并保存过的学生表和选课表建立一个“网络工程”专业学生成绩视图JSGV(sno,cno,grade); create view JSGV(sno,cno,grade) as select S.sno,cno,grade from SC,S where dept='网络工程'and S.sno=SC.sno 利用视图JSGV查询“网络工程”专业的学生选课多于2门的学生学号; select distinct sno

from JSGV group by sno having (count(*)>2) 验证能否利用视图JSGV中插入一条“网络工程”专业学生选修“高等数学”课程的记录,并查询结果信息; insert into JSGV values('20080205','c03','85') 删除视图JSGV。 drop view JSGV 3. 利用实验1已经建立并保存过的学生表、课程表、选课表建立视图TOTAL(sno,sname,cname,grade); create view TOTAL(cno,sname,cname,grade) as select https://www.sodocs.net/doc/2f10253399.html,o,sname,cname,grade from SC,S,C where S.sno=SC.sno and https://www.sodocs.net/doc/2f10253399.html,o=https://www.sodocs.net/doc/2f10253399.html,o

西安邮电大学认识实习报告

西安郵電大学 认知实习报告书 院系名称:计算机学院 学生姓名:张帆帆 专业名称:计算机科学与技术 班级:1506班 实习时间:2016年6月20-216年6月22

认识实习报告 2016年6月20日我们开始了我们为期三天的认识实习,从学校一些重要的实验室到学校的网络中心室,还有西安软件园和中兴手机。 虽然说我们从来到这所学校已经快一年了,但是我们对学校的了解还是微乎其微,比如各种各样的实验室,他们有自己不同的发展方向和侧重点,还有各种各样高级的实验设备和经验丰富的指导老师,这些都是一个学校,一个学院甚至一个专业的精华所在,是无数代前人和学长学姐努力的产物,他们把它赋予价值并且发扬光大。相比于对自己学院的核心一无所知,整天待在宿舍,能见识一下自己所在地方的魅力,显得意义非凡。 第一天我们参观的是自动化学院的实验室,参观的同时有老师或者学长进行讲解,我们首先参观的是217-221实验室,他们的侧重点是测控和计控原理,其中自控原理的核心思想是闭环控制,老师讲解的时候举了一个空调的例子。一个闭环控制主要部件有控制器、执行器、被控对象和监测系统。即由监测系统检测并反馈给CPU,CPU启动执行器,执行器执行其所控制的被控对象,比如空调会制冷,形成一个闭合的执行系统。211实验室主要是单片机,也叫单板机,是一个装置的核心控制部分。然后还参观了无线传感实验室,主要承担智能传感网、物联网技术等,面向测控技术与仪器。中途老师还带我们参观了航模实验室,虽然核心地区在一个非常小的屋子里,但是里面墙壁,桌面上,地上,摆放着各种各样的飞行器组件及成品,虽然有些成品看起来非常简单,但它却能完成各种各样的飞行任务,保持双翼平衡及旋转角度控制,真的非常神奇,因为完成它们的不是什么传说中的科学家或教授,而是在校大学生,是一些为了梦想不断学习的普普通通的大学生。最后参观的是非常有意思的一个实验室,叫机器人创新实验室,他们主要是做一些有目的性的“机器人”,可以完成特定任务,当然它们的长相不一定是人的形态,是一个比较形象的称呼,主要是由一些传感器和电机以及单片机焊接电路组成,学长还展示了他们的功能,比如避障,摇尾巴,电子秤,会踢足球的机器人,还有门禁系统,我觉得这些和我们东区的嵌入式其实差不多,可是我却并不了解! 在这个过程中,老师还展示了一些学长学姐由一个思想的火花把它变成现实

北理工操作系统内存管理实验报告

实验三:内存管理 班级: 学号:

姓名: 一、实验目的 1.通过编写和调试存储管理的模拟程序以加深对存储管理方案的理解; 2.熟悉虚存管理的页面淘汰算法; 3.通过编写和调试地址转换过程的模拟程序以加强对地址转换过程的了解。 二、实验要求 1.设计一个请求页式存储管理方案(自己指定页面大小),并予以程序实现。 并产生一个需要访问的指令地址流。它是一系列需要访问的指令的地址。为不失一般性,你可以适当地(用人工指定地方法或用随机数产生器)生成这个序列。 2.页面淘汰算法采用FIFO页面淘汰算法,并且在淘汰一页时,只将该页在页 表中抹去。而不再判断它是否被改写过,也不将它写回到辅存。 3.系统运行既可以在Windows,也可以在Linux。 三、实验流程图

图1 页式存储管理程序参考流程 四、实验环境 硬件设备:个人计算机。 系统软件:windows操作系统,Visual C++6.0编译环境。 五、实验结果

说明:模拟产生35个指令地址,随机产生20个指令地址进行排队,假设主存中共有10个工作集页帧。将前9个指令调入内存,因为前9个指令中,页号为13的指令有两个,所以调入内存中共有8页。此时主存中还有两个空闲帧。此时按刚才随机顺序进行访问指令工作。前9页因都在主存中可直接调用。第10个随机地址为页号为5的指令,也在主存中,也可直接调用。页号为24,3因不在主存中,需要调用进主存。此时主存已满。然后主存需要进行调用页号为27号的指令,因主存已满,需要执行FIFO算法,将最先进入主存的页号为30的指令调出,将27号放入第1000000帧。以后需要调用的页面按照存在就无需调用,否则按FIFO原则进行调页工作。 六、实验感想 七、实验代码 #include

西安交大数字图像处理第二次实验报告

数字图像处理第二次作业

摘要 本次报告主要记录第二次作业中的各项任务完成情况。本次作业以Matlab 2013为平台,结合matlab函数编程实现对lena.bmp,elain1.bmp图像文件的相关处理:1.分别得到了lena.bmp 512*512图像灰度级逐级递减8-1显示,2.计算得到lena.bmp图像的均值和方差,3.通过近邻、双线性和双三次插值法将lena.bmp zoom到2048*2048,4. 把lena和elain 图像分别进行水平shear(参数可设置为1.5,或者自行选择)和旋转30度,并采用用近邻、双线性和双三次插值法zoom到2048*2048。以上任务完成后均得到了预期的结果。 1.把lena 512*512图像灰度级逐级递减8-1显示 (1)实验原理: 给定的lena.bmp是一幅8位灰阶的图像,即有256个灰度色。则K位灰阶图像中某像素的灰度值k(x,y)(以阶色为基准)与原图同像素的灰度值v(x,y)(以256阶色为基准)的对应关系为: 式中floor函数为向下取整操作。取一确定k值,对原图进行上式运算即得降阶后的k位灰阶图像矩阵。 (2)实验方法 首先通过imread()函数读入lena.bmp得到图像的灰度矩阵I,上式对I矩阵进行灰度降阶运算,最后利用imshow()函数输出显示图像。对应源程序为img1.m。 (3)处理结果 8灰度级

7灰度级 6灰度级 5灰度级

4灰度级 3灰度级 2灰度级

1灰度级 (4)结果讨论: 由上图可以看出,在灰度级下降到5之前,肉眼几乎感觉不出降阶后图像发生的变化。但从灰度级4开始,肉眼明显能感觉到图像有稍许的不连续,在灰度缓变区常会出现一些几乎看不出来的非常细的山脊状结构。随着灰度阶数的继续下降,图像开始出现大片的伪轮廓,灰度级数越低,越不能将图像的细节刻画出来,最终的极端情况是退化为只有黑白两色的二值化图像。由此可以得出,图像采样的灰度阶数越高,灰度围越大,细节越丰富,肉眼看去更接近实际情况。 2.计算lena图像的均值方差 (1)实验原理 对分辨率为M*N的灰度图像,其均值和方差分别为: (2)实验方法 首先通过imread()函数读入图像文件到灰度矩阵I中,然后利用 mean2函数和std2函数计算灰度矩阵(即图像)的均值和标准差,再由标准差平方得到方差。对应源程序:img1.m (3)处理结果 均值me =99.0512,标准差st =52.8776,方差sf =2.7960e+03。 (4)结果分析 图像的均值可反应图像整体的明暗程度,而方差可以反应图像整体的对比度情况,方差越大,图像的对比度越大,可以显示的细节就越多。 3.把lena图像用近邻、双线性和双三次插值法zoom到2048*2048; (1)实验原理 图像插值就是利用已知邻近像素点的灰度值来产生未知像素点的灰度值,以便由原始图

操作系统实验内存分配

精心整理西安邮电大学 (计算机学院) 课内实验报告 1. (1 (2 (3 原因,写出实验报告。 2.实验要求: 1)掌握内存分配FF,BF,WF策略及实现的思路; 2)掌握内存回收过程及实现思路; 3)参考本程序思路,实现内存的申请、释放的管理程序,调试运行,总结程序设计中出现的问题并找出原因,写出实验报告。

3.实验过程: 创建进程: 删除其中几个进程:(默认以ff首次适应算法方式排列) Bf最佳适应算法排列方式: wf最差匹配算法排列方式: 4.实验心得: 明 实验中没有用到循环首次适应算法,但是对其他三种的描述还是很详细,总的来说,从实验中还是学到了很多。 5.程序源代码: #include #include #include #include

#define PROCESS_NAME_LEN 32 //进程名长度 #define MIN_SLICE 10 //最小碎片的大小#define DEFAULT_MEM_SIZE 1024 //内存大小 #define DEFAULT_MEM_START 0 //起始位置 /*内存分配算法*/ #define MA_FF 1 #define MA_BF 2 #define MA_WF 3 /*描述每一个空闲块的数据结构*/ struct free_block_type { }; /* /* { }; /* /* void display_menu(); int set_mem_size(); void set_algorithm(); void rearrange(int algorithm); int rearrange_WF(); int rearrange_BF(); int rearrange_FF(); int new_process(); int allocate_mem(struct allocated_block *ab);

电子生产实习报告 西安邮电大学

西安邮电大学 生产实习报告书 系部名称:电子工程学院 学生姓名: 专业名称:电子信息工程 班级: 实习时间:2013 年 2 月25日至2013 年3月8日

报告内容包括以下几方面: 一、生产实习的目的 1、通过实训熟悉原理图的绘制流程。 2、通过实训认识基本元器件的序号、封装形式。 3、通过实习制作原理图生成电路板。 4、通过实习学会自动布线,制作电路原理图元件和元件封装。 5、通过PROTELl 99 SE 完成几个简单的电路设计,建立和提高对SCH和PCB系统 的认识,并应用到自己的硬件电路设计中。 二、生产实习的内容 1、单片机板:原理图、两种封装形式(直插、表贴) 2、DSP板:符号库、封装库(表贴) 三、原理图设计步骤 (1)新建数据库文件:如mydesign2.ddb (2)建立原理图文件:File/new Schematic document sheet1.Sch (3)加载元件库:Miscellaneous Devices. lib; Protel Dos Schematic. lib; (4)绘制原理图,对于元件库中没有的元器件要自己创建。 (5)检查原理图:tools/ERC (6)添加器件封装:footprint,注意直插式和表贴式的封装形式是不同的。对于封装库中没有的封装,要注意利用向导自己建立。 (7)生成元件清单:reports/bill of material (8)产生网络表:Design/Create Netlist

四、印刷电路板设计步骤 (1)绘制原理图及生成网络表 (2)规划电路板 (3)启动印刷电路板编辑器 (4)设置参数 (5)装入网络表及元件的封装 (6)布置元件 (7)自动布线与手工调整 (8)印刷电路板文件的保存及打印输出 五、原理图符号库的设计 (1)进入元件符号库:design/make project library (2)利用绘图工具栏绘制所需元件。 (3)保存绘制元件,将元件置入电路图。 六、印刷电路板封装库的设计 (1)启动设计数据库文件,进入PCB元件编辑界面。 (2)从tools菜单中选择new component命令,进入封装创建向导。(3)根据实际的元器件确定封装形式,并按照向导的步骤创建元件封装。(4)保存添加。 各阶段电路原理图及封装结果如下: 1.单片机板: (1)原理图

西 安 交 通 大 学 实 验 报 告 生物信息学

课程生物信息学实验名称核酸和蛋白质序列数据的使用系别实验日期: 专业班级组别交报告日期: 姓名学号报告退发:(订正、重做) 同组人无教师审批签字: 实验目的:了解常用的序列数据库,掌握基本的序列数据信息的查询方法。 实验步骤:在序列数据库中查找某条基因序列(insulin人的),通过相关一系列数据库的搜索、比对与结果解释 实验结果: 1.该基因的功能是? DNA结合、RNA结合、雄激素受体结合、酶结合、蛋白结合、转录激活活性、转录调控区的DNA结合、微管蛋白结合、泛素蛋白与连接酶结合、泛素蛋白连接酶的活性、提高泛素蛋白连接酶的活性、锌离子结合 3. 该蛋白质有没有保守的功能结构域 该蛋白质有保守的功能结构域。分别为cd00027(Location:1763 –1842 Blast Score: 107)cd00162(Location:23 –68 Blast Score: 134)pfam04873(Location:655 –978 Blast Score: 1301)pfam12820(Location:344 –507 Blast Score: 809)pfam13923(Location:20 –65 Blast Score: 135) 4. 该蛋白质的功能是怎样的? ①E3泛素蛋白连接酶,专门介导L YS-6'-联泛素链的形成,并通过促胞对DNA损伤的反应,在DNA修复中起着核心的作用;目前还不清楚是否也介导其他类型的泛素链形成。E3泛素蛋白连接酶的活性是其抑癌能必需的。②BARD1- BRCA1异源二聚体协调各种不同的细胞通路,如DNA损伤修复,泛素化和转录调控,以维持基因组稳定性。③调节中心体微核。 ④从G2到有丝分裂的正常细胞周期进程所必需的。⑤参与转录调控在DNA损伤反应中的P21。⑥为FANCD2靶向DNA损伤位点所需。⑦可以用作转录调控因子。⑧绑定到ACACA 和防止其去磷酸化,抑制脂质合成。 5. 该蛋白质的三级结构是什么?如果没有的话, 和它最相似的同源物的结构是什么样子的?给出 示意图。 该蛋白有三级结构,如图所示

西安邮电大学课程设计报告

一. 实验目的及实验环境 实验目的:目前,对于中小超市来说,需要采取一套行之有效的超市管理系统来管理超市的日常进货、销售、员工管理等信息。本次设计的超市管理系统就是想让用户以最少的手工业务处理,来完成超市中的日常工作,增加超市业务处理的效率。 一个典型的超市管理系统,除了应该完成超市中必要的销售工作,如收银台,还应该具有后台管理的功能。 实验环境:系统的体系结构:C/S结构 前台:Java (Eclipse 3.5) 后台数据库:SQL Server 2008 二. 实验内容 超市管理系统 该系统应具备前台收银操作,还有后台对各种数据的管理。 该系统应为多用户使用的,应以用户的权限来进入系统管理模块。 友好的界面及方便简单的操作。 数据存放在数据库中,系统对数据库可进行增、删、查、改的操作。三.方案设计 系统开发的总体任务是实现Java与SQL Server 2008的组合应用,实现用JDBC 方式调用SQL数据库,且有一定的透明性。 超市管理系统需要完成的功能主要有: 1、用户分类登录系统及权限管理。 2、超市收银台的销售管理方式。 3、销售商品信息的录入、查询、修改、删除。 4、供应商信息的录入,查询,修改、删除。 5、超市员工的职位基本信息的设定。 6、员工的基本信息的录入,查询,修改和删除。 7、仓库信息的录入与查看。 8、数据间的相互联系:销售商品的数量和库存量的基本联系;商品信息和供应商的相关数据联系;员工与职位间的联系等。 9、数据存放在数据库中,任何数据操作都是对数据库的数据的操作。

系统结构图(功能模块图) 各个模块的功能描述: (1)、登录界面:本系统简单的设置有三种职位,用户使用密码登录,成功后给其相应的操作界面。 (2)、仓库管理:是仓库管理员和老板可使用的操作,主要是查看仓库的入库信息和添加入库信息。 (3)、管理商品信息:只有老板可用,主要是查看现有商品的信息、修改、删除及添加新的商品信息。 (4)、管理供应商信息:只有老板可用,主要是查看现有的供应商的信息、修改、删除及添加新供应商的信息。 (5)、管理员工信息:只有老板可用,主要是查看现有的员工信息、修改、删除及增加新员工。 (6)、查看销售纪录。 四.测试数据及运行结果 1、Java与数据库SQL 2008的链接: String driverName="com.microsoft.sqlserver.jdbc.SQLServerDriver"; String dbURL="jdbc:sqlserver://localhost:1433;DatabaseName=SuperMarket"; 2、用户登陆(登陆界面,老板界面,仓库管理员界面,销售员界面):

西安石油大学计算机基础理论题题库

理论题部分(共20 分) 一、选择题(每道题1分,共20分) 1、CPU主要由运算器与控制器组成,下列说法中正确的是() A、运算器主要负责分析指令,并根据指令要求作相应的运算 B、运算器主要完成对数据的运算,包括算术运算和逻辑运算 C、控制器主要负责分析指令,并根据指令要求作相应的运算 D、控制器直接控制计算机系统的输入与输出操作 2、下列叙述正确的是() A、计算机病毒只能传染给可执行文件 B、计算机软件是指存储在软盘中的程序 C、计算机每次启动的过程之所以相同,是因为RAM中的所有信息在关机后不会丢失 D、硬盘虽然装在主机箱内,但它属于外存 3、一个字长的二进制位数是() A、8 B、16 C、32 D、随计算机系统而不同的 4、下列叙述中正确的是() A、将数字信号变换成便于在模拟通信线路中传输的信号称为调制 B、以原封不动的形式将来自终端的信息送入通信线路称为调制解调 C、在计算机网络中,一种传输介质不能传送多路信号 D、在计算机局域中,只能共享软件资源,而不能共享硬件资源 5、使用超大规模集成电路制造的计算机应该归属于() A、第一代 B、第二代 C、第三代 D、** 6、一片存储容量是1.44MB的软盘,可以存储大约140万个() A、ASCII字符 B、中文字符 C、磁盘文件 D、子目录 7、磁盘处于写保护状态,那么磁盘中的数据() A、不能读出,不能删改,也不能写入新数据 B、可以读出,不能删改,也不能写入新数据 C、可以读出,可以删改,但不能写入新数据 D、可以读出,不能删改,但可以写入新数据 8、CD-ROM属于() A、感觉媒体 B、表示媒体 C、表现媒体 D、存储媒体 9、在因特网(Internet)中,电子公告板的缩写是() A、FTP B、WWW C、BBS D、E-mail 10、Windows中,将一个应用程序窗口最小化之后,该应用程序() A、仍在后台运行 B、暂时停止运行 C、完全停止运行 D、出错 11、CPU处理的数据基本单位为字,一个字的字长() A、为8个二进制位 B、为16个二进制位 C、为32个二进制位 D、与CPU芯片的型号有关 12、打印当前屏幕内容应使用的控制键是() A、Scroll-Lock B、Num-Lock C、Pgdn D、PrtSc(Print Scorccn) 13、3.5英寸软盘片的一个角上有一个滑动块,若移动该滑动块露出一个小孔,则该软盘() A、不能读但能写 B、不能读出不能写 C、只能读不能写 D、能读写 14、控制键^C的功能为() A、终止当前操作 B、系统复位 C、暂停标准输出设备的输出 D、结束命令行 15、按通信距离划分,计算机网络可以分为局域网和广域网。下列网络中属于局域网的是()

西安邮电大学封面个人简历模板

……………………….…………………………………………………………………………………姓名:杜宗飞专业:计算机科学与技术 学院:数理信息学院学历:本科……………………….…………………………………………………………………………………手机:×××E – mail:×××地址:西安邮电大学

自荐信 尊敬的领导: 您好!今天我怀着对人生事业的追求,怀着激动的心情向您毛遂自荐,希望您在百忙之中给予我片刻的关注。 我是西安邮电大学计算机科学与技术专业的2014届毕业生。西安邮电大学大学四年的熏陶,让我形成了严谨求学的态度、稳重踏实的作风;同时激烈的竞争让我敢于不断挑战自己,形成了积极向上的人生态度和生活理想。 在西安邮电大学四年里,我积极参加各种学科竞赛,并获得过多次奖项。在各占学科竞赛中我养成了求真务实、努力拼搏的精神,并在实践中,加强自己的创新能力和实际操作动手能力。 在西安邮电大学就读期间,刻苦进取,兢兢业业,每个学期成绩能名列前茅。特别是在专业必修课都力求达到90分以上。在平时,自学一些关于本专业相关知识,并在实践中锻炼自己。在工作上,我担任西安邮电大学计算机01班班级班长、学习委员、协会部长等职务,从中锻炼自己的社会工作能力。 我的座右铭是“我相信执着不一定能感动上苍,但坚持一定能创出奇迹”!求学的艰辛磨砺出我坚韧的品质,不断的努力造就我扎实的知识,传统的熏陶塑造我朴实的作风,青春的朝气赋予我满怀的激情。手捧菲薄求职之书,心怀自信诚挚之念,期待贵单位给我一个机会,我会倍加珍惜。 下页是我的个人履历表,期待面谈。希望贵单位能够接纳我,让我有机会成为你们大家庭当中的一员,我将尽我最大的努力为贵单位发挥应有的水平与才能。 此致 敬礼! 自荐人:××× 2014年11月12日 唯图设计因为专业,所 以精美。为您的求职锦上添花,Word 版欢迎 下载。

西安交通大学实验报告

西安交通大学实验报告 课程_大学计算机_实验名称_检索绘图音频及图像处理_第页共页 系别_____ 能动学院___________ 实验日期年月日专业班级________________组别_____________ 实验报告日期年月日姓名________________学号_____________ 报告退发 ( 订正、重做 ) 同组人_________________________________ 教师审批签字 ●目标任务: 一. 信息检索 1.使用百度地图网站搜索西安交通大学南门到西安大唐芙蓉园的公交线路。(屏幕截图)2.在本校图书馆网站查找两门课程的教学参考书(屏幕截图)。 3.使用百度图片网站搜索有关“飞机”和“天空”的图片,各下载一张,并分别命名为:天空.jpg,飞机.jpg。 4.使用Ei检索,检索目前中国高速铁路(High-speed railway in China)相关的工程论文(屏幕截图) 二. 矢量图绘制 题目:使用Microsoft Office Visio 2010办公绘图软件,绘制流程图。 要求:参见实验教材p27,“四. 实验任务和要求”。 三.数字音频处理 题目:使用GoldWave音频处理软件,完成手机铃声制作 要求:从网上下载一个音乐文件,选取最喜爱的片段,将其保存成手机要求的音频格式(如MP3、WAV)作为手机铃声(存放为另一个音乐文件)。 结果:在实验报告中,粘贴两个音乐文件的属性对话框屏幕截图。(分析文件的大小与占用空间的不同) GoldWave软件存放地址: D:\计算机应用技术基础、ECAT.Software\ECAT-Software\GoldWave.rar 或从网上下载。 四.数字图像处理 题目:使用Photoshop软件进行“飞行编队”图像设计。 要求:参见实验教材p37,“四. 实验任务和要求”(1)飞行编队设计。 结果:将设计的“三角飞行编队图片”粘贴到实验报告中。 最后上传实验报告。 ●实验环境

西安邮电大学本科生学分制学籍管理办法

西安邮电大学本科生学分制学籍管理办法 为提高教育教学质量,维护正常教学秩序,培养德智体全面发展的高素质人才,根据教育部《普通高等学校学生管理规定》、《高等学校学生行为准则》及陕西省教育厅普通高等学校学生管理有关规定精神,结合我校办学实际,制定本办法。 第一章总则 第一条我校全日制本科生实施学分制。 第二条学分制是用学分计算学习量的一种教学管理制度。学生可以根据专业培养方案及自己的基础和能力,在教师的指导下安排学习计划。 第三条学生选课应办理有关选课手续。免修、免听课程应由本人提出书面申请,经学院批准,教务处审核后方可进行。 第四条对学有余力的学生,经批准可以跨校、跨学院、跨专业、跨年级选课。 第五条学生成绩档案必须同时登记考核成绩和学分。有正式学籍的学生修满专业培养方案规定的应修学分,同时符合学校有关规定者,准予毕业。 第六条我校本科生标准学制为四年,学生在校修读年限最长为六年。在校时间超过四年者,需按规定标准缴纳培养费。 第二章教学实施细则 第七条全日制本科教学必须依照专业培养方案组织实施。 第八条各专业所学课程分必修课、选修课两类。 第九条课程修读 (一)必修课 学生应根据各专业培养方案的安排,修读各门必修课。 (二)选修课选课原则

学生应以培养方案安排为依据,在专业教师的指导下,确定选读课程、选修时间及顺序。凡有先修课要求的课程,一般应首先修完先修课程,取得学分后,才可选修该课程。 (三)选修课修读办法 1.各类选修课修读学分要求详见各专业培养方案。学生在毕业前必须修够所在专业要求的相应学分方可毕业。 2.学校于每学期第八周左右按照专业培养方案,组织落实下一学期各专业拟开设的选修课程,并向全校公布,以供学生选课。 3.学生预选课程前,各开课学院应组织有关教师参加选课的咨询活动,向学生介绍所开课程情况、解答学生提出的问题等。 4.凡经批准选定的课程,中途不得更改。学生应按规定参加该课程的各项教学活动,凡缺课三分之一以上者不得参加该课程的考核。 5.凡未按规定办理选修手续者,不得参加该门选修课的考核。 第十条学分按照各专业人才培养方案要求认定。 第十一条学生须修满本专业培养方案要求的毕业最低学分,其中必修课学分不得用其它学分替补。 第三章学籍管理细则 第一节入学与注册 第十二条凡本校录取的新生,必须持本校录取通知书和学校规定的有关证件,按规定的期限到校办理入学手续。因故不能按期入学者,应书面向学校请假,假期不得超过两周。未请假或者请假逾期者,除因不可抗力等正当事由以外,视为放弃入学资格。 第十三条新生入学后,学校将在三个月内,按照国家招生规定对其进行复查。复查合格者予以注册,即取得学籍。复查不

操作系统实验之内存管理实验报告

学生学号 实验课成绩 武汉理工大学 学生实验报告书 实验课程名称 计算机操作系统 开 课 学 院 计算机科学与技术学院 指导老师姓名 学 生 姓 名 学生专业班级 2016 — 2017 学年第一学期

实验三 内存管理 一、设计目的、功能与要求 1、实验目的 掌握内存管理的相关内容,对内存的分配和回收有深入的理解。 2、实现功能 模拟实现内存管理机制 3、具体要求 任选一种计算机高级语言编程实现 选择一种内存管理方案:动态分区式、请求页式、段式、段页式等 能够输入给定的内存大小,进程的个数,每个进程所需内存空间的大小等 能够选择分配、回收操作 内购显示进程在内存的储存地址、大小等 显示每次完成内存分配或回收后内存空间的使用情况 二、问题描述 所谓分区,是把内存分为一些大小相等或不等的分区,除操作系统占用一个分区外,其余分区用来存放进程的程序和数据。本次实验中才用动态分区法,也就是在作业的处理过程中划分内存的区域,根据需要确定大小。 动态分区的分配算法:首先从可用表/自由链中找到一个足以容纳该作业的可用空白区,如果这个空白区比需求大,则将它分为两个部分,一部分成为已分配区,剩下部分仍为空白区。最后修改可用表或自由链,并回送一个所分配区的序号或该分区的起始地址。 最先适应法:按分区的起始地址的递增次序,从头查找,找到符合要求的第一个分区。

最佳适应法:按照分区大小的递增次序,查找,找到符合要求的第一个分区。 最坏适应法:按分区大小的递减次序,从头查找,找到符合要求的第一个分区。 三、数据结构及功能设计 1、数据结构 定义空闲分区结构体,用来保存内存中空闲分区的情况。其中size属性表示空闲分区的大小,start_addr表示空闲分区首地址,next指针指向下一个空闲分区。 //空闲分区 typedef struct Free_Block { int size; int start_addr; struct Free_Block *next; } Free_Block; Free_Block *free_block; 定义已分配的内存空间的结构体,用来保存已经被进程占用了内存空间的情况。其中pid作为该被分配分区的编号,用于在释放该内存空间时便于查找。size表示分区的大小,start_addr表示分区的起始地址,process_name存放进程名称,next指针指向下一个分区。 //已分配分区的结构体 typedef struct Allocate_Block { int pid; int size; int start_addr; char process_name[PROCESS_NAME_LEN]; struct Allocate_Block *next; } Allocate_Block; 2、模块说明 2.1 初始化模块 对内存空间进行初始化,初始情况内存空间为空,但是要设置内存的最大容量,该内存空间的首地址,以便之后新建进程的过程中使用。当空闲分区初始化

西安交通大学检测技术课内实验报告

西安交通大学 现代检测技术实验报告 实验一金属箔式应变片——电子秤实验 实验二霍尔传感器转速测量实验 实验三光电传感器转速测量实验 实验四E型热电偶测温实验 实验五E型热电偶冷端温度补偿实验

实验一 金属箔式应变片——电子秤实验 一、实验目的: 了解金属箔式应变片的应变效应,直流全桥工作原理和性能,了解电路的定标。 二、实验仪器: 应变传感器实验模块、托盘、砝码、数显电压表、±15V 、±4V 电源、万用表(自备)。 三、实验原理: 电阻丝在外力作用下发生机械变形时,其电阻值发生变化,这就是电阻应变效应,描述电阻应变效应的关系式为 ε?=?k R R (1-1) 式中 R R ?为电阻丝电阻相对变化; k 为应变灵敏系数; l l ?= ε为电阻丝长度相对变化。 金属箔式应变片就是通过光刻、腐蚀等工艺制成的应变敏感组件。如图1-1所示,将四 个金属箔应变片分别贴在双孔悬臂梁式弹性体的上下两侧,弹性体受到压力发生形变,应变片随弹性体形变被拉伸,或被压缩。 图1-1 双孔悬臂梁式称重传感器结构图

图1-2 全桥面板接线图 全桥测量电路中,将受力性质相同的两只应变片接到电桥的对边,不同的接入邻边,如图3-1,当应变片初始值相等,变化量也相等时,其桥路输出 Uo=R R E ?? (3-1) 式中E 为电桥电源电压。 R R ?为电阻丝电阻相对变化; 式3-1表明,全桥输出灵敏度比半桥又提高了一倍,非线性误差得到进一步改善。 电子称实验原理同全桥测量原理,通过调节放大电路对电桥输出的放大倍数使电路输出电压值为重量的对应值,电压量纲(V )改为重量量纲(g )即成一台比较原始的电子称。 四、实验内容与步骤 1.应变传感器上的各应变片已分别接到应变传感器模块左上方的R1、R2、R3、R4上,可用万用表测量判别,R1=R2=R3=R4=350Ω。 2.差动放大器调零。从主控台接入±15V 电源,检查无误后,合上主控台电源开关,将差动放大器的输入端Ui 短接并与地短接,输出端Uo 2接数显电压表(选择2V 档)。将电位器Rw3调到增益最大位置(顺时针转到底),调节电位器Rw4使电压表显示为0V 。关闭主控台电源。(Rw3、

西安邮电大学嵌入式课后答案

嵌入式系统开发 习题1 1.什么是嵌入式系统?有何特点? 答:嵌入式系统的概念有很多种,在嵌入式系统领域中比较认同的嵌入式系统的概念是:嵌入式系统是以应用为中心,以计算机技术为基础,并且软硬件可裁剪,适用于应用系统对功能、可靠性、成本、体积、功耗有严格要求的专用计算机系统。 嵌入式系统的特点: ⑴嵌入式系统是将先进的计算机技术、半导体技术以及电子技术与各个行业的具体应用相结合的产物,这一点就决定了它必然是一个技术密集、资金密集、高度分散、不断创新的知识集成系统。 ⑵系统内核小。由于嵌入式系统一般是应用于小型电子装置中,系统资源相对有限,所以内核较之传统的操作系统要小得多。 ⑶专用性强。 ⑷系统精简。 ⑸系统软件(OS)要求具有高实时性。 ⑹嵌入式软件开发要走向标准化,需要使用多任务的操作系统。 ⑺嵌入式系统本身并不具备在其上进行进一步开发的能力。 2.嵌入式系统可以分为几层?每一层各完成哪些功能? 答:嵌入式系统由硬件层、中间层、软件层和功能层组成。 硬件层:以嵌入式微处理器为核心,存储器用以存储数据和执行代码,相关的设备接口和I/O接口,这些组成了一个嵌入式系统的基础,实现逻辑运算,算术运算等。 中间层:将系统上层软件和底层硬件进行分离,封装成标准的接口,在上层软件开发人员无需知道底层硬件的具体情况,完成的任务是底层硬件的初始化、数据的输入/输出操作、硬件的配置等功能。 软件层:主要由RTOS、文件系统、图形用户接口、网络系统和通用的组件模块组成,是软件开发的基础。 功能层:用来完成被控对象的控制功能。 3.嵌入式系统中硬件抽象层有什么特点? 答:硬件抽象层是介于硬件层与软件层之间的中间层,它将系统上层软件与底层硬件分离开来,具有以下两个特点: ⑴硬件相关性:因为嵌入式实时系统的硬件环境具有应用相关性,而作为上层软件与硬件平台之间的接口,硬件抽象层需要为操作系统提供操作和控制具体硬件的方法。 ⑵操作系统相关性:不同的操作系统具有各自的软件层次结构,因此,不同的操作系统具有特定的硬件接口形式。 4.简述嵌入式处理器的硬件组成? 答:随着集成电路集成度的不断提高,嵌入式系统板级的硬件电路模块也越来越多的集成到芯片内部,目前处理器芯片内部的电路模块组成如下: ⑴处理器内核,以CPU为核心,有的还包含MMU(存储器管理单元)、Cache(高速缓存)、ICE(在线仿真)等电路模块。

相关主题