文档视界 最新最全的文档下载
当前位置:文档视界 › 操作系统实验资料

操作系统实验资料

操作系统实验资料
操作系统实验资料

《操作系统》实验报告(一)

Linux基本操作与编程(验证性 2学时)

1、实验目的:

1)熟悉Linux操作系统的环境和使用。

2)* 了解LINUX系统的安装过程。(注:*表示可选择)

3)掌握Linux环境下的命令操作。

2、实验内容:

(1)完成LINUX系统的登录,启动终端。进行下列操作并记录结果(要求:结果以屏幕截图表示)。

1)运行pwd命令,确定你当前的工作目录。

2)利用以下命令显示当前工作目录的内容: ls –l

3)运行以下命令: ls –al

4)使用mkdir命令建立一个子目录subdir。

5)使用cd命令,将工作目录改到根目录(/)上。

6)使用ls-l命令列出/dev的内容。

7)使用不带参数的命令cd改变目录,然后用pwd命令确定你当前的工作目录是哪里?

8)使用命令cd ../..,你将工作目录移到什么地方?

(2)在LINUX下查看你的文件。

1)利用cd命令,将工作目录改到你的主目录上。

2)将工作目录改到你的子目录subdir,然后运行命令: date > file1 将当前日期和时间存放到新建文件file1中。

3)使用cat命令查看file1文件的内容。

4)利用man命令显示date命令的用法: man date

5)将date命令的用法附加到文件file1的后面:man date >> file1

6)利用cat命令显示文件file1的内容。

7)利用ls -l file1命令列出文件file1的较详细的信息。运行ls -l/bin命令显示目录的内容。

8)利用ls -l/bin|more命令行分屏显示/bin目录的内容。

9)利用cp file1 fa命令生成文件file1的副本。然后利用ls -l命令查看工作目录的内容。

10)用cd命令返回你的主目录,输入命令ls –l后,解释屏幕显示的第一列内容的含义

(3)编写能输出“Hello world!”问候语的C程序,并在终端中编译、执行。要求记录所使用的命令及结果。

操作步骤:

1)在文本编辑器中,编写C程序a.c如下:

#include "stdio.h"

main()

{ printf("hello"); }

2) 在终端中,用gcc命令进行编译,生成可执行文件a。

gcc a.c –o a

3) 在终端中执行a 的命令如下:

./a

(4)编写一个程序:显示信息“Time for Play!”,并能在后台运行一段时间(自定义)后,弹出信息提醒用户。要求记录所使用的命令及结果。(提示:使用sleep(s)函数)

3、实验结果分析:

(对上述实验内容中的各题结果,进行分析讨论。并回答下列问题)

(1)进程包括哪些特征?

间断性,失去封闭性,不可再现性,动态性,并发性,独立性

(2)在Linux中,如何设置前、后台命令和程序的执行?

命令后直接加& ,这个命令就在后台执行;正在运行的命令,使用Ctrl+z ,就挂

起;jobs命令,可以现实后台,包括挂起的命令;

使用bg %作业号就可以把挂起的命令在后台执行;使用fg %作业

号就可以把后台命令调到前台

(3)你所使用的Linux系统的内核版本是多少?用什么命令查看内核版本?目前你所了解的各发行版本的情况如何?

Linux version 2.6.32-358.el6.i686 (mockbuild@x86-022.build.eng.bos.redhat.c

om) (gcc version 4.4.7 20120313 (Red Hat 4.4.7-3) (GCC) ) #1 SMP Tue

Jan 29 11:48:01 EST 2013

(4)你对Linux系统有什么认识?

linux是一款开放性的操作系统,也可以说成是开放的源代码系统,这些代码可以完全自由的

修改可以再任何的计算机上去运行它,也就是“可移植性”,其次大家都知道,linux是由UNIX

的概念所开发出来的,所以它也继承了UNIX的稳定和效率的特点!

4、总结:你对本次实验有什么体会或看法。

《操作系统》实验报告(二)

文件访问权限设置与输入输出重定向(2学时)

一、实验目的

1、掌握linux的文件访问权限设置。

2、熟悉输入输出重定向和管道操作。

二、实验内容

1、启动进入红帽linux系统

2、设置文件权限:

●在用户主目录下创建目录test,进入test目录,用vi创建文件file1,并输入

任意的文字内容。

●用ls -l显示文件信息,注意文件的权限和所属用户和组。

●对文件file1设置权限,使其他用户可以对此文件进行写操作:#chmod o+w

file1。

●用ls -l查看设置结果。

●取消同组用户对此文件的读取权限:#chmod g-r file1。查看设置结果。

●用数字形式来为文件file1设置权限,所有者可读、可写、可执行;其他用户

和所属组用户只有读和执行的权限:#chmod 755 file1。设置完成后查看设

置结果。

3、输入、输出重定向和管道

(1)输出重定向

●用ls命令显示当前目录中的文件列表:#ls –l。

●使用输出重定向,把ls命令在终端上显示的当前目录中的文件列表重定向到

文件list中:#ls –l > list。

●查看文件list中的内容,注意在列表中会多出一个文件list,其长度为0。

这说明shell是首先创建了一个空文件,然后再运行ls命令:#cat list。

●再次使用输出重定向,把ls命令在终端上显示的当前目录中的文件列表重定

向到文件list中。这次使用追加符号>>进行重定向:#ls –l >> list。

●查看文件list的内容,可以看到用>>进行重定向是把新的输出内容附加在文

件的末尾,注意其中两行list文件的信息中文件大小的区别:cat list。

●重复命令#ls –l > list。

●再次查看文件list中的内容,和前两次的结果相比较,注意list文件大小

