文档库 最新最全的文档下载
当前位置:文档库 › 操作系统实验二

操作系统实验二

操作系统实验二
操作系统实验二

实验2 Linux基本环境

1、实验目的

(1)熟悉Linux下的基本操作,学会使用各种Shell命令去操作Linux,对Linux有一个感性认识。

(2)学会使用vi编辑器编辑简单的C语言程序,并能对其编译和调试。

2、实验预备内容

(1)参阅相关Linux操作系统的安装手册,熟悉Linux的基本安装和配置;

(2)参阅相关Linux的命令参考手册,熟悉Linux下的操作命令。

3、实验内容

(1)以student用户身份登陆,并使用“ls”,“cat”“cd”等命令来实现基本的文件操作并观察Linux文件系统的特点;

(2)使用vi编辑器编写个一C语言程序,并用gcc命令进行编译和链接,并用a.out来输出结果。

4、思考

(1)Linux系统在用户登陆和操作界面以及文件系统上有哪些特点?

5、实验报告填写内容

(1):列出ls、rm命令的详细内容(包括命令的格式、功能及主要参数的含义)(2):写出综合练习题1的答案(要求:将题目和答案同时写上,不得省略题目)(3):写出gcc命令的详细内容(包括命令的格式、功能及主要参数的含义)

一、实验预备知识

新建终端:桌面点击鼠标右键选择新建终端

Shell 是系统的用户界面,提供了用户与内核进行交互操作的一种接口。它接收用户输入的命令并把它送入内核去执行。

? Shell 可执行的用户命令可分为两大类:

◆ 内置命令

Linux 程序

◆ 实用程序: 应用程序

Shell 脚本

用户程序

? Shell 命令提示符

例如:[student@localhost student] $

? Shell 命令格式

命令名 [选项] [参数] ↓

◆ 命令名必不可少;

◆ 选项通常以“-”开头,也有少数不使用“-”,当有多选项时,可以只使

用一个“-”; 如: ls -l -a 与 ls -la

◆ 参数是执行命令所必须的对象,如文件、目录

“↓”表示Enter 键

一、相关命令用法介绍

1. pwd 命令

? 格式:pwd

? 功能:显示当前目录的绝对路径。

练习:在shell 命令提示符后输入 pwd ,显示用户当前目录的绝对路径

2.cd 命令

? 格式:cd [目录]

? 功能:切换到指定目录。

? 注:

◆ 超级用户的主目录是/root ;

◆ 普通用户student 主目录默认就是/home/student 。

◆ 几个特殊目录的符号:. 当前目录、..上级目录、../..上二级目录、~用户主

目录

练习:①用pwd 命令显示用户当前目录的绝对路径;

②使用cd 命令进入/usr 目录,然后用pwd 命令显示此时用户当前目录的绝对路径; ③使用cd 命令返回到用户主目录。

?格式:ls [选项] [文件|目录]

?功能:显示指定目录中的文件和子目录信息

?主要选项说明:

◆-a:显示所有文件及目录

◆-d:若参数是目录,只显示目录信息。

◆-l:详细列出文件名、权限、文件大小等信息

◆-t:将文件依建立时间之先后次序列出

练习:[1] 查看当前目录下文件和子目录信息。

[2] 查看/home目录的详细信息。

[3] 将/bin 目录下所有文件及目录详细信息。

[4] 查看/bin下bash文件的详细信息。

参考答案:

[1]: ls

[2]: ls -l /home

[3]: ls -al /bin

[4]:ls -l /bin/bash

以练习[4]为例介绍linux文件目录的属性显示格式

在shell命令提示符后输入ls –l /bin/bash 得到如下显示结果-rwxr-xr-x 1 root root 62028 2003-02-11 /bin/bash

?格式:cat [选项] 文件列表

?功能:显示文本文件的内容

?主要选项说明:

◆-n(number)在每一行前显示行号

练习:[1]查看/etc/profile文件的内容。

[2]查看/etc/profile ,并加行号。

参考答案:[1] cat /etc/profile [2] cat –n /etc/profile

5. man命令(帮助命令)

?格式:man 命令名

?功能:显示指定命令的手册的帮助信息。

?注:屏幕显示出该命令在Shell手册页的第一屏帮助信息,用户可使用上下方向键、

PgDn、PgUp键前后翻阅帮助信息,按q键则退出man命令。

练习:查看ls命令的手册的帮助信息。

6.mkdir 命令

?格式:mkdir [选项] 目录名

?功能:新建一个目录

?注:命令详细信息可使用mkdir --help(此处为两个“-”)显示

练习:在用户主目录下新建一个名为firstdir 的目录。

参考答案:mkdir firstdir

7.rmdir

?格式:rmdir [选项] 目录名

?功能:从一个目录中删除一个或多个子目录项。需要特别注意的是,一个目录被删

除之前必须是空的,删除非空目录需要使用rm –r 目录名。

?注:命令详细信息可使用rmdir --help 显示

练习:删除用户主目录下的名为firstdir 的空目录。

参考答案:rmdir firstdir

8.rm

?格式:rm [选项] 目录名/文件名

?功能:删除一个目录中的一个或多个文件或目录,它也可以将某个目录及其下的所

有文件及子目录均删除。

?注:命令详细信息可使用rm --help 显示

练习:使用命令mkdir aa;touch aa/123.txt新建一个名为aa的目录,并在目录中建立一个名为123.txt的文件,使用rm命令删除非空目录aa

