操作系统课内实验报告_第1页
操作系统课内实验报告_第2页
操作系统课内实验报告_第3页
操作系统课内实验报告_第4页
操作系统课内实验报告_第5页
已阅读5页,还剩10页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、西安交通大学实验报告操作系统实验报告刘烜乐享科技计算机36班操作系统实验实验一:用户接口实验实验目的1) 理解面向操作命令的接口Shell。2) 学会简单的 shell 编码。3) 理解操作系统调用的运行机制。4) 掌握创建系统调用的方法。操作系统给用户提供了命令接口和程序接口 (系统调用) 两种操作方式。 用户接口实验 也因此而分为两大部分。 首先要熟悉 Linux 的基本操作命令, 并在此基础上学会简单的 shell 编程方法。 然后通过想 Linux 内核添加一个自己设计的系统调用, 来理解系统调用的实现方 法和运行机制。 在本次实验中, 最具有吸引力的地方是: 通过内核编译,将一组源代

2、码变成 操作系统的内核,并由此重新引导系统,这对我们初步了解操作系统的生成过程极为有利。实验内容1) 控制台命令接口实验该实验是通过“几种操作系统的控制台命令” 、“终端处理程序” 、“命令解释程序” 和Linux操作系统的bash”来让实验者理解面向操作命令的接口shell和进行简单的shell编程。? 查看 bash 版本。在 shell 提示符下输入:$echo $BASH_VERSION我们的版本是 4.3.42(1)-release2) 建立 bash 脚本,输出 Hello word在编辑器中输入以下内容#!/bin/bashecho Hello World!执行脚本 使用指令:$

3、./script? 编写 bash 脚本,统计 /my 目录下 c 语言文件的个数通过 bash 脚本,可以有多种方式实现这个功能,而使用函数是其中个一个选择。在使用函数之前,必须先定义函数。 进入自己的工作目录,编写名为 count 的文件 脚本程序:#! /bin/bashfunction countecho - n ” Number of matches for $1: #接收程序的第一个参数Is $1|WC - l#对子程序的第一个参数所在的目录进行操作将 count 文件复制到当前目录下,然后在当前目录下建立文件夹,在my 目录下建立几个 c 文件 ,以便用来进行测试2) 系统调用实

4、验该实验是通过实验者对“ Linux 操作系统的系统调用机制”的进一步了解来理解操作mycall ()”和编程调用自己系统调用的运行机制;同时通过“自己创建一个系统调用创建的系统调用”进一步掌握创建和调用系统调用的方法。? 编程调用一个系统调用 fork (),观察结果。fork ()在应用程序中调用系统调用 fork ()非常简单,下面的程序可以很清楚的显示出有 系统调用生成了子进程,而产生的分叉作用:# include int main()int iUid;iUid=fork();if(iUid=0)for(;) printf(This is child process.n);sleep(

5、1);if(iUid0)for(;) printf(This is parent process.n);sleep(1);if(iUid0)printf(Can not use system call.n);return 0;程序运行结果:? 编程调用创建的系统调用 foo (),观察结果。在内核源码中添加如下代码:asmlinkage int sys_foo (int x ) printf (“ %dn ”,x);编程调用创建的系统调用 foo (),观察结果。#include #include _syscall1(char*,foo,int,ret)main()int I,J; I=100

6、; J=0; J=foo(I);printf(This is the result of new kerneln);printf(%d,j);重新编译内核,编译成功后的内核版本如下:? 自己创建一个系统调用 mycall (),实现功能:显示字符串到屏幕上。在内核源码中添加如下代码:#includeasmlinkage long sys_newcall(int i)/printk(this is a system call made by yourselfn);return(i*10);测试新的 System_callCODE: vi test.c? 编程调用自己创建的系统调用。测试: COD

