文档库 最新最全的文档下载
当前位置:文档库 › 操作系统第五次上机文档

操作系统第五次上机文档

操作系统第五次上机文档
操作系统第五次上机文档

proc 文件系统

实验部分

实验目的

1.了解proc文件的本质

2.学习编写可读可写的proc文件

3.进一步理解内核与用户空间的交互方式

实验内容

在/proc目录下创建一个可读可写的my_procfile_1k文件

实验步骤

1.编写rw_proc.c文件,如下

#include

#include

#include

#include /* for copy_from_user */

#define PROCFS_MAX_SIZE 1024

#define PROCFS_NAME "my_procfile_1k"

MODULE_LICENSE("GPL");

static struct proc_dir_entry *Our_Proc_File;

static char procfs_buffer[PROCFS_MAX_SIZE];

static unsigned long procfs_buffer_size = 0;

static int procfile_read(char *buffer,char **buffer_location,

off_t offset, int buffer_length, int *eof,

void *data)

{

int ret;

printk(KERN_INFO "procfile_read (/proc/%s) called\n", PROCFS_NAME);

if (offset > 0) {

ret = 0;

} else {

memcpy(buffer, procfs_buffer, procfs_buffer_size);

ret = procfs_buffer_size;

}

return ret;

}

static int procfile_write(struct file *file, const char *buffer, unsigned long count, void *data)

{

procfs_buffer_size = count;

if (procfs_buffer_size > PROCFS_MAX_SIZE ) {

procfs_buffer_size = PROCFS_MAX_SIZE;

}

if ( copy_from_user(procfs_buffer, buffer, procfs_buffer_size) ) {

return EFAULT;

}

return procfs_buffer_size;

}

static int rw_proc_init(void)

{

Our_Proc_File = create_proc_entry(PROCFS_NAME, 0644, NULL);

if (Our_Proc_File == NULL) {

remove_proc_entry(PROCFS_NAME, &proc_root);

printk(KERN_ALERT "Error: Could not initialize /proc/%s\n",

PROCFS_NAME);

return ENOMEM;

}

Our_Proc_File->read_proc = procfile_read;

Our_Proc_File->write_proc = procfile_write;

Our_Proc_File->owner = THIS_MODULE;

Our_Proc_File->mode = S_IFREG | S_IRUGO;

Our_Proc_File->uid = 0;

Our_Proc_File->gid = 0;

Our_Proc_File->size = 37;

printk(KERN_INFO "/proc/%s created\n", PROCFS_NAME);

return 0;

}

static void rw_proc_exit(void)

{

remove_proc_entry(PROCFS_NAME, &proc_root);

printk(KERN_INFO "/proc/%s removed\n", PROCFS_NAME);

}

module_init(rw_proc_init);

module_exit(rw_proc_exit);

代码注释:

A>Our_Proc_File: /proc文件系统下的每一个文件或目录项都对应一个

proc_dir_entry结构体实例。

B>procfs_buffer:这个缓冲区是我们my_procfile_1k的真实载体,本质上我们将来

对my_procfile_1k文件的读写都是对该缓冲区的读写。

C>PROCFS_MAX_SIZE和procfs_buffer_size:这两个值的关系就好比你有4G

(PROCFS_MAX_SIZE)的U盘,里面已用空间为2.3G(procfs_buffer_size)一

样。因此每次写入文件

D>procfile_read:我们为文件my_procfile_1k实现的read函数。buffer为写出内核

空间的缓冲区(一个page大小),buffer_location是用来写出大于一个page大

小的数据是用的参数。offset是用来标记一个进程中对当前文件读写的偏移量。

buffer_len是要读的大小,这里被忽略掉,直接返回了文件(buffer)的全部内

容。eof用来标识文件已经到达末尾。

E>procfile_write:我们为文件my_procfile_1k实现的write函数。使用

copy_from_user函数的原因是buffer是一个指向用户地址空间的指针。

F>create_proc_entry:用来创建一个proc文件系统的文件实例,创建目录实例的

函数为proc_mkdir(char * dirname, struct proc_dir_entr * father_dir);. 两个函数的

末尾参数置NULL,表示父目录为/proc

2.编写Makefile文件

KVER=$(shell uname -r)

KDIR=/lib/modules/$(KVER)/build

PWD=$(shell pwd)

obj-m += rw_proc.o

default:

make -C $(KDIR) M=$(PWD) modules

clean:

-rm *.ko

-rm *.o

-rm -f Mo*

-rm *.mod.*

3.编译模块

#make

4.安装模块

#insmod rw_proc.ko

5.测试/proc/my_procfile_1k文件功能

#cat /proc/my_procfile_1k

#ls * > /proc/my_procfile_1k

#cat /proc/my_procfile_1k

#dmesg | tail -10 //查看系统日志里的打印信息

6.卸载模块

rmmod

电脑系统维护