参考答案:rm -r aa

9.cp

?格式:cp [选项] 来源目的地

?功能:将<来源>文件或目录复制到<目的地>

?注:命令详细信息可使用cp --help 显示

练习:用mkdir abc;touch 123.txt命令在当前目录下建立一个空目录abc以及123.txt的文本文件,使用cp 命令将123.txt文件复制到abc 目录中

参考答案:cp 123.txt abc/

10.mv

?格式:mv [options] source dest 或mv [options] source... directory

?功能:将文件或目录从一个目录移动到另一个目录,或重命名文件或目录。如果将

一个文件或目录移动到新的目录而不指定新的名字,那么其保留原来的名字,若指定新的名字,则重命令文件或目录。参数:-i 若目的地已有同名档案,则先询问是否覆盖旧档

?注:命令详细信息可使用mv --help 显示

练习:使用touch 555.txt 666.txt 创建两个文本文件

①将555.txt文件移动到上题建立的abc目录中

②将666.txt文件移动到abc目录中并重命名为777.txt

③用ls 命令查看执行效果

参考答案:①mv 555.txt abc/;②mv 666.txt abc/777.txt;③ls abc/

综合练习题1

⑴在用户主目录下新建两个名为computer1和 computer2 的目录

⑵显示用户主目录下所有文件及目录的详细信息

⑶进入computer1目录

⑷使用命令cal 2013 来显示2013年的日历

⑸使用命令cal 2013 > a.txt (将2013年的日历重定向到文件a.txt)

⑹显示a.txt文件中的内容

⑺显示此时用户当前目录的绝对路径

⑻将a.txt文件复制到computer2目录中

⑼将a.txt文件移动到computer2目录中并将其重命名为b.txt

⑽进入computer2目录并用ls –l 命令显示本目录中文件的详细信息

⑾删除a.txt和b.txt文件,然后返回到上一级目录

⑿删除空目录computer2;删除非空目录computer1

二、VI编辑器的使用

?是UNIX/Linux系统中最经典文本编辑器

?是全屏文本编辑器,只能编辑文本,不能对字体、段落等进行排版。

?没有菜单,只有命令,且命令繁多。

?可运行于字符界面,仍被广泛使用。

vi的三种工作模式

?命令模式

◆启动vi后进入的工作模式

◆键盘输入的任何字符都被当作编辑命令

◆输入字符不会在屏幕上显示

◆输入字符是合法的vi命令,则完成相应动作,否则会发出警告

?文本编辑模式

◆在命令模式下输入i,a等命令即可进入

◆用于字符编辑

◆输入的任何字符都当作文件内容显示在屏幕上

◆按Esc键返回命令模式

?最后行模式

◆在命令模式下按“:”即可进入

◆进入后,会在屏幕的底部显示“:”作为提示符

◆命令执行完毕后,自动回到命令模式

三种工作模式的切换

启动vi:

?命令格式:vi [文件名] 例如:vi file.c

◆vi:进入vi的一个临时缓冲区。

◆vi file1:若文件不存在,将建立此文件;如该文件存在,则将其拷贝

到一个临时缓冲区。

?vi界面

◆进入后,光标停留在第一行的起始位置

◆行首如有“~”符号,表示此行为空行

vi启动后进入命令模式

文本编辑:

?在命令模式下输入i、I、a、A、o、O中的一个进入文本编辑模式

◆i:在目前光标前插入所要输入之文字。

◆I:插于行首。

◆a:在目前光标后开始输入文字。

◆A:插于行尾。

◆o:在当前行下新增一空行,并从行首输字

◆O:在当前行上新增一空行,并从行首输字

?按ESC键回到命令模式。

保存文件与退出vi:

?最后行模式下

◆:w [文件] 保存为指定的文件。

◆:q (或: quit) 退出vi。

◆:wq 存盘并退出vi。

◆:q! (或: quit!) 不保存文件,直接退出vi。

◆:x 保存并退出,与:wq相同

练习:使用vi编辑器编写一个C语言程序输出“Hello linux!“,用gcc命令进行编译和链接,并用a.out来输出结果。

步骤:

①启动vi编辑器,编辑一个c语言程序,完成后保存退出;

②c程序的编译和链接: gcc filename.c ;

③程序运行:./a.out

注意:在编译时可以加上–o 选项指定文件名

例如gcc filename.c –o filename

程序运行: ./filename

操作系统实验报告一

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

《操作系统原理》实验报告 开课实验室:年月日学院软件学院年级、专业、班2013级软件工 程2班 姓名胡其友成绩 课程名称操作系统原理 实验项目 名称 指导教师洪明坚 教师 评语教师签名:洪明坚年月日 1.实验目的: ?进入实验环境 –双击expenv/setvars.bat ?检出(checkout)EPOS的源代码 –svn checkout https://www.wendangku.net/doc/6f7038517.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

操作系统实验 磁盘调度算法

操作系统 实验报告 哈尔滨工程大学 计算机科学与技术学院

