上海大学操作系统_实验六

上海大学操作系统_实验六
上海大学操作系统_实验六

《操作系统》实验报告指导老师:赵正德

实验三进程管理及进程通信

一.实验目的

利用Linux提供的系统调用设计程序,加深对进程概念的理解。体会系统进程调

度的方法和效果。了解进程之间的通信方式以及各种通信方式的使用。

二.实验准备

复习操作系统课程中有关进程、进程控制的概念以及进程通信等内容(包括软中断通信、管道、消息队列、共享内存通信及信号量概念)。熟悉本《实验指导》第五部分有关进程控制、进程通信的系统调用。它会引导你学会怎样掌握进程控制。阅读例程中的程序段。

三.实验方法

用vi 编写c 程序(假定程序文件名为prog1.c)

编译程序$ gcc -o prog1.o prog1.c 或$ cc -o prog1.o prog1.c

运行$./prog1.o

四.实验内容及步骤

用v i编写使用系统调用的C语言程序。

1.编写程序。显示进程的有关标识(进程标识、组标识、用户标识等)。经过5 秒

钟后,执行另一个程序,最后按用户指示(如:Y/N)结束操作。

编译运行结果:

2.编写程序。实现父进程创建一个子进程。体会子进程与父进程分别获得不同

返回值,进而执行不同的程序段的方法。

编译运行:

思考:子进程是如何产生的?又是如何结束的?子进程被创建后它的运

行环境是怎样建立的?

答:子进程由fork()函数创建,通过exit()函数自我结束,子进程被创建

后核心将为其分配一个进程表项和进程标识符,检查同时运行的进程数目,并且拷贝进程表项的数据,由子进程继承父进程的所有文件。

3.编写程序。父进程通过循环语句创建若干子进程。探讨进程的家族树以

及子进程继承父进程的资源的关系。

程序如下:

编译运行:

思考:①画出进程的家族树。子进程的运行环境是怎样建立的?反复运行此程序看会有什么情况?解释一下。

1839

2247

2248 2252 2254

2249 2251 2253

2250

每一次运行返回的进程号都不相同,但是都符合家族进程树,出现这样的情况是由于系统本身就是随机分配进程号的。

②修改程序,使运行结果呈单分支结构,即每个父进程只产生一个子进

程。画出进程树,解释该程序。

用一个break;语句使父进程在子进程结束后跳出循环,运行结果如下:

进程家族树如下:

2004

2401

2402

2403

2404

4.编写程序。使用fork( )和exec( )等系统调用创建三个子进程。子进程

分别启动不同程序,并结束。反复执行该程序,观察运行结果,结束的先后,看是否有不同次序。

编译代码如下:

编译运行:

思考:子进程运行其它程序后,进程运行环境怎样变化的?反复运行此程序看会有什么情况?解释一下。

答:子进程运行其他程序后,这个进程就完全被新程序代替。由于并没有产生新进程所以进程标识号不改变,除此之外的旧进程的其他信息,代码段,数据段,栈段等均被新程序的信息所代替。新程序从自己的main()函数开始进行。反复运行此程序发现结束的先后次序是不可预知的,每次运行结果不一样。原因是当每个子进程运行其他程序时,他们的结束随着其他程序的结束而结束,所以结束的先后次序在改变。

5.编译程序,验证子进程继承父进程的程序、数据等资源。如用父、子进

程修改公共变量和私有变量的处理结果;父、子进程的程序区和数据区的位置。

编译源代码如下:

编译运行结果:

思考:子进程被创建后,对父进程的运行环境有影响吗?解释一下。

答:子进程被创建后,对父进程的运行环境无影响,因为当子进程在运行时,他有自己的代码段和数据段,这些都可以作修改,但是父进程的代码段和数据段是不会随着子进程数据段和代码段的改变而改变。

6.参照《实验指导》第五部分中“管道操作的系统调用”。复习管道通信概

念,编写一个程序。父进程创建两个子进程,父子进程之间利用管道进行通信。要求能显示父进程、子进程各自的信息,体现通信效果。

源代码:

编译运行:

思考:①什么是管道?进程如何利用它进行通信的?解释一下实现方法。

②修改睡眠时机、睡眠长度,看看会有什么变化。请解释。

③加锁、解锁起什么作用?不用它行吗?

答:1.管道是指能够连接一个写进程和一个读进程,并允许他们以生产者-消费者方式进行通信的一个共享文件,又称pipe文件。由写进程从管道的入端将数据写入管道,而读进程则从管道出端读出数据来进行通信。

2.修改睡眠时机和睡眠长度都会引起进程被唤醒的时间不一,因为睡眠

时机决定进程在何时睡眠,睡眠长度决定进程何时被唤醒。

3.加锁、解锁是为了解决临界资源的共享问题。不用它将会引起无法有

效管理数据,即数据会被修改导致读错了数据。

7.编程验证:实现父子进程通过管道进行通信。进一步编程,验证子进程

结束,由父进程执行撤消进程的操作。测试父进程先于子进程结束时,系统如何处理“孤儿进程”的。

