操作系统原理实验四

合集下载

操作系统原理 实验报告

操作系统原理 实验报告

操作系统原理实验报告操作系统原理实验报告一、引言操作系统是计算机系统中的核心软件,它负责管理和协调计算机硬件资源,提供用户与计算机硬件之间的接口,使得用户可以方便地使用计算机。

在本次实验中,我们通过实际操作和观察,深入理解了操作系统的原理和工作机制。

二、实验目的本次实验的主要目的是通过模拟操作系统的运行过程,加深对操作系统原理的理解。

具体目标包括:1. 掌握操作系统的启动过程和内存管理机制;2. 理解进程调度算法的原理和实现;3. 学习文件系统的组织和管理方式;4. 了解操作系统与硬件之间的交互方式。

三、实验过程1. 启动过程在计算机启动时,操作系统首先加载到内存中,并开始执行。

我们通过模拟实验,深入了解了操作系统的启动过程。

我们观察到操作系统通过读取硬盘中的引导扇区来进行启动,并且在启动过程中会进行一系列的初始化操作,如初始化内存管理、进程管理和设备驱动等。

2. 内存管理内存管理是操作系统中的重要组成部分,它负责分配和回收内存资源,以及管理进程的内存空间。

在实验中,我们学习了内存分页和内存分段两种常见的内存管理方式,并通过实际操作和观察,对其原理和实现有了更深入的了解。

3. 进程调度进程调度是操作系统中的核心功能之一,它决定了哪些进程能够获得CPU的使用权。

在实验中,我们学习了常见的进程调度算法,如先来先服务、短作业优先和时间片轮转等。

通过模拟实验,我们观察到不同的调度算法对进程执行的影响,加深了对进程调度原理的理解。

4. 文件系统文件系统是操作系统中负责管理和组织文件的机制。

在实验中,我们学习了文件系统的组织方式,如目录结构和文件存储方式等。

通过实际操作和观察,我们了解了文件系统的工作原理和实现机制。

5. 硬件交互操作系统与硬件之间的交互是实现计算机功能的关键。

在实验中,我们学习了操作系统与硬件之间的通信方式,如中断和设备驱动等。

通过模拟实验,我们观察到操作系统是如何与硬件进行交互,并掌握了操作系统与硬件之间的配合工作。

操作系统原理实验指导