7、E:./test实验体会:通过本次实验,我们理解了面向操作命令的接口 Shell ,学会了简单的 shell 编码,理 解 了操作系统调用的运行机制,掌握了创建系统调用的方法。本次实验通过内核编译,将 一组 源代码变成操作系统的内核,并由此重新引导系统,这让我们初步了解了操作系统的 生成过程。实验二:进程管理实验实验目的1) 加深对进程概念的理解,明确进程和程序的区别。2) 进一步认识并发执行的实质。3) 分析进程争用资源的现象,学习解决进程互斥的方法。4) 了解 Linux 系统中进程通信的基本原理。进程是操作系统中最重要的概念,贯穿始终,也是学习现代操作系统的关键。通过本 次实验, 要求理

8、解进程的实质和进程管理的机制。 在 Linux 系统下实现进程从创建到终止的 全过程,从中体会进程的创建过程、 父进程和子进程的关系、 进程状态的变化、进程之间的同步机制、进程调度的原理和以信号和管道为代表的进程间通信方式的实现。实验内容1) 编制实现软中断通信的程序1. 实验原理:使用系统调用fork()创建两个子进程,再用系统调用signal()让父进程捕捉键盘上发出的中断信号(即按 delete 键),当父进程接收到这两个软中断的某一个后,父进程用系统调 用 kill() 向两个子进程分别发出整数值为 16和 17软中断信号, 子进程获得对应软中断信号, 然后分别输出下列信息后终止:Ch

9、ild process 1 is killed by parent !Child process 2 is killed by parent !父进程调用wait()函数等待两个子进程终止后,输入以下信息,结束进程执行:Parent process is killed!2. 实验源码:#include #include #include #include int wait_flag;void stop( );main( ) int pid1, pid2;/ 定义两个进程号变量signal(3,stop);/ 或者 signal(14,stop);while(pid1 = fork( ) = -

10、1);/ 若创建子进程 1 不成功 ,则空循环if(pid1 0) / 子进程创建成功 ,pid1 为进程号while(pid2 = fork( ) = -1);/ 创建子进程 2 if(pid2 0) wait_flagsleep(5);/ 父进程等待 5 秒kill(pid1,16);/ 杀死进程 1kill(pid2,17);/ 杀死进程 2wait(0);/ 等待第 1 个子进程 1 结束的信号wait(0);/ 等待第 2 个子进程 2 结束的信号printf(n Parent process is killed !n);exit(0); / 父进程结束else wait_flag

11、= 1;signal(17,stop); / 等待进程 2 被杀死的中断号 17printf(n Child process 2 is killed by parent !n);exit(0);else wait_flag = 1;signal(16,stop); / 等待进程 1被杀死的中断号 16printf(n Child process 1 is killed by parent !n);exit(0);void stop( ) wait_flag = 0;3. 程序运行结果 :或者多次运行,并且 Delete 键后,会出现如下结果:4. 简要原因分析:上述结果中 “ Child pr

12、ocess 1 is killed by pare nt ! 和 “ Ch”d process 2 is killed by pare nt ! 相继出现,当运行几次后,谁在前谁在后是随机的。这是因为:从进程调度的角度看,子进 程被创建后处于就绪态。此时,父进程和子进程作为两个独立的进程,共享同一个代码段, 分别参加调度、执行,直至进程结束。但是谁会先被调度程序选中执行,则与系统的调度策 略和系统当前的资源状态有关,是不确定的。因此,谁先从fork() 函数中返回继续执行后面的语句也是不确定的。2) 编制实现进程的管道通信的程序1. 实验原理:使用系统调用pipe()建立一条管道线,两个子进程

13、分别向管道写一句话:Child process 1 is sending a message!Child process 2 is sending a message!/ 定义两个字符数组/ 创建管道/ 如果进程 1 创建不成功 ,则空循环/ 如果子进程 1 创建成功 ,pid1 为进程号/ 锁定管道process 1 is sending message!n); / 给/ 向管道写入数据/ 等待读进程读出数据/ 解除管道的锁定/ 结束进程 1而父进程则从管道中读出来自于两个子进程的信息,显示在屏幕上。P2 发来的消息。要求:父进程先接收子进程 P1 发来的消息,然后再接收子进程2. 程序源码