把上题中的父进程中的wait()都去掉,运行结果如下:

思考:对此作何感想,自己动手试一试?解释一下你的实现方法。

答: 只要在父进程后加上wait()函数,然后打印“子进程已经结束”,一旦子进程结束,父进程撤销进程。把父进程中的wait()去掉,父进程先于子进程终止时.所有子进程的父进程改变为init进程,称为进程由init进程领养。

8.编写两个程序一个是服务者程序,一个是客户程序。执行两个进程之间

通过消息机制通信。消息标识MSGKEY 可用常量定义,以便双方都可以利用。客户将自己的进程标识(pid)通过消息机制发送给服务者进程。

服务者进程收到消息后,将自己的进程号和父进程号发送给客户,然后返回。客户收到后显示服务者的pid 和ppid,结束。

运行结果:

服务者:

客户程序:

思考:想一下服务者程序和客户程序的通信还有什么方法可以实现?解释一下你的设想,有兴趣试一试吗。

答:还可以用信号量机制来实现。信号量是一个整形计数器,用来控制多个进程对共享资源的访问。或者通过消息队列信号机制,通过向消息

队列发送信息、接收信息来实现进程间的通信。

9.这部分内容涉及《实验指导》第五部分中“有关信号处理的系统调用”。

编程实现软中断信号通信。父进程设定软中断信号处理程序,向子进程发软中断信号。子进程收到信号后执行相应处理程序。

源代码如下:

编译运行:

思考:这就是软中断信号处理,有点儿明白了吧?讨论一下它与硬中断有什么区别?看来还挺管用,好好利用它。

答:硬中断是由外部硬件产生的,而软中断是CPU根据软件的某条指令或者软件对标志寄存器的某个标志位的设置而产生的。

10.怎么样,试一下吗?用信号量机制编写一个解决生产者—消费者问

题的程序,这可是受益匪浅的事。本《实验指导》第五部分有关进程通

信的系统调用中介绍了信号量机制的使用。

#include

#include

#include

#include

#include

#include

#define N 5 // 消费者或者生产者的数目

#define M 10 // 缓冲数目

//int M=10;

int in = 0; // 生产者放置产品的位置

int out = 0; // 消费者取产品的位置

int buff[M] = { 0 }; // 缓冲初始化为0,开始时没有产品

sem_t empty_sem; // 同步信号量,当满了时阻止生产者放产品

sem_t full_sem; // 同步信号量,当没产品时阻止消费者消费

pthread_mutex_t mutex; // 互斥信号量,一次只有一个线程访问缓冲

int product_id = 0; //生产者id

int prochase_id = 0; //消费者id

//信号处理函数

void Handlesignal(int signo){

printf("程序退出\n",signo);

exit(0);

}

/* 打印缓冲情况*/

void print() {

inti;

printf("产品队列为");

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

printf("%d", buff[i]);

printf("\n");

}

/* 生产者方法*/

void *product() {

int id = ++product_id;

while(1) {//重复进行

//用sleep的数量可以调节生产和消费的速度,便于观察

sleep(2);

sem_wait(&empty_sem);

pthread_mutex_lock(&mutex);

in= in % M;

printf("生产者%d在产品队列中放入第%d个产品\t",id, in);

buff[in]= 1;

print();

++in;

pthread_mutex_unlock(&mutex);

sem_post(&full_sem);

}

}

/* 消费者方法*/

void *prochase() {

intid = ++prochase_id;

while(1) {//重复进行

//用sleep的数量可以调节生产和消费的速度,便于观察

sleep(5);

sem_wait(&full_sem);

pthread_mutex_lock(&mutex);

out= out % M;

printf("消费者%d从产品队列中取出第%d个产品\t",id, out);

buff[out]= 0;

print();

++out;

pthread_mutex_unlock(&mutex);

sem_post(&empty_sem);

}

}