和创建时间的区别。

(2)管道

● who |grep root命令的结果是?

命令ls –l |wc –l结果是?

4、退出linux系统

操作步骤:

在主菜单上选择“注销”->关闭计算机。

三、实验结果与讨论(根据实验结果回答下列问题)

1.文件backup.tar的权限如下:

-rw-r—r-- 1 root root 19274 Jul 14 11:00 backup.tar

回答:-rw-r—r-- 的含义是什么?

答:是LINUX/FTP的简易权限表示法:

对应于本用户-所在组-其他人的权限,每一个用执行(x)-读取(r)-写入(w)

如本题若是说自己可以读取写入不可以执行,所在组和其他人只能读取.

2、文件backup.tar的所有者添加执行权限的命令是?

答:chmod u+x backup.tar.gz

3、赋予所有用户读和写backup.tar文件权限的命令是?

答:chmod a+w,a+r backup.tar.gz

四、个人体会

(你对本次实验有什么体会或看法?)

《操作系统》实验报告(三)

文件和目录管理

一、实验目的

1) 掌握在Linux系统下的文件和文件系统的概念及命令;

2) 掌握Linux系统下的目录操作。

二、实验内容

1.进入linux终端后,用命令的操作结果回答下列问题:

1)vi的三种工作模式是?其中不能进行直接转换的是什么模式到什么模式?

命令模式、文本输入模式、末行模式命令模式不能直接到末行模式2)在vi中退出时,保存并退出的操作步骤是?

Ese:wq

3)用vi 创建myfile1文件,并在其中输入任意文字一行,创建myfile2文件,任

意输入文字3行。请问执行命令:cat myfile2 后,myfile2中还有几行内

容?该命令的作用是?用命令操作验证你的回答。

myfile2中还有1行内容该命令的作用是替换myfile的内容

4)请用至少两种不同的命令创建一个文本文件(Myext.txt),在其中写入“我是

2014级学生,我正在使用Linux系统。”,记录命令及执行结果。

1、Vi创建

2、

5)用___pwd________命令可查看所创建文件Myext.txt的绝对路径,写出它的绝对

路径__/root_________;用___ls -l________命令查看该文件的类型及访问权限,其

访问权限(数字和字母)分别是多少__-rw- r- - r- - 6 4 4______________。

6)若将该文件的访问权限修改为:所有者有读写权限;其他用户只读;同组用户

可读写,请写出命令,并记录结果。

7)查找my开头的所有文件,可___find my*_________命令,写出命令并记录结

8)在/home下创建子目录user,并在其中创建2个文件,名为file1和file2,file1

的内容是/root目录的详细信息;file2的内容任意,最后将这两个文件合并为file3

文件,请先写出命令序列,并在终端中验证,记录结果。

2.文件及目录操作,写出操作所使用的命令,并记录结果。

●在终端中完成下列命令操作,并记录结果

●在root用户主目录下创建一个mydir子目录和一个myfile文件,再在mydir

下建立d1和d2两个子目录。

●查看mydir和myfile的默认权限

●查看当前myfile和mydir的权限值是多少?

●将myfile文件分别复制到root 和dd1的主目录中

●将root主目录中的myfile改为yourfile

●通过从键盘产生一个新文件text.txt并输入I am a student

●查找text.txt文件是否包含student字符串

三、实验结果与分析,回答下列问题:

1、能够创建文件的命令有哪些?

vi 和cat>name

2、能够查看当前目录的绝对路径的命令是?

pwd

3、Linux中按用户属性将用户分成哪些类型?根据文件的访问权限,用户又被分成哪些类型?能够查看文件访问权限的命令是?

用户同组其他

可读可写可执行cat f1

四、小结

(本次实验的体会或小结)

《操作系统》实验报告(四)

作业调度算法模拟(验证性2学时)

1、实验目的:

1)掌握作业调度的主要功能及算法。

2)通过模拟作业调度算法的设计加深对作业管理基本原理的理解。

3)熟悉Linux环境下应用程序的编程方法。

2、实验内容:

(1)作业调度算法(FCFS)编程模拟:

编制一段程序,对所输入的若干作业,输入、输出数据样例如下表所示。按FCFS算法模拟调度,观察、记录并分析调度的输出结果情况。

fcfs.c

#include

#include

#define SIZE 5

struct Job_type

{

char no[2]; //作业名

int tb; //作业到达时间(分)

int tr; //运行时间(分)

}x,job[5];

void load()