操作系统原理实验指导
(3)计算页面命中率程序流程图
3、实验题
(1)设计一个内存分配模拟程序。假定在计算机系统作业后备队列中有六个等待调度运行的作业,参与分配的内存大小为32KB,采用简单页式管理,每个页帧的大小为1KB。根据要求进行内存的分配和回收。要求打印内存分配表。有关作业的组织和作业有关参数的设置请自行设计,要大致符合实际情况。
main()
{
int i;
if (fork())
{
i=wait();
printf(“It is parent process.\n”);
printf(“The child process, ID number %d, is finished.\n”,i);
}
else{
print(“It is child process.\n”);
(2)自选设计一个进程调度算法,并加以实现。
实验三存储器管理
1、目的与要求
目的:存储器管理是操作系统重要的组成部分,提高存储器的效率始终是操作系统研究的重要课题之一。虚拟存储技术是用来扩大存储容量的一种重要方法。学生应独立地使用一种开发工具或高级语言编写几个常用的存储分配算法,并能设计一个存储管理的模拟程序,对各种算法进行分析比较,评测其性能优劣,从而加深对这些算法的理解,巩固所学的知识。
操作系统实验指导
操作系统是计算机的最重要的系统软件,它在计算机中具有核心地位,其作用是对计算机系统资源进行统一的调度和管理,提供各种强有力的系统服务,为用户创造灵活而又方便的使用环境。一个精心设计的操作系统能极大地扩充计算机系统的功能,充分地发挥系统中各种资源的使用效率,提高系统工作的可靠性。
操作系统原理是计算机科学与技术专业的一门主要专业课程,它涉及计算机系统中各种软、硬资源管理的实现原理与方法,内容非常丰富,综合性非常强,并且还具有很强的实践性。只有把理论与实践紧密地结合起来,才能取得较好地学习效果。

操作系统原理实验四

操作系统原理实验四

实验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);﹜在“命令提示符”窗口运行CL命令产生可执行程序4-1.exe:C:\ >CL 4-1.cpp实验任务:写出程序的运行结果。

操作系统原理实验报告

操作系统原理实验报告

操作系统原理实验报告操作系统原理实验报告一、课程设计的题目:根据“操作系统原理”课程的课堂教学内容,结合自己的知识积累情况,题目可从下述拟题中选择,亦可自定。

二、实验设计的内容:在Linux或Windows操作系统下,用C语言进行操作系统相关的设计开发,内容可关于“并发程序设计”、“处理机管理”、“用户接口”、“存储管理”、“文件系统管理”、“设备管理”等等。

三、参考资料:1、清华大学出版,张尧学《计算机操作系统教程》配套的《习题解答与实验指导书》中范例;2、清华大学出版,任爱华《操作系统实用教程》中的实例设计;3、《Linux下C语言编程入门教程》、《Linux软件工程师(C 语言)实用教程》等;4、网上与操作系统设计与开发相关的文献资料。

四、重要操作环节1、步骤:选题(2~3人一小组)--→提交小组名单--→分析、编写程序--→上机调试--→分析结果--→评价结果--→写出设计报告2、设计报告的主要内容:①、设计说明:设计主要完成的任务、解决的主要问题;②、工作原理:找出教材中的相关工作原理并简要说明;③、详细设计:包括调用的主要系统函数说明、程序流程图、程序代码、关键语句注释;④、运行结果:要求写出运行结果或抓图给出;⑤、分析结果:要求用操作系统原理有关理论解释说明;⑥、调试步骤以及调试过程中出现的问题及解决方法;⑦、参考文献:5篇以上;⑧、以学年论文格式提交文档资料,要有统一的封面和实验心得体会。

五、成绩评定1、各小组轮流演示小组作品,演示完毕,由其他小组的同学提2个以上问题,回答完毕打分;3、打分遵循原则如下:注意:①以下必做实验每小组都要做②以下选做实验,1个实验题目至多允许2个小组选,各小组也可以自拟题目必做实验(四个,都要做)实验一1. 实验名称:Linux登录、注销、关机和基本操作一。

2. 实验要求:掌握Linux系统的登录、注销、关机方法;掌握列出文件清单命令的使用方法:ls;掌握目录的切换命令的使用:cd;掌握目录的建立、删除命令的使用:mkdir、rmdir;掌握文件的拷贝、删除、移动命令的使用:cp、rm、mv 。

操作系统实验四

操作系统实验四

操作系统实验四实验过程及结果1、实验内容1、通过随机数产生一个指令序列,共320条指令。

指令的地址按下述原则生成:A:50%的指令是顺序执行的B:25%的指令是均匀分布在前地址部分C:25%的指令是均匀分布在后地址部分2、将指令序列变换为页地址流设:页面大小为1K;用户内存容量4页到32页;用户虚存容量为32K。

在用户虚存中,按每K存放10条指令排列虚存地址,即320条指令在虚存中的存放方式为:第0 条-第9 条指令为第0页(对应虚存地址为[0,9])第10条-第19条指令为第1页(对应虚存地址为[10,19])………………………………第310条-第319条指令为第31页(对应虚存地址为[310,319])3、计算并输出下述算法在不同内存容量下的命中率。

1)最佳淘汰算法(OPT)2)先进先出的算法(FIFO)3)最近最久未使用算法(LRU)命中率=(1-页面失效次数)/页地址流长度实验流程图核心代码/*先进先出算法total_pf:用户进程的内存页面数*/int FIFO(int total_pf){int i,j;pfc_type *p; /*中间变量*/initialize(total_pf); /*初始化相关页面控制用数据结构*/busypf_head=busypf_tail=NULL; /*忙页面队列头,队列尾链接*/for(i=0;i<total_instruction;i++){if(pl[page[i]].pfn==INV ALID) /*页面失效*/{diseffect+=1; /*失效次数*/if(freepf_head==NULL)/*无空闲页面*/{p=busypf_head->next;pl[busypf_head->pn].pfn=INV ALID;freepf_head=busypf_head;/*释放忙页面队列的第一个页面*/freepf_head->next=NULL;/*表明还是缺页*/busypf_head=p;}p=freepf_head->next;/*按照FIFO方式调新页面入内存页面*/ freepf_head->next=NULL;freepf_head->pn=page[i];pl[page[i]].pfn=freepf_head->pfn;if(busypf_tail==NULL)busypf_head=busypf_tail=freepf_head;else{busypf_tail->next=freepf_head; /*free页面减少一个*/busypf_tail=freepf_head;}freepf_head=p;}}printf("FIFO:%6.4f\n",1-(float)diseffect/ 320);return 0;OPT(最佳置换算法)设计原理:需要进行页面置换,把内存中以后一段时间都不使用或是使用时间离现在最远的页面换出。

操作系统原理实验报告

操作系统原理实验报告

《操作系统原理》实验报告班级::学号:指导老师:目录:实验题目:实验一线程创建与撤销 (2)实验题目:实验二线程同步 (6)实验题目:实验三线程互斥 (11)实验题目:实验四进程通信 (17)实验题目:实验五读者-写者问题 (22)实验题目:实验六进程调度 (38)实验题目:实验七存储管理之动态库 (52)实验题目:实验八存储管理之存分配 (57)实验题目:实验九存储管理之页面置换算法 (70)实验题目:实验十设备管理 (85)实验题目:实验十一文件管理之文件读写 (99)实验题目:实验一线程创建与撤销完成人:XXX报告日期:2018年3月31日一、实验容简要描述(1)熟悉VC++、Visual Studio开发环境。

(2)使用相关函数创建和撤销线程。

(3)在一个进程中创建3个线程,名字分别为threada、threadb、threadc。

threada输出“hello world! ”。

threadb输出“My name is …”。

threadc输出“Please wait…”,然后sleep 5秒钟,接着输出“I wake up”。

二、程序设计1、设计思路该函数创建一个在调用进程的地址空间中执行的线程。

2、主要数据结构HANDLE CreateThread(LPSECURITY_ATTRIBUTES lpThreadAttributes,DWORD dwStackSize,LPTHREAD_START_ROUTINE lpStartAddress,LPVOID lpParameter,DWORD dwCreationFlags,LPDWORD lpThreadId);VOID ExitThread(DWORD dwExitCode);VOID Sleep(DWORD dwMilliseconds);VOID Sleep(DWORD dwMilliseconds);三、实验结果1、基本数据lpThreadAttributes:指向一个SECURITY_ATTRIBUTES结构,该结构决定了返回的句柄是否可被子进程继承。

操作系统原理实验报告

操作系统原理实验报告

[键入文字]操作系统原理实验报告学院:专业:班级:学号:姓名:2011-2012学年第2学期目录实验1 进程管理 (2)实验2 进程通信 (9)实验3 存储管理 (15)实验4 文件系统 (24)实验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软中断信号——所涉及的流程图:五、程序代码/*expe1_1.c*/#include <stdio.h>void main( ){int i, r, p1, p2, fd[2];char buf[50], s[50];pipe(fd); /* 父进程建立管道*/while ((p1=fork())==-1); /* 创建子进程P1,失败时循环*/ if (p1==0) /* 由子进程P1返回,执行子进程P1 */{lockf(fd[1], 1, 0); /* 加锁锁定写入端*/sprintf(buf, "Child process P1 is sending messages! \n");printf("Child process P1! \n");write(fd[1], buf, 50); /* 把buf中的50个字符写入管道*/ sleep(5); /* 睡眠5秒,让父进程读*/lockf(fd[1], 0, 0); /* 释放管道写入端*/exit(0); /* 关闭P1*/}else /* 从父进程返回,执行父进程*/{while ((p2=fork())==-1); /* 创建子进程P2,失败时循环*/ if (p2==0) /* 从子进程P2返回,执行子进程P2 */ {lockf(fd[1], 1, 0); /* 锁定写入端*/sprintf(buf, "Child process P2 is sending messages! \n");printf("Child process P2! \n");write(fd[1], buf, 50); /* 把buf中的字符写入管道*/sleep(5); /* 睡眠5秒,让父进程读*/lockf(fd[1], 0, 0); /* 释放管道写入端*/exit(0); /* 关闭P2*/}wait(0);if ((r=read(fd[0], s, 50))== -1)printf("cannot read pipe! \n");else printf("%s", s);wait(0);if ((r=read(fd[0], s, 50))== -1)printf("cannot read pipe! \n");else printf("%s", s);exit(0);}}/*exp1-2.c*/#include<stdio.h>#include<stdlib.h>#include<signal.h>int p1,p2;void main(){void ppdo();void p1do();void p2do();signal(SIGINT,ppdo);p1=fork();if(p1==0){signal(SIGUSR1,p1do);for(;;);}else {p2=fork();if(p2==0) {signal(SIGUSR2,p2do);for(;;);}}wait(0);wait(0);printf("\nParent process is killed!\n");exit(0);}void ppdo(){kill(p1,SIGUSR1);kill(p2,SIGUSR2);}void p1do(){printf("\nChild process p1 is killed by parent!\n"); exit(0);}void p2do(){printf("\nChild process p2 is killed by parent!\n"); exit(0);}六、程序运行结果及分析实验1管道通信运行结果截图实验1管道通信结果分析父进程建立后,创建了子进程P1,P2,然后P1,P2分别向管道中写入字符串“Child process p1 is sending message!”和“Child process p2 is sending message!”,父进程从管道中读取字符串。

操作系统原理课内实验指导书

操作系统原理课内实验指导书

操作系统原理课内实验指导书实验一:用户接口实验准备知识为了使用户通过操作系统完成各项管理任务,操作系统必须为用户提供各种接口来实现人机交互。

经典的操作系统理论将操作系统的接口分为控制台命令和系统调用两种。

前者主要提供给计算机的操作人员对计算机进行各种控制;而后者则提供个程序员,使他们可以方便地使用计算机的各种资源。

1.控制台命令接口操作系统向用户提供一组控制台命令,用户可以通过终端输入命令的方式获得操作系统的服务,并由此来控制自己作业的运行。

一般来讲,控制台命令应该包含:一组命令、终端处理程序以及命令解释程序。

1)bash的由来当登录Linux或者打开一个xterm时,当前默认的shell就是bash。