int main() {

printf("生产者和消费者数目都为5,产品缓冲为10,生产者每2秒生产一个产品,消费者每5秒消费一个产品,Ctrl+退出程序\n");

pthread_tid1[N];

pthread_tid2[N];

inti;

intret[N];

//结束程序

if(signal(SIGINT,Handlesignal)==SIG_ERR){//按ctrl+C产生SIGINT信号printf("信号安装出错\n");

}

// 初始化同步信号量

intini1 = sem_init(&empty_sem, 0, M);//产品队列缓冲同步

intini2 = sem_init(&full_sem, 0, 0);//线程运行同步

if(ini1 && ini2 != 0) {

printf("信号量初始化失败!\n");

exit(1);

}

//初始化互斥信号量

intini3 = pthread_mutex_init(&mutex, NULL);

if(ini3 != 0) {

printf("线程同步初始化失败!\n");

exit(1);

}

// 创建N个生产者线程

for(i = 0; i < N; i++) {

ret[i]= pthread_create(&id1[i], NULL, product, (void *) (&i));

if(ret[i] != 0) {

printf("生产者%d线程创建失败!\n", i);

exit(1);

}

}

//创建N个消费者线程

for(i = 0; i < N; i++) {

ret[i]= pthread_create(&id2[i], NULL, prochase, NULL);

if(ret[i] != 0) {

printf("消费者%d线程创建失败!\n", i);

exit(1);

}

}

//等待线程销毁

for(i = 0; i < N; i++) {

pthread_join(id1[i], NULL);

pthread_join(id2[i],NULL);

}

exit(0);

五. 研究并讨论

1.讨论Linux 系统进程运行的机制和特点,系统通过什么来管理进程?

在Linux中,每个进程在创建时都会被分配一个数据结构,称为进程控

制块(Process Control Block,简称PCB)。PCB中包含了很多重要的信息,供系统调度和进程本身执行使用。所有进程的PCB都存放在内核空间中。PCB 中最重要的信息就是进程PID,内核通过这个PID来唯一标识一个进程。PID 可以循环使用,最大值是32768。init进程的pid为1,其他进程都是init 进程的后代。

除了进程控制块(PCB)以外,每个进程都有独立的内核堆栈(8k),一个进程描述符结构,这些数据都作为进程的控制信息储存在内核空间中;而进程的用户空间主要存储代码和数据。

Linux操作系统使用一些系统调用(如:fork()、wait、exit 等)来

实现对进程的管理。

2. C 语言中是如何使用Linux 提供的功能的?用程序及运行结果举例说

明。

C语言是通过在.c文件中添加函数调用的.h文件,来调用进程管理的相关函数,并通过getpid()和getppid()来查看Linux系统为每个进程分配的进程号。

如下图:父进程通过循环语句创建若干子进程,输出打印每一个进程的进程号,我们就可以通过进程号画出家族数。

3.什么是进程?如何产生的?举例说明。

进程是一个具有一定独立功能的程序关于某个数据集合的一次运行活动。

它是操作系统动态执行的基本单元,在传统的操作系统中,进程既是基本的分配单元,也是基本的执行单元。

引起进程创建的事件有用户登录、作业调度、提供服务和应用请求。一旦操作系统发现了要求创建新进程的事件后,便调用进程创建原语Creat( )按下述步骤创建一个新进程。申请空白PCB、为新进程分配资源、初始化进程控制块、将新进程插入就绪队列

例如用户登入,在分时系统中,用户在终端键入登录命令后,如果是合法用户,系统将为该终端建立一个进程,并把它插入就绪队列中。

4.进程控制如何实现的?举例说明。

进程控制一般是由OS的内核中的原语来实现的。

例子:唤醒原语wakeup( )

当被阻塞进程所期待的事件出现时,如I/O完成或其所期待的数据已经到达,则由有关进程(比如用完并释放了该I/O设备的进程)调用唤醒原语wakeup( ),将等待该事件的进程唤醒。唤醒原语执行的过程是:首先把被阻塞的进程从等待该事件的阻塞队列中移出,将其PCB中的现行状态由阻塞改为就绪,然后再将该PCB插入到就绪队列中。

5.进程通信方式各有什么特点?用程序及运行结果举例说明。

进程间通信可分为4种形式:

(1) 主从式:①主进程可自由地使用从进程的资源或数据;②从进程

的动作受主进程的控制;③主进程和从进程的关系是固定的。

(2) 会话式:①使用进程在使用服务进程所提供的服务之前,必须得

到服务进程的许可;②服务进程根据使用进程的要求提供服务,但对所提供服务的控制由服务进程自身完成。③使用进程和服务进程在通信时有固定连接关系。

(3) 消息或邮箱机制:①只要存在空缓冲区或邮箱,发送进程就可以

发送消息。②与会话系统不同,发送进程和接收进程之间无直接连接关系,接收进程可能在收到某个发送进程发来的消息之后,又转去接收另一个发送进程发来的消息。③发送进程和接收进程之间存在缓冲区或邮箱用来存放被传送消息。

(4) 共享存储区方式:①诸进程可通过对共享存储区中数据的读或写来实现通信。②进程在通信前,先向系统申请获得共享存储区中的一个分区,并指定该分区的关键字;若系统已经给其他进程分配了这样的分区,则将该分区的描述符返回给申请者。③由申请者把获得的共享存储分区连接到本进程上。④可像读、写普通存储器一样地读、写该公用存储分区。

例子:以下是管道通信的程序说明和代码实现:父进程创建两个子进程,父子进程之间利用管道进行通信。

程序运行结果:

6.管道通信如何实现?该通信方式可以用在何处?

向管道(共享文件)提供输入的发送进程(即写进程),以字符流形式将大量的数据送入管道;而接受管道输出的接收进程(即读进程),则从

管道中接收(读)数据。

这种通信方式用于数据传输、资源共享和事件通知。

7.什么是软中断?软中断信号通信如何实现?

软中断是利用硬件中断的概念,用软件方式进行模拟,实现宏观上的异步执行效果。

利用signal和kill实现软中断通信:

kill(pid,signal): 向进程pid发送信号signal,若pid进程在可中断的优先级(低优先级)上睡眠,则将其唤醒。

signal(sig,ps): 设置sig号软中断信号的处理方式;

三种处理方式:SIG_DFL:系统默认方式,一般是终止进程;

SIG_IGN:忽略(屏蔽);

func():用制定义函数func()处理。

Signal设置的处理方式,仅一次有效,处理后即回到默认方式。

9(SIGKILL)号软中断不允许设置。

六. 体会

在本次进程管理和进程通信的实验中,我学会了用vim文本编译器编写C语言实现进程的管理和进程之间的通信,并编译和运行工程文件。掌握了如何创建子进程,理解了子进程与父进程之间的关系,实现管道通信和软中断信号通信,对一些必要的基础函数的调用能够识别和运用。

实验六SHELL 编程

一.实验目的

掌握vi 的三种工作方式,熟悉vi 编辑程序的使用。学习Shell 程序设计方法。掌握编程要领。

二.实验准备

复习操作系统课程相关的用户接口概念。

熟悉本《实验指导》第三、四部分。

三.实验内容

学习使用vi 编辑程序。

编写Shell 程序。

将程序文件设置为可执行文件(用chmod 命令)。

在命令行方式中运行Shell 程序。

四.实验步骤

1. 按本《实验指导》第三部分的内容。熟悉vi 的三种工作方式。熟悉使用各

种编辑功能。 .

思考:试一试vi 的三种工作方式各用在何时?用什么命令进入插入方式?怎样退出插入方式?文件怎样存盘?注意存盘后的提示信息。

①三种工作方式的使用时机:

插入方式

进入插入方式,屏幕下方有一行“------Insert------”字样表示。需要输入文本的内容时用到插入方式,可以用退格键来纠正错误。在插入方式中按一下,即退出插入方式,进入转义命令方式。

转义命令方式

刚进入vi 或退出插入方式,即为转义命令方式。这时键入的任何字符转义为特殊功能,如:移动、删除、替换等。大多数转义命令由一个或两个字母组成,操作时没有提示符,而且输入命令不需要按

末行命令方式

在转义命令方式中,按冒号“:”进入末行命令方式。屏幕最末一行的行首显示冒号作为命令提示。命令行输入后按开始执行。此时用户可进行文件的全局操作,如:全局查找、替换、文件读、写等。

②用什么命令进入插入方式:

用户输入命令功能描述

i text 在光标前插入新文本,ENTER 可重起一行

I text 在当前行起始处插入新文本

a text 在光标后输入新的文本

A text 在当前行末尾输入新的文本

o text 在当前行下产生新的一行并输入文本

O text 在当前行上产生新的一行并输入文本

③怎样退出插入方式:

在插入方式中按一下,即退出插入方式,进入转义命令方式。

《操作系统原理》信管专业实验指导书资料

《操作系统原理》实验指导书 班级:_______________ 学号:_______________ 姓名:_______________ 山东建筑大学管理工程学院 信息管理与信息系统教研室

目录 引言 (1) 实验题目一 (2) 实验题目二 (4) 实验题目三 (6) 实验题目四 (8) 实验题目五 (10) 实验题目六 (12)

引言 操作系统是信息管理与信息系统专业一门重要的专业理论课程,了解和掌握操作系统的基本概念、功能和实现原理,对认识整个计算机系统的工作原理十分重要。 操作系统实验是操作系统课程的一个重要组成部分,通过试验环节的锻炼使同学们不仅能够对以前的所学过的基础知识加以巩固,同时能够通过上机实验,对操作系统的抽象理论知识加以理解,最终达到融会贯通的目的,因此,实验环节是同学们理解、掌握操作系统基本理论的一个重要环节。 本实验指导书,根据教材中的重点内容设定了相应的实验题目,由于实验课程的学时有限,我们规定了必做题目和选做题目,其中必做题目必须在规定的上机学时中完成,必须有相应的预习报告和实验报告。选做题目是针对有能力或感兴趣的同学利用课余时间或上机学时的剩余时间完成。

实验题目一:模拟进程创建、终止、阻塞、唤醒原语 一、题目类型:必做题目。 二、实验目的:通过设计并调试创建、终止、阻塞、唤醒原语功能,有助于对操作系统中进 程控制功能的理解,掌握操作系统模块的设计方法和工作原理。 三、实验环境: 1、硬件:PC 机及其兼容机。 2、软件:Windows OS ,Turbo C 或C++、VC++、https://www.360docs.net/doc/a214603448.html, 、Java 等。 四、实验内容: 1、设计创建、终止、阻塞、唤醒原语功能函数。 2、设计主函数,采用菜单结构(参见后面给出的流程图)。 3、设计“显示队列”函数,目的能将就绪、阻塞队列中的进程信息显示在屏幕上,以供 随时查看各队列中进程的变化情况。 五、实验要求: 1、进程PCB 中应包含以下内容: 2、系统总体结构: 其中: 进程名用P1,P2标识。 优先级及运行时间:为实验题目二做准备。 状态为:就绪、运行、阻塞,三种基本状态。 指针:指向下一个PCB 。

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

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

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

操作系统原理实验指导

操作系统实验指导 操作系统是计算机的最重要的系统软件,它在计算机中具有核心地位,其作用是对计算机系统资源进行统一的调度和管理,提供各种强有力的系统服务,为用户创造灵活而又方便的使用环境。一个精心设计的操作系统能极大地扩充计算机系统的功能,充分地发挥系统中各种资源的使用效率,提高系统工作的可靠性。 操作系统原理是计算机科学与技术专业的一门主要专业课程,它涉及计算机系统中各种软、硬资源管理的实现原理与方法,内容非常丰富,综合性非常强,并且还具有很强的实践性。只有把理论与实践紧密地结合起来,才能取得较好地学习效果。 培养计算机专业学生的系统程序设计能力,也是本课程的重要环节。系统程序要求结构清晰、合理、可读性好,有准确而简明的注释。通过实验可以培养学生正规系统程序设计能力。 本实验包括下列六个方面: 实验一几种操作系统的界面 实验二进程调度 实验三存储器管理 实验四存储器管理 实验五磁盘驱动调度 实验六文件管理系统 上述每个实验约需要10个学时。可根据实际情况选用。最好学生自己独立完成,如有困难,可参考一些示例,弄清每个实验的思想和实现方法,上机调试通过,不能完全照搬示例。 实验一几种操作系统的界面 1、目的与要求 目的:通过本实验,学生应熟悉1~2种操作系统的界面。在熟练使用的基础上,能了解各种命令和调用在系统中的大致工作过程,也就是通过操作系统的外部特性,逐步深入到操作系统的内在实质内容中去。 要求:能熟练地在1~2种操作系统环境下工作。学会使用各种命令,熟悉系统提供的各种功能。主动而有效地使用计算机。 熟悉系统实用程序的调用方法和各种系统调用模块的功能和用法。 2、示例 用1~2种操作系统提供的各种手段,建立、修改、编辑、编译和运行程序,最后撤消一个简单程序。要尽可能多地使用系统提供的各种命令和功能。 操作系统可为如下两种序列: (1)Windows 98或Windows 2000或Windows XP。 (2)Linux或Unix。 下面简要介绍一下Unix操作系统。 Unix是一个分时操作系统,面向用户的界面shell是一种命令程序设计语言,这种语言向用户提供了从低到高,从简单到复杂的三个层次的使用方式。它们是简单命令、组合命令和shell过程。 简单命令:Unix命令一律使用小写字母。 例如:ls -l 显示文件目录(长格式) rm 删除一个文件 cat 合并和传送文件、 cp 复制文件 mv 文件改名 cc 编译C语言源程序 组合命令:shell简单命令可以用管道算符|组合构成功能更强的命令。

实验指导(2015完全版)

操作系统上机实验指导书 (第一版) 闫大顺李晟编著 吴家培主审 计算机科学与工程学院 2014.8

操作系统实验指导 本课程是为《计算机操作系统》课所开的实验。计算机操作系统课程是一门实践性很强的技术课程,本课程实验的目的在于培养学生的实践能力,促进理论与实践的结合。要求学生通过上机编程,熟悉对操作系统原理,并熟练使用程序接口,并了解如何模拟操作系统原理的实现,从而加深对操作系统原理的领会,加深对操作系统实现方法的理解,与此同时使学生在程序设计方面也能够得到很大程度的提高。 实验的目的是使学生理论联系实际,提高学生系统理解与开发能力。这里所列的实验分为必做和选做。具体实验题的选择,不仅要考虑课程内容,而且要考虑学生目前的编程能力,要由浅入深。教师可通过运行示例或动画,帮助学生理解实验要求。学生应选择自己熟悉的语言与开发环境去完成实验。根据以往的教学经验,Delphi、C++ Builder,JBuilder由于提供了许多可重用的构件,易于学习、使用,VC++学习、使用困难较多。实验要求尽量在windows操作系统下,也可以在Linux下完成,由于多数没有专门学习Linux,在其平台下做试验比较困难。实验的硬件要求是能够支持VC++、Delphi、C++ Builder,JBuilder的微机即可。每个学生都独立在一台计算机上完成自己的实验内容,杜绝学生的抄袭。 实验报告的要求 1. 每位同学准备实验报告本,上机前作好充分的准备工作,预习本次实验的内容,事先熟悉与实验有关的软硬件环境。 2. 实验时遵守实验室的规章制度,爱护实验设备,对于实验设备出现的问题,要及时向指导老师汇报。 3. 提交实验文件格式:[班级][学号]_[实验题号].[扩展名] 例:计051班学号为03的学生第四个实验的文件名为:j05103_4.c 4. 最终的实验报告按照实验名称、实验目的、实验内容,实验过程(程序设计、实现与调试)、实验总结五部分书写,按时上交。实验总结是对于实验过程中出现的问题或疑惑的分析与思考。认真按照要求填写到实验报告纸上。

操作系统原理实验四

实验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、实验目的 (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所示。

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

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

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

[键入文字] 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. 记录并分析程序运行结果。

操作系统原理实验2+岳青山+0907052247

《操作系统原理》实验报告 实验序号:2 实验项目名称: Windows 基本进程管理 1、实验目的 通过观察任务管理器,来观察各个进程的动态信息。 2、实验工具 (1)一台WindowsXP操作系统的计算机。 (2)计算机装有Microsoft Visual Studio C++6.0专业版或企业版。 3、预备知识 ·任务管理器,了解用户计算机上正在运行的程序和进程的相关信息。 ·Windows环境中的编程。 相关内容参见本次实验参考资料部分。 4、基本实验 1)观察任务管理器 步骤一:进入WindowsXP。 步骤二:按Ctrl+Alt+Delete(或按Ctrl+Shift+Esc)键都可以调出任务管理器。 步骤三:单击“查看”→“选择列”选项,可以看到一些选项, 这里,可以查看每个进程的PID,CPU使用时间,内存的使用情况,当前的进程是系统的还是用户的,每个句柄的数量,每个进程的优先级,等等。 步骤四:单击“性能”标签,在所示的“性能”选项卡中可以看到CPU的使用情况、内存的使用情况。 2)通过命令观察进程情况、 步骤一:单击“开始”→“运行”选项,输入cmd“命令提示符”下。 步骤二:输入tasklist。 步骤三:继续输入tasklist/?来寻找帮助,里面有更详细的解释。 3)通过命令来关闭一个进程 步骤一:单击“开始”→“运行”选项,输入cmd“命令提示符”下。 步骤二:输入tasklist后回车执行。 步骤三:继续输入taskkill/PID 208/T 5、实验编程 进行一个简单的Windows的图形用户接口(GUI)编程。 步骤一:进入WindowsXP。 步骤二:进入Microsoft Visual Studio C++6.0。 步骤三:在菜单栏中单击“文件”→“新建”→“文件”→C++Source File,选择路径(如D:\1.cpp),并命名为1.cpp。 步骤四:将下面的程序源代码输入。 步骤五:单击Windows系统的“开始”→“运行”选项,输入cmd。