一、每天关机前要做的清洗: 双击“我的电脑”— —右键点C盘——点“属性”——点“磁盘清理”——点“确定”——再点“是”——再点“确定”。清理过程中,您可看得到未经您许可(您可点“查看文件”看,就知道了)进来的“临时文件”被清除了,盘的空间多了。对D,E,F盘也要用这法进行。 二、随时要进行的清理 : 打开网页——点最上面一排里的“工具”——点“Internet选项”——再点中间的“Internet临时文件”中的“删除文件”——再在“删除所有脱机内容”前的方框里打上勾——再点“确定”——清完后又点“确定”。这样,可为打开网和空间提高速度。 三、一星期进行的盘的垃圾清理 : 点“开始”——用鼠标指着“所有程序”,再指着“附件”,再指着“系统工具”,再点“磁盘粹片整理程序”——点C盘,再点“碎片整理”(这需要很长时间,最好在您去吃饭和没用电脑时进行。清理中您可看到您的盘里的状况,可将清理前后对比一下)——在跳出“清理完成”后点“关闭”。按上述,对D,E,F盘分别进行清理。 电脑系统越来越慢,怎么删除临时文件啊 1.关闭"休眠" 方法:打开[控制面板]→[电源选项]→[休眠],把"启用休眠"前面的勾去掉 说明:休眠是系统长时间一种待机状态,使您在长时间离开电脑时保存操作状态,如果您不是经常开着电脑到别处去的话,那就把它关了吧! ☆立即节省:256M 2.关闭"系统还原" 方法:打开[控制面板]→[系统]→[系统还原],把"在所有驱动器上关闭系统还原'勾上 说明:系统还原是便于用户误操作或产生软件问题时的一种挽救手段,可以回复到误操作以前的状态.不建议初级用户使用.当然,它采用的是跟踪手段,需要记录大量信息,所消耗的资源也要很大的. ☆立即节省:数百M (根据还原点的多少而不同) 您也可以在不关闭系统还原的前提下,相应的减少系统还原所占的磁盘空间,这只会减少可用还原点的数目,一般还原点有一两个就够了吧. 方法:...[系统还原]-选择一个"可用驱动器"-[设置]-调整"要使用的磁盘空间"

操作系统上机实验报告(西电)

操作系统上机题目 一、题目 实验1:LINUX/UNIX Shell部分 (一)系统基本命令 1.登陆系统,输入whoami 和pwd ,确定自己的登录名和当前目录; 登录名yuanye ,当前目录/home/yuanye 2.显示自己的注册目录?命令在哪里? a.键入echo $HOME,确认自己的主目录;主目录为/home/yuanye b.键入echo $PA TH,记下自己看到的目录表;/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games c.键入which abcd,看看得到的错误信息; 再键入which ls 和which vi,对比刚刚得到的结果的目录是否在a.、b. 两题看到的目录表中; /bin/ls /usr/bin/vi 3.ls 和cd 的使用: a.键入ls,ls -l ,ls -a ,ls -al 四条命令,观察输出,说明四种不同使用方式的区别。 1. examples.desktop 公共的模板视频图片文档音乐桌面; 总计32 2.-rw-r--r-- 1 yuanye yuanye 357 2011-03-22 22:15 examples.desktop drwxr-xr-x 2 yuanye yuanye 4096 2011-03-22 23:25 公共的 drwxr-xr-x 2 yuanye yuanye 4096 2011-03-22 23:25 模板 drwxr-xr-x 2 yuanye yuanye 4096 2011-03-22 23:25 视频 drwxr-xr-x 2 yuanye yuanye 4096 2011-03-22 23:25 图片 drwxr-xr-x 2 yuanye yuanye 4096 2011-03-22 23:25 文档 drwxr-xr-x 2 yuanye yuanye 4096 2011-03-22 23:25 音乐 drwxr-xr-x 2 yuanye yuanye 4096 2011-03-22 23:25 桌面 3. . .fontconfig .local .Xauthority .. .gconf .mozilla .xsession-errors .bash_logout .gconfd .nautilus 公共的 .bashrc .gksu.lock .profile 模板 .cache .gnome2 .pulse 视频 .chewing .gnome2_private .pulse-cookie 图片 .config .gnupg .recently-used.xbel 文档 .dbus .gstreamer-0.10 .scim 音乐 .dmrc .gtk-bookmarks .sudo_as_admin_successful 桌面 .esd_auth .gvfs .update-manager-core

计算机系统维护

《计算机维护与服务规范》 实训报告册 专业: 班级: 学号: 姓名: 实训学时: 实训成绩:

目录 实训一计算机硬件的认识 (1) 实训二硬件的组装 (3) 实训三BIOS设置 (6) 实训四DOS命令 (8) 实训五硬盘的分区与格式化 (10) 实训六操作系统安装 (11) 实训七数据备份 (13) 实训八计算机维修方法 (15) 实训九计算机维护服务规范 (17)