Bash是GNU Project 的shell。

GNU Project是自由软件基金会(Free Software Foundation)的一部分。

它对Linux 下的许多编程工具负责。

Bash(Bourne Again Shell)是自由软件基金会发布的Bourne shell 的兼容程序。

它包含了其他有些shell的许多良好的特性,功能非常的全面。

很多Linux版本都供bash。

2)bash的大致原理bash处理自己的脚本时,先找到需要处理的命令名称,进而在当前用户的默认命令目录中找到对应的命令,这些默认目录一般是/usr/bin、/bin或/sbin。

在执行这些命令时,先使用进程创建系统调用fork(),在使用exex()来执行这些命令。

3)建立bash脚本➢编辑文件可以用最熟悉的编辑器来编辑这个文本文件,比如文件名为script,在shell下输入:$ vi script#! /bin/bashEcho Hello World!然后保存,退出。

➢测试脚本。

使用指令:$ source script➢更改脚本属性使用指令:$ chmod a+x script将脚本程序设置为可执行。

➢执行脚本使用指令:$ ./script4)关键字参考Echo 在终端上显示Bash 特殊变量1~9,保存当前进程或脚本的前9个参数。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验4 进程控制
1、实验目的
(1)通过对WindowsXP进行编程,来熟悉和了解系统。