操作系统原理课程设计

操作系统原理课程设计 ——银行家算法模拟 指导老师:周敏唐洪英杨宏雨 杨承玉傅由甲黄贤英 院系:计算机学院计算机科学与技术班级:0237-6 学号:2002370609 姓名:刘洪彬 同组者:杨志 时间:2005/1/10---2005/1/14

银行家算法模拟 一、设计目的 本课程设计是学生学习完《计算机操作系统》课程后,进行的一次全面的综合训练,通过课程设计,让学生更好地掌握操作系统的原理及实现方法,加深对操作系统基础理论和重要算法的理解,加强学生的动手能力。 二、设计要求 银行家算法是避免死锁的一种重要方法,本实验要求用高级语言编写和调试一个简单的银行家算法程序。加深了解有关资源申请、避免死锁等概念,并体会和了解死锁和避免死锁的具体实施方法。 从课程设计的目的出发,通过设计工作的各个环节,达到以下教学要求:两人一组,每组从所给题目中任选一个(如自拟题目,需经教师同意),每个学生必须独立完成课程设计,不能相互抄袭,同组者文档不能相同; 设计完成后,将所完成的工作交由老师检查; 要求写出一份详细的设计报告。 三、设计内容 编制银行家算法通用程序,并检测所给状态的系统安全性。 1)银行家算法中的数据结构 假设有n个进程m类资源,则有如下数据结构: 可利用资源向量Available。这是一个含有m个元素的数组,其中的每一个元素代表一类可利用的资源数目,其初始值是系统中所配置的该类全部可用资源的数目,其数值随该类资源的分配和回收而动态地改变。Available[j]=K,则表示系统中现有Rj 类资源K个。 最大需求矩阵Max。这是一个n*m的矩阵,它定义了系统中n个进程中的每一个进程对m类资源的最大需求。如果Max[i,j]=K,则表示进程i需要Rj类资源的最大数目为K。 分配矩阵Allocation。这也是一个n*m的矩阵,它定义了系统中每一类资源当前已分配给没一进程的资源数。如果Allocation[i,j]=K,则表示进程i 当前已分得Rj类资源的数目为K。 需求矩阵Need。这也是一个n*m的矩阵,用以表示每一个进程尚需的各类资源数。如果Need[i,j]=K,则表示进程i还需要Rj类资源K个,方能完成其任务。