实训一计算机硬件的认识 一、实训目的 认识计算机的各组件及其外部设备。 二、实训内容 1.认识主板及主板上的主要组成部分。 2.认识显示卡、声卡、网卡等板卡。 3.认识软驱、硬盘、光驱等存储设备。 4.认识计算机其他部件及外部设备。 5.完成实训报告,整理好工作台。 三、实训条件 1.一张工作台。 2.计算机的主要部件。 3.计算机的常用外部存储器。 4.计算机的其它部件。 四、实训过程记录 1.先讲理论知识,让我们认识计算机的主要部件,并初步认识这些部件。 2.进一步了解这些部件的个个功能。 3.拿出实物认识部件。 4.详细讲解各个部件参数及性能。 5.让我们自己动手操作,体验实际操作。

五、实训小结 计算机已经成为我们生活、工作、学习中必不可少的工具。通过几个课时的学习,我了解计算机的基本发展史,使我更加钦佩促进计算机发展的各个研究者。让我对计算机从笼统的认识上升到了初步的了解,了解了各个部件的作用。从而对我的专业有了一定的帮助。对电脑的了解,在现实生活中可以帮助我们省掉些麻烦。有利于我们计算机的选购。

实训二硬件的组装 一、实训目的 进一步认识计算机的各组件,并能独立完成一台多媒体计算机的组 装,掌握计算机的组装技术及方法。 二、实训内容 1.掌握计算机的组装方法。 2.能识别计算机的面板连线及标记,正确连接面板连线。 3.能正确连接计算机各组件,完成一台计算机的安装。 4.通电测试,检查计算机的性能及识别CPU、内存、硬盘等主要参数。 三、实训条件 1.计算机硬件组装工具。 2.多媒体计算机的所有部件。 四、实训过程记录 1.维护工具介绍 1)防静电工具:防静电手套(用途:减少静电电荷产生、积累)、 防静电手环(用途:人体静电释放工具,与防静电电线连接,构成” 静电释放”通路)、防静电便携垫(用途:搭建防静电环境)、鬃毛刷(用途:清洁主板,清洁插槽内的灰尘,可以防止静电产生)。 2)拆装工具:螺丝盒、小十字(尽量用大一号的螺丝刀)、大十 字、一字螺丝刀、套筒、内六角螺丝刀、加消磁器(工具使用完毕需消磁再放入工具包)、尖嘴钳、起拔器、截断钳、捆扎线、镊子、挑针。 3)维护工具:硅脂(注意:不要涂抹过多,以防污染环境)、各 种回路环、万用表、地线检测仪、主板故障诊断测试卡。 4)清洁工具:吹气囊、小刷子、清洁剂、清洁小毛巾、橡皮擦。 2.拆装技术规范

《 Windows7 操作系统》实验报告

实验(一) Windows 7基本操作 一、实验目的 1.掌握文件和文件夹基本操作。 2.掌握“资源管理器”和“计算机”基本操作。 二、实验要求 1.请将操作结果用Alt+Print Screen组合键截图粘贴在题目之后。 2.实验完成后,请将实验报告保存并提交。 三、实验内容 1.文件或文件夹的管理(提示:此题自行操作一遍即可,无需抓图)★期末机试必考题★ (1) 在D:盘根目录上创建一个名为“上机实验”的文件夹,在“上机实验”文件夹中创建1个名为“操作系统上机实验”的空白文件夹和2个分别名为“2.xlsx”和“3.pptx”的空白文件,在“操作系统上机实验”文件夹中创建一个名为“1.docx”的空白文件。 (2) 将“1.docx”改名为“介绍信.docx”;将“上机实验”改名为“作业”。 (3) 在“作业”文件夹中分别尝试选择一个文件、同时选择两个文件、一次同时选择所有文件和文件夹。 (4) 将“介绍信.docx”复制到C:盘根目录。 (5) 将D:盘根目录中的“作业”文件夹移动到C:盘根目录。 (6) 将“作业”文件夹中的“2.xlsx”文件删除放入“回收站”。 (7) 还原被删除的“2.xlsx”文件到原位置。 2.搜索文件或文件夹,要求如下: 查找C盘上所有以大写字母“A”开头,文件大小在10KB以上的文本文件。(提示:搜索时,可以使用“?”和“*”。“?”表示任意一个字符,“*”表示任意多个字符。)

3. 在桌面上为C:盘根目录下的“作业”文件夹创建一个桌面快捷方式。★期末机试必考题★ 3.“计算机”或“资源管理器”的使用 (1) 在“资源管理器”窗口,设置以详细信息方式显示C:\WINDOWS中所有文件和文件夹,使所有图标按类型排列显示,并不显示文件扩展名。(提示:三步操作全部做完后,将窗口中显示的最终设置结果抓一张图片即可) (2) 将C:盘根目录中“介绍信.docx”的文件属性设置为“只读”和“隐藏”,并设置在窗口中显示“隐藏属性”的文件或文件夹。(提示:请将“文件夹”对话框中选项设置效果与C:盘根目录中该文件图标呈现的半透明显示效果截取在一整张桌面图片中即可) 4.回收站的设置 设置删除文件后,不将其移入回收站中,而是直接彻底删除功能。