{ int i;

printf("\nEnter the Jobs' datas:\n");

for(i=0;i

scanf("%s%d%d",&job[i].no,&job[i].tb,&job[i].tr);

printf("输入作业顺序:\n");

for(i=0;i

printf("\t%s\t%d\t%d\n",job[i].no,job[i].tb,job[i].tr);

}

void fcfs()

{ int i,j,t=0,tw=0,tt=0;

for(i=0;i

for(j=i+1;j

if(job[i].tb>job[j].tb)

{x=job[i];

job[i]=job[j];

job[j]=x;

}

printf("FCFS调度结果:\n");

printf("开始时间作业号到达时间运行时间完成时间等待时间周转时间\n");

for(i=0;i

{

printf(" %d",t);

t=t+job[i].tr;

tw=t-job[i].tb-job[i].tr; //作业等待时间

tt=t-job[i].tb; //周转时间

printf("\t%s\t%d\t%d\t%d\t%d\t%d\n",job[i].no,job[i].tb,job[i].tr,t,tw,tt);

}

}

void main()

{

load();

fcfs();

}

(2)作业调度算法(SJF)编程模拟:编程实现由短作业优先算法,分别用下面两组输入、输出数据样例进行模拟,观察分析运行结果。

【输入输出样例2:SJF算法】

#include

#include

#define SIZE 5

struct Job_type

{

char no[2]; //作业名

int tb; //作业开始时间(分)

int tr; //运行时间(分)

}x,job[5];

void load()

{ int i;

printf("\nEnter the Jobs' datas:\n");

for(i=0;i

scanf("%s%d%d",&job[i].no,&job[i].tb,&job[i].tr);

printf("输入作业顺序:\n");

for(i=0;i

printf("\t%s\t%d\t%d\n",job[i].no,job[i].tb,job[i].tr); }

void sjf() //短作业调度函数{

}

void main()

{

load();

sjf();

}

3、实验结果分析:

(对上述实验各题所使用的原始数据、调试数据与状态(包括出错)及最终结果进行记录并分析。)

在进程调度中采用FCFS算法时,则每次调度是从就绪队列中选择一个最先进入该队列的进程,为之分配处理机,使之投入运行。该进程一直运行到完成或发生某事件而阻塞后才放弃处理机。FCFS算法比较有利于长作业(进程),而不利于短作业(进程)。

短作业优先(SJF)的调度算法是从后备队列中选择一个或若干个估计运行时间最短的作业,将它们调入内存运行。该算法对长作业不利,完全未考虑作业的紧迫程度。

4、总结:你对本次实验有什么体会或看法。

《操作系统》实验报告(五)

内存管理算法模拟(验证性 2学时)

一、实验目的:

4)掌握内存管理的主要技术与功能。

2)模拟内存管理算法的实现方法。

二、实验内容:

设计一个能模拟内存管理行为的系统程序,该系统至少应包括FIFO和LRU算法(Least Recently Used)(当需要置换一页时,选择最长时间未被使用的那一页淘汰掉。)的实现。

阅读下列的参考程序,写出main()函数,输入下面的各组测试数据,运行并记录结果。

数据1:

7 0 1 2 0 3 0 4 2 3 0 3 2 1 2 0 1 7 0 1

数据2:

0,1,7,2,3,2,17,1,0,3,0,3,0,3,0,10

数据3:

24 15 18 23 24 17 18 24 18 17 17 15 24 17 24 18

数据4:

4 3 2 1 4 3

5 4 3 2 1 5 7 2 3 4 8 1 4 3 5 2 3 1

参考程序 page.c

#include

#include

#define ERR -1

#define page_len 16 //页序列总长

#define total_vp 18 //作业的总页数+1,即序列中出现的最大页号+1,为了开

pl[total_vp]数组所用

typedef struct{

int pn,pfn,counter,time;

}pl_type;

pl_type pl[total_vp];

struct pfc_struct{

int pn,pfn;

struct pfc_struct *next;

};

typedef struct pfc_struct pfc_type;

pfc_type pfc[total_vp],*freepf_head,*busypf_head,*busypf_tail;

int diseffect;

int page[page_len];

void initialize(int total)

{ int i;

diseffect=0;

for(i=0; i

{ pl[i].pn=i;

pl[i].pfn=ERR;

}

for(i=1;i

{ pfc[i-1].next=&pfc[i];

pfc[i-1].pfn=i-1;}

pfc[total-1].next=NULL;

pfc[total-1].pfn=total-1;

freepf_head=&pfc[0];

}

void FIFO(int total)

{ int i,j;

pfc_type *p,*t;

initialize(total);

busypf_head=busypf_tail=NULL;

for(i=0;i

{

if(pl[page[i]].pfn==ERR)

{ diseffect+=1;

if(freepf_head==NULL)

{p=busypf_head->next;

pl[busypf_head->pn].pfn=ERR;

freepf_head=busypf_head;

freepf_head->next=NULL;

busypf_head=p;

}

p=freepf_head->next;

freepf_head->next=NULL;

freepf_head->pn=page[i];

pl[page[i]].pfn=freepf_head->pfn;

if(busypf_tail==NULL)

busypf_head=busypf_tail=freepf_head;

else

{ busypf_tail->next=freepf_head;

busypf_tail=freepf_head;

}

freepf_head=p;

}}

printf("FIFO:%d",diseffect);

}

main()

{ int i; int k;

printf(“请输入页的引用序列:\n”);

for(k=0;k

scanf("%d",&page[k]);

for(i=4;i<=7;i++)

{

printf("%2d page frames ",i);

FIFO(i);}

参考程序LRU算法,略

三、实验结果分析:

(对上述实验各题所使用的原始数据、调试数据与状态(包括出错)及最终结果进行记

录并分析。)

随着块数的增加,缺页数目也减少,4个实验中3个实验的块数增加到了5以后,即使块数再增加,缺页数目也是保持不变。只有实验4,块数增加到7以后,缺页数目又再次减少了

四、总结:你对本次实验有什么体会或看法。

操作系统实验题目2

实验报告撰写要求实验报告要求具有以下内容: 一、实验目的 二、实验内容 三、实验要求 四、算法流程图 五、给出测试数据及运行结果 六、实验体会或对改进实验的建议

实验1 进程调度(2学时) 一、实验目的 通过实验加强对进程调度算法的理解和掌握。 二、实验内容 编写程序实现基于优先级的时间片轮转调度算法。 三、实验要求 1、假定系统有5个进程,每个进程用一个进程控制块PCB来代表,进程控制块的结构如下图1.1所示: 图1.1 其中: 进程名:作为进程的标识,假设五个进程的进程名分别为p1,p2,p3,

p4,p5。 指针:进程按顺序排成循环链表,用指针指出下一个进程的进程控制块首地址,最后一个进程中的指针指出第一个进程的进程控制块首地址。 要求运行时间:假设进程需要运行的单位时间数。 已运行时间:假设进程已经运行的单位时间数,初值为0。 状态:可假设有两种状态,就绪状态和结束状态。进程的初始状态都为就绪状态。 2、每次运行所设计的处理器调度程序调度进程之前,为每个进程随机确定它的要求运行时间。 3、此程序是模拟处理器调度,因此,被选中的进程并不实际启动运行,而是执行 已运行时间+1 来模拟进程的一次运行,表示进程已经运行过一个单位时间。 4、在所设计的程序中应有显示语句,能显示每次被选中的进程名以及运行一次后进程队列的变化。

实验2 银行家算法(2学时) 一、实验目的 理解银行家算法,掌握进程安全性检查的方法及资源分配的方法。 二、实验内容 编写程序实现银行家算法,并验证程序的正确性。 三、实验要求 编制模拟银行家算法的程序,并以下面给出的例子验证所编写的程序的正确性。 例子:某系统有A、B、C、D 4类资源共5个进程(P0、P1、P2、P3、P4)共享,各进程对资源的需求和分配情况如下表所示。 现在系统中A、B、C、D 4类资源分别还剩1、5、2、0个,请按

操作系统实验报告一

重庆大学 学生实验报告 实验课程名称操作系统原理 开课实验室DS1501 学院软件学院年级2013专业班软件工程2 班学生姓名胡其友学号20131802 开课时间2015至2016学年第一学期 总成绩 教师签名洪明坚 软件学院制

《操作系统原理》实验报告 开课实验室:年月日学院软件学院年级、专业、班2013级软件工 程2班 姓名胡其友成绩 课程名称操作系统原理 实验项目 名称 指导教师洪明坚 教师 评语教师签名:洪明坚年月日 1.实验目的: ?进入实验环境 –双击expenv/setvars.bat ?检出(checkout)EPOS的源代码 –svn checkout https://www.docsj.com/doc/e312173873.html,/svn/epos ?编译及运行 –cd epos/app –make run ?清除所有的临时文件 –make clean ?调试 –make debug ?在“Bochs Enhanced Debugger”中,输入“quit”退出调试 –调试指令,请看附录A 2.实验内容: ?编写系统调用“time_t time(time_t *loc)” –功能描述 ?返回从格林尼治时间1970年1月1日午夜起所经过的秒数。如果指针loc 非NULL,则返回值也被填到loc所指向的内存位置 –数据类型time_t其实就是long ?typedef long time_t; 3.实验步骤: ?Kernel space –K1、在machdep.c中,编写系统调用的实现函数“time_t sys_time()”,计算用户秒数。需要用到 ?变量g_startup_time,它记录了EPOS启动时,距离格林尼治时间1970年1午夜的秒数 ?变量g_timer_ticks

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

一、实验目的 通过对进程调度算法的设计,深入理解进程调度的原理。 进程是程序在一个数据集合上运行的过程,它是系统进行资源分配和调度的一个独立单位。 进程调度分配处理机,是控制协调进程对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)调度算法,时间片轮转。流程图如下:

操作系统实验报告 附思考题

课程设计(综合实验)报告( 2015 -- 2016 年度第 1 学期) 名称:操作系统综合实验 题目:oslab综合实验 院系:计算机系 班级: 学号: 学生姓名: 指导教师: 设计周数:分散进行 成绩: 日期:2015 年10 月29 日

实验1 实验环境的使用 一、综合实验的目的与要求 熟悉操作系统集成实验环境OS Lab 的基本使用方法。 练习编译、调试EOS 操作系统内核以及EOS 应用程序。 二、实验正文 1.启动 OS Lab 2.1 执行项目 Windows 控制台窗口内容显示 2.2 调试项目 2.2.1 使用断点中断执行 2.2.2 单步调试 2.2.2 .3单步调试结果显示: 练习使用“逐语句”功能和“跳出”功能 2.2.3 查看变量的值 快速监视 添加监视 2.2.4 调用堆栈 调用堆栈显示内容 进入Func 函数 双击 main 函数所在的行表示此函数是当前调用堆栈中的活动函数。 3 新建EOS 内核项目 4 EOS 应用程序项目的生成和调试 4.1 新建EOS 应用程序项目 4.2 调试项目 添加断点后单步调试结果显示 4.3 查看软盘镜像文件中的内容 4.4修改EOS 应用程序项目名称 5 退出OS Lab 6 保存EOS 内核项目 三、综合实验总结或结论 思考与练习: 1.在哪些情况下应该使用“逐过程”调试,在哪些情况下应该使用“逐语句”调试。

答:逐语句为每执行一行语句,如果碰到函数调用它就会进入到函数里面。而逐过程碰到函数时不进入函数,把函数调用当成一条语句去执行。 2. 生成EOS SDK 文件夹的目的和作用。明白文件夹的组织结构和各个文件的来源和作用。查看EOS 应用程序包含了SDK 文件夹中的哪些头文件,是如何包含的? (1)EOS SDK为应用程序调用系统API提供服务,可作为用户编程中使用的工具包集合。(2)其主要包括INC头文件LIB文件夹、导入库文件和BIN文件夹、动态链接库、可执行程序、二进制文件。 (3)包含的头文件有:eos.h负责导出API函数,eosdef.h声明负责导出函数类型的定 义,error.h负责导出错误码。 (4)EOS应用程序在项目的头文件中只是包含了eos.h文件,在eos.h文件中又包含了eosdef.h和error.h文件。 实验 2 操作系统的启动 一、综合实验的目的与要求 跟踪调试 EOS 在 PC 机上从加电复位到成功启动全过程,了解操作系统的启动过程。 查看 EOS 启动后的状态和行为,理解操作系统启动后的工作方式。 二、实验正文 1. 准备实验 新建一个 EOS Kernel 项目。打开boot.asm 和loader.asm 两个汇编文件。生成项目。找到loader.bin 文件,记录下此文件的大小 1566 字节。 2 调试 EOS 操作系统的启动过程 2.1 使用 Bochs 做为远程目标机 找到“远程目标机”属性,将此属性值修改为“BochsDebug” 2.2 调试 BIOS 程序 2.2.1在 Console 窗口中输入调试命令 sreg 后按回车,其中 CS 寄存器信息行中的 “ s=0xf000”表示 CS 寄存器的值为 0xf000。 2.2.2 输入调试命令 r 后按回车,显示当前 CPU 中各个通用寄存器的值。其中 “ rip:0x00000000:0000fff0”表示 IP 寄存器的值为 0xfff0。 2.2.3输入调试命令 xp /1024b 0x0000,查看开始的 1024 个字节的物理内存。在 Console 中输出的这1K 物理内存的值都为 0,说明 BIOS 中断向量表还没有被加载到此处。 2.2.4输入调试命令 xp /512b 0x7c00,查看软盘引导扇区应该被加载到的内存位置。输出的内存值都为 0,说明软盘引导扇区还没有被加载到此处。

操作系统原理实验-系统内存使用统计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的工程,单击完成。

操作系统实验题目及实验报告要求

操作系统实验题目及实验 报告要求 Prepared on 21 November 2021

实验报告实验课程:操作系统实验 学生姓名:王桥 学号: 24 专业班级:计科123班 2014年 6月3 日 目录 一、实验一 (1) 二、实验二 (7) 三、实验三 (21) 四、实验四 (28) 五、实验五 (33)

南昌大学实验报告 ---(1)操作系统安装及其接口环境 学生姓名:王桥学号: 24 专业班级:计科123班 实验类型:■验证□综合□设计□创新实验日期:实验成绩: 一、实验目的 熟悉Windows1(执行程序) 2.模拟PV操作同步机构,且用PV操作解决生产者——消费者问题。 模拟PV操作同步机构,且用PV操作解决生产者——消费者问题。 [提示]: (1) PV操作同步机构,由P操作原语和V操作原语组成,它们的定义如下: P操作原语P(s):将信号量s减去1,若结果小于0,则执行原语的进程被置成等待信号量s的状态。 V操作原语V(s):将信号量s加1,若结果不大于0,则释放一个等待信号量s的进程。 这两条原语是如下的两个过程: procedure p (var s: semaphore); begin s:=s-1; if s<0 then W(s) end {p} procedure v (var s: semaphore); begin s: =s+1; if s<=0 then R(s) end {V} 其中W(s)表示将调用过程的进程置为等待信号量s的状态;R(s)表示释放一个等待信号量s的进程。 在系统初始化时应把semaphore定义为某个类型,为简单起见,在模拟实验中可把上述的semaphore直接改成integer。 (2)生产者——消费者问题。 假定有一个生产者和消费者,生产者每次生产一件产品,并把生产的产品存入共享缓冲器以供消费者取走使用。消费者每次从缓冲器内取出一件产品去消费。禁止生产者将产品放入已满的缓冲器内,禁止消费者从空缓冲器内取产品。假定缓冲器内可同时存放10件产品。那么,用PV操作来实现生产者和消费者之间的同步,生产者和消费者两个进程的程序如下: B:array [0..9] of products; s 1,s 2 : semaphore; IN, out; integer; IN:=0;out:=0;

操作系统实验报告心得体会

操作系统实验报告心得体会 每一次课程设计度让我学到了在平时课堂不可能学到的东西。所以我对每一次课程设计的机会都非常珍惜。不一定我的课程设计能够完成得有多么完美,但是我总是很投入的去研究去学习。所以在这两周的课设中,熬了2个通宵,生物钟也严重错乱了。但是每完成一个任务我都兴奋不已。一开始任务是任务,到后面任务就成了自己的作品了。总体而言我的课设算是达到了老师的基本要求。总结一下有以下体会。 1、网络真的很强大,用在学习上将是一个非常高效的助手。几乎所有的资料都能够在网上找到。从linux虚拟机的安装,到linux的各种基本命令操作,再到gtk的图形函数,最后到文件系统的详细解析。这些都能在网上找到。也因为这样,整个课程设计下来,我浏览的相关网页已经超过了100个(不完全统计)。当然网上的东西很乱很杂,自己要能够学会筛选。 不能决定对或错的,有个很简单的方法就是去尝试。就拿第二个实验来说,编译内核有很多项小操作,这些小操作错了一项就可能会导致编译的失败,而这又是非常要花时间的,我用的虚拟机,编译一次接近3小时。所以要非常的谨慎,尽量少出差错,节省时间。多找个几个参照资料,相互比较,

慢慢研究,最后才能事半功倍。 2、同学间的讨论,这是很重要的。老师毕竟比较忙。对于课程设计最大的讨论伴侣应该是同学了。能和学长学姐讨论当然再好不过了,没有这个机会的话,和自己班上同学讨论也是能够受益匪浅的。大家都在研究同样的问题,讨论起来,更能够把思路理清楚,相互帮助,可以大大提高效率。 3、敢于攻坚,越是难的问题,越是要有挑战的心理。这样就能够达到废寝忘食的境界。当然这也是不提倡熬夜的,毕竟有了精力才能够打持久战。但是做课设一定要有状态,能够在吃饭,睡觉,上厕所都想着要解决的问题,这样你不成功都难。 4、最好在做课设的过程中能够有记录的习惯,这样在写实验报告时能够比较完整的回忆起中间遇到的各种问题。比如当时我遇到我以前从未遇到的段错误的问题,让我都不知道从何下手。在经过大量的资料查阅之后,我对段错误有了一定的了解,并且能够用相应的办法来解决。 在编程中以下几类做法容易导致段错误,基本是是错误地使用指针引起的 1)访问系统数据区,尤其是往系统保护的内存地址写数据,最常见就是给一个指针以0地址 2)内存越界(数组越界,变量类型不一致等) 访问到不属于你的内存区域

操作系统实验报告

操作系统实验报告 集团企业公司编码:(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队列队尾指 针

操作系统实验报告

操作系统实验报告 实验名称: 系统的引导 所在班级: 指导老师: 老师 实验日期: 2014年3 月29 日

一、实验目的 ◆熟悉hit-oslab实验环境; ◆建立对操作系统引导过程的深入认识; ◆掌握操作系统的基本开发过程; ◆能对操作系统代码进行简单的控制,揭开操作系统的神秘面纱。 二、实验容 1. 阅读《Linux核完全注释》的第6章引导启动程序,对计算机和Linux 0.11的引导过程进行初步的了解。 2. 按照下面的要求改写0.11的引导程序bootsect.s。 3. 有兴趣同学可以做做进入保护模式前的设置程序setup.s。 4. 修改build.c,以便可以使用make BootImage命令 5. 改写bootsect.s主要完成如下功能: bootsect.s能在屏幕上打印一段提示信息XXX is booting...,其中XXX是你给自己的操作系统起的名字,例如LZJos、Sunix等。 6. 改写setup.s主要完成如下功能: bootsect.s能完成setup.s的载入,并跳转到setup.s开始地址执行。而setup.s 向屏幕输出一行"Now we are in SETUP"。setup.s能获取至少一个基本的硬件参数(如存参数、显卡参数、硬盘参数等),将其存放在存的特定地址,并输出到屏幕上。setup.s不再加载Linux核,保持上述信息显示在屏幕上即可。 三、实验环境

本实验使用的系统是windows系统或者是Linux系统,需要的材料是osexp。 四、实验步骤 1. 修改bootsect.s中的提示信息及相关代码; 到osexp\Linux-0.11\boot目录下会看到图1所示的三个文件夹,使用UtraEdit 打开该文件。将文档中的98行的mov cx,#24修改为mov cx,#80。同时修改文档中的第246行为图2所示的情形。 图1图2 图3 2. 在目录linux-0.11\boot下,分别用命令as86 -0 -a -o bootsect.obootsect.s和 ld86 -0 -s -obootsectbootsect.o编译和bootsect.s,生成bootsect文件; 在\osexp目录下点击MinGW32.bat依此输入下面的命令: cd linux-0.11 cd boot as86 -0 -a -o bootsect.obootsect.s ld86 -0 -s -o bootsectbootsect.o

操作系统实验报告

《操作系统原理》实验报告 实验项目名称:模拟使用银行家算法判断系统的状态 一、实验目的 银行家算法是操作系统中避免死锁的算法,本实验通过对银行家算法的模拟,加强对操作系统中死锁的认识,以及如何寻找到一个安全序列解除死锁。 二、实验环境 1、硬件:笔记本。 2、软件:Windows 7 , Eclipse。 三、实验内容 1.把输入资源初始化,形成资源分配表; 2.设计银行家算法,输入一个进程的资源请求,按银行家算法步骤进行检查; 3.设计安全性算法,检查某时刻系统是否安全; 4.设计显示函数,显示资源分配表,安全分配序列。 四、数据处理与实验结果 1.资源分配表由进程数组,Max,Allocation,Need,Available 5个数组组成; 实验采用数据为下表: 2.系统总体结构,即菜单选项,如下图

实验的流程图。如下图 3.实验过程及结果如下图所示

1.首先输入进程数和资源类型及各进程的最大需求量 2.输入各进程的占有量及目前系统的可用资源数量 3.初始化后,系统资源的需求和分配表 4.判断线程是否安全

5.对线程进行死锁判断 五、实验过程分析 在实验过程中,遇到了不少问题,比如算法无法回滚操作,程序一旦执行,必须直接运行到单个任务结束为止,即使产生了错误,也必须等到该项任务结束才可以去选择别的操作。但总之,实验还是完满的完成了。 六、实验总结 通过实验使我对以前所学过的基础知识加以巩固,也对操作系统中抽象理论知识加以理解,例如使用Java语言来实现银行家算法,在这个过程中更进一步了解了银行家算法,通过清晰字符界面能进行操作。不过不足之处就是界面略显简洁,对于一个没有操作过计算机的人来说,用起来可能还是有些难懂。所以,以后会对界面以及功能进行完善,做到人人都可以看懂的算法。

操作系统原理实验四

实验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.下列不是Linux操作系统特点的是() A.开放性 B.良好的用户界面 C.良好的可移植性 D.单用户 2.在Linux系统中最高目录是() A.我的计算机 B.C:\ C./ D. home 3.可以代替任意单个字符的通配符是()。 A.? B.# C.@ D.* 4.可以代替任意字符的通配符是()。 A.? B.# C.@ D.* 4.telnet 命令的功能是() A.远程执行命令 B.传输信息C.远程登录 D.查看网络状态 5.常见的Linux发布版本很多,下列不是Linux发布版本的是() A.Red Hat Linux B.红旗Linux C.Fedora Core D.X-Window 6.怎样更改一个文件的权限设置?() A.attrib B.chmod C.change D.file 7.Linux操作系统中下面哪条命令可以把f1.txt复制为f2.txt? ( ) A. cp f1.txt f2.txt B. cat f1.txt f2.txt C. mv f1.txt f2.txt D. copy f1.txt f2.txt 8.设char dat[10],从键盘输入字符串的输入语句是:( ) A. scanf(“%d”,dat); B. scanf(“%s”,dat); C. scanf(“%d”,&dat); D. scanf(“%c”,dat); 9.让父进程等待子进程结束的函数是( ) A.exit(0); B.sleep(1) C.wait(0); D._exit(0); 10. 对标准输出设备(显示器)加锁的函数是( ) A.lockf(1,1,0);; B.lockf(1,0,0); C.lockf(1,0,1);; D.lockf(1,1,1); 11. 对标准输出设备(显示器)解锁的函数是( ) A.lockf(1,1,0);; B.lockf(1,0,0); C.lockf(1,0,1);; D.lockf(1,1,1); 12. linux系统中,预置当接收到软中断信号16跳转到func函数的命令是() A. signal(16,func) B. signal(func,16) C. kill(pid,17) D. kill(17,func) 13. linux系统中,消息队列通信中发送消息的系统调用格式是() A. msgsnd(msgqid,msfp,size,flag) B. msgqid=msgget(key,flag) C.msgrcv(msgqid,msfp,size,type,flag) D. msgctl(msgqid,IPC_RMID,0); 14. linux系统c语言编程中,让进程暂停6秒钟的命令是() A.wait(60) B.wait(0) C.sleep(6) D.sleep(60) 15. linux系统中,让后台运行的PID为1223的进程暂停的命令是() A. kill –CONT 1223 B. kill –STOP 1223 C. kill –KILL 1223 D. kill –EXIT 1223 二、填空 1)linux系统中删除当前目录下的非空子目录/dir1的命令:__rm –r /dir1____ 2)Windows系统中远程登录Linux系统的命令:__telnet ____ 3)linux系统中,显示当前目录所有文件的许可权、拥有者、文件大小、修改

操作系统实验报告

操作系统实验报告 Document number:NOCG-YUNOO-BUYTT-UU986-1986UT

许昌学院 《操作系统》实验报告书学号: 姓名:闫金科 班级:14物联网工程 成绩: 2016年02月

实验一Linux的安装与配置 一、实验目的 1.熟悉Linux系统的基本概念,比如Linux发行版、宏内核、微内核等。 2.掌握Linux系统的安装和配置过程,初步掌握Linux系统的启动和退出方 法。 3.熟悉Linux系统的文件系统结构,了解Linux常用文件夹的作用。 二、实验内容 1.从网络上下载VMware软件和两个不同Linux发行版镜像文件。 2.安装VMware虚拟机软件。 3.在VMware中利用第一个镜像文件完成第一个Linux的安装,期间完成网络 信息、用户信息、文件系统和硬盘分区等配置。 4.在VMware中利用第二个镜像文件完成第二个Linux的安装,并通过LILO或 者GRUB解决两个操作系统选择启动的问题。 5.启动Linux系统,打开文件浏览器查看Linux系统的文件结构,并列举出 Linux常用目录的作用。 三、实验过程及结果 1、启动VMware,点击新建Linux虚拟机,如图所示: 2、点击下一步,选择经典型,点击下一步在选择客户机页面选择 Linux,版本选择RedHatEnterpriseLinux5,如图所示: 3、点击下一步创建虚拟机名称以及所要安装的位置,如图所示: 4、点击下一步,磁盘容量填一个合适大小,此处选择默认值大小 10GB,如图所示: 5、点击完成,点击编辑虚拟机设置,选择硬件选项中的CD-ROM (IDE...)选项,在右侧连接中选择“使用ISO镜像(I)”选项,点 击“浏览”,找到Linux的镜像文件,如图所示:

操作系统实验报告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! 程序流程图如下:

操作系统实验题目

操作系统实验 上机准备: 熟悉Cygwin环境 编译源程序使用gcc 源程序名–o 目标文件名(缺省为 a.out)。 学习Linux(Unix)的常用命令。 学习vi 编辑器的使用。 C语言语法

1 进程管理 1.1 实验目的 加深对于进程并发执行概念的理解。实践并发进程的创建和控制方法。观察和体验进程的动态特性。进一步理解进程生命期期间创建、变换、撤销状态变换的过程。掌握进程控制的方法,了解父子进程间的控制和协作关系。练习Linux系统中进程创建与控制有关的系统调用的编程和调试技术。 1.2 实验说明 1)与进程创建、执行有关的系统调用说明 进程可以通过系统调用fork()创建子进程并和其子进程并发执行.子进程初始的执行映像是父进程的一个复本.子进程可以通过exec()系统调用族装入一个新的执行程序。父进程可以使用wait()或waitpid()系统调用等待子进程的结束并负责收集和清理子进程的退出状态。fork()系统调用语法: #include pid_t fork(void); fork成功创建子进程后将返回子进程的进程号,不成功会返回-1. exec 系统调用有一组6个函数,其中示例实验中引用了execve 系统调用语法: #include int execve(const char *path, const char *argv[], const char * envp[]); path 要装入的新的执行文件的绝对路径名字符串.

argv[] 要传递给新执行程序的完整的命令参数列表(可以为空). envp[] 要传递给新执行程序的完整的环境变量参数列表(可以为空). Exec 执行成功后将用一个新的程序代替原进程,但进程号不变,它绝不会再返回到调用进程了。如果exec 调用失败,它会返回-1。 getpid()---获取进程的pid ● 每个进程都执行自己独立的程序,打印自己的pid ,每个父进程打印其子进程的pid; ● 每个进程都执行自己独立的程序,打印自己的pid ,父进程打印其子进程的pid; ● 编写一个命令处理程序,能处理max(m,n), min(m,n)和 average(m,n,l)这几个命令。(使用exec 函数族)

操作系统实验报告

操作系统实验报告 银行家算法 班级:计算机()班 姓名:李君益 学号:(号) 提交日期: 指导老师: 林穗 一、设计题目 加深了解有关资源申请、避免死锁等概念,并体会和了解死锁和避免死锁的具体实施方法。 要求编写和调试一个系统动态分配资源的简单模拟程序,观察死锁产生的条件,并采用银行家算法,有效的防止和避免死锁的发生。 二、设计要求

内容: 编制银行家算法通用程序,并检测思考题中所给状态的安全性。 要求: (1)下列状态是否安全?(三个进程共享个同类资源) 进程已分配资源数最大需求数 (状态) (状态) (2)考虑下列系统状态 分配矩阵最大需求矩阵可用资源矩阵 问系统是否安全?若安全就给出所有的安全序列。若进程请求(),可否立即分配? 三、设计分析 一.关于操作系统的死锁 .死锁的产生 计算机系统中有许多独占资源,他们在任一时刻只能被一个进程使用,如磁带机,绘图仪等独占型外围设备,或进程表,临界区等软件资源。两个进程同时向一台打印机输出将导致一片混乱,两个进程同时进入临界区将导致数据库错误乃至程序崩溃。正因为这些原因,所有操作系统都具有授权一个进程独立访问某一辞源的能力。一个进程需要使用独占型资源必须通过以下的次序: ●申请资源 ●使用资源 ●归还资源 若申请施资源不可用,则申请进程进入等待状态。对于不同的独占资源,进程等待的方式是有差别的,如申请打印机资源、临界区资源时,申请失败将一位这阻塞申请进程;而申请打开文件文件资源时,申请失败将返回一个错误码,由申请进程等待一段时间之后重试。只得指出的是,不同的操作系统对于同一种资源采取的等待方式也是有差异的。 在许多应用中,一个进程需要独占访问多个资源,而操作系统允许多个进程并发执行共享系统资源时,此时可能会出现进程永远被阻塞的现象。这种现象称为“死锁”。 2.死锁的定义 一组进程处于死锁状态是指:如果在一个进程集合中的每个进程都在等待只能由该集合中的其他一个进程才能引发的时间,则称一组进程或系统此时发生了死锁。 .死锁的防止 .死锁产生的条件: ●互斥条件

操作系统实验文件管理C 代码

#include #include #include #include #include using namespace std; #define BLKSIZE 512 // 数据块的大小 #define BLKNUM 512 // 数据块的块数 #define INODESIZE 32 // i节点的大小 #define INODENUM 32 // i节点的数目 #define FILENUM 8 // 打开文件表的数目//用户 typedef struct { char user_name[10]; // 用户名 char password[10]; // 密码 } User; //i节点 typedef struct { short inum; // 文件i节点号 char file_name[10]; // 文件名

char type; // 文件类型 char user_name[10]; // 文件所有者 short iparent; // 父目录的i节点号 short length; // 文件长度 short address[2]; // 存放文件的地址 } Inode; //打开文件表 typedef struct { short inum; // i节点号 char file_name[10]; // 文件名 short mode; // 读写模式(1:read, 2:write, // 3:read and write) } File_table; // 申明函数 void login(void); void init(void); int analyse(char *); void save_inode(int); int get_blknum(void); void read_blk(int); void write_blk(int);

操作系统原理实验五

实验五线程的同步 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所示。

操作系统实验报告.

学生学号0121210680225 实验课成绩 武汉理工大学 学生实验报告书 实验课程名称操作系统 开课学院计算机科学与技术学院 指导老师姓名刘军 学生姓名李安福 学生专业班级软件sy1201 2014 — 2015 学年第一学期

《操作系统》实验教学大纲 课程编号: 课程名称:操作系统/Operating System 实验总学时数:12学时 适应专业:计算机科学与技术、软件工程 承担实验室:计算机科学与技术学院实验中心 一、实验教学的目的和任务 通过实验掌握Linux系统下常用键盘命令、系统调用、SHELL编程、后台批处理和C程序开发调试手段等基本用法。 二、实验项目及学时分配 序号实验项目名称实验学时实验类型开出要求 01 Linux键盘命令和vi 2 设计必开 02 Linux下C编程 2 设计必开 03 SHELL编程和后台批处理 2 设计必开 04 Linux系统调用(time) 2 设计必开 05 Linux进程控制(fork) 4 设计必开 三、每项实验的内容和要求: 1、Linux键盘命令和vi 要求:掌握Linux系统键盘命令的使用方法。 内容:见教材p4, p9, p40, p49-53, p89, p100 2、Linux下的C编程 要求:掌握vi编辑器的使用方法;掌握Linux下C程序的源程序编辑方法;编译、连接和运行方法。 内容:设计、编辑、编译、连接以及运行一个C程序,其中包含键盘输入和屏幕输出语句。 3、SHELL编程和后台批处理 要求:掌握Linux系统的SHELL编程方法和后台批处理方法。 内容:(1) 将编译、连接以及运行上述C程序各步骤用SHELL程序批处理完成,前台运行。 (2) 将上面SHELLL程序后台运行。观察原C程序运行时输入输出情况。 (3) 修改调试上面SHELL程序和C程序,使得在后台批处理方式下,原键 盘输入内容可以键盘命令行位置参数方式交互式输入替代原键盘输入内容, 然后输出到屏幕。 4、Linux系统调用使用方法。

相关文档
相关文档 最新文档