《操作系统原理实验》试卷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页面大小与两级分页方式的)逻辑地址和线性地址的构成及转 换成物理地址的方法。

计算机操作系统原理实验指导书

目录 1进程创建模拟实现 (6) 1.1实验类型 (6) 1.2实验目的 (6) 1.3实验描述 (6) 1.4实验内容 (6) 1.5实验要求 (6) 1.6测试要求 (6) 1.7相关知识 (7) 1.8实验设备 (9) 1.9实验指导 (9) 1.10实验成绩评定 (9) 1.11实验报告 (9) 1.12实验思考 (9) 2P、V原语的模拟实现 (10) 2.1实验类型 (10) 2.2实验目的 (10) 2.3实验描述 (10) 2.4实验内容 (10) 2.5实验要求 (10) 2.6测试要求 (10) 2.7相关知识 (11) 2.8实验设备 (11) 2.9实验指导 (11) 2.10实验成绩评定 (12) 2.11实验报告 (12) 2.12实验思考 (12) 3进程撤销模拟实现 (13) 3.1实验类型 (13) 3.2实验目的 (13) 3.3实验描述 (13) 3.4实验内容 (13) 3.5实验要求 (13) 3.6测试要求 (14) 3.7相关知识 (14) 3.8实验设备 (15) 3.9实验成绩评定 (15) 3.10实验报告 (16) 3.11实验思考 (16) 4FCFS进程调度模拟实现 (17)