操作系统实验报告

操作系统实验报告 集团企业公司编码:(LL3698-KKI1269-TM2483-LUI12689-ITT289-

实验二进程调度1.目的和要求 通过这次实验,理解进程调度的过程,进一步掌握进程状态的转变、进程调度的策略,进一步体会多道程序并发执行的特点,并分析具体的调度算法的特点,掌握对系统性能的评价方法。 2.实验内容 阅读教材《计算机操作系统》第二章和第三章,掌握进程管理及调度相关概念和原理。 编写程序模拟实现进程的轮转法调度过程,模拟程序只对PCB进行相应的调度模拟操作,不需要实际程序。假设初始状态为:有n个进程处于就绪状态,有m个进程处于阻塞状态。采用轮转法进程调度算法进行调度(调度过程中,假设处于执行状态的进程不会阻塞),且每过t个时间片系统释放资源,唤醒处于阻塞队列队首的进程。 程序要求如下: 1)输出系统中进程的调度次序; 2)计算CPU利用率。 3.实验环境 Windows操作系统、VC++6.0 C语言 4设计思想: (1)程序中进程可用PCB表示,其类型描述如下:

structPCB_type { intpid;//进程名 intstate;//进程状态 2——表示“执行”状态 1——表示“就绪”状态 0——表示“阻塞”状态 intcpu_time;//运行需要的CPU时间(需运行的时间片个数) } 用PCB来模拟进程; (2)设置两个队列,将处于“就绪”状态的进程PCB挂在队列ready中;将处于“阻塞”状态的进程PCB挂在队列blocked中。队列类型描述如下: structQueueNode{ structPCB_typePCB; StructQueueNode*next; } 并设全程量: structQueueNode*ready_head=NULL,//ready队列队首指针 *ready_tail=NULL,//ready队列队尾指 针

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

学生学号 实验课成绩 武汉理工大学 学生实验报告书 实验课程名称 计算机操作系统 开 课 学 院 计算机科学与技术学院 指导老师姓名 学 生 姓 名 学生专业班级 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 初始化模块 对内存空间进行初始化,初始情况内存空间为空,但是要设置内存的最大容量,该内存空间的首地址,以便之后新建进程的过程中使用。当空闲分区初始化

ISO20000-计算机桌面系统维护操作规程-V1.0

信息技术服务管理体系 计算机桌面系统维护操作规程 文件编号:SM-03005 [本文件中出现的任何文字叙述、文档格式、插图、照片、方法、过程等内容,除另有特别注明,版权均属本公司所有,受到有关产权及版权法保护。任何个人、机构未经本公司的书面授权许可,不得以任何方式复制或引用本文件的任何片断。]

1.分发控制 2.文件版本信息 3.文件版本信息说明 文件版本信息记录本文件提交时的当前有效的版本控制信息,当前版本文件有效期将在新版本文档生效时自动结束。文件版本小于1.0 时,表示该版本文件为草案,仅可作为参照资料之目的。

目录 1 总则 (1) 2 规定 (1) 2.1计算机桌面维护总体要求 ------------------------------------------------- 1 2.3 --------------------------- 新安装计算机桌面操作系统及应用软件操作规程 7 2.4 ------------------------------ 计算机桌面系统硬件故障诊断及更换操作规程 15 2.5 ----------------------------------- 计算机桌面系统故障诊断、处理操作规程 17 2.6 -------------------- 计算机桌面系统用户硬盘故障诊断及数据恢复操作规程 21 2.7 --------------------------------------------- 计算机桌面系统病毒诊断、处理 24 2.8 ----------------------------------------------- 计算机桌面网络应用操作规程 26 2.9 ---------------------------------------------------------------------- 相关记录 28 3 附则 (28)

操作系统上机实验报告

大连理工大学实验报告 学院(系):专业:班级: 姓名:学号:组:___ 实验时间:实验室:实验台: 指导教师签字:成绩: 实验名称:进程控制 一、实验目的和要求 (1)进一步加强对进程概念的理解,明确进程和程序的区别 (2)进一步认识并发执行的实质 二、实验环境 在windows平台上,cygwin模拟UNIX运行环境 三、实验内容 (1) getpid()---获取进程的pid 每个进程都执行自己独立的程序,打印自己的pid; (2) getpid()---获取进程的pid 每个进程都执行自己独立的程序,打印自己的pid; 父进程打印两个子进程的pid;

(3)写一个命令处理程序,能处理max(m,n), min(m,n),average(m,n,l)这几个命令(使用exec函数族)。 Max函数 Min函数 Average函数 Exec函数族调用 四、程序代码 五、运行结果 六、实验结果与分析 七、体会 通过这次上机,我了解了fork函数的运行方法,同时更深刻的了解了进程的并行执行的本质,印证了在课堂上学习的理论知识。同时通过编写实验内容(3)的命令处理程序,学会了exec函数族工作原理和使用方法。通过这次上机实验让我加深了对课堂上学习的理论知识的理解,收获很多。

大连理工大学实验报告 学院(系):专业:班级: 姓名:学号:组:___ 实验时间:实验室:实验台: 指导教师签字:成绩: 实验名称:进程通讯 一、实验目的和要求 了解和熟悉UNIX支持的共享存储区机制 二、实验环境 在windows平台上,cygwin模拟UNIX运行环境 三.实验内容 编写一段程序, 使其用共享存储区来实现两个进程之间的进程通讯。进程A创建一个长度为512字节的共享内存,并显示写入该共享内存的数据;进程B将共享内存附加到自己的地址空间,并向共享内存中写入数据。 四、程序代码 五、运行结果 六、实验结果与分析 七、体会

操作系统实验报告16487

西安邮电大学 (计算机学院) 课实验报告 实验名称:进程管理 专业名称:计算机科学与技术 班级: 学生: 学号(8位): 指导教师: 实验日期:*****年**月**日

一. 实验目的及实验环境 目的:(1)加深对进程概念的理解,明确进程和程序的区别。 (2)进一步认识并发执行的实质。 (3)分析进程竞争资源现象,学习解决进程互斥的方法。 (4)了解Linux系统中进程通信的基本原理。 环境:Linux操作系统环境: 二. 实验容 (1)阅读Linux的sched.h源文件,加深对进程管理概念的理解。 (2)阅读Linux的fork.c源文件,分析进程的创建过程。 三.方案设计 (1)进程的创建 编写一段源程序,使系统调用fork()创建两个子进程,当此程序运行时,在系统中有一个父进程和两个子进程活动。让每一个进程在屏幕上显示一个字符:父进程显示字符“a”;子进程分别显示字符“b”和字符“c”。试观察纪录屏幕上的显示结果,并分析原因。(2)进程的控制 修改已编写的程序,将每个进程输出一个字符改为每个进程输出一句话,在观察程序执行时屏幕出现的现象,并分析原因。 如果在程序中使用调用lockf()来给每一个子进程加锁,可以实现进程之间的互斥,观察并分析出现的现象。 (3)①编写一段程序,使其现实进程的软中断通信。 要求:使用系统调用fork()创建两个子进程,再用系统调用signal()让父进程捕捉键盘上来的中断信号(即按DEL键);当捕捉到中断信号后,父进程用系统调用Kill()向两个子进程发出信号,子进程捕捉到信号后分别输出下列信息后终止: Child Processll is Killed by Parent! Child Processl2 is Killed by Parent! 父进程等待两个子进程终止后,输出如下的信息后终止 Parent Process is Killed! 程序流程图如下:

操作系统实验报告

操作系统上机 实验报告 成绩 教师:方敏 2016 年 12月 17日 班级: 1403018 学号: 140607815 姓名:黄杨 实验地点:E-Ⅲ区208 实验时间:2016.10.13—2016.12.17

实验一创建进程 【实验软硬件环境】 VC 【实验内容】 实验内容:父进程创建一个有名事件,由子进程发送事件信号,父进程获取事件信号后进行相应的处理 【实验原理】 父进程创建子进程,实现多个进程并发执行,提高计算机的运行效率。【实验程序及分析】 试验程序源代码如下: 父进程部分代码: // test1.cpp : Defines the entry point for the console application. #include "stdafx.h" #include "stdio.h" #include "stdlib.h" #include "windows.h" int main(int argc, char* argv[]) { STARTUPINFO sui; ZeroMemory(&sui,sizeof(sui)); sui.cb=sizeof(STARTUPINFO); PROCESS_INFORMA TION pi; if(!CreateProcess("D:\\Test1\\test1\\test1zi.exe",NULL,NULL,NULL,FALSE,CREA TE_NE W_CONSOLE,NULL,NULL,&sui,&pi)){ printf("子进程创建失败,即将退出程序!\n"); return 0;

} else{ int sum = 0; for(int i=1; i<=100; i++){ sum += i; printf("sum = %d\n",sum); } } Sleep(3000); WaitForSingleObject( pi.hProcess,INFINITE); FILE *qp; if((qp = fopen("D:\\Test1\\abc.txt","r"))== NULL){ printf("读文件打开失败!\n"); return 0; } else{ char ch; while((ch = fgetc(qp))!=EOF){ printf("%c",ch); } printf("\n"); fclose(qp); } return 0; } 子进程部分代码: // test1zi.cpp : Defines the entry point for the console application. //