第六讲磁盘调度算法 一、实验概述 1. 实验名称 磁盘调度算法 2. 实验目的 (1)通过学习EOS 实现磁盘调度算法的机制,掌握磁盘调度算法执行的条件和时机; (2)观察 EOS 实现的FCFS、SSTF和 SCAN磁盘调度算法,了解常用的磁盘调度算法; (3)编写 CSCAN和 N-Step-SCAN磁盘调度算法,加深对各种扫描算法的理解。 3. 实验类型 验证性+设计性实验 4. 实验内容 (1)验证先来先服务(FCFS)磁盘调度算法; (2)验证最短寻道时间优先(SSTF)磁盘调度算法; (3)验证SSTF算法造成的线程“饥饿”现象; (4)验证扫描(SCAN)磁盘调度算法; (5)改写SCAN算法。 二、实验环境 在OS Lab实验环境的基础上,利用EOS操作系统,由汇编语言及C语言编写代码,对需要的项目进行生成、调试、查看和修改,并通过EOS应用程序使内核从源代码变为可以在虚拟机上使用。 三、实验过程 1. 设计思路和流程图 (1)改写SCAN算法 在已有 SCAN 算法源代码的基础上进行改写,要求不再使用双重循环,而是只遍历一次请求队列中的请求,就可以选中下一个要处理的请求。算法流程图如下图所示。 图 3.1.1 SCAN算法IopDiskSchedule函数流程图(2)编写循环扫描(CSCAN)磁盘调度算法 在已经完成的SCAN算法源代码的基础上进行改写,不再使用全局变量ScanInside 确定磁头移动的方向,而是规定磁头只能从外向内移动。当磁头移动到最内的被访问磁道时,磁头立即移动到最外的被访问磁道,即将最大磁道号紧接着最小磁道号构成循环,进行扫描。算法流程图如下图所示。

操作系统实验1

#include "stdio.h" #include #include #define getpch(type) (type*)malloc(sizeof(type)) #define NULL 0 struct pcb { /* 定义进程控制块PCB */ char name[10]; char state; int ntime; int rtime; struct pcb* link; }*ready=NULL,*p; typedef struct pcb PCB; void sort() /* 建立对进程进行优先级排列函数*/ { PCB *first, *second; int insert=0; if((ready==NULL)||((p->ntime)<(ready->ntime))) /*运行时间最短者,插入队首*/ { p->link=ready; ready=p; } else /* 进程比较运行时间优先级,插入适当的位置中*/ { first=ready; second=first->link; while(second!=NULL) { if((p->ntime)<(second->ntime)) /*若插入进程比当前进程所需运行时间短,*/ { /*插入到当前进程前面*/ p->link=second; first->link=p; second=NULL; insert=1; } else /* 插入进程运行时间最长,则插入到队尾*/ { first=first->link; second=second->link; } } if(insert==0) first->link=p; } }

操作系统实验题目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个,请按

操作系统实验报告-实验二

操作系统实验报告——实验二:C编程环境 实验目的 1.熟悉Linux下C程序设计的环境; 2.对系统调用有初步了解。 实验内容 1.Linux下C语言程序的开发过程 a、在用户主目录下用vi编辑C语言源程序(源程序已附后),如:$vi hello.c。 b、用gcc编译C语言源程序:$gcc ./hello.c -o example 这里gcc是Linux下的C语言程序编译器(GNU C Compiler),./hello.c表示待编译的源文件是当前工作目录下的hello.c,-o example表示编译后产生的目标代码文件名为example。 c、若编译不正确,则进入vi修改源程序,否则,运行目标代码:$./example 。注意: 这只是gcc最基本的用法,其他常用选项有:-c , -S , -O , -O2, -g 等。 2.编辑、调试下面c语言程序,说明该程序的功能。 #include #include int main() { int n,a[200],carry,temp,i,j,digit = 1; printf("Please input n:"); scanf("%d",&n); a[0] = 1; for( i = 2; i <= n; ++i) { for( j = 1, carry = 0; j <= digit; ++j) { temp = a[j-1] * i + carry; a[j-1] = temp % 10; carry = temp / 10; } while(carry) { a[++digit-1] = carry % 10; carry /= 10; } } printf("Result is:\n%d ! = ",n); for( i = digit; i >=1; --i) { printf("%d",a[i-1]); }

操作系统第一次与第二次实验报告

实验报告 实验1 Linux基本环境 1、实验目的 (1)熟悉Linux下的基本操作,学会使用各种Shell命令去操作Linux,对Linux 有一个感性认识。 (2)学会使用vi编辑器编简单的C语言程序,并能对其编译和调试。 2、实验内容 (1)以root用户身份登陆,并使用“ls”,“cat”“cd”等命令来实现基本的文件操作并观察Linux文件系统的特点; (2)使用vi编辑器编写一C程序,并用gcc命令进行编译和链接,并用a.out 来进行输出结果。 3、实验结果 (1) a.输入“ls”后,vi编辑器显示主文件夹下的所有文件及目录名。使用dir 查看当前目录内容。 b.输入“cat”后,会显示文件:cat 文件名建立文件:cat >文件名, ctrl+d结束输入。 c.输入“cd”,改变当前目录,cd ..回到上层目录,cd /回到根目录。(2) a.在命令行键入vi filename.c 然后回车。 b.按一下键盘上的I键(insert),进入编辑模式。(a与i是相同的用法) c.当文件编辑完后,按Esc 键;输入:wq) ,保存退出。 d.对刚才编写的程序进行编译。编译的命令是:gcc filenam e.c e.最后运行程序,命令式:./a.out 4、实验总结 通过做本次实验,我熟悉了Linux环境下的基本操作,学会使用各种命令去操作Linux,也学会使用vi编辑器编辑简单的程序,并能对其编译