4.2实验目的 (17) 4.3实验描述 (17) 4.4实验内容 (17) 4.5实验要求 (17) 4.6测试要求 (18) 4.7相关知识 (18) 4.8实验设备 (18) 4.9实验成绩评定 (19) 4.10实验报告 (19) 4.11实验思考 (19) 5银行家算法实现 (20) 5.1实验类型 (20) 5.2实验目的 (20) 5.3实验描述 (20) 5.4实验内容 (20) 5.5实验要求 (20) 5.6测试要求 (21) 5.7相关知识 (21) 5.8实验设备 (22) 5.9实验成绩评定 (22) 5.10实验报告 (22) 5.11实验思考 (22) 6改进型CLOCK页面置换算法实现 (23) 6.1实验类型 (23) 6.2实验目的 (23) 6.3实验描述 (23) 6.4实验内容 (23) 6.5实验要求 (23) 6.6测试要求 (24) 6.7相关知识 (24) 6.8实验设备 (24) 6.9实验成绩评定 (25) 6.10实验报告 (25) 6.11实验思考 (25) 7SCAN磁盘调度模拟实现 (26) 7.1实验类型 (26) 7.2实验目的 (26) 7.3实验描述 (26) 7.4实验内容 (26) 7.5实验要求 (26) 7.6测试要求 (27)

