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

下载本文档

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

文档简介

本文格式为Word版,下载可任意编辑——brcAAA操作系统实验报告学生实验报告

姓名:黄维津年级专业班级计科141班学号202215210137劳绩

课程名称

操作系统

测验名称

测验1操作系统界面

1.熟谙Linux字符操作界面;

2.熟谙常用的Shell命令;

3.熟谙Linux文本编辑方法;

4.掌管利用GCC编译器在Linux环境下编译C程序的才能

1.Linux字符操作界面;

2.Shell操作命令;

3.VIM编辑器的使用方法;

4.Linux下的C程序开发。

(含主要设计设备、器材、软件等)

计算机C语言编程软件redhat操作系统VM虚拟机

(含原理图、流程图、关键代码,或测验过程中的记录、数据等)

同时按住“Ctrl+Alt+Shift+F2”键进入字符操作界面;

熟谙常用的Shell操作命令

(1)查看系统分区处境:fdisk-l

(2)查看当前运行级别:runlevel

可知,当前运行级别为:5

(3)将当前运行级别变更为3:init3

运行后的结果如下图:

输入命令runlevel查看当前运行级别可知为3

(4)新建文件:touch文件名

这里创造了一个文件名为test.txt的文件

(5)删除文件:rm要删除的文件名

这里我删除了刚新建的test.txt文件,输入ls命令已查看不到test.txt文件了,证明已删除告成。

(6)查看文件权限:ls-l

可知hello.c文件的权限是644

(7)更改文件权限:chmod文件权限文件名

这里将hello.c文件的权限更改为755,即rwxr-xr-x

VIM编辑器的使用方法

(1)一般模式:以vi开启一个文件就直接进入一般模式了(这是默认的模式)。

(2)编辑模式:在一般模式中可以举行删除、复制、粘贴等的操作,但是却无法编辑文件的内容,只有当到你按下等任何一个字母之后才会进入编辑模式。按下即可退出编辑模式

(3)命令行模式:输入三个中的任何一个,就可以将光标移动到最底下那一行。

在命令行模式下,可选用以下指令离开vi:

:q!退出,不保存;

:wq保存退出;

Linux下的C程序开发

(1)使用touch命令创造c文件hello.c;

(2)使用vihello.c命令编辑c文件:

#includestdio.h

intmain(){

printf(“hello,word”);

return0;

}

(3)按esc键[进入命令模式]

(4)输入:“:wq!”保存退出;

(5)编译程序:gcc-ohellohello.c

(6)运行程序:./hello

(7)运行结果:输出hello,word

2022年11月20日

(对测验结果举行相应分析,或总坚固验的心得体会,并提出测验的提升观法)

在测验的过程中,我用的是VM虚拟机和redhat操作系统(linux系统中的一种),学会了如何在虚拟机上安装并运行linux操作系统,也熟谙了Linux字符操作界面和常用的shell命令。虽然我一开头从图形操作界面转到命令行操作界面多少有些不适应,但随着对命令行的熟谙应用,察觉也没那么难,只是命令行太多了会记不住。与此同时,第一次在linux系统下编写c程序,感觉用vi对比麻烦,由于有错了不能调试,只是提示错误。不过此次测验要求掌管编写并运行一个简朴的c程序,我就直接输出一句话就好了,所以不需要怎么调试了,直接用gcc编译并运行。在这测验的过程中,加深了对一些术语的理解,也让我学到了新的学识。

要说到测验的提升观法,我想最大要提升的地方就是要提高虚拟机运行的流畅度,不能在使用虚拟机中的操作系统时展现运行卡顿等的处境,以保住测验的流畅举行。

指导教师签名:

20年月日

学生实验报告

姓名:黄维津年级专业班级计科141学号202215210137劳绩

课程名称

操作系统

测验名称

测验2进程管理

1.熟谙进程与程序的识别,加深对进程概念的理解;

2.了解并发进程的执行过程;

3.掌管解决进程互斥使用资源的方法。

1.编写一段程序,实现进程的管理;

2.编写一段程序实现进程的通信。

(含主要设计设备、器材、软件等)

信息楼505机房

Linux环境

(含原理图、流程图、关键代码,或测验过程中的记录、数据等)

编写一个程序,创造两个子进程,然后分别在父、子进程中显示它们的进程号,以及对于的父进程号

(1)思路:使用系统调用fork()创造两个子进程。当此程序运行时,在系统中有一个父进程和两个子进程活动。让每一个进程在屏幕上显示一个字符:父进程显示字符“A”,子进程分别显示字符“b”和“c”。

(2)程序关键代码

#includestdio.h