和调试。了解并掌握了对vi编辑器的一些基本使用方法等。可能由于初次接触Linux环境,所以刚开始编程时出现了许多错误,但我及时找同学或老师来帮忙,解决我的问题,这些错误能够让我更清楚地了解自己对哪些知识掌握的不够透彻,让自己对知识掌握的更牢固。 实验2 进程管理 1、实验目的 (1)加深对进程概念的理解,明确进程和程序的区别。 (2)进一步认识并发执行的实质。 (3)分析进程竞争资源现象,学习解决进程互斥的方法。 (4)了解Linux系统中进程通信的基本原理。 2、实验内容 (1)进程的创建 编写一段源程序,使系统调用fork()创建两个子进程,当此程序运行时,在系统中有一个父进程和两个子进程活动。让每一个进程在屏幕 上显示一个字符:父进程显示字符“a”;子进程分别显示字符“b”和 字符“c”。试观察纪录屏幕上的显示结果,并分析原因。 (2)进程的控制 修改已编写的程序,将每个进程输出一个字符改为每个进程输出一句话,在观察程序执行时屏幕出现的现象,并分析原因。 如果在程序中使用调用lockf()来给每一个子进程加锁,可以实现进程 之间的互斥,观察并分析出现的现象。 (3)①编写一段程序,使其现实进程的软中断通信。 要求:使用系统调用fork()创建两个子进程,再用系统调用signal() 让父进程捕捉键盘上来的中断信号(即按DEL键);当捕捉到中断信号 后,父进程用系统调用Kill()向两个子进程发出信号,子进程捕捉到信 号后分别输出下列信息后终止: Child Processll is Killed by Parent!

操作系统实验08

实验8 缺页统计 实验目的 学习虚拟内存的基本原理和Linux虚拟内存管理技术;深入理解、掌握Linux的按需调页过程。 复习巩固Linux内核模块和虚拟文件系统的知识和运用能力。 实验原理 由于每发生一次缺页都要进入缺页中断服务函数do_page_fault一次,所以可以认为执行该函数的次数就是系统发生缺页的次数。通过定义一个全局变量pfcount作为计数变量,每次执行do_page_fault时,该变量值加1,从而得到一段时间内的缺页次数。 至于经历的时间则可以利用系统原有的变量jiffies。这是一个系统的计时器,在内核加载完以后开始计时,以10ms(缺省)为计时单位。 借助内核模块技术通过/proc虚拟文件系统来读出上述两个变量的值。在/proc文件系统下建立目录pf以及在该目录下的只读文件pfcount和jiffies。 实验内容 完成《边干边学》第7.3.1节的“系统缺页次数”实验。 1.修改现有的内核代码,在系统中添加一个全局变量pfcount。配置、编译、安装新 的内核,并重新启动,使用新的内核。 2.编辑、编译、安装新的内核模块pf,在/proc虚拟文件系统中创建目录pf以及只 读文件pfcount和jiffies。 3.编写用户程序,引发足够的缺页中断;观察一定时间内的缺页状况。 4.选做:学习《边干边学》第7章,阅读相关的内核源代码,分析Linux系统中缺页 的处理过程。 实验步骤 一、修改现有内核代码,添加缺页计数器pfcount 1.以root帐号登录,解包内核源码,并转入内核源码目录 cd /usr/src tar zxvf linux-2.4.18.tar.gz cd linux 2.修改include/linux/mm.h文件 添加变量pfcount的声明 即添加extern unsigned long volatile pfcount;一行

操作系统实验2

武汉工程大学计算机科学与工程学院 《操作系统》实验报告 专业班级13计工01班实验地点计工403机房学生学号1305120610 指导教师张立 学生姓名李敏实验时间2014-10-19 /2014- 10-26 实验项目实验二、创建线程及线程通信 实验类别操作性()验证性()设计性(√)综合性()其它实 验 目的及要求(1)熟悉Windows中的线程及进程的创建 (2)掌握利用Windows中的同步机制实现线程同步及通信。 成绩评定表 类别评分标准分值得分合计 上机表现积极出勤、遵守纪律 主动完成实验设计任务 30分 实验报告及时递交、填写规范 内容完整、体现收获 70分 说明: 评阅教师:张立 日期: 2015 年 11 月 1 日