11级操作系统原理实验试卷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页面大小与两级分页方式的)逻辑地址和线性地址的构成及转换成物理地址的方法。

操作系统原理实验十一

实验十一银行家算法模拟实现 1实验类型 设计型(4学时)。 2实验目的 1)理解死锁避免相关内容; 2)掌握银行家算法主要流程; 3)掌握安全性检查流程。 3实验描述 本实验主要对操作系统中的死锁预防部分的理论进行实验。要求实验者设计一个程序,该程序可对每一次资源申请采用银行家算法进行分配。 4实验内容 1)设计多个资源(≥3); 2)设计多个进程(≥3); 3)设计银行家算法相关的数据结构; 4)动态进行资源申请、分配、安全性检测并给出分配结果。 5实验要求 1)编写程序完成实验内容; 2)画出安全性检测函数流程图; 3)小组派1人上台用PPT演讲实现过程; 4)撰写实验报告。

6测试要求 1)进行Request请求,输入参数为进程号、资源号和资源数; 2)进行3次以上的Request请求; 3)至少进行1次资源数目少于可用资源数,但不安全的请求。 7相关知识 7.1银行家算法的数据结构 1)可利用资源向量Available。其中每个元素代表每类资源的数目。 2)最大需求矩阵Max。其中每个元素代表每个进程对于每类资源的最大需求量。 Max[i,j]=K表示i进程对于j类资源的最大需求量为K。 3)分配矩阵Allocation。其中每个元素代表每个进程已得到的每类资源的数目。 4)需求矩阵Need。其中每个元素代表每个进程还需要的每类资源的数目。 7.2银行家算法 Request i [j]=K表示进程Pi需要K个j类资源。 1)如果Request i [j]≤Need[i , j],便转向步骤2,否则认为出错。 2)如果Request i [j]≤Available[j],便转向步骤3,否则表示无足够资源,Pi需等待; 3)系统尝试分配资源给Pi; 4)系统进行安全性检查,检查此次资源分配后,系统是否安全。如果安全,则正式分配资源,否则撤销此次分配。 7.3安全性算法 1)设置两个向量:工作向量Work和Finish。算法开始时Work=Available;Finish 表示系统是否有足够的资源分配给进程,使之运行完成,开始时,令 Finish[i]=False;如果有足够的资源分配给进程,则令Finish[i]=True。 2)从进程集合中找到一个能满足下列条件的进程:Finish[i]=False;Need[i,j] ≤Work[j],若找到,执行步骤3),否则,执行步骤4); 3)Pi获得所需资源后,可顺利执行指导完成,并释放它占有的资源。并执行:Work[j]=Work[j]+Allocation[i , j]; Finish[i] = True; 到第2)步。

操作系统原理实验指导书

软件学院 课程实验指导书 课程名称操作系统原理 任课教师郭伟 开课学期 辽宁工程技术大学软件学院软件工程系

目录 实验一 Linux环境下进程管理 (1) 实验二银行家算法 (9) 实验三虚拟内存页面置换算法 (12) 实验四 Spooling技术实现............... ... ... ... .... .15 实验五网络文件系统. (20) 实验六 linux文件系统及系统调用 (26)