信息系统运行维护服务方案

信息系统运行维护方案(IT运维服务方案)

目录 1运维服务内容......................... 错误!未定义书签。 服务目标.......................... 错误!未定义书签。 信息资产统计服务 .................. 错误!未定义书签。 网络、安全系统运维服务 ............ 错误!未定义书签。 主机、存储系统运维服务 ............ 错误!未定义书签。 数据库系统运维服务 ................ 错误!未定义书签。 中间件运维服务.................... 错误!未定义书签。2运维服务流程......................... 错误!未定义书签。3服务管理制度规范..................... 错误!未定义书签。 服务时间.......................... 错误!未定义书签。 行为规范.......................... 错误!未定义书签。 现场服务支持规范 .................. 错误!未定义书签。 问题记录规范...................... 错误!未定义书签。4应急服务响应措施..................... 错误!未定义书签。 应急基本流程...................... 错误!未定义书签。 预防措施.......................... 错误!未定义书签。

突发事件应急策略 .................. 错误!未定义书签。

操作系统实验报告生产者与消费者问题模拟

操作系统上机实验报告 实验名称: 生产者与消费者问题模拟 实验目的: 通过模拟生产者消费者问题理解进程或线程之间的同步与互斥。 实验内容: 1、设计一个环形缓冲区,大小为10,生产者依次向其中写入1到20,每个缓冲区中存放一个数字,消费者从中依次读取数字。 2、相应的信号量; 3、生产者和消费者可按如下两种方式之一设计; (1)设计成两个进程; (2)设计成一个进程内的两个线程。 4、根据实验结果理解信号量的工作原理,进程或线程的同步\互斥关系。 实验步骤及分析: 一.管道 (一)管道定义 所谓管道,是指能够连接一个写进程和一个读进程的、并允许它们以生产者—消费者方式进行通信的一个共享文件,又称为pipe文件。由写进程从管道的写入端(句柄1)将数据写入管道,而读进程则从管道的读出端(句柄0)读出数据。(二)所涉及的系统调用 1、pipe( ) 建立一无名管道。 系统调用格式 pipe(filedes) 参数定义 int pipe(filedes); int filedes[2]; 其中,filedes[1]是写入端,filedes[0]是读出端。 该函数使用头文件如下: #include #inlcude #include 2、read( ) : 系统调用格式 read(fd,buf,nbyte) 功能:从fd所指示的文件中读出nbyte个字节的数据,并将它们送至由指针buf 所指示的缓冲区中。如该文件被加锁,等待,直到锁打开为止。 参数定义:

int read(fd,buf,nbyte); int fd; char *buf; unsigned nbyte; 3、write( ) 系统调用格式 read(fd,buf,nbyte) 功能:把nbyte 个字节的数据,从buf所指向的缓冲区写到由fd所指向的文件中。如文件加锁,暂停写入,直至开锁。 参数定义同read( )。 (三)参考程序 #include #include #include int pid1,pid2; main( ) { int fd[2]; char outpipe[100],inpipe[100]; pipe(fd); /*创建一个管道*/ while ((pid1=fork( ))==-1); if(pid1==0) { lockf(fd[1],1,0); /*把串放入数组outpipe中*/ sprintf(outpipe,child 1 is using pipe!); /* 向管道写长为50字节的串*/ write(fd[1],outpipe,50); sleep(5); /*自我阻塞5秒*/ lockf(fd[1],0,0); exit(0); } else { while((pid2=fork( ))==-1); if(pid2==0) { lockf(fd[1],1,0); /*互斥*/ sprintf(outpipe,child 2 is using pipe!); write(fd[1],outpipe,50); sleep(5); lockf(fd[1],0,0);

操作系统实验报告1

操作系统 实验报告 班号:1303107 学号:1130310726 姓名:蔡鹏

1.请简述head.s 的工作原理。 head.s实在32位保护模式下运行的。我认为这段程序主要包括两个部分:1.初始化设置。2.任务执行与切换。 初始设置主要包括了:1.设置GDT表2.设置系统定时芯片3. 设置IDT表(0x08时钟中断和0x80系统调用中断)4.切换到任务0执行 任务切换和执行包括了:1.任务0和任务1 , 2.时钟中断, 3.系统中断 两个任务的在LDT中代码段和数据段描述符的内容都设置为:基地址0x0000;段限长值为0x03ff,实际段长度为4MB。因此在线性地址空间中这个?内核?的代码和数据段与任务的代码和数据段都从线性地址0开始并且由于没有采用分页机制,所以他们都直接对应物理地址0开始处。 为了每隔10毫秒切换运行的任务,head.s程序中把定时器芯片8253的通道0设置成每隔10毫秒就向中断控制芯片8259A发送一个时钟中断请求信号。PC机的ROM BIOS开机时已经在8259A中把时钟中断请求信号设置成中断向量8,因此我们需要在中断8的处理过程中执行任务切换操作。任务切换的实现是查看current变量中的当前运行的任务号,如果为0,就利用任务1的TSS选择符作为操作数执行远跳转指令,从而切换到任务1中,否则反之。

