操作系统实验报告,适用与大一大二学生

实 验 报 告 册

课        程        操作系统              

批阅教师签名                             

    学    院          信息工程学院            

    专    业         计算机科学与技术         

    班    级           2018计科2班           

    学    号           2018*********          

    姓    名           ******               

        地    点             个人电脑            

        指导教师             ******               

学年学期   2019 年~ 2020 年第  2  学期

实验报告填写要求

1、实验报告填表说明

(1)实验名称:要求与实验大纲和实验指导书中的实验项目名称保持一致。

(2)实验学时:要求与实验大纲和实验指导书中完成该实验项目所需学时一致。

(3)实验类型:是指演示性、操作性、验证性、综合性、设计性。

演示性:教师操作,学生观察,验证理论、说明原理和方法。

操作性:学生按要求动手拆装、调试实验装置或上机操作,掌握其基本原理和方法。

验证性:按实验指导书(教材)要求,由学生通过操作验证所学理论,加深对理论知识的理解,掌握基本实验知识、方法、技能、数据处理等。

综合性:实验内容涉及本课程的综合知识或相关课程的知识,运用多种知识、多种方法,按要求或自拟实验方案进行实验。主要培养学生综合运用所学知识、实验方法和实验技能,以培养其分析、解决问题的能力。

设计性:给定实验目的、要求和实验条件,学生自己设计实验方案并加以实现的实验。学生独立完成从查阅资料、拟定实验方案、实验方法和步骤(或系统分析和设计)、选择仪器设备(或自行设计制作)进行实验并完成实验全过程,形成实验报告,培养学生自主实验的能力。

(4)若有必要,可在实验报告中粘贴打印内容,包含程序、原理图、图形、表格等

2、教师批改学生实验报告要求

(1)批改:要求用红色字迹笔全部批改,在错误的地方进行标注。

(2)评分:按百分制评分,不能评分为“优、良、中、差”或“A、B、C”。

(3)成绩:实验成绩标注在实验报告上,并填写学生实验成绩表,实验成绩作为学期成绩评定的依据。

实验名称

进程控制

成绩

实验类型

综合性

实验学时

2

日期

6.4

实验目的

1通过实验理解进程的概念,进程的组成,进程的并发执行和操作系统进行进程管理的相关原语2掌握进程状态的转变,理解进程调度的过程,用高级语言编写和调试一个进程调度程序,以加深对进程的概念及进程调度算法的理解。

实验设备

1.运行Windows 7等操作系统的计算机;2.vc6.0

一、 实验原理(要求、任务等)

操作系统课稈教学的主要目的,是学习计算机操作系统中资源管理的方法和技术,这些方法和技术,在以后的实际应用开发中加以借鉴,可以提高所开发的应用程序质量。为了加深对操作系统教材中所讲述的一些干要管理策略和算法的理解、掌握这些算法的思想、并能用已学习的程序设计语言实现之,在进行操作系统课程教学过程中必须安排若干实验。要完成这些实验,需要具有一定的C语言或其他编程语言的编程能力。

首先考虑如何组织进程,设定进程控制块的内容。进程块PCB记录各个进程执行时的情况。不同的操作系统,进程控制快记录的信息内容也不一样,无论信息量多少,大致分为:标识信息、说明信息、现场信息、管理信息。

确定讲程控制块内容后,要考虑的就是如何将进程控制块组织在一起多道程席设计

系统中,往往同时创建多个进程。在单处理器的情况下,每次只能有一个进程处于运行态、其他的进程处干就绪状杰或等待状杰。为了便于管理,通常把处于相同状态的进程的讲程控制块链接在一起单处理器系统中,正在运行的进程只有一个。因此,单处理器系统中进程控制块分成一个正在运行进程的进程控制块就绪进程的进程控制块组织成的就绪队列和等待讲程的讲程控制块组成的等待队列。由干实验模拟的是讲程调度,没有对等待队列的操作,所以实验中只有一个指向正在运行进程的进程控制块指针和一个就绪进程的进程控制块队列指针。

二、 实验内容和步骤

PCB结构通常包括以下信息:进程名,进程优先数,轮转时间片,进程所占用的CPU时间,进程的状态,当前队列指针等。可根据实验的不同,PCB结构的内容可以作适当的增删。

主体程序

  //进程PCB结构体

struct jincheng

{

         int pid;

    int youxian;

    float luntime;

    float zhantime;//这2个时间,固定为3.5,3

    char zhuangtai;    //a表示执行,b表示动态就绪