main(){

intp1,p2;

if(p1=fork())/*子进程创造告成,假设失败fork函数会返回一个负值*/

putchar(b);

else{

if(p2=fork())/*子进程创造告成,假设失败fork函数会返回一个负值*/

putchar(c);

elseputchar(A);/*父进程执行*/

}

}

(3)运行结果:Abc任意的排序

(4)结果分析:

从进程执行并发来看,输出Abc的排列都是有可能的。fork()函数创造进程所需的时间虽然可能多于输出一个字符的时间,但各个进程的时间片的获得却不确定是依次的,所以输出Abc的排列都是有可能的。

写一个程序,实现父子进程之间的通信

用管道实现:

pipe_named_write.c

//向管道文件写信息

#includestdio.h

#includeunistd.h

#includesys/types.h

intmain(){

FILE*out_file;

intcount=1;

charbuf[80];

out_file=fopen(“mypipe”,”w”);

if(out_file==NULL){

printf(“Erroropeningpipe”);

exit(1);

}

sprintf(buf,”thisisthetestdataforthenamedpipeexample\n”);

fwrite(buf,1,88,out_file);

fclose(out_file);

}

pipe_named_read.c

//从管道文件读信息

intmain(){

FILE*in_file;

intcount=1;

charbuf[80];

in_file=fopen(“mypipe”,“r”);

if(in_file==NULL){

printf(“Errorinfopen.\n”);

exit(1);

}

while((count=fread(buf,1,80,in_file))0)

printf(“receivedfrompipe:%s\n”,buf);

fclose()in_file;

}

使用FIFO实现进程间的通信。用mkfifo函数创造管道文件my_fifo,然后从Data.txt文件中读取数据,并写入管道文件my_fifo中;在从管道文件my_fifo中读取数据,写入DataFromFIFO.txt文件中。整个过程用两个C程序来实现:fifowrite.c文件实现管道文件的创造,以及将Data.txt文件中的数据读入管道文件中;fiforead.c文件实现从管道文件中读取数据,并写入DataFromFIFO.txt文件中。

fifowrite.c的源代码如下:

#includeunistd.h

#includestdlib.h

#includefcntl.h

#includelimits.h

#includesys/types.h

#includesys/stat.h

#includestdio.h

#includestring.h

intmain()

{

constchar*fifo_name=/home/c/my_fifo;

intpipe_fd=-1;

intdata_fd=-1;

intres=0;

constintopen_mode=O_WRONLY;

intbytes_sent=0;

charbuffer[PIPE_BUF+1];

if(access(fifo_name,F_OK)==-1)

{

//管道文件不存在

//创造命名管道

res=mkfifo(fifo_name,0777);

if(res!=0)

{

fprintf(stderr,Couldnotcreatefifo%s\n,fifo_name);

exit(EXIT_FAILURE);

}

}

printf(Process%dopeningFIFOO_WRONLY\n,getpid());

//以只写阻塞方式开启FIFO文件,以只读方式开启数据文件

pipe_fd=open(fifo_name,open_mode);

data_fd=open(Data.txt,O_RDONLY);

printf(Process%dresult%d\n,getpid(),pipe_fd);

if(pipe_fd!=-1)

{

intbytes_read=0;

//向数据文件读取数据

bytes_read=read(data_fd,buffer,PIPE_BUF);

buffer[bytes_read]=\0;

while(bytes_read0)

{

//向FIFO文件写数据

res=write(pipe_fd,buffer,bytes_read);

if(res==-1)

{

fprintf(stderr,Writeerroronpipe\n);

exit(EXIT_FAILURE);

}

//累加写的字节数,并持续读取数据

bytes_sent+=res;

bytes_read=read(data_fd,buffer,PIPE_BUF);

buffer[bytes_read]=\0;

}

close(pipe_fd);

close(data_fd);

}

else

exit(EXIT_FAILURE);

printf(Process%dfinished\n,getpid());

exit(EXIT_SUCCESS);

}

源文件fiforead.c的代码如下:

#includeunistd.h

#includestdlib.h

#includestdio.h

#includefcntl.h

#includesys/types.h

#includesys/stat.h

#includelimits.h

#includestring.h

intmain()