(2)通过分析程序,来了解进程的创建、终止。

2、实验工具
(1)一台WindowsXP操作系统的计算机。

(2)计算机装有Microsoft Visual Studio C++专业版或企业版。

3、预备知识
(3)·CreateProcess()调用:创建一个进程。

(4)·ExitProcess()调用:终止一个进程。

4、实验编程
(1)编程一利用CreateProcess()函数创建一个子进程并且装入画图程序。

阅读该程序,完成实验任务。

源程序如下:
# include < >
# include < >
int main(VOID)
﹛STARTUPINFO si;
PROCESS INFORMATION pi;
ZeroMemory(&si,sizeof(si));
=sizeof(si);
ZeroMemory(&pi,sizeof(pi));
if(!CreateProcess(NULL,
“c: \ WINDOWS\system32\ ”,
NULL,
NULL,
FALSE,
0,
NULL,
NULL,
&si,&pi))
﹛fprintf(stderr,”Creat Process Failed”);
return —1;

WaitForSingleObject,INFINITE);
Printf(“child Complete”);
CloseHandle;
CloseHandle(pi hThread);

在“命令提示符”窗口运行CL命令产生可执行程序:
C:\ >CL
实验任务:写出程序的运行结果。

4.正在运行的进程
(2)、编程二下面给出了一个使用进程和操作系统版本信息应用程序(文件名为。

它利用进程信息查询的API函数GetProcessVersion()与GetVersionEx()的共同作用。

确定运行进程的操作系统版本号。

阅读该程序并完成实验任务。

#include<>
#include<iostream>
< << <std::endl;
< <std::endl;


实验参考:①在Visual C++窗口的工具栏中单击“打开”按钮,在“打开“对话框
中找到并打开源程序。

②单击Build菜单中的Compile 命令,再单击“是”按钮确认。

系统对源程序进行编译。

③编译完成后,单击Build菜单中的Build 命令,建立可执行文件。

④在工具栏单击Execute Program(执行程序)按钮,执行程序。

实验任务:写出程序运行后的以下几项结果。

当前PID信息。

当前操作系统版本。

系统提示信息。

5、终止进程
(3)编程三下面给出了一个终止进程的应用程序(文件名为),它先创建一
个子进程,然后命令它发出“自杀弹”互斥体去终止自身的运行。

阅读该程序并完成实验任务。

#include<>
#include<iostream>
#include<>
satic LPCTSTR g szMutexName=”创建当前进程的克隆进程的简单方法
Void StartClone()

< <std :: endl;
::StartClone();
< <std::endl;
::ReleaseMutex(hMutexSuicide);
< <std::endl;
::WaitForSingleObject(hMutexSuicide,INFINITE);
< <std::endl;
::CloseHandle(hMutexSuicide); ::sleep(1000);


int main(int arqc,char * argv﹝﹞)

//决定其行为是父进程还是子进程
if(argc>1 & & ::strcmp(argv﹝1﹞,”child”)==0)

Child();

else

Parent();

Return 0;

分析:程序说明了一个进程从“生”到“死”的整个一生,第一次执行时,它创建一
个子进程,其行为如同“父亲”。

在创建子进程之前,先创建一个互斥的内核对象,其行为对于子进程来说,如同一个“自杀弹”。

当创建子进程时,就打开了互斥体并在其他线程中进行别的处理工作,同时等待着父进程使用ReleaseMutex()API发出“死亡”信号。

然后用Sleep()API调用来模拟父进程处理其他工作,等完成时,指令子进程终止。

当调用ExitProcess()时要小心,进程中的所有线程都被立刻通知停止。

在设计应用程序时,必须让主线程在正常的C++运由期关闭(这是由编译器提供默认行为)之后来调用这一函数。

当它转向受信状态时,通常可创建一个每个活动线程都可等待和停止的终止事件。

在正常的终止操作中,进程的每个工作线程都要终止,由主线程序员调用ExitProcess()。

接着,管理层对进程增加的所有对象释放引用,并将用GetExitChodeProcess()建立的退出代码从STILL ACTIVE改变为ExitProcess()调用中返回的值。

最后,主线程对象也如同进程对象一样转变为受信状态。

等到所有打开的句柄都关闭之后,管理层的对象管理器才销毁进程对象本身。

还没有一种函数可取得终止后的进程对象为其参数,从而使具其“复活”。

当进程对象引用一个终止了的对象时,有好几个API函数仍然是有用的。

进程可使用退出代码将终止方式通知给调用GetExitCodeProcess ()的其他进程。

同时,GetProcessTimes()API函数可向主调者显示
进程的终止时间。

实验参考:①在Visual C++窗口的工具栏中单击“打开”按钮,在“打开”对话框中
找到并打开命令源程序。

②单击Build菜单中的Compile 命令,再单击“是”按钮确认。

系统对源程序进行编译。

③编译完成后,单击Build菜单中的命令,建立可执行文件。

实验任务:写出程序的运行结果。

相关文档
最新文档