    Node *neirong;

    struct jincheng *next;

};

typedef struct jincheng Jincheng;

int main()

    init();

    printf("——————————JinChengGuanLi——————————\n"); 

    while(n==1) 

         {  

        printf("********************************************\n");  

        printf("*               进程演示系统               *\n"); 

        printf("********************************************\n");  

        printf("     1.创建新的进程      2.查看运行进程 \n");      

        printf("     3.换出某个进程      4.杀死运行进程 \n");      

        printf("     5.进程之间通信      6.退出系统 \n");          

        printf("********************************************\n");  

        printf("请选择(1~6)\n");  

        scanf("%d",&i);  

        switch(i)  

                  {  

        case 1:create();   

              break;  

         case 2:   

              chakan();break;  

         case 3:   

              huanchu(s);   

              break;  

    case 4:   

         j=zhixing();   

         break;  

     case 5:   

          tongxing(s);  

          break;  

      case 6:exit(0);  

      default:n=0;  

                  } 

    }

         return 0;

}

 

三、实验结果与分析

********************************************

*               进程演示系统               *

********************************************

        1.创建新的进程      2.查看运行进程    

        3.换出某个进程      4.杀死运行进程    

        5.进程之间通信      6.退出系统        

********************************************

请选择(1~6)然后根据你选择的不同,出现不同的结果。

         

②进程通信:先创建2个进程,名字分别为1,2,优先级分别为5,6,进程内容分别为1abc,2abc,则因为进程2的优先级高,所以当前运行进程为进程2;此时,再进行进程通信(和进程1通信),可以看到当前运行的进程的内容从2abc变为了1abc

四、总结与心得体会

做进程控制实验时,首先要考虑如何组织进程,设定进程控制块的内容。进程块PCB记录各个进程执行时的情况。确定讲程控制块内容后,要考虑的就是如何将进程控制块组织在一起多道程批设计。

    通过一个学期的学习,使我了解了操作系统的进程相关知识,认识了操作系统的重要性,使计算机系统所有资源最大限度地发挥作用,为用户提供方便的、有效的、友善的服务界面

                                                                                                           

五、教师评语

实验名称

进程通信

成绩

实验类型

综合性

实验学时

1

日期

6.4

实验目的

1、加深对进程概念的理解,明确进程和程序的区别。2、了解进程通信的基本原理3 、了解进程通信的4种方式:信号量通信, 共享存储器系统、消息传递系统以及管道通信系统

实验设备

1.运行Windows 7等操作系统的计算机;2.vc6.0

一、 实验原理(要求、任务等)

1.在Windows操作系统下,任何一个进程不允许读取、写入或是修改另一个进程的数据(包括变量、对象和内存分配等),但是在某个进程内创建的文件映射对象的视图却能够为多个其他进程所映射,这些进程共享的是物理存储器的同一个页面。因此,当一个进程将数据写入此共享文件映射对象的视图时,其他进程可以立即获取数据变更情况。具体实现步骤如下:

①、在服务器端进程中调用内存映射API函数Create File Mapping创建一个有名字标识的共享内存;

②、在创建文件映射对象后,服务器端进程调用Map View Of file函数映射到本进程的地址空间内;

③、客户端进程访问共享内存对象,需要通过内存对象名调用Open File Mapping函数,以获得共享内存对象的句柄

④、如果客户端进程获得共享内存对象的句柄成功,则调用Map View Of File函数来映射对象视图。用户可以使用该对象视图来进行数据读写操作,以达到数据通讯的目的。

⑤、当用户进程结束使用共享内存后,调用Unmap View Of File函数以取消其地址空间内的视图:

3. 要理解生产消费者问题,首先应弄清PV操作的含义:PV操作是由P操作原语和V操作原语组成(原语是不可中断的过程),对信号量进行操作,具体定义如下:

    P(S):①将信号量S的值减1,即S=S-1;

            ②如果S>=0 ,则该进程继续执行;否则该进程置为等待状态,排入等待队列。

    V(S):①将信号量S的值加1,即S=S+1;

           ②如果S>0,则该进程继续执行;否则释放队列中第一个等待信号量的进程。

4. 分析进程的同步与互斥现象,编程实现经典的进程同步问题——生产者消费者问题的模拟,生产者--消费者问题表述:

有一环形缓冲池,包含n个缓冲区(0~n-1)。

有两类进程:一组生产者进程和一组消费者进程,生产者进程向空的缓冲区中放产品,消费者进程从满的缓冲区中取走产品。所有进程必须对缓冲区进行互斥的访问。生产者不能向满缓冲区写数据,消费者不能从空缓冲区取数据,即生产者与消费者必须同步。