{

constchar*fifo_name=/home/c/my_fifo;

intpipe_fd=-1;

intdata_fd=-1;

intres=0;

intopen_mode=O_RDONLY;

charbuffer[PIPE_BUF+1];

intbytes_read=0;

intbytes_write=0;

//清空缓冲数组

memset(buffer,\0,sizeof(buffer));

printf(Process%dopeningFIFOO_RDONLY\n,getpid());

//以只读阻塞方式开启管道文件,留神与fifowrite.c文件中的FIFO同名

pipe_fd=open(fifo_name,open_mode);

//以只写方式创造保存数据的文件

data_fd=open(DataFormFIFO.txt,O_WRONLY|O_CREAT,0644);

printf(Process%dresult%d\n,getpid(),pipe_fd);

if(pipe_fd!=-1)

{

do

{

//读取FIFO中的数据,并把它保存在文件DataFormFIFO.txt文件中

res=read(pipe_fd,buffer,PIPE_BUF);

bytes_write=write(data_fd,buffer,res);

bytes_read+=res;

}while(res0);

close(pipe_fd);

close(data_fd);

}

else

exit(EXIT_FAILURE);

printf(Process%dfinished,%dbytesread\n,getpid(),bytes_read);

exit(EXIT_SUCCESS);

}

运行结果如下:

2022年11月26日

(对测验结果举行相应分析,或总坚固验的心得体会,并提出测验的提升观法)

在查询了资料后逐步懂得怎么下手完成这个测验,在测验过程中逐步理解了进程的概念,并进一步了解了进程的管理机制,同时也明白了什么是管道通信,怎样加锁和解锁,对课本上的学识理解得更加深入了。同时也让我熟悉到自己的缺乏,操作系统的有些学识,我知道的还不多,没有掌管好,还需要多多学学,不断提升自己的才能。

指导教师签名:

年月日

学生实验报告

姓名:黄维津年级专业班级计科141学号202215210137劳绩

课程名称

操作系统

测验名称

测验3存储管理

1.了解虚拟存储管理技术的原理与特点;

2.掌管苦求页式存储管理的页面设置算法。

1.编写一个程序模拟存储管理过程。

(含主要设计设备、器材、软件等)

计算机C语言编程软件

(含原理图、流程图、关键代码,或测验过程中的记录、数据等)

页式虚拟存储管理程序模拟

(1)设计思路

根据模拟的页式管理设计,在页式存储管理中有三种最根本的页面调度算法:最正确置换算法(OPT)、先进先出置换算法(FIFO)、最近最久未使用置换算法(LRU),但在三种算法中均要求在调度程序中产生的页面序列是随机产生的,而不是人为的输入,在执行时只需变更页面的大小及内存容量就可以得到不同的页面序列,另外还需要说明随机的性能和其性能可能对算法的影响,并对随机性要有确定的参数操纵才能。此次测验将使用两种方法实现,分别是先进先出(FIFO)页面置换和最近最久未使用(LRU)置换。

程序流程图

输入内存调配页数

输入内存调配页数

开头

初始化第一列值

是否有苦求访问页

复制前一页内容

内存是否已存在

内存是否有空页

直接插入

替换内存中将来不展现或离当前最远的页

输出全部页面变化处境

终止

Y

Y

N

N

Y

N

(3)关键代码

FIFO算法关键代码

functionFIFO(){

PageList=[6210342045931205318];//初始化:

NumofPage=length(PageList);

NumofPosition=M;

SMatrix[NumofPosition][2]={-1};//将其初始化为-1

for(i=0;iNumofPage;i++){

pos=findPositionFIFO(SMatrix,PageList[i]);

if(pos==-1)continue;//在SMatrix中找到页面已经存在

for(j=0;jM;j++){

if(SMatrix[i][2]0)SMatrix[i][2]=SMatrix[i][2]+1;

}

SMatrix[pos][1]=PageList[i];

if(SMatrix[pos][2]==-1){SMatrix[pos][2]=1}

}

}

functionpos=findPositionFIFO(SMatrix,Pageid){

NumofPosition=length(SMatrix);

lastPeriod=SMatrix[0][2];

value=SMatrix[0][1];

for(i=0;iNumofPosition;i++){

if(SMatrix[i][1]==-1){

pos=i;

return;

}

elseif(SMatrix[i][1]==Pageid){

pos=-1;

return;

}

elseif(SMatrix[i][2]lastPeriod){

pos=i;

lastPeriod=SMatrix[i][2];

}

}

}

LRU算法关键代码

functionLRU(){

PageList=[6210342045931205318];//初始化:

NumofPage=length(PageList);

NumofPosition=M;

SMatrix=array[NumofPosition][2];//将其初始化为-1

for(i=0;iNumofPage;i++){

[posisIn]=findPositionLRU(SMatrix,PageList[i]);

if(pos==-1){//在SMatrix中找到页面已经存在

SMatrix[i][2]=1;

continue;

}

for(j=0;jM;j++){

if(SMatrix[i][2]0)SMatrix[i][2]=SMatrix[i][2]+1;

}

SMatrix[pos][1]=PageList[i];

if(SMatrix[pos][2]==-1){SMatrix[pos][2]=1}

}

}