实验一Linux环境下进程管理 一、实验属性 实验性质:验证性 实验学时: 4学时 实验要求:必做 二、实验目的 1. 加深对进程概念的理解,明确进程和程序的区别; 2. 进一步认识并发执行的实质; 3. 分析进程争用资源的现象,学习解决进程互斥的方法; 4. 了解Linux系统中进程通信的基本原理。 三、实验环境及知识准备 1.实验环境: Linux系统开发环境 2.知识准备: (1) Linux系统开发环境搭建; (2) Linux环境下GCC编译器的使用; (3)语言中函数定义与调用、指针和类型的定义与使用、结构的定义、动态内存的申请等预备知识。 四、实验内容 1. 进程的创建 编写一段程序,使用系统调用fork()创建两个子进程。当此程序运行时,在系统中有一个父进程和两个子进程活动。让每一个进程在屏幕上显示一个字符:父进程显示字符“a”;子进程分别显示字符“b”和字符“c”。试观察记录屏幕上的显示结果,并分析原因。 2. 进程的控制 修改已编写的程序,将每个进程输出一个字符改为每个进程输出一句话,再观察程序执行时屏幕上出现的现象,并分析原因。 如果在程序中使用系统调用lockf()来给每一个进程加锁,可以实现进程之间的互斥,观察并分析出现的现象。

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

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. 记录并分析程序运行结果。

数理系操作系统原理实验指导书

操作系统实验指导书

实验一进程调度 1.目的和要求 进程调度是处理机管理的核心内容。本实验要求用一种语言编写和调试一个简单的进程调度程序。通过本实验可以加深理解有关进程控制块、进程队列的概念,并体会和了解优先数和时间片轮转调度算法的具体实施办法。 2.实验内容 ①设计进程控制块PCB表结构,分别适用于优先数调度算法和循环轮转调度算法。 ②建立进程就绪队列。对两种不同算法编制入队子程序。 ③编制两种进程调度算法:1)优先数调度;2)循环轮转调度 3.实验环境 Windows系统,语言自选(建议C++) 4.实验提示 ①本程序用两种算法对五个进程进行调度,每个进程可有三个状态,并假设初始状态为就绪状态。 ②为了便于处理,程序中的某进程运行时间以时间片为单位计算。各进程的优先数或轮转时间数以及进程需运行的时间片数的初始值均由用户给定。 ③在优先数算法中,优先数可以先取值为98,进程每执行一次,优先数减3,CPU时间片数加1,进程还需要的时间片数减1。在轮转算法中,采用固定时间片(即:每执行一次进程,该进程的执行时间片数为已执行了2个单位),这时,CPU时间片数加2,进程还需要的时间片数减2,并排列到就绪队列的尾上。 ④对于遇到优先数一致的情况,采用FIFS策略解决。 5、学时数:2个学时 程序代码如下: #include #include #include #include #include #define P_NUM 5 #define P_TIME 50 enum state{ ready, execute, block, finish }; struct pcb{ char name[4]; int priority; int cputime; int needtime; int count; int round;

操作系统原理实验报告

操作系统原理 实验报告 学院:信息与电子工程学院专业:计算机科学与技术 班级:计算机 学号: 姓名: 浙江科技学院 2010-2011学年第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. 记录并分析程序运行结果。

四川大学 操作系统原理 第二次 实验报告 shell编程

实验报告 (学生打印后提交) 实验名称:shell编程 实验时间: 10 年04月 21 日 实验人员:(姓名)(学号)(年级) 实验目的:1.熟悉使用Linux下的软件开发工具,如gcc 2.熟练使用man帮助手册 3.学习使用Linux的系统调用,对进程进行管理和完成进程之间的通信(如用信号和管道进 行进程间通信) 4.理解并发程序中的同步问题 实验环境: linux 实验步骤: 1. 用帐户root登录,密码123456 2. 自己用学号建立目录,把源文件拷入目录中 3. 阅读关于fork,exec,wait,exit,pipe系统调用的man帮助手册 4. 编译程序fork.c并运行,观察结果,观察进程 5.编译程序pipe.c并运行,观察结果 6.阅读关于函数sigaction,tcsetpgrp和setpgid的man帮助手册 7.编译程序signal.c并运行,观察结果,观察进程 8.编译程序process.c并运行,观察结果,观察进程 9.写实验总结 实验陈述: 1、基础知识: ?什么是系统调用:系统调用是UNIX操作系统核心提供给用户程序使用的操作系统服 务,系统调用主要提供用户程序对文件进行读写,进程的创建,删除和控制以及数 据的输入/输出等。 ?简述fork调用:用fork()创建一个新的进程,成为原先进程的子进程,原先进程是 父进程。 ?如何实现进程间的通信: UNIX进程通信方式有信号,管道,消息,共享存储区和信 号量。 ?如何实现进程间的连接:可以利用管道和socket 2、写出下列函数的原型 fork: int fork(); signal: int signal(int sig,int func); pipe:int pipe(int fildes[2]); tcsetpgrp: int tcsetpgrp(int fildes,pid_t pgid_id) 3、运行和观察结果 ?fork.c 简述结果(不是执行结果):与执行ls -l/相同

相关文档
最新文档