计算机系统中对资源的分配与释放过程:计算机系统中的每个进程都可以消费或生产某类资源。当系统中某一进程使用某一资源时,可以看作是消耗,且该进程称为消费者。而当某个进程释放资源时,则它就相当一个生产者。

二、 实验内容和步骤

1、编制一段程序,实现进程的共享内存通信。

要求:进程 A 将数据写入到共享内存,进程 B 获取共享内存中的数据。

分析进程的同步与互斥现象,编程实现经典的进程同步问题——生产者消费者问题的模拟;同时也是2个进程间的通信(通信的数据为产品);

实验步骤如下:

进程 A 将数据写入到共享内存:

#include <io stream>

#include <windows.h>

using name space std;

#define BUF_SIZE 1025

char sz Name[] = "Name Of Mapping Object";    // 共享内存的名字

int main()

{

         // 创建共享文件句柄

    HANDLE h Map File = Create File Mapping(

        INVALID_HANDLE_VALUE,    // 物理文件句柄

        NULL,                    // 默认安全级别

        PAGE_READWRITE,          // 可读可写

        0,                       // 高位文件大小

        BUF_SIZE,                // 地位文件大小

        szName                   // 共享内存名称

                  );

    char *pBuf = (char *)MapViewOfFile(

                  hMapFile,            // 共享内存的句柄

        FILE_MAP_ALL_ACCESS, // 可读写许可

        0,

        0,

        BUF_SIZE

                  );

    while(1)

    {

                  cout << "input..." << endl;

        char szInfo[BUF_SIZE] = {0};

        gets(szInfo); // 其实gets并不安全

        strncpy(pBuf, szInfo, BUF_SIZE - 1);

                  pBuf[BUF_SIZE - 1] = '\0';

    }

         UnmapViewOfFile(pBuf);

    CloseHandle(hMapFile);

         return 0;

}

进程 B 获取共享内存中的数据:

#include <iostream>

#include <windows.h>

using namespace std;

#define BUF_SIZE 1025

char szName[] = "NameOfMappingObject";    // 共享内存的名字

int main()

{

         // 创建共享文件句柄

    HANDLE hMapFile = CreateFileMapping(

        INVALID_HANDLE_VALUE,    // 物理文件句柄

        NULL,                    // 默认安全级别

        PAGE_READWRITE,          // 可读可写

        0,                       // 高位文件大小

        BUF_SIZE,                // 地位文件大小

        szName                   // 共享内存名称

                  );

    char *pBuf = (char *)MapViewOfFile(

                  hMapFile,            // 共享内存的句柄

        FILE_MAP_ALL_ACCESS, // 可读写许可

        0,

        0,

        BUF_SIZE

                  );

    while(1)

    {

        cout << "press any button to receive data..." << endl;

        getchar();

                  cout << pBuf << endl;

    }

         UnmapViewOfFile(pBuf);

    CloseHandle(hMapFile);

         return 0;

}

 

三、实验结果与分析

  1. 分别启动运行程序A,B,在程序A中输入数据ABCDEF,换行结束,在程序B中按任意键接收数据,可以看到进程B收到的数据正是ABCDEF。

  1. 生产者-消费者运行结果:3个生产者进程,1个消费者进程,缓冲区大小为5,运行结果:生产者进程向消费者进程通过缓冲区发送产品号,从而进行通信。

       

四、总结与心得体会

通过进程通信的实验,加深对进程概念的理解,明确进程和程序的区别。了解进程通信的基本原理,通过自己的动手实验,更容易了解进程通信的实验机制。

    进程 A 将数据写入到共享内存,进程 B 获取共享内存中的数据。所谓的进程互斥,指

两个或两个以上的进程,不能同时进入关于同一组共享变量的临界区域,也就是说,一个进程正在访问临界资源,另一个要访问该资源的进程必须等待。通过编程,能够更好地理解这个概念。进程互斥通过lockf()来实现。

                                                                                                           

五、教师评语

实验名称

存储器管理

成绩

实验类型

综合性

实验学时

2

日期

6.10

实验目的

模拟主存空闲空间的表示方法,以及模拟实现主存空间的分配和回收。

实验设备

1.运行Windows 7等操作系统的计算机;2.vc6.0

一、 实验原理(要求、任务等)