14、:#include #include #include int pid1,pid2; / 定义两个进程变量 main( ) int fd2;char OutPipe100,InPipe100;pipe(fd);while(pid1 = fork( ) = -1); if(pid1 = 0) lockf(fd1,1,0);sprintf(OutPipe,n ChildOutpipe 赋值write(fd1,OutPipe,50);sleep(5);lockf(fd1,0,0);exit(0);else while(pid2 = fork() = -1);/ 若进程 2 创建不成功 ,则空循环if

15、(pid2 = 0) lockf(fd1,1,0);sprintf(OutPipe,n Child process 2 is sending message!n);write(fd1,OutPipe,50);sleep(5);lockf(fd1,0,0);exit(0);else wait(0);read(fd0,InPipe,50);printf(%sn,InPipe);wait(0);read(fd0,InPipe,50);printf(%sn,InPipe);exit(0);/ 等待子进程 1 结束/ 从管道中读出数据/ 显示读出的数据/ 等待子进程 2 结束/ 父进程结束3. 运行结果

16、截图:4. 简要分析管道,是指用于连接一个读进程和一个写进程,以实现它们之间信息的共享文件又称 pipe 文件。向管道(共享文件)提供输入的发送进程(即写进程) ,以字符流形式将大量的 数据送入管道;而接收管道输送的接收进程(读进程) ,可以从管道中接收数据。为了协调双方的通信,管道通信机制必须提供以下 3 方面的协调能力:? 互斥。当一个进程正在对 pipe 进程读 /写操作时,另一进程必须等待,程序中使用 lock(fd1,1,0) 函数实现对管道的加锁操作,用 lock(fd1,0,0) 解除管道的锁定。? 同步。 当写进程把一定数量的数据写入 pipe 后, 便去睡眠等待, 直到读进程

17、取走数 据后,再把它唤醒。当读进程试图从一空管道中读取数据时,也应睡眠等待,直至 写进程将数据写入管道后,才将其唤醒。? 判断对方是否存在。只有确定写进程和读进程都存在的情况下,才能通过管道进行 通信。5)实验体会:通过本次实验, 我们理解了进程的实质和进程管理的机制。 进程是操作系统中最重要的 概念,是现代操作系统的关键。 实验中我们在 Linux 系统下实现进程从创建到终止的全过 程, 体会了进程的创建过程、 父进程和子进程的关系、 进程状态的变化、 进程之间的同 步机制、 进程调度的原理和以信号和管道为代表的进程间通信方式的实现。实验三 存储器管理实验实验目的1) 理解内存页面调度的机理

18、2) 掌握几种理论页面置换算法的实现方法3) 了解 HASH 数据结构的使用4)通过实验比较几种调度算法的性能优劣页面置换算法是虚拟存储管理实现的关键,通过本次实验理解内存页面调度的机制,在模拟实现FIFO 、LRU 、NRU 和 OPT 几种经典页面置换算法的基础上,比较各种页面置换算法的效率及优缺点,从而了解虚拟存储实现的过程。准备知识(1)C+、指针、结构体(类)(2)HASH 表查找方式(3)操作系统相关内存交换知识(4)用到的 LINUX 函数int getpid() 获得当前进程的 idvoid srand ( int a ) 以 a 为种子产生随机数int rand() 根据前面的种子,返回一个随机数实验内容程序整体截图:对比以下几种算法的命中率:1) 先进先出算法 FIFO ( First In First Out ) 运行结果截图:2) 最近最少使用算法 LRU ( Least Recently Used)运行结果截图:3) 最佳置换算法 OPT ( Optimal Replacement )运行结果截图:实验四

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论