每个任务在执行时,会首先把一个字符的ASCII码放入寄存器AL中,然后调用系统中断调用int 0x80,而该系统调用处理过程则会调用一个简单的字符写屏子程序,把寄存器AL中的字符显示在屏幕上,同时把字符显示的屏幕的下一个位置记录下来,作为下一次显示字符用。在显示过一个字符后,任务代码会使用循环语句延迟一段时间,然后又跳转到任务代码开始处继续循环执行,直到运行了10毫秒而发生了定时中断,从而代码会切换到另一个任务执行。对于任务A,寄存器AL中始终存放字符‘A’,而任务B运行时AL中始终存放字符‘B’。因此程序运行时我们将看到一连串的‘A’和一连串的‘B’间隔的连续不断的显示在屏幕上。若出现了一个‘C’,是由于PC机偶然产生了一个不是时钟中断和系统调用中断的其他中断。因为我们已经在程序中给所有其他中断安装了一个默认中断处理程序。当出现一个其他中断时,系统就会运行这个中断处理程序,于是就会在屏幕上显示一个‘C’,然后退出中断。 4.请记录head.s 的内存分布状况,写明每个数据段,代码段,栈段 的起始与终止的内存地址。

操作系统上机报告

操作系统上机报告 实验一、匿名管道通信 一、实验目的 学会创建匿名管道,并且能够利用管道进行进程间的通信。 二、实验内容 分别建立名为Parent的单文档应用程序和Child的单文档应用程序作为父子进程,由父进程创建一个匿名管道,实现父子进程向匿名管道写入和读取数据。 三、设计与实现过程 本实验在VC6.0上实现