在地址映射过程中,若在页面中发现所要访问的页面不再内存中,则产生缺页中断。当发生缺页中断时操作系统必须在内存选择一个页面将其移出内存,以便为即将调入的页面让出空间。而用来选择淘汰哪一页的规则叫做页面置换算法。

常用算法有:1.最佳置换算法(理想置换算法);

  1. 先进先出置换算法:
  2. 最近最久未使用算法;
  3. 置换算法算法的近似实现;

5.最少使用置换算法。

抖动就是指当内存中已无空闲空间而又发生缺页中断时,需要从内存中调出一页程序或数据送磁盘的对换区中,如果算法不适当,刚被换出的页很快被访问,需重新调入,因此需再选一页调出,而此时被换出的页很快又要被访问,因而又需将它调入,如此频繁更换页面,以致花费大量的时间,我们称这种现象为"抖动";

产生抖动的原因是由于的利用率和多道程序度的对立统一矛盾关系引起的,为了提高利用率,可提高多道程序度,但单纯提高多道程序度又会造成缺页率的急剧上升,导致的利用率下降,而系统的调度程序又会为了提高利用率而继续提高多道程序度,形成恶性循环,我们称这时的进程是处于"抖动"状态。

一、 实验内容和步骤

通过本实验帮助理解在不同的存储管理方式下应怎样进行存储空间的分配和回收。

1、在可变分区管理方式下采用首次适应算法实现主存分配和回收。假定内存大小为128K。空闲区说明表格式为:起始地址——指出空闲区的起始地址;长度——一个连续空闲区的长度;状态——有两种状态,一种是“未分配”状态(0),另一种是“已分配”状态(1)。

2、程序中所使用的符号说明和数据结构

struct FBT                                                        自由块表结构体

{int startdress;                                         自由块表中一个表项的始地址

  int size;                                                   自由块表中的一个表项的大小

  int processid;                                                这个表项所对应的进程号

  int state;                                                              这个表项的状态

  struct FBT *next;                                    指向下一个自由块表结构体

  };

struct FBT *create()                    建立自由块表子函数

         struct FBT *distribute(struct FBT *head)分配内存空间子函数          

         struct FBT *callback(struct FBT *head) 回收内存空间子函数

回收内存有下列4种情况,在程序中用条件语句实现:

进程i

回收区

进程j

空闲区

回收区

进程j

进程i

回收区

空闲区

空闲区

回收区

空闲区


 

  void print(struct FBT *head)          显示自由块表内容子函数

         void main()                                                          主函数

三、实验结果与分析

 

 

 

 

 

 

 

 

 

 

其中:起始0地址,大小5的内存区域为操作系统占用,1#进程分配10大小的内存,然后,进程释放该内存。

讲稈调度的具体功能可总结为如下几点:

(1)记录系统中所有进程的执行情况; (2) 诜择占有处理机的进程; (3)进行进程.上下文切换。.

进程调度有以下两种基本方式:

非剥夺方式:分派程序- -旦把处理机分配给某进程后便让它一直运行下去,直到进程完成或发生某事件而阻塞时,才把处理机分配给另-个进程。

剥夺方式:当一个讲稈下在运行时,系统可以基干某种原则,剥夺已分配给它的处理机,将之分配给其它进程。剥夺原则有:优先权原则、短进程、优先原则、时间片原则。

四、总结与心得体会

通过存储器管理实验使我了解了模拟主存空闲空间的表示方法,以及模拟实现主存空间的分配和回收。

通过本次实验,掌握了几种页面置换算法的实现方法,对于该如何去实现这些算法有了更深入的理解,了解了HASH表数据结构的使用,通过实验比较了各种调度算法的优劣

                                                                                                           

五、教师评语

实验名称

文件管理

成绩

实验类型

综合性

实验学时

1

日期

6.11

实验目的

1模拟UNIX文件系统应该有以下功能:

2多级目录的结构,第一目录为用户名,其余的为它的子目录;

3具有用户登录和注册的功能;

4实现一些命令字的功能,例如:mkdir,rmdir,cd,ls,create,cat,rm,help,exit等。

实验设备

1.运行Windows 7等操作系统的计算机;2.vc6.0

一、 实验原理(要求、任务等)

用C模拟实现文件系统的管理;要求设计一个多级目录结构的文件系统,能正确描述文件控制块,采用合理的外存分配方式,能实现基本的目录及文件的操作,包括创建、删除、重命名、复制、移动等功能,并对文件有一定的存取权限控制。

UNIX系统的文件卷至少包括引导块、超级块、i节点表、数据区等几个部分