实验内容 一、实验内容 要求:创建线程,利用互斥实现线程共享变量通信。 示例程序:Thread.exe 简要说明: 1、点“创建线程”按钮,创建两个线程,一个线程不断对一个变量加1, 结果显示在第一个文本框中。另一个线程不断对另一个变量减1,结果显示在第二个文本框中。这两个线程之间没有交互,仅用于演示线程的创建。 2、演示线程互斥,点“线程互斥”按钮,创建两个线程,一个线程不断循 环,每次循环对共享变量x做100次加1操作(这100次加1操作作为一个临界区CSa),另一个线程不断循环,每次循环对共享变量x做100次减1操作(这100次减1操作作为一个临界区CSb),结果显示在第三个文本框中。可以看到结果是从0到100,然后又从100回到0。可见CSa 和CSb两个临界区是互斥的。 3、除了没有互斥,其它同2,结果显示在第四个文本框中。可见CSa和CSb 两个临界区的执行是有交叉的,CSa的执行可能被CSb打断,CSb的执行也可能被CSa打断 二、源代码 UINT ThreadA(LPVOID pParam) { CThreadDlg * pParent=(CThreadDlg *)pParam; pParent->DoThreadA(); return 0; } UINT ThreadB(LPVOID pParam) { CThreadDlg * pParent=(CThreadDlg *)pParam; pParent->DoThreadB(); return 0; } UINT ThreadC(LPVOID pParam) { CThreadDlg * pParent=(CThreadDlg *)pParam; pParent->DoThreadC(); return 0; } UINT ThreadD(LPVOID pParam) { CThreadDlg * pParent=(CThreadDlg *)pParam; pParent->DoThreadD(); return 0;

操作系统lab2实验报告

HUNAN UNIVERSITY 操作系统实验报告

目录 一、内容 (3) 二、目的 (3) 三、实验设计思想和练习题 (3) 练习0:填写已有实验 (3) 练习1:实现 first-fit 连续物理内存分配算法(需要编程) (3) 练习2:实现寻找虚拟地址对应的页表项(需要编程) (8) 练习3:释放某虚地址所在的页并取消对应二级页表项的映射(需要编程) (11) 运行结果 (13) 四、实验体会 (13)

一、内容 本次实验包含三个部分。首先了解如何发现系统中的物理内存;然后了解如何建立对物理内存的初步管理,即了解连续物理内存管理;最后了解页表相关的操作,即如何建立页表来实现虚拟内存到物理内存之间的映射,对段页式内存管理机制有一个比较全面的了解。 二、目的 1.理解基于段页式内存地址的转换机制; 2.理解页表的建立和使用方法; 3.理解物理内存的管理方法。 三、实验设计思想和练习题 练习0:填写已有实验 使用eclipse中的diff/merge工具将实验1的代码填入本实验中代码中有“LAB1”的注释相应部分。 练习1:实现 first-fit 连续物理内存分配算法(需要编程) 在实现first fit 内存分配算法的回收函数时,要考虑地址连续的空闲块之间的合并操作。提示:在建立空闲页块链表时,需要按照空闲页块起始地址来排序,形成一个有序的链表。可能会修改default_pmm.c 中的default_init,default_init_memmap,default_alloc_pages, default_free_pages等相关函数。请仔细查看和理解default_pmm.c中的注释。 请在实验报告中简要说明你的设计实现过程。请回答如下问题: 你的first fit算法是否有进一步的改进空间。 解答: 分析思路: (1)数据结构: A.每个物理页利用一个Page结构体表示,查看kern/mm/memlayout.h包括:

操作系统第二次实验first-fit, next-fit

操作系统第二次实验报告 物联网1301 齐亨13516110 一、实验简介 本实验要求建造一个没有虚拟功能的内存管理系统。任务如下: ? 设计一个内存管理器,支持至少两种分配策略, 如first-fit, next-fit, best-fit, worst-fit 等。 ? 对不同分配策略的性能进行评估。 二、实验过程 1、first fit(首次适应) 首次适应策略的思路是,分配时在空闲块列表中搜索,找到第一个能够满足请求的块即停止搜索,然后把搜索到的块分割,一部分返回给请求者,另一部分仍然作为空闲块留在空闲列表的原来位置。首次适应策略的问题在于,链表头部区域的块倾向于被首先分割,经过一段时间后,空闲链表头部可能堆积大量小的空闲块,这会导致搜索时间的增加,因为当请求一个头部区域的小块无法满足的块时,需要顺次检查这些小块。 代码如下: #include #include #include int array[99]; int *array_request(int n) { int count=0; int *p=&array[0]; int *l=&array[99]; while(count

} if(count

操作系统作业二

1 填空题 1.设单CPU环境下,有三道作业,它们的提交时间及运行时间如下表: 若采用短作业优先调度策略,作业单道串行运行时的调度次序为 J1,J3,J2 ,平均周转时间= 8 。 2.进程间通信的类型有:基于内存通信、基于文件通信、基于网络通信 和基于报文传递通信。 3.在响应比最高者优先的作业调度算法中,当各个作业等待时间相同时,运行时间短作业将得 到优先调度;当各个作业要求运行的时间相同时,等待时间长得到优先调度。 4.有三个同时到达的作业J1,J2和J3,它们的执行时间分别是T1,T2和T3,且T1

C、多个进程竞争,资源出现了循环等待 D、多个进程竞争共享型设备 3.( C )不是分时系统的基本特征: A、同时性 B、独立性 C、实时性 D、交互性 4.进程所请求的一次打印输出结束后,将使进程状态从(B D) A、运行态变为就绪态 B、运行态变为等待态 C、就绪态变为运行态 D、等待态变为就绪态 5.一作业进入内存后,则所属该作业的进程初始时处于( B C)状态。 A、运行 B、等待 C、就绪 D、收容 6.运行时间最短的作业被优先调度,这种企业调度算法是(C ) A.优先级调度 B.响应比高者优先C.短作业优先D.先来先服务 7.产生死锁的主要原因是进程运行推进的顺序不合适(C ) A.系统资源不足和系统中的进程太多B.资源的独占性和系统中的进程太多 C.进程调度不当和资源的独占性D.资源分配不当和系统资源不足 8. B 是指从作业进入系统到作业完成所经过的时间间隔; D 是从作业进入后备队列起,到被调度程序选中时的时间间隔。 A:响应时间;B:周转时间;C:运行时间; D:等待时间;F:触发时间。 9.CPU的调度分为高级、中级和低级三种,其中低级调度是指 C 调度。 A:作业B:交换C:进程 10. 批处理系统的主要缺点是( B )。 的利用率不高 B.失去了交互性 C.不具备并行性 D.以上都不是 11. 引入多道程序的目的在于( B A)。 A.充分利用CPU,减少CPU等待时间 B.提高实时响应速度 C 有利于代码共享,减少主、辅存信息交换量充分利用存储器 12. 在分时系统中,时间片一定,(B ),响应时间越长。 A.内存越多 B.用户数越多 C.后备队列 D.用户数越少 13. 我们如果为每一个作业只建立一个进程,则为了照顾短作业用户,应采用 SJF B ;为照顾紧急作

操作系统实验二

操作系统实验实验二进程管理 学号 1215108019 姓名克帆 学院信息学院 班级 12电子2

实验目的 1、理解进程的概念,明确进程和程序的区别。 2、理解并发执行的实质。 3、掌握进程的创建、睡眠、撤销等进程控制方法。 实验容与要求 基本要求:用C语言编写程序,模拟实现创建新的进程;查看运行进程;换出某个进程;杀死进程等功能。 实验报告容 1、进程、进程控制块等的基本原理。 进程是现代操作系统中的一个最基本也是最重要的概念,掌握这个概念对于理解操作系统实质,分析、设计操作系统都有其非常重要的意义。为了强调进程的并发性和动态性,可以给进程作如下定义:进程是可并发执行的程序在一个数据集合上的运行过程,是系统进行资源分配和调度的一个独立单位。 进程又就绪、执行、阻塞三种基本状态,三者的变迁图如下: 由于多个程序并发执行,各程序需要轮流使用CPU,当某程序不在CPU上运行时,必须保留其被中断的程序的现场,包括:断点地址、程序状态字、通用寄存器的容、堆栈容、程序当前状态、程序的大小、运行时间等信息,以便程序再次获得CPU时,能够正确执行。为了保存这些容,需要建立—个专用数据结构,我们称这个数据结构为进程控制块PCB (Process Control Block)。 进程控制块是进程存在的惟一标志,它跟踪程序执行的情况,表明了进程在当前时刻的状态以及与其它进程和资源的关系。当创建一个进程时,实际上就是为其建立一个进程控制块。 在通常的操作系统中,PCB应包含如下一些信息: ①进程标识信息。为了标识系统中的各个进程,每个进程必须有惟一的标识名或标 识数。 ②位置信息。指出进程的程序和数据部分在存或外存中的物理位置。 ③状态信息。指出进程当前所处的状态,作为进程调度、分配CPU的依据。 ④进程的优先级。一般根据进程的轻重缓急其它信息。 这里给出的只是一般操作系统中PCB所应具有的容,不同操作系统的PCB结构是不同的,我们将在2.8节介绍Linux系统的PCB结构。

上海大学操作系统(二)实验报告(全)

评分: SHANGHAI UNIVERSITY 操作系统实验报告 学院计算机工程与科学 专业计算机科学与技术 学号 学生姓名

《计算机操作系统》实验一报告 实验一题目:操作系统的进程调度 姓名:张佳慧学号 :12122544 实验日期: 2015.1 实验环境: Microsoft Visual Studio 实验目的: 进程是操作系统最重要的概念之一,进程调度又是操作系统核心的主要内容。本实习要求学生独立地用高级语言编写和调试一个简单的进程调度程序。调度算法可任意选择或自行设计。例如,简单轮转法和优先数法等。本实习可加深对于进程调度和各种调度算法的理解。实验内容: 1、设计一个有n个进程工行的进程调度程序。每个进程由一个进程控制块(PCB)表示。进程控制块通常应包含下述信息:进程名、进程优先数、进程需要运行的时间、占用CPU的时间以及进程的状态等,且可按调度算法的不同而增删。 2、调度程序应包含2~3种不同的调度算法,运行时可任意选一种,以利于各种算法的分析比较。 3、系统应能显示或打印各进程状态和参数的变化情况,便于观察诸进程的调度过程。 操作过程: 1、本程序可选用优先数法或简单轮转法对五个进程进行调度。每个进程处于运行R(run)、就绪W(wait)和完成F(finish)三种状态之一,并假设起始状态都是就绪状态W。为了便于处理,程序进程的运行时间以时间片为单位计算。进程控制块结构如下: 进程控制块结构如下: PCB 进程标识数 链指针 优先数/轮转时间片数 占用 CPU 时间片数 进程所需时间片数 进程状态 进程控制块链结构如下:

其中:RUN—当前运行进程指针; HEAD—进程就绪链链首指针; TAID—进程就绪链链尾指针。2、算法与框图 (1) 优先数法。进程就绪链按优先数大小从高到低排列,链首进程首先投入运行。每过一个时间片,运行进程所需运行的时间片数减 1,说明它已运行了一个时间片,优先数也减 3,理由是该进程如果在一个时间片中完成不了,优先级应该降低一级。接着比较现行进程和就绪链链首进程的优先数,如果仍是现行进程高或者相同,就让现行进程继续进行,否则,调度就绪链链首进程投入运行。原运行进程再按其优先数大小插入就绪链,且改变它们对应的进程状态,直至所有进程都运行完各自的时间片数。 (2) 简单轮转法。进程就绪链按各进程进入的先后次序排列,进程每次占用处理机的轮转时间按其重要程度登入进程控制块中的轮转时间片数记录项(相当于优先数法的优先数记录项位置)。每过一个时间片,运行进程占用处理机的时间片数加 1,然后比较占用处理机的时间片数是否与该进程的轮转时间片数相等,若相等说明已到达轮转时间,应将现运行进程排到就绪链末尾,调度链首进程占用处理机,且改变它们的进程状态,直至所有进程完成各自的时间片。 (3) 程序框图

操作系统实验3报告

实验三、进程通讯 ——管道及共享内存姓名:徐洪班级:10电信实验班学号:Q10600109 实验用学号:e06620111 一、实验目的 (1)加深对管道概念的理解。 (2)掌握利用管道进行进程通信的程序设计。 (3)Linux系统的共享内存机制允许在任意进程间大批量地交换数据。本实验的目的是了解和熟悉Linux支持的共享存储区机制。 二、实验预备内容 认真阅读实验材料中管道通信及共享内存部分,加深对管道通信及共享内存机制的理解。 三、实验内容 任务一、 (1)阅读以上父子进程利用管道进行通信的例子(例1),写出程序的运行结果并分析。 (2)编写程序:父进程利用管道将一字符串交给子进程处理。子进程读字符串,将里面的字符反向后再交给父进程,父进程最后读取并打印反向的字符串。 任务二、 (1)阅读例2的程序,运行一次该程序,然后用ipcs命令查看系统中共享存储区的情况,再次执行该程序,再用ipcs命令查看系统中共享内存的情况,对两次的结果进行比较,并分析原因。最后用ipcrm命令删除自己建立的共享存储区。(有关ipcs和ipcrm介绍见后面一页)(2)每个同学登陆两个窗口,先在一个窗口中运行例3程序1(或者只登陆一个窗口,先在该窗口中以后台方式运行程序1),然后在另一个窗口中运行例3程序2,观察程序的运行结果并分析。运行结束后可以用ctrl+c结束程序1的运行。 四、实验结果 运行例1 反向输出

main() { int x,fd[2],n,i,fs[2]; char buf[30],s[30],m[30],b[30]; pipe(fd); pipe(fs); while ((x=fork())==-1); if (x==0) { close(fd[0]); close(fs[1]); printf("Parent Process!\n"); strcpy(buf,"This is an example\n"); write(fd[1],buf,30); read(fs[0],m,30); printf("Parent Process1!\n"); printf("%s\n",m); } else{ close(fd[1]); close(fs[0]); printf("Child Process!\n"); read(fd[0],s,30); n=strlen(s)-1; for( i=0;i

操作系统实验报告

操作系统教程 实 验 指 导 书 姓名: 学号: 班级:软124班 指导老师:郭玉华 2014年12月10日

实验一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 运行结果 (如果运行不成功,则可能的原因是什么?) : 有可能是因为DOS下路径的问题 (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:运行结果 (如果运行不成功,则可能的原因是什么?) : 因为程序是个死循环程序 步骤5:分别屏蔽While循环中的两个for循环,或调整两个for循环的次数,写出运行结果。 屏蔽i循环: 屏蔽j循环: _______________________________________________________________________________调整循环变量i的循环次数:

东北大学操作系统第二次实验报告

实验4:进程的管道通信 一、题目:进程的管道通信 二、目的: ●加深对进程概念的理解,明确进程和程序的区别; ●学习进程创建的过程,进一步认识并发执行的实质; ●分析进程争用资源的现象,学习解决进程互斥的方法; ●学习解决进程同步的方法; ●掌握Linux系统进程间通过管道通信的具体实现方法。 三、实验内容 ?使用系统调用pipe()建立一条管道线,两个子进程分别向管道写一句话(写 的内容自己定,但要有该进程的一些信息); ?父进程从管道中读出来自两个子进程的消息,显示在屏幕上; ?要求:父进程首先接收子进程p1发来的消息,然后再接收子进程p2发来的 消息。 四、实验要求 1、这是一个设计型实验,要求自行、独立编制程序; 2、两个子进程要并发执行; 3、实现管道的互斥使用。当一个子进程正在对管道进行写操作时,另一个欲写入管道的子进程必须等待。使用系统调用lockf(fd[1],1,0)实现对管道的加锁操作,用lockf(fd[1],0,0)解除对管道的锁定; 4、实现父子进程的同步,当父进程试图从一空管道中读取数据时,便进入等待状态,直到子进程将数据写入管道返回后,才将其唤醒。 五、程序流程图

图5.1 父进程流程图

图5.2子进程P1流程图图5.3子进程P2流程图 六、源程序 #include #include #include #include #include #include #include #include

操作系统(2)实验六

SHANGHAI UNIVERSITY <操作系统>实验报告 学院计算机工程与科学学院学号10122050 姓名王杰 指导老师张建 日期2014.03.07

实验六FAT文件系统实验 一、实验目的: 1、从系统分析的角度出发,了解FAT文件系统的组织结构和文件的存储方式。 2、进一步理解操作系统文件管理的基本思想。 二、实验内容: 1..进入DEBUG环境,装入FAT文件系统结构。 执行命令:L 0 0 0 21 2.观察1.44M软盘中FAT12文件系统结构。 执行命令:D 0000 软盘有两面,每面80个磁道,每个磁道18个扇区,每个扇区512个字节,所以软盘的容量是2*80*18*512 = 1474560, 1474560/1024/1024大约为1.44M。 3.分析文件分配表结构,了解用簇链映射的文件的链式存储结构。 执行命令:D 200

◆思考:上面屏幕显示首簇号为003的文件共包括几个扇区?它分布在哪几个物理扇区上? 答:首簇号为003的文件共包括2个扇区,它分布在0道0面2、3扇。 4.观察1.44M软盘中文件目录表FDT以及文件目录结构 执行命令:L 0 0 0 21 说明:将逻辑扇区0H开始的共21H个物理扇区装入DS:0000H起始的内存。 执行命令:D 2600 说明:显示从2600H地址开始的FDT文件表。 思考:①计算1.44M的软盘根目录最多可以容纳多少文件? 答:1.44MB软盘的文件目录表FDT共14个扇区,每个文件的目录登记项占用32个字

节,用作目录的一个扇区(512字节)最多只能装入512/32=16个文件。因此,1.44MB软盘的根目录下最多可建文件或子目录224个。 ②上图屏幕显示的文件BAK.txt的目录项中标示该文件的首簇号在何处?该文件是什么属性? 答:首簇号在第2行的1A~1B字节处,首簇号为002,该文件属于归档文件。 书上显示的文件office.txt首簇号在第6行的1A~1B字节处,首簇号为091,属归档文件。 ③书上面的屏幕显示第1~2行目录项表示的是什么项目? 答:第1~2目录项表示卷标。 5.观察1.44M软盘中文件目录表的长文件名目录结构 思考:①书上面屏幕显示的2~3行是什么目录项? 答:长名的第一项,也是最后一项。 ②若有一个文件名共长34个字符,要占多少目录项? 答:四个目录项,三个长目录项和一个短目录项。 6.自己动手做: ①观察测试软盘的FDT区,找到名为BAK的文件目录。该文件是什么类型的文件?文件放在磁盘的哪个位置?占用几个存储单位?调出其内容看看。 该文件为BAK.txt,属于归档文件。察看其首簇号为002,对应了数据区21H逻辑扇区。执行:L 0 0 0 21 D 2600 察看内容执行:L 8000 0 21 8

计算机操作系统 实验报告

操作系统实验报告 学院:计算机与通信工程学院 专业:计算机科学与技术 班级: 学号: 姓名: 指导教师: 成绩: 2014年 1 月 1 日

实验一线程的状态和转换(5分) 1 实验目的和要求 目的:熟悉线程的状态及其转换,理解线程状态转换与线程调度的关系。 要求: (1)跟踪调试EOS线程在各种状态间的转换过程,分析EOS中线程状态及其转换的相关源代码; (2)修改EOS的源代码,为线程增加挂起状态。 2 完成的实验内容 2.1 EOS线程状态转换过程的跟踪与源代码分析 (分析EOS中线程状态及其转换的核心源代码,说明EOS定义的线程状态以及状态转换的实现方法;给出在本部分实验过程中完成的主要工作,包括调试、跟踪与思考等) 1.EOS 准备了一个控制台命令“loop ”,这个命令的命令函数是 ke/sysproc.c 文件中的ConsoleCmdLoop 函数(第797行,在此函数中使用 LoopThreadFunction 函数(第755 行)创建了一个优先级为 8 的线程(后面简称为“loop 线程”),该线程会在控制台中不停的(死循环)输出该线程的ID和执行计数,执行计数会不停的增长以表示该线程在不停的运行。loop命令执行的效果可以参见下图: 2. 线程由阻塞状态进入就绪状态 (1)在虚拟机窗口中按下一次空格键。 (2)此时EOS会在PspUnwaitThread函数中的断点处中断。在“调试”菜单中选择“快速监视”,在快速监视对话框的表达式编辑框中输入表达式“*Thread”,然后点击“重新计算”按钮,即可查看线程控制块(TCB)中的信息。其中State域的值为3(Waiting),双向链表项StateListEntry的Next和Prev指针的值都不为0,说明这个线程还处于阻塞状态,并在某个同步对象的等待队列中;StartAddr域的值为IopConsoleDispatchThread,说明这个线程就是控制台派遣线程。 (3)关闭快速监视对话框,激活“调用堆栈”窗口。根据当前的调用堆栈,可以看到是由键盘中断服务程序(KdbIsr)进入的。当按下空格键后,就会发生键盘中断,从而触发键盘中断服务程序。在该服务程序的最后中会唤醒控制台派遣线程,将键盘事件派遣到活动的控制台。 (4)在“调用堆栈”窗口中双击PspWakeThread函数对应的堆栈项。可以看到在此函数中连续调用了PspUnwaitThread函数和PspReadyThread函数,从而使处于阻塞状态的控制台派遣线程进入就绪状态。 (5)在“调用堆栈”窗口中双击PspUnwaitThread函数对应的堆栈项,先来看看此函数是如何改变线程状态的。按F10单步调试直到此函数的最后,然后再从快速监视对

操作系统实验报告.实验一_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:运行结果 (如果运行不成功,则可能的原因是什么?) 因为此程序是个死循环,所以运行时间为无穷大。_______________________________________________________________________________ _______________________________________________________________________________ _______________________________________________________________________________ _______________________________________________________________________________ __________________________________________________________________________

相关文档