? A.父进程 ?先建一个Parent的单文档应用程序,增加“创建管道”“读取数据”“写入数据”三个菜单,并添加消息响应函数 OnPipeCreate(),OnPipeRead(),OnPipeWrite()。在 CParentView类中增加成员变量HANDLE类型的hRead,hWrite,初始化变量,并在析构函数中释放句柄: ?void CParentView::OnPipeWrite() ?{ ?if(!CreatePipe(…)) /*创建匿名管道*/ ?{ ? /*显示消息“创建管道失败!”*/ ? /*退出*/ ?} ?if(!CreateProcess(…)) /*创建子进程*/ ?{ ? /*关闭句柄hRead、hWrite*/ ? /*显示消息“创建子进程失败!”*/ ? /*退出*/ ?} ?} ?void CParentView::OnPipeRead() ?{ ? /*定义一个字符数组,用于存放读取的数据*/ ?if(!ReadFile(…)) /*读取数据*/ ?{ ? /*显示消息“读取数据失败!”*/ ? /*退出*/ ?} ?/*打印读取的数据*/ ?/*退出*/ ?void CParentView::OnPipeWrite() ?{ ?/*定义一个字符数组,用于存放写入的数据*/ ?if(!WriteFile(…)) /*写入数据*/

操作系统实验报告.实验一_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中可执行文件在核心态运行和用户态运行的时间。 E:\课程\os课\os实验\程序\os12\debug>time TEST.exe 步骤4:运行结果 (如果运行不成功,则可能的原因是什么?) 因为此程序是个死循环,所以运行时间为无穷大。_______________________________________________________________________________ _______________________________________________________________________________ _______________________________________________________________________________ _______________________________________________________________________________ __________________________________________________________________________

系统的技术操作和维护手册

系统的技术、操作和维护手册 一、安防监控系统 1、开机 注意 1、请确认接入的电压与硬盘录像机的要求相匹配,并保证硬盘录像机接地端接地良好。 2、在开机前,请确保有显示器或监视器与设备的HDMI/VGA/VIDEO OUT相连接。 若前面板电源[开关键]指示灯不亮,请插上电源,打开后面板电源开关,设备开始启动。若前面板电源[开关键]指示灯呈红色,请轻按前面板电源[开关键],设备开始启动。 设备启动后,电源[开关键]指示灯呈蓝色。 2、关机 方法1 进入设备关机界面(主菜单→设备关机),选择[关机]。在提示窗口选择 [是]即可完成关机操作。 方法2

2:连续按住硬盘录像机前面板或遥控器上的电源[开关键]3秒以上将弹出登框,请输入用户名及密码,身份验证通过后弹出“确定要关闭设备吗?”的提示,[是] 将关闭设备。 注意 1、系统提示“系统正在关闭中…”时,请不要按电源[开关键],否则可能会出现关机过程不能正常进行。 2、设备运行时,应尽量避免直接通过后面板上的电源开关切断电源(特别是正在录像时)。 3、设备运行时,应尽量避免直接拔掉电源线(特别是正在录像时)。 4、在某些环境下,电源供电不正常,会导致硬盘录像机不能正常工作,严重时可能会损坏硬盘录像机。 在这样的环境下,建议使用稳压电源进行供电。 3、菜单结构

4、通道配置 在对IP通道进行接入和配置以前,请确认IP设备已经连接到网络中。 1、进入IP通道添加界面(主菜单→通道管理)。选择“通道配置”的IP通道属性页,进入IP通道添加界面。 2、快速添加IP通道。 选择右侧窗口[搜索],快速查询同网段下支持SADP协议的IP设备,勾选需要添加的通道,选择[快速添加]。

操作系统实验报告_实验四

实验四:进程管理(二) 实验内容: 1.编写一个程序,打印进程的如下信息:进程标识符,父进程标识符,真实用户ID,有效用户ID,真实用户组ID,有效用户组ID。并分析真实用户ID和有效用户ID的区别。 源代码及结果: 真实用户ID和有效用户ID的区别: 真实用户ID:这个ID就是我们登陆unix系统时的身份ID。 有效用户ID:定义了操作者的权限。有效用户ID是进程的属性,决定了该进程对文件的访问权限。 2.阅读如下程序,编译并运行,分析进程执行过程的时间消耗(总共消耗的时间和CPU 消耗的时间),并解释执行结果。再编写一个计算密集型的程序替代grep,比较两次时间的花销。注释程序主要语句。 /* process using time */ #include #include #include #include #include void time_print(char *,clock_t);

int main(void){ //取得进程运行相关的时间 clock_t start,end; struct tms t_start,t_end; start = times(&t_start); system(“grep the /usr/doc/*/* > /dev/null 2> /dev/null”); /*command >/dev/null的作用是将是command命令的标准输出丢弃,而标准错误输出还是在屏幕上。一般来讲标准输出和标准错误输出都是屏幕,因此错误信息还是会在屏幕上输出。>/dev/null 2> /dev/null 标准输出与标准错误输出都会被丢弃*/ // 0 1 2 标准输入标准输出错误输出 // > 将信息放到该文件null中 end=times(&t_end); time_print(“elapsed”,end-start); puts(“parent times”); time_print(“\tuser CP U”,t_end.tms_utime); time_print(“\tsys CPU”,t_end.tms_stime); puts(“child times”); time_print(“\tuser CPU”,t_end.tms_cutime); time_print(“\tsys CPU”,t_end.tms_cstime); exit(EXIT_SUCCESS); } void time_print(char *str, clock_t time) { long tps = sysconf(_SC_CLK_TCK); /*函数sysconf()的作用为将时钟滴答数转化为秒数,_SC_CLK_TCK 为定义每秒钟

操作系统实验报告

操作系统实验指导书 主编:杜俊俐 计算机学院 操作系统课程组2010年2月 20日

前言 操作系统是计算机系统中的核心系统软件,负责控制和管理整个系统的资源并组织用户协调使用这些资源,是计算机高效的工作。操作系统课程是计算机科学与技术专业核心课程。 由于操作系统是最优秀、最复杂和最庞大的软件之一,所以,真正领会操作系统课程所介绍的感念、原理、方法和技巧等,是十分困难的。经验表明,学习尤其是真正体会和掌握操作系统的最好方式是对它进行充分的实验。为此,培养计划中为操作系统课程安排了16学时实验。 为了更好地发挥实验深入理解课程知识的学习作用及知识应用的实践方法,将课程中重要知识点设计成七个实验。通过这些实验有助于学生全面、透彻的理解操作系统原理中的核心知识。

目录 第一章、概述 (4) 第二章、实验要求及注意事项 (5) 第三章、实验项目 (6) 实验一:进程创建与撤消 (6) 实验二:进程调度 (7) 实验三:进程通信 (8) 实验四:分区式储器管理 (9) 实验五:请求页式存储管理 (10) 实验六:磁盘调度算法 (11) 实验七:磁盘文件操作 (12) 第四章、参考文献 (13) 附录A:实验报告规范 (14)

第一章、概述 操作系统课程是计算机科学与技术专业核心课程。《高级语言程序设计》、《数据结构》等课程为其前趋课程。该课程理论性强,难以理解。通过课程的实验,能帮助学生深透理解并真正领会操作系统课程所介绍的感念、原理、方法和技巧等。 实验学时为16,共分七个实验分别进行。实验一:进程创建与撤消、实验二:进程调度、实验三:进程通信、实验四:分区式储器管理、实验五:请求页式存储管理、实验六:磁盘调度算法、实验七:磁盘文件操作。其中实验五需4学时,其余均为2学时。这七个实验对操作系统原理中的进程管理、存储器管理、文件系统等重要知识进行训练。 实现语言为Visual C++ 6.0,系统平台为Windows。

相关文档