1.引导块
位于文件卷最开始的第一扇区,这512字节是文件系统的引导代码,为根文件系统所特有,其他文件系统这512字节为空。
2. 超级块
位于文件系统第二扇区,紧跟引导块之后,用于描述本文件系统的结构。如i节点长度、文件系统大小等,其结构存放于/usr/include/sys/filsys.h中,其结构如下:
struct filsys
{ ushort s_isize; /*磁盘索引节点区所占用的数据块数*/

daddr_t s_fsize; /*整个文件系统的数据块数*/
short s_nfree; /*在空闲块登录表中当前登记的空闲块数目*/
daddr_t s_free[NICFREE]; /*空闲块登记表*/
short s_ninode; /*空闲索引节点数*/
ino_t s_inode[NICINOD]; /*空闲节点登记表*/
char s_flock; /*加锁标志位*/
char s_ilock; /*节点加锁标志位*/
char s_fmod; /*超级块修改标志*/
char s_ronly; /*文件系统只读标志*/
time_t s_time; /*超级块上次修改的时间*/
short s_dinfo[4]; /*设备信息*/
daddr_t s_tfree; /*空闲块总数*/
ino_t s_tinode; /*空闲节点总数*/
char s_fname[6]; /*文件系统名称*/
char s_fpack[6];
long s_fill[13]; /*填空位*/
long s_magic; /*指示文件系统的幻数*/
long s_type; /*新文件系统类型*/
};
3. i节点表
i节点表存放在超级块之后,其长度是由超级块中的s_isize字段决定的,其作用是用来描述文件的属性、长度、属主、属组、数据块表等,其数据结构在/usr/include/sys/ino.h中,如下:
struct dinode
{ ushort di_mode;
short di_nlink;
ushort di_uid;
ushort di_gid;
off_t di_size;
char di_addr[40];
time_t di_atime;
time_t di_mtime;
time_t di_ctime;
};

4.目录结构

UNIX所有文件均存放于目录中,目录本身也是一个文件。目录存放文件的机制如下:首先,目录文件本身也象普通文件一样,占用一个索引节点,其次,由这个索引节点得到目录内容的存放位置,再次,从其内容中取出一个个的文件名和它对应的节点号,从而访问一个文件。目录结构如下:
索引节点号(2字节) .(本目录)(14字节)
索引节点号(2字节) ..(父目录)(14字节)
索引节点号(2字节) 文件名(14字节)
索引节点号(2字节) 文件名(14字节)
索引节点号(2字节) 文件名(14字节)

一、 实验内容和步骤

因为要实现多级目录的话,第一级目录是用用户作为主目录的,也就是对应于用户登陆时候输入的用户名,第二级目录是对应用户名下的文件或者目录。内存中申请了1M的空间,分成512数据块,每块为512个字节的虚拟文件。

首先系统系统初始化(建文件卷、提供登录模块)的功能, 接着处理用户注册或登陆的程序,当用户登陆成功后,就可以进行一写命令字的操作,因此应该为这些命令字中的每一个命令字写一个函数,用来调用,调用每一个命令字操作后,就对内存的数据块进行相应的操作,模拟文件的运行。

算法流程图

    

使用说明如下:

用户先注册自己的用户名和密码,然后就可以登陆了,进行一些命令字的操作,具体如下

mkdir命令      功能:创建一个目录        语法:mkdir   dir-name

rmdir命令      功能:删除一个目录        语法:rmdir   dir-name

cd 命令        功能:改变工作目录        语法:cd [directory]

ls 命令        功能: 列出所有目录与文件    语法:ls [目录或是文件]

create命令     功能:创建一个文件         语法:create   file-name

rm命令         功能:删除不需要的文件    语法:rm    file-name 

cat命令        功能:删除不需要的文件     语法:cat   file-name 

help命令       功能:帮助信息             语法:help

exit 命令      功能:退出程序              语法:exit

 

三、实验结果与分析

注册用户名li,密码123,创建目录zhql,在该目录下创建文件,文件内容:ABCDEF,然后显示目录内容。

四、总结与心得体会

通过本次实验,了解了许多关于操作系统文件方面的知识,掌握了几种页面置换算法的实现方法,对于该如何去实现这些算法有了更深入的理解, 在这次设计中,我对于文件属性,文件命名,文件操作,文件存取方式有了更加深刻的理解,其中令我印象最为深刻的是文件目录的管理。

                                                                                                           

五、教师评语

猜你喜欢

转载自blog.csdn.net/weixin_43730875/article/details/106887276