function[posisIn]=findPositionLRU(SMatrix,Pageid){

NumofPosition=length(SMatrix);

lastPeriod=SMatrix[0][2];

value=SMatrix[0][1];

isIn=0;

for(i=0;iNumofPosition;i++){

if(SMatrix[i][1]==-1){

pos=i;

return;

}

elseif(SMatrix[i][1]==Pageid){

pos=-1;

isIn=1;

return;

}

elseif(SMatrix[i][2]lastPeriod){

pos=i;

lastPeriod=SMatrix[i][2];

}

}

}

2022年11月26日

(对测验结果举行相应分析,或总坚固验的心得体会,并提出测验的提升观法)

由于学识有限,只能约莫地完成这次测验。通过完成这个测验,让我反复地琢磨着课本上的学识点,努力将其弄懂,这样才有思路来完成测验。从理论到实践可以学到好多的东西,同时也可以稳定老师在课堂上讲过的学识,也学到了好多在书本上学不到的学识。通过这次测验使我懂得了理论与实际相结合是很重要的,只有理论学识是远远不够的。

指导教师签名:

20年月日

学生实验报告

姓名:黄维津年级专业班级计科141学号202215210137劳绩

课程名称

操作系统

测验名称

测验4文件管理

1.了解文件系统的功能和内部实现;

2.熟谙文件系统的系统调用;

使用有关文件系统的系统调用create()、open()、close()、read()和write()将file1.c和file2.c合并为file3.c;

(含主要设计设备、器材、软件等)

计算机C语言编程软件

(含原理图、流程图、关键代码,或测验过程中的记录、数据等)

(1)了解函数

create()函数:

功能描述:创造一个文件并以只写的方式开启

函数原型:intcreat(constchar*pathname,mode_tmode)

参数说明:pathname:指向欲建立的文件路径字符串

mode_tmode:表示新建文件的权限

返回值:告成:返回文件描述符

失败:返回-1

open()函数:

功能描述:用于开启或创造文件,在开启或创造文件时可以指定文件的属性及用户的权限等各种参数。

函数原型:intopen(constchar*pathname,intflags,intperms)

参数说明:pathname:被开启的文件名(可包括路径名如dev/ttyS0)

flags:文件开启方式

perms:被开启文件的存取权限

返回值:告成:返回文件描述符

失败:返回-1

close()函数:

功能描述:用于关闭一个被开启的的文件

函数原型:intclose(intfd)

参数说明:fd文件描述符

函数返回值:0告成,-1出错

read()函数

功能描述:从文件读取数据

函数原型:ssize_tread(intfd,void*buf,size_tcount)

参数说明:fd:将要读取数据的文件描述词

buf:指缓冲区,即读取的数据会被放到这个缓冲区中去

count:表示调用一次read操作,理应读多少数量的字符

返回值:返回所读取的字节数;0(读到EOF);-1(出错)

write()函数

功能描述:向文件写入数据

函数原型:ssize_twrite(intfd,void*buf,size_tcount)

返回值:写入文件的字节数(告成);-1(出错)

(2)关键代码

#includestdio.h

#includestdlib.h

#includestring.h

voidmain()

{

chars1filename[20],s2filename[20],dfilename[20];

FILE*s1fp,*s2fp,*dfp;

intnum=0;

/*得到第一个文件的文件名*/

printf(Pleaseinputsource1filename:\n);

gets(s1filename);

/*得到另一个文件的文件名*/

printf(Pleaseinputsource2filename:\n);

gets(s2filename);

/*得到要目标文件的文件名*/

printf(Pleaseinputdestinationfilename:\n);

gets(dfilename);

/*输出信息合并前的文件的内容*/

if((s1fp=fopen(s1filename,r))==0)

{

printf(Cantopenthefile:%s\n,s1filename);

exit(0);

}

if((s2fp=fopen(s2filename,r))==0)

{

printf(Cantopenthefile:%s\n,s2filename);

exit(0);

}

if((dfp=fopen(dfilename,w+))==0)

{

printf(Cantopenorcreatethefile:%s\n,dfilename);

exit(0);

}

/*输出信息合并前文件的内容*/

printf(\nThetextofthefile%sbeforemerging:\n,s1filename);

OutputFile(s1fp);

printf(\nThetextofthefile%sbeforemerging:\n,s2filename);

OutputFile(s2fp);

fseek(s2fp,0L,SEEK_SET);

fseek(s1fp,0L,SEEK_SET);

/*信息合并*/

MergeFile(s1fp,s2fp,dfp,num);

/*输出信息合并后文件的内容*/

printf(\nThetextofthefile%saftermerging:\n,dfil

温馨提示

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

评论

0/150

提交评论