当前位置:文档之家› 《操作系统》实验指导书

《操作系统》实验指导书

《操作系统》实验指导书
《操作系统》实验指导书

《操作系统》实验指导书(适用于计科、网络工程、软件工程、信计专业)

计算机科学与技术学院

2010-5

目录

前言 (3)

实验一、进程管理与进程同步 (4)

实验二、存储器管理 (11)

实验三、磁盘调度算法的设计 (12)

实验四、文件系统原理与模拟实现 (13)

前言

本课程将系统学习操作系统的基本概念和常用算法以及其发展情况和应用情况。通过本课程的学习,学生应达到如下要求:1、加深理解操作系统原理。2、熟悉操作系统的常用算法并完成算法的程序设计。3、理解当前操作系统的应用前景和新的进展。

本课程主要讲解操作系统的实现原理,如进程管理、进程同步、存储器管理、设备管理和文件系统等。要求学生理解操作系统的基本原理并完成其中多种典型的操作系统的算法的模拟序设计。

学生可以采用任何一种自己熟悉的编程语言完成算法的程序设计,如C/C++、Delphi、VB、VC、C#等。

实验一、进程管理

实验目的:

理解和掌握进程管理中死锁处理和进程同步的方法。

实验内容:

实现银行家算法、进程调度过程的模拟、读者-写者问题的写者优先算法。

实验步骤:

●理解安全性算法和银行家算法的核心机制:

针对3类资源、5个进程的情况,设计相应的数据结构,分别表示每个进程占用各类资源的情况;

编程实现安全性算法函数,编制主函数,动态输入资源的占用情况,进程的资源申请,调用安全性函数,实现银行家算法;

测试:输入可分配和不可分配的请求,测试系统的正确性。

●理解进程的三状态调度过程,及各状态间的转换关系;

模拟若干个进程的运行过程,将其存入进程文件中。如:进程1:运行5秒后有3秒的I/O操作,之后有10秒的运行,结束。可以写成:”p1:r5,io3,r3 e;”;

编程实现调度算法函数,定义时间片大小和并发进程个数,不断从进程文件中读出进程信息,模拟进程的运行及调度过程;

测试:针对进程文件里面的数据为正常、缺项、格式不正确等各种情况,检测程序的执行结果。

●设计读者--写者问题的写者优先算法;

学习Windows平台下信号量的API函数的使用;编制读写进程的模拟信息文件,里面包含多个读写进程的运行描述:编制读者--写者问题的写者优先算法,从进程模拟信息文件中取出进程信息,按要求启动对应的进程模拟程序,决定出读者/写者进程的运行次序。

实验结果:

银行家算法程序提供一个用户界面,可以在上边发出资源申请命令,系统应能给出是否可以接受申请,并且有结论输出;

进程调度模拟程序根据一个进程调度文件,模拟进程的各种调度过程,用适合的表达方式表示出来。

写者优先同步控制程序根据一个读写进程模拟信息文件,按照写者优先同步控制过程,用适合的表达方式表示出各读写进程的执行次序。

进程调度模拟程序:

jingchendiaodu.cpp #include "stdio.h" #include

#include

#define getpch(type) (type*)malloc(sizeof(type)) #define NULL 0

struct pcb { /* 定义进程控制块

PCB */ char name[10]; char state; int super; int nti me; int rtime;

struct pcb* link;

}*ready=NULL,*p; typedef struct pcb PCB;

sort() /* 建立对进程进行优先级排列函数*/ {

PCB *first, *second; int insert=0;

if((ready==NULL)||((p->super)>(ready->super))) /*优先级最大者,插入队首*/ {

p->link=ready; ready=p; }

else /* 进程比较优先级,插入适当的位置中*/ {

first=ready;

second=first->link; while(second!=NULL) {

if((p->super)>(second->super)) /*若插入进程比当前进程优先数大,*/ { /*插入到当前进程前面

*/ p->link=second; first->link=p; second=NULL; insert=1;

}

else /* 插入进程优先数最低,则插入到队尾*/ {

first=first->link;

second=second->link; } }

if(insert==0) first->link=p; } }

input() /* 建立进程控制块函数*/ {

int i,num;

clrscr(); /*清屏*/

printf("\n 请输入进程

号?"); scanf("%d",&num); for(i=0;i

{

printf("\n 进程号No.%d:\n",i); p=getpch(PCB);

printf("\n 输入进程名:"); scanf("%s",p->name);

printf("\n 输入进程优先数:"); scanf("%d",&p->super);

printf("\n 输入进程运行时

间:"); scanf("%d",&p->ntime); printf("\n");

p->rtime=0;p->state='w'; p->link=NULL;

sort(); /* 调用sort函数*/ } }

int space() {

int l=0; PCB* pr=ready; while(pr!=NULL) { l++;

pr=pr->link; }

return(l); }

disp(PCB * pr) /*建立进程显示函数,用于显示当前进程

*/ {

printf("\n qname \t state \t super \t ndtime \t runt ime \n"); printf("|%s\t",pr->name); printf("|%c\t",pr->state);

printf("|%d\t",pr->super); printf("|%d\t",pr->ntime); print f("|%d\t",pr->rtime); printf("\n"); }

check() /* 建立进程查看函数*/ {

PCB* pr;

printf("\n **** 当前正在运行的进程是:%s",p->name); /*显示当前运行进程*/ disp(p); pr=ready;

printf("\n ****当前就绪队列状态为:\n"); /*显示就绪队列状态*/ while(pr!=NULL)

{

disp(pr); pr=pr->link; } }

destroy() /*建立进程撤消函数(进程运行结束,撤消进

程)*/ {

printf("\n 进程[%s] 已完

成.\n",p->name); free(p); }

running() /* 建立进程就绪函数(进程运行时间到,置就绪状态

*/ {

(p->rtime)++;

if(p->rtime==p->ntime)

destroy(); /* 调用destroy函数*/ else {

(p->super)--; p->state='w';

sort(); /*调用sort函数*/ } }

main() /*主函数*/ {

int len,h=0; char ch; input(); len=space();

while((len!=0)&&(ready!=NULL)) {

ch=getchar(); h++;

printf("\n The execute number:%d \n",h); p=ready;

ready=p->link; p->link=NULL; p->state='R'; check();

running();

printf("\n 按任一键继续......"); ch=getchar(); }

printf("\n\n 进程已经完成.\n"); ch=getchar(); }

银行家算法程序:

/*子函数声明*/

int Isprocessallover(); //判断系统中的进程是否全部运行完毕 void Systemstatus(); //显示当前系统中的资源及进程情况 int Banker(int ,int *); //银行家算法

void Allow(int ,int *); //若进程申请不导致死锁,用此函数分配资源 void Forbidenseason(int ); //若发生死锁,则显示原因

/*全局变量*/

int Availiable[3]={3,3,2}; //初始状态,系统可用资源量 int Max[5][3]={{7,5,3},{3,2,2},{9,0,2},{2,2,2},{4,3,3}};

//各进程对各资源的最大需求量

int Allocation[5][3]={{0,1,0},{2,0,0},{3,0,2},{2,1,1},{0,0,2}};

//初始状态,各进程占有资源量

int Need[5][3]={{7,4,3},{1,2,2},{6,0,0},{0,1,1},{4,3,1}};

//初始状态时,各进程运行完毕,还需要的资源量

int over[5]={0,0,0,0,0}; //标记对应进程是否得到所有资源并运行完毕

#include

/*主函数*/ void main() { int process=0; //发出请求的进程 int decide=0; //银行家算法的返回值 int Request[3]={0,0,0}; //申请的资源量数组 int sourcenum=0; //申请的各资源量 /*判断系统中进程是否全部运行完毕*/ step1: if(Isprocessallover()==1)

{ cout<<"系统中全部进程运行完毕!"; return; }

/*显示系统当前状态*/ Systemstatus(); /*人机交互界面*/

step2: cout<<"\n输入发出请求的进程(输入“0”退出系统): "; cin>>process; if(process==0) { cout<<"放弃申请,退出系统!"; return; } if(process<1||process>5||over[process-1]==1) { cout<<"系统无此进程!\n"; goto step2; }

cout<<"此进程申请各资源(A,B,C)数目:\n"; for(int h=0;h<3;h++) { cout<>sourcenum; Request[h]=sourcenum; } /*用银行家算法判断是否能够进行分配*/ decide=Banker(process,Request); if (decide==0) { /*将此进程申请资源分配给它

*/ Allow(process,Request); goto step1; } else { /*不能分配,显示原因*/ Forbidenseason(decide); goto step2; } }

/*子函数Isprocessallover( )的实现*/ int Isprocessallover()

{ int processnum=0; for(int i=0;i<5;i++) { /*判断每个进程是否运行完毕*/ if(over[i]==1) processnum++; } if(processnum==5) /*系统中全部进程运行完毕*/ return 1; else return 0; }

/*子函数Systemstatus( )的实现*/ void Systemstatus() { cout<<"此刻系统中存在的进程:\n"; for(int i=0;i<5;i++) { if(over[i]!=1) cout<<"P"<

<<" A B C\n"; for(int f=0;f<5;f++) { if(over[f]==1) continue; cout <<"P"<

/*子函数Banker(int ,int &)的实现*/ int Banker(int p,int *R) { int num=0; //标记各资源是否能满足各进程需要 int Finish[5]={0,0,0,0,0}; //标记各进程是否安全运行完毕 int work[5]={0,0,0,0,0}; //用于安全检查 int AvailiableTest[3]; //用于试分配 int AllocationTest[5][3]; //同上 int NeedTest[5][3]; //同上 /*判断申请的资源是否大于系统可提供的资源总量*/ for(int j=0;j<3;j++) { if(*(R+j)>Availiable[j]) /*返回拒绝分配原因*/ return 1; } /*判断该进程申请资源量是否大于初始时其申明的需求量*/ for(int i=0;i<3;i++) { if(*(R+i)>Need[p-1][i]) /*返回拒绝原因*/ return 2; } /*为检查分配的各数据结构赋初值*/ for(int t=0;t<3;t++) { AvailiableTest[t]=Availiable[t]; } for(int u =0;u<5;u++) { for(int v=0;v<3;v++) {

AllocationTest[u][v]=Allocation[u][v]; } }

for(int w=0;w<5;w++) {

for(int x=0;x<3;x++) { NeedTest[w][x]=Need[w][x]; } }

/*进行试分配*/

for(int k=0;k<3;k++) //修改NeedTest[] { AvailiableTest[k]-=*(R+k); AllocationTest[p-1][k]+=*(R+k); Nee dTest[p-1][k]-=*(R+k); } /*检测进程申请得到满足后,系统是否处于安全状态*/ for(int l=0;l<3;l++) { work[l]=AvailiableTest[l]; }

for(int m=1;m<=5;m++) { for(int n=0;n<5;n++) { num=0; /*寻找用此刻系统中没有运行完的进程*/ if(Finish[n]==0&&over[n]!=1) { for(int p=0;p<3;p++) { if(NeedTest[n][p]<=work[p]) num++; } if(num==3) { for(int q= 0;q<3;q++) { work[q]=work[q]+AllocationTest[n][q]; } Finish[n]=1; }

} } }

for(int r=0;r<5;r++) { if(Finish[r]==0&&over[r]!=1) /*返回拒绝分配原因*/ return 3; } return 0; }

/*子函数Allow(int ,int &)的实现*/ void Allow(int p,int *R) { cout<<"可以满足申请!"; static int overnum; /*对进程所需的资源进行分配*/ for(int t=0;t<3;t++) { Availiable[t]=Availiable[t]-*(R+t); Allocation[p-1][t]=All ocation[p-1][t]+*(R+t); Need[p-1][t]=Need[p-1][t]-*(R+t); } /*分配后判断其是否运行完毕*/ overnum=0; for(int v=0;v<3;v++) { if(Need[p-1][v]==0) overnum++; } if(ov ernum==3) { /*此进程运行完毕,释放其占有的全部资源*/ for(int q=0;q<3;q++) Availiable[q]=Availiable[q]+Allocation[p-1][q]; /*标记该进程运行完毕*/ over[p-1]=1; cout<<"进程P"<

/*子函数Forbidenseason(int )的实现*/ void Forbidenseason(int d)

{ cout<<"不能满足申请,此进程挂起,原因为:\n"; switch (d) {

case 1:cout<<"申请的资源量大于系统可提供的资源量!";break;

case 2:cout<<"申请的资源中有某种资源大于其声明的需求量!";break; case 3:cout<<"若满足申请,系统将进入不安全状态,可能导致死锁!"; } }

实验二、存储器管理

实验目的:

理解各类置换算法的原理和虚拟存储器管理的方法。

实验内容:

编程实现LRU算法或CLOCK/改进算法等置换算法(二选一),模拟实现虚拟存储器的地址变换过程。

实验步骤:

●理解LRU或CLOCK改进算法等置换算法;

设计与算法相关的数据结构,如:LRU的堆栈或CLOCK改进算法中的循环结构;

按照最多5块的内存分配情况,编程实现所选算法,动态输入访问内存的块号序列,输出置换结果;

测试:输入合法、非法的访问序列数据,检查程序的正确性和健壮性。

●理解虚拟存储器的地址变换过程;

设计用于模拟快表、页表、地址变换所用的寄存器的数据结构;

编制页表的初始信息文件,举例说明文件中具有的信息:共有5块,每块的状态、在内存和外存的起始地址等。

编程实现虚拟存储器地址变换算法程序,动态输入所要访问的逻辑地址,变换过程文字描述以及变换后的物理地址;

测试:输入有效、无效地址,测试程序的正确性和错误处理能力。

实验结果:

置换算法程序提供内存访问序列的输入界面,输出正确的置换过程描述和置换结果;

虚拟地址变换程序提供逻辑地址输入界面,形象地表示出变换成物理地址的过程与最后变换成的物理地址。

实验三、磁盘调度算法的设计

实验目的:

通过对磁盘调度算法的设计,深入理解提高磁盘访问速度的原理。

实验内容:

模拟实现磁盘调度算法:最短寻道时间优先(SSTF)和扫描(SCAN)算法。

要求:

可以对给出的任意的磁盘请求序列、计算平均寻道长度;要求可定制磁盘请求序列长度、磁头起始位置、磁头移动方向。

测试:假设磁盘访问序列:98,183,37,122,14,124,65,67;读写头起始位置:53,方向:磁道增加的方向。

实验四、文件系统原理与模拟实现

实验目的:

了解操作系统中文件系统的结构和管理过程,掌握经典的算法:混合索引与成组链接法等方法。

实验内容:

编程模拟实现混合索引和成组链接法算法;

实验步骤:

●模拟混合索引的原理;

假设每个盘块16字节大小,每个盘块号占2字节:

设计支持混合索引算法的索引节点的数据结构;编程模拟实现混合索引算法。

测试:输入一个文件的长度,给出模拟分配占用的磁盘块的情况;

输入一个需要访问的地址,计算该地址所在的盘块号。

●模拟成组链接法的原理;

设系统具有7个可用磁盘块,每组3块。

编程模拟实现成组链接法。输入请求的磁盘块数,模拟成组链接分配;输入回收的磁盘块号,模拟成组链接回收。

测试:输入请求的磁盘块数,给出分配后的链接情况。输入回收的磁盘块号,给出回收后的链接情况。

自考02326《操作系统》串讲笔记1

第一部分课程概述 一、使用教材 《操作系统》,全国高等教育自学考试指导委员会组编,谭耀铭主编,中国人民大学出版社2007年版。 二、课程简介 随着计算机技术的迅速发展,计算机的硬、软件资源越来越丰富,用户也要求能更方便、更灵活地使用计算机系统。为了增强计算机系统的处理能力以及方便用户有效地使用计算机系统,操作系统已成为现代计算机系统中不可缺少的重要组成部分。因此,操作系统课程也就成为高等学校计算机专业的重要专业基础课程。 本课程从操作系统实现资源管理的观点出发,阐述如何对计算机系统中的硬、软件资源进行管理,使计算机系统协调一致地、有效地为用户服务,充分发挥资源的使用效率,提高计算机系统的可靠性和服务质量。 三、课程学习与考试要求 在自学过程中、考生应掌握操作系统对各种资源的管理方法和操作系统各部分之间的联系,这样才能真正掌握操作系统的工作原理以及了解操作系统在整个计算机系统中的作用。 为了能确切地学好本课程,要求考生具备:高级语言程序设计、数据结构、计算机系统结构等课程的知识。

在学任何一门课程时,要能做到真正学有所得,就必须:认真阅读教材,边读边做笔记;及时做习题,巩固所学内容;做好阶段总结,正确理解课程内容。 但每一门课程都有自身的特殊性,对于具体课程来说,应按照课程的特点具体探讨如何进行学习。要学好操作系统课程,关键在于弄清操作系统要做什么,怎么去做和为什么要这样去做。所以,如能注意如下几点,将会对操作系统课程的自学起到促进作用。 (1)在开始阅读某一章教材之前,先翻阅大纲中有关这一章的考核知识点、考核要求、自学要求、重点,以便在阅读教材时做到心中有数,有的放矢。 (2)阅读教材时要逐段细读,逐句推敲,集中精力,吃透每一个知识点,对基本概念必须深刻理解,对基本原理必须彻底弄清,对设计技巧要能灵活运用。 (3)根据操作系统在计算机系统中的应用,你在学习操作系统课程时应围绕如下四个中心问题: ①操作系统怎样管理计算机系统中的各种资源,以及保证资源的使用效率。 ②操作系统怎怎样为用户提高良好的运行环境,以方便用户使用计算机系统。 ③操作系统怎样按照用户的要求来控制程序的执行,以保证用户

操作系统实验实验1

广州大学学生实验报告 1、实验目的 1.1、掌握进程的概念,明确进程的含义 1.2、认识并了解并发执行的实质 2.1、掌握进程另外的创建方法 2.2、熟悉进程的睡眠、同步、撤消等进程控制方法 3.1、进一步认识并发执行的实质 3.2、分析进程竞争资源的现象,学习解决进程互斥的方法 4.1、了解守护进程 5.1、了解什么是信号 5.2、INUX系统中进程之间软中断通信的基本原理 6.1、了解什么是管道 6.2、熟悉UNIX/LINUX支持的管道通信方式 7.1、了解什么是消息 7.2、熟悉消息传送的机理 8.1、了解和熟悉共享存储机制 二、实验内容 1.1、编写一段程序,使用系统调用fork( )创建两个子进程。当此程序运行时,在系统 中有一个父进程和两个子进程活动。让每一个进程在屏幕上显示一个字符:父进程显示'a',子进程分别显示字符'b'和字符'c'。试观察记录屏幕上的显示结果,并分析原因。 1.2、修改上述程序,每一个进程循环显示一句话。子进程显示'daughter …'及 'son ……',父进程显示'parent ……',观察结果,分析原因。 2.1、用fork( )创建一个进程,再调用exec( )用新的程序替换该子进程的内容 2.2、利用wait( )来控制进程执行顺序 3.1、修改实验(一)中的程序2,用lockf( )来给每一个进程加锁,以实现进程之间的互斥 3.2、观察并分析出现的现象 4.1、写一个使用守护进程(daemon)的程序,来实现: 创建一个日志文件/var/log/Mydaemon.log ; 每分钟都向其中写入一个时间戳(使用time_t的格式) ; 5.1、用fork( )创建两个子进程,再用系统调用signal( )让父进程捕捉键盘上来的中断信号(即按^c键);捕捉到中断信号后,父进程用系统调用kill( )向两个子进程发出信号,子进程捕捉到信号后分别输出下列信息后终止: Child process1 is killed by parent! Child process2 is killed by parent! 父进程等待两个子进程终止后,输出如下的信息后终止: Parent process is killed! 5.2、用软中断通信实现进程同步的机理

《操作系统》读书工程

操作系统课程设计 读书工程报告 学期 20013-2014学年第一学期 学院计算机科学技术学院 学号 姓名 2013年 12月 23日

一、基本理论阐述 1.进程 定义:进程是一个具有一定独立功能的程序关于某个数据集合的一次运行活动。它是操作系统动态执行的基本单元,在传统的操作系统中,进程既是基本的分配单元,也是基本的执行单元。 基本介绍:多道程序在执行时,需要共享系统资源,从而导致各程序在执行过程中出现相互制约的关系,程序的执行表现出间断性的特征。这些特征都是在程序的执行过程中发生的,是动态的过程,而传统的程序本身是一组指令的集合,是一个静态的概念,无法描述程序在内存中的执行情况,即我们无法从程序的字面上看出它何时执行,何时停顿,也无法看出它与其它执行程序的关系,因此,程序这个静态概念已不能如实反映程序并发执行过程的特征。为了深刻描述程序动态执行过程的性质,人们引入“进程(Process)”概念。 进程的概念:第一,进程是一个实体。每一个进程都有它自己的地址空间,一般情况下,包括文本区域(text region)、数据区域(data region)和堆栈(stack region)。文本区域存储处理器执行的代码;数据区域存储变量和进程执行期间使用的动态分配的内存;堆栈区域存储着活动过程调用的指令和本地变量。第二,进程是一个“执行中的程序”。程序是一个没有生命的实体,只有处理器赋予程序生命时,它才能成为一个活动的实体,我们称其为进程。 主要特征: 动态性:进程的实质是程序在多道程序系统中的一次执行过程,进程是动态产生,动态消亡的。 并发性:任何进程都可以同其他进程一起并发执行 独立性:进程是一个能独立运行的基本单位,同时也是系统分配资源和调度的独立单位; 异步性:由于进程间的相互制约,使进程具有执行的间断性,即进程按各自独立的、不可预知的速度向前推进 结构特征:进程由程序、数据和进程控制块三部分组成。 状态分类: 1)就绪状态(Ready):进程已获得除处理器外的所需资源,等待分配处理器资源;只要分配了处理器进程就可执行。就绪进程可以按多个优先级来划分队列。例如,当一个进程由于时间片用完而进入就绪状态时,排入低优先级队列;当进程由I/O操作完成而进入就绪状态时,排入高优先级队列。 2)运行状态(Running):进程占用处理器资源;处于此状态的进程的数目小于等于处理器的数目。在没有其他进程可以执行时(如所有进程都在阻塞状态),通常会自动执行系统的空闲进程。 3)阻塞状态(Blocked):由于进程等待某种条件(如I/O操作或进程同步),在条件满足之前无法继续执行。该事件发生前即使把处理机分配给该进程,也无法运行。 进程控制的基本事件: 进程的创建 1.引起创建进程的事件

操作系统原理-进程调度实验报告

一、实验目的 通过对进程调度算法的设计,深入理解进程调度的原理。 进程是程序在一个数据集合上运行的过程,它是系统进行资源分配和调度的一个独立单位。 进程调度分配处理机,是控制协调进程对CPU的竞争,即按一定的调度算法从就绪队列中选中一个进程,把CPU的使用权交给被选中的进程。 进程通过定义一个进程控制块的数据结构(PCB)来表示;每个进程需要赋予进程ID、进程到达时间、进程需要运行的总时间的属性;在RR中,以1为时间片单位;运行时,输入若干个进程序列,按照时间片输出其执行序列。 二、实验环境 VC++6.0 三、实验内容 实现短进程优先调度算法(SPF)和时间片轮转调度算法(RR) [提示]: (1) 先来先服务(FCFS)调度算法 原理:每次调度是从就绪队列中,选择一个最先进入就绪队列的进程,把处理器分配给该进程,使之得到执行。该进程一旦占有了处理器,它就一直运行下去,直到该进程完成或因发生事件而阻塞,才退出处理器。 将用户作业和就绪进程按提交顺序或变为就绪状态的先后排成队列,并按照先来先服务的方式进行调度处理,是一种最普遍和最简单的方法。它优先考虑在系统中等待时间最长的作业,而不管要求运行时间的长短。 按照就绪进程进入就绪队列的先后次序进行调度,简单易实现,利于长进程,CPU繁忙型作业,不利于短进程,排队时间相对过长。 (2) 时间片轮转调度算法RR

原理:时间片轮转法主要用于进程调度。采用此算法的系统,其程序就绪队列往往按进程到达的时间来排序。进程调度按一定时间片(q)轮番运行各个进程. 进程按到达时间在就绪队列中排队,调度程序每次把CPU分配给就绪队列首进程使用一个时间片,运行完一个时间片释放CPU,排到就绪队列末尾参加下一轮调度,CPU分配给就绪队列的首进程。 固定时间片轮转法: 1 所有就绪进程按 FCFS 规则排队。 2 处理机总是分配给就绪队列的队首进程。 3 如果运行的进程用完时间片,则系统就把该进程送回就绪队列的队尾,重新排队。 4 因等待某事件而阻塞的进程送到阻塞队列。 5 系统把被唤醒的进程送到就绪队列的队尾。 可变时间片轮转法: 1 进程状态的转换方法同固定时间片轮转法。 2 响应时间固定,时间片的长短依据进程数量的多少由T = N × ( q + t )给出的关系调整。 3 根据进程优先级的高低进一步调整时间片,优先级越高的进程,分配的时间片越长。 多就绪队列轮转法: (3) 算法类型 (4)模拟程序可由两部分组成,先来先服务(FCFS)调度算法,时间片轮转。流程图如下:

操作系统实验报告一

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

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

广州大学学生实验报告 开课学院及实验室:计算机科学与工程实验室 2015年11月11日 实验课 操作系统成绩 程名称 实验项 进程管理与进程通信指导老师陈康民目名称 (***报告只能为文字和图片,老师评语将添加到此处,学生请勿作答***) 进程管理 (一)进程的创建实验 一、实验目的 1、掌握进程的概念,明确进程的含义 2、认识并了解并发执行的实质 二、实验内容 1、编写一段程序,使用系统调用fork( )创建两个子进程。当此程序运行时,在系统中有一 个父进程和两个子进程活动。让每一个进程在屏幕上显示一个字符:父进程显示'a',子进程分别显示字符'b'和字符'c'。试观察记录屏幕上的显示结果,并分析原因。 2、修改上述程序,每一个进程循环显示一句话。子进程显示'daughter …'及'son ……', 父进程显示'parent ……',观察结果,分析原因。 三、实验步骤 1、编写一段程序,使用系统调用fork( )创建两个子进程。 代码: #include main( ) { int p1,p2; while((p1=fork( ))= = -1); /*创建子进程p1*/ if (p1= =0) putchar('b'); else { while((p2=fork( ))= = -1); /*创建子进程p2*/ if(p2= =0) putchar('c'); else putchar('a'); } } 运行结果:

bca,bac, abc ,……都有可能。 2、修改上述程序,每一个进程循环显示一句话。子进程显示'daughter …'及'son ……',父进程显示'parent ……',观察结果,分析原因。 代码:#include main( ) { int p1,p2,i; while((p1=fork( ))= = -1); /*创建子进程p1*/ if (p1= =0) for(i=0;i<10;i++) printf("daughter %d\n",i); else { while((p2=fork( ))= = -1); /*创建子进程p2*/ if(p2= =0) for(i=0;i<10;i++) printf("son %d\n",i); else for(i=0;i<10;i++) printf("parent %d\n",i); } } 结果:

《现代操作系统》读书笔记之——进程间通信

很多时候,进程需要和其他的进程进行通信。比如shell中的管道命令:ps -ef | grep nginx,一个命令的输出,作为另一个进程的输入,这就是进程间通信(Interprocess Communication)。 进程间通信主要需要解决三个问题: 1.一个进程如何给另一个进程传递信息 2.如何确保进程之间不互相干扰、妨碍 3.当进程间出现依赖关系时,该如何处理。 尽管这里讨论的是进程之间的通信,但其实对于线程来说,他们之间的通信需要解决后两个问题。由于多个线程处在相同的进程,因此也处在同一个地址空间中,所以第一个问题自然很好解决。但是第二个、第三个问题还是存在的,当然解决的方案其实与进程间通信在处理这两个问题上采取的方案也是类似的。下面的内容会涉及上面的三个问题。 1.竞争条件(Race Condition) 在一些操作系统中,多个进程会共享一部分内存,每个进程都可以对他们进行读写操作。共享的内存有可能再内存中,也可能是一个共享的文件。为了看看进程间通信之间的竞争条件,举个简单的例子加以说明:打印池。假如一个进程想打印一个文件,于是他将文件名输入打印池目录中。有一个负责打印的进程——打印机守护进程——每隔一段时间会查看一下打印池目录中有没有需要打印的文件。有的话就打印,没有拉到。 打印机目录的示意图如下: 图中的每个小格子可以存放一个待打印的文件名(实际上应该是需要打印的文件的指针,这里只是为了说明问题做的假设)。同样,还需要假设两个共享的变量:一个叫out存储下一个轮到打印的文件的文件名;另一个叫in存储上图中下一个可以存放待打印文件文件名的小空格。这两个变量可能被存储再一个文件中,而这个文件共享给了所有的进程。 上图所示的时刻,单元1、2、3已经空了,也就是说,之前存在里面的文件已经打印了。而5-9号空格还是空的,也就是说接下来需要打印的文件依次存放在下面的单元中。这一时刻,变量in存储的应该是5。假设这时候,进程A读取变量in,得到的值是5。于是,进程A将这个值存储到他的局部变量 next_free_slot中,这时候,恰好CPU时间片到了,进程A重新回到可运行状态,而此时进程B获得了时间片,开始运行,它也有文件需要打印,那么它读取in,获得的

操作系统原理实验-系统内存使用统计5

上海电力学院 计算机操作系统原理 实验报告 题目:动态链接库的建立与调用 院系:计算机科学与技术学院 专业年级:信息安全2010级 学生姓名:李鑫学号:20103277 同组姓名:无 2012年11 月28 日上海电力学院

实验报告 课程名称计算机操作系统原理实验项目线程的同步 姓名李鑫学号20103277 班级2010251班专业信息安全 同组人姓名无指导教师姓名徐曼实验日期2012/11/28 实验目的和要求: (l)了解Windows内存管理机制,理解页式存储管理技术。 (2)熟悉Windows内存管理基本数据结构。 (3)掌握Windows内存管理基本API的使用。 实验原理与内容 使用Windows系统提供的函数和数据结构显示系统存储空间的使用情况,当内存和虚拟存储空间变化时,观察系统显示变化情况。 实验平台与要求 能正确使用系统函数GlobalMemoryStatus()和数据结构MEMORYSTATUS了解系统内存和虚拟空间使用情况,会使用VirtualAlloc()函数和VirtualFree()函数分配和释放虚拟存储空间。 操作系统:Windows 2000或Windows XP 实验平台:Visual Studio C++ 6.0 实验步骤与记录 1、启动安装好的Visual C++ 6.0。 2、选择File->New,新建Win32 Console Application程序, 由于内存分配、释放及系统存储 空间使用情况均是Microsoft Windows操作系统的系统调用,因此选择An application that support MFC。单击确定按钮,完成本次创建。 3、创建一个支持MFC的工程,单击完成。

操作系统实验报告

《操作系统原理》实验报告 实验项目名称:模拟使用银行家算法判断系统的状态 一、实验目的 银行家算法是操作系统中避免死锁的算法,本实验通过对银行家算法的模拟,加强对操作系统中死锁的认识,以及如何寻找到一个安全序列解除死锁。 二、实验环境 1、硬件:笔记本。 2、软件:Windows 7 , Eclipse。 三、实验内容 1.把输入资源初始化,形成资源分配表; 2.设计银行家算法,输入一个进程的资源请求,按银行家算法步骤进行检查; 3.设计安全性算法,检查某时刻系统是否安全; 4.设计显示函数,显示资源分配表,安全分配序列。 四、数据处理与实验结果 1.资源分配表由进程数组,Max,Allocation,Need,Available 5个数组组成; 实验采用数据为下表: 2.系统总体结构,即菜单选项,如下图

实验的流程图。如下图 3.实验过程及结果如下图所示

1.首先输入进程数和资源类型及各进程的最大需求量 2.输入各进程的占有量及目前系统的可用资源数量 3.初始化后,系统资源的需求和分配表 4.判断线程是否安全

5.对线程进行死锁判断 五、实验过程分析 在实验过程中,遇到了不少问题,比如算法无法回滚操作,程序一旦执行,必须直接运行到单个任务结束为止,即使产生了错误,也必须等到该项任务结束才可以去选择别的操作。但总之,实验还是完满的完成了。 六、实验总结 通过实验使我对以前所学过的基础知识加以巩固,也对操作系统中抽象理论知识加以理解,例如使用Java语言来实现银行家算法,在这个过程中更进一步了解了银行家算法,通过清晰字符界面能进行操作。不过不足之处就是界面略显简洁,对于一个没有操作过计算机的人来说,用起来可能还是有些难懂。所以,以后会对界面以及功能进行完善,做到人人都可以看懂的算法。

操作系统实验一

本科实验报告 课程名称:操作系统 学号: 姓名: 专业: 班级: 指导教师: 课内实验目录及成绩 信息技术学院

实验(实验一) 1 实验名称:基本shell命令及用户管理 2 实验目的 2.1 掌握安装Linux操作系统的方法。 2.2 掌握Linux操作系统的基本配置。 2.3 了解GNOME桌面环境。 2.4 掌握基本shell命令的使用。 3 实验准备 3.1 下载VMware Workstation虚拟机软件(版本不限)。 3.2 准备Linux操作系统的安装源(内核版本和发行版本均不限)。 注:实验准备、实验内容4.1和4.2作为回家作业布置,同学们利用课余时间可在私人计算机上完成。 4 实验要求、步骤及结果 4.1 安装虚拟机软件。 【操作要求】安装VMware Workstation虚拟机软件,并填写以下4.1.1和4.1.2的内容。 4.1.1【VMware Workstation虚拟机版本号】 4.1.2【主要配置参数】 4.2 安装Linux操作系统。 【操作要求】安装Linux操作系统,版本不限。 Linux发行版本: Linux内核版本:

【主要操作步骤:包括分区情况】 1、创建一台虚拟机安装操作系统时客户机操作系统选择Linux 2、修改虚拟机的安装路径。 3、建一个新的虚拟磁盘,磁盘的空间20GB,并且将单个文件存储虚拟磁盘。 4、设置分区完毕,安装虚拟机 4.3 了解Linux操作系统的桌面环境之一GNOME。 【操作要求】查看桌面图标,查看主菜单,查看个人用户主目录等个人使用环境。【操作步骤1】桌面图标

【操作步骤2】主菜单 【操作步骤3】个人用户主目录 【操作步骤4】启动字符终端

操作系统实验报告_实验五

实验五:管道通信 实验内容: 1.阅读以下程序: #include #include #include main() { int filedes[2]; char buffer[80]; if(pipe(filedes)<0) //建立管道,filedes[0]为管道里的读取端,filedes[1]则为管道的写入端 //成功则返回零,否则返回-1,错误原因存于errno中 err_quit(“pipe error”); if(fork()>0){ char s[ ] = “hello!\n”; close(filedes[0]); //关闭filedes[0]文件 write(filedes[1],s,sizeof(s)); //s所指的内存写入到filedes[1]文件内 close(filedes[1]); //关闭filedes[0]文件 }else{ close(filedes[1]); read(filedes[0],buffer,80); //把filedes[0]文件传送80个字节到buffer缓冲区内 printf(“%s”,buffer); close(filedes[0]); } } 编译并运行程序,分析程序执行过程和结果,注释程序主要语句。

2.阅读以下程序: #include #include #include main() { char buffer[80]; int fd; unlink(FIFO); //删除FIFO文件 mkfifo(FIFO,0666); //FIFO是管道名,0666是权限 if(fork()>0){ char s[ ] = “hello!\n”;

操作系统课程设计报告读书工程方案

“操作系统课程设计”读书工程环节方案“操作系统”是计算机科学技术专业与软件工程专业的必修课程,也是该专业核心理论课程。为了更全面的理解理论知识,提高实践能力,计算机科学与技术专业以及软件工程专业开设了实践类必修课程-“操作系统课程设计”。将读书环节融入教学内容的设计中,做好理论教学、实践教学、读书环节三者有机结合,可使学生进一步了解课程理论知识,拓宽视野,加深对本专业相关课程的理解。 在读书工程环节,学生可以通过阅读相关的参考书目,对课程设计的五个部分(进程控制、进程调度、请求分页存储管理、设备管理、文件管理)中的任意一个题目进行深入的分析探讨和总结,并提交相应的读书工程报告。 考核方式:通过提交读书报告进行考核,该部分成绩要占课程总成绩的15%。该报告至少应包括基本理论阐述、当前理论或实践应用现状、本人对相关内容的体会、课程设计过程中对相应部分的设计与实现思路、读书工程心得总结等几个方面,字数不少于5000字。 参考书目: 现代操作系统(第2版、第3版,中文/英文原版) ●作者:(荷)AndrewS.Tanenbaum ●译者:陈向群,马洪兵 ●:机械工业 ●出版日期:2005年6月 本书是操作系统领域的经典之作,与第1版相比有较大的变化。书中集中讨论了操作系统的基本原理,除了重点放在单处理机操作系统之外,还包含了有关计算机安全、多媒体操

作系统、unix、windows 2000以及操作系统设计等方面的内容。书中涉及的主题包括图形用户界面、多处理机操作系统、笔记本电脑电源管理、可信系统、病毒、网络终端、cd-rom 文件系统、互斥信号量、raid、软定时器、稳定存储器以及新的页面置换算法等。此外,书中还增加了大量习题,方便教学。 本书适合作为高等院校计算机科学与技术专业操作系统课程教材,也是设计、开发操作系统的重要参考书。 Andrew S. Tanenbaum 是ACM和IEEE的资深会员,荷兰皇家艺术和科学学院院士,获得过1997年度ACM/SIGCSE计算机科学教育杰出贡献奖。当前,他的主要研究方向是设计规模达十亿级用户的广域分布式系统。在进行这些研究项目的基础上,他在各种学术杂志及会议上发表了70多篇论文,并出版了多本计算机专著。Tanenbaum还入选了《世界名人录》。Tanenbaum教授的个人主页是.cs.vu.nl/~ast。 操作系统设计与实现(第二版,有电子书,中文版) ●作者:(美)AndrewS.Tanenbaum,AlbertS.Woodhull ●译者:陈渝谌卫军 ●:电子工业 ●出版日期:2007年3月 本书是关于操作系统的权威教材,详细探讨了操作系统的基本原理,包括进程、进程间通信、信号量、管程、消息传递、调度算法、输入/输出、死锁、设备驱动程序、存储管理、调页算法、文件系统设计、安全和保护机制等。大多数关于操作系统的图书均重理论而轻实践,而本书则在这两者之间进行了较好的折中。本册给出了上册提到的minix3操作系统的安装方法以及详细的原代码,并附有光盘。 本书适用于高校计算机专业的学生,也可供程序设计人员、工程技术人员、系统架构师等相关人员参考。 操作系统—精髓与设计原理(第六版,有电子书) ●作者:(美)WilliamStallings ●译者:陈向群,陈渝 ●:电子工业 ●出版日期:2006年2月

操作系统原理实验四

实验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); ﹜

操作系统实验报告

《计算机操作系统》实验报告 教师: 学号: 姓名: 2012年3月6日 计算机学院

实验题目:请求页式存储管理(三) ----------------------------------------------------------------------------- 实验环境:VC6.0++ 实验目的:学生应独立地用高级语言编写几个常用的存储分配算法,并设计一个存储管理的模拟程序,对各种算法进行分析比较,评测其性能优劣,从而加深对这些算法的了解。实验内容: (1)编制和调试示例给出的请求页式存储管理程序,并使其投入运行。 (2)增加1~2种已学过的淘汰算法,计算它们的页面访问命中率。试用各种算法的命中率加以比较分析。(增加了FIFO) 操作过程: (1)产生随机数 (2)输入PageSize(页面大小1 /2/4/8 K) (pageno[i]=int(a[i]/1024)+1) (3)菜单选择

(4)OPT/ LRU/FIFO演示(pagesize=1K)

(5) 过程说明(PAGESIZE = 4K ) OPT :最佳置换算法(淘汰的页面是以后永不使用,或许是在最长时间内不再被访问的页面) //在Table 表中如果未找到,记录每个元素需要找的长度 //全部table 中元素找完长度,然后进行比较,找出最大的,进行淘汰 int max=0; int out; for(k=0;kmax){ max = table_time[k]; out = k; } }//找出最长时间,进行替换 table[out]=pageno[i]; page_out++;

操作系统实验报告.

学生学号0121210680225 实验课成绩 武汉理工大学 学生实验报告书 实验课程名称操作系统 开课学院计算机科学与技术学院 指导老师姓名刘军 学生姓名李安福 学生专业班级软件sy1201 2014 — 2015 学年第一学期

《操作系统》实验教学大纲 课程编号: 课程名称:操作系统/Operating System 实验总学时数:12学时 适应专业:计算机科学与技术、软件工程 承担实验室:计算机科学与技术学院实验中心 一、实验教学的目的和任务 通过实验掌握Linux系统下常用键盘命令、系统调用、SHELL编程、后台批处理和C程序开发调试手段等基本用法。 二、实验项目及学时分配 序号实验项目名称实验学时实验类型开出要求 01 Linux键盘命令和vi 2 设计必开 02 Linux下C编程 2 设计必开 03 SHELL编程和后台批处理 2 设计必开 04 Linux系统调用(time) 2 设计必开 05 Linux进程控制(fork) 4 设计必开 三、每项实验的内容和要求: 1、Linux键盘命令和vi 要求:掌握Linux系统键盘命令的使用方法。 内容:见教材p4, p9, p40, p49-53, p89, p100 2、Linux下的C编程 要求:掌握vi编辑器的使用方法;掌握Linux下C程序的源程序编辑方法;编译、连接和运行方法。 内容:设计、编辑、编译、连接以及运行一个C程序,其中包含键盘输入和屏幕输出语句。 3、SHELL编程和后台批处理 要求:掌握Linux系统的SHELL编程方法和后台批处理方法。 内容:(1) 将编译、连接以及运行上述C程序各步骤用SHELL程序批处理完成,前台运行。 (2) 将上面SHELLL程序后台运行。观察原C程序运行时输入输出情况。 (3) 修改调试上面SHELL程序和C程序,使得在后台批处理方式下,原键 盘输入内容可以键盘命令行位置参数方式交互式输入替代原键盘输入内容, 然后输出到屏幕。 4、Linux系统调用使用方法。

《操作系统)(中国铁道)习题答案第四章

⒈计算机系统中存储器一般分为哪两级?各有什么特点? 答:计算机系统中存储器一般分为主存储器和辅助存储器两级。 主存储器简称主存,又称为内存,它由自然数顺序编址的单元(通常为字或字节)所组成,是处理机直接存取指令和数据的存储器,它速度快,但容量有限。辅助存储器简称辅存,又称为外存,它由顺序编址的“块”所组成,每块包含若干个单元,寻址与交换以块为单位进行,处理机不能直接访问它,它须经过专门的启动入出过程与内存交换信息,它存取速度较慢,但容量远大于内存,实际上,现代计算机系统中用户的数据(或信息)都是保存在外存中。 ⒉存储管理的目的是什么? 答:存储管理要实现的目的是:为用户提供方便、安全和充分大的存储空间。 所谓方便是指将逻辑地址和物理地址分开,用户只在各自逻辑地址空间编写程序,不必过问物理空间和物理地址的细节,地址的转换由操作系统自动完成;安全则是指同时驻留在内存的多道用户程序相互之间不会发生干扰,也不会访问操作系统所占有的空间。充分大的存储空间是指利用虚拟存储技术,从逻辑上对内存空间进行扩充,从而可以使用户在较小内存里运行较大程序。 ⒊存储管理的任务是什么? 答:存储管理是计算机操作系统软件的一部分,它负责完成对主存储器的地址转换,对主存储器进行分配与去配,解决多用户对主存储器的共享和保护,通过软件手段,实现对主存储器容量的扩充。 ⒋地址转换可分为哪三种方式?比较这三种方式的优缺点。 答:由逻辑地址转化为物理地址的地址转换过程,按照转换的时间不同,可以分为3种方式: ①绝对装入方式②静态重定位方式③动态重定位方式 (第二问略) ⒌可变分区常用的分区算法有哪几种?它们各自的特点是什么? 答:首次适应算法、循环首次适应算法、最佳适应算法、最差适应算法(第二问略) ⒍试用类C语言写首次适应算法的分配过程。 答:firstmatch(n) { p=Free; while(p!=NULL) { if(p->size>=n) { if(p->size-n>=size) p->size=p->size-n; a=p; p=p+n; else a=p; remove(Free,p); } else

操作系统实验报告

操作系统实验报告 Document number:NOCG-YUNOO-BUYTT-UU986-1986UT

许昌学院 《操作系统》实验报告书学号: 姓名:闫金科 班级:14物联网工程 成绩: 2016年02月

实验一Linux的安装与配置 一、实验目的 1.熟悉Linux系统的基本概念,比如Linux发行版、宏内核、微内核等。 2.掌握Linux系统的安装和配置过程,初步掌握Linux系统的启动和退出方 法。 3.熟悉Linux系统的文件系统结构,了解Linux常用文件夹的作用。 二、实验内容 1.从网络上下载VMware软件和两个不同Linux发行版镜像文件。 2.安装VMware虚拟机软件。 3.在VMware中利用第一个镜像文件完成第一个Linux的安装,期间完成网络 信息、用户信息、文件系统和硬盘分区等配置。 4.在VMware中利用第二个镜像文件完成第二个Linux的安装,并通过LILO或 者GRUB解决两个操作系统选择启动的问题。 5.启动Linux系统,打开文件浏览器查看Linux系统的文件结构,并列举出 Linux常用目录的作用。 三、实验过程及结果 1、启动VMware,点击新建Linux虚拟机,如图所示: 2、点击下一步,选择经典型,点击下一步在选择客户机页面选择 Linux,版本选择RedHatEnterpriseLinux5,如图所示: 3、点击下一步创建虚拟机名称以及所要安装的位置,如图所示: 4、点击下一步,磁盘容量填一个合适大小,此处选择默认值大小 10GB,如图所示: 5、点击完成,点击编辑虚拟机设置,选择硬件选项中的CD-ROM (IDE...)选项,在右侧连接中选择“使用ISO镜像(I)”选项,点 击“浏览”,找到Linux的镜像文件,如图所示:

操作系统实验3答案

实验三操作系统进程管理 一、实验目的 1) 掌握系统进程的概念,加深对Linux / UNIX进程管理的理解。 2) 学会使用ps命令和选项。 3) 列出当前shell中的进程。 4) 列出运行在系统中的所有进程。 5) 根据命令名搜索特定的进程。 6) 使用kill命令终止进程。 7) 根据用户名查找和终止进程。 二、实验内容和相应的答案截图,三、实验结果分析 步骤1:创建一个普通用户(参见实验二),以普通用户身份登录进入GNOME。 步骤2:打开一个“终端”窗口(参见实验二)。 步骤3:回顾系统进程概念,完成以下填空: 1) Linux系统中,几乎每一个启动的进程,都会由内核分配一个唯一的__PID__进程标识符,用于跟踪从进程启动到进程结束。 2) 当启动新进程的时候,内核也给它们分配系统资源,如__内存_和__CPU_。 3) 永远不向父进程返回输出的进程叫做__僵进程__。 4) 由父进程派生出来的进程叫做____子___进程。 5) ___父_进程是一个派生另一个进程的进程。 6) 运行用于提供服务的Linux系统进程是_______________。 7) 如果父进程在子进程之前结束,它创建了一个______________进程。 步骤4:回顾ps命令和信息。基本的ps命令显示当前shell中的进程信息,用户只能够查看当前终端窗口中初始化的进程。输入ps命令,将结果填入表3-3中。 表3-3 实验记录 下面,在当前终端窗口中,练习使用给出的每个选项的ps命令。

输入ps -f 命令,显示运行在系统中的某个进程的完全信息,填入表3-4中。 表3-4 实验记录 步骤5:列出系统中运行的所有进程。 输入ps -ef 命令,显示运行在系统中的各个进程的完全信息。执行该命令,并与ps –f 命令的输出结果对照,一致吗?有何不同? 答:不一致,后者显示了所有进程的完全可用信息,多了很多。 分析当前终端窗口中的输出结果,记录下来用于写实验报告。 a. 显示了多少个进程?答:59 b. 进程ID的PID是什么? c. 启动进程的命令(CMD) 是什么?答:sched d. 请观察,什么命令的PID号是1?答:init[5] e. 执行ps –ef >aaa命令,将ps命令的输出送到文本文件aaa。再次运行cat aaa | wc命令,计算进程的数目。其中,cat是显示文本文件命令。“|”是管道命令,就是将前一个命令的输出作为后一个命令的输入。wc 命令用来计算文本的行数,第一个数字显示的是行的数目,可以用来计算进程的数目。计算出进程数目并做记录。 执行man ps命令,可以打开Linux用户命令手册。了解ps命令的用法。输入wq命令可退出用户手册的阅读。man命令可以执行吗?结果如何? 答:Man ps时出现

计算机操作系统读书笔记

操作系统读书报告 课题:<<解析Windows操作系统>>读书笔记 院系:__ _____ 班级:__ __ 姓名:__ _________________ 学号:___ ____________ 指导老师:___________________ 2011年10月18日

<<解析Windows操作系统>>读书笔记这段时间读了<<解析windows操作系统>>这本书。学到了很多知识。总结了如下笔记。 Windows NT系列和Windows 95系列的区别: ?Windows NT支持多处理器,Windows 95不支持。 ?Windows NT文件系统支持安全性(例如自主访问控制),Windows 95不支持。 ?Windows NT是完全32位,而Windows 95从Windows 3.1和MS-DOS 继承了大量的16位代码。 ?Windows NT是完全可重入的,Windows 95有一部分是不可重入的。 ?Windows NT可以让16位应用程序运行在它们自己的地址空间中,而Windows 95总是在一个共享的地址空间中运行16位Windows应用程序,在这个共享的地址空间中,这些程序相互影响,甚至一个程序破坏(或挂起)别的程序。 ?Windows NT进程共享的内存只对哪些影射了这一共享内存的进程才是可见的,在Windows 95上,所有的共享内存都是可见的,而且在任何一个进程内都可以写这些内存,因此任何一个进程都可以改写或者破坏其他协作进程所使用的共享内存。 ?在Windows 95中,有一些关键的操作系统页面在用户模式下是可写的,从而允许一个用户程序破坏系统,或者使系统崩溃。

操作系统原理实验五

实验五线程的同步 1、实验目的 (1)进一步掌握Windows系统环境下线程的创建与撤销。 (2)熟悉Windows系统提供的线程同步API。 (3)使用Windows系统提供的线程同步API解决实际问题。 2、实验准备知识:相关API函数介绍 ①等待对象 等待对象(wait functions)函数包括等待一个对象(WaitForSingleObject ())和等待多个对象(WaitForMultipleObject())两个API函数。 1)等待一个对象 WaitForSingleObject()用于等待一个对象。它等待的对象可以为以下对象 之一。 ·Change ontification:变化通知。 ·Console input: 控制台输入。 ·Event:事件。 ·Job:作业。 ·Mutex:互斥信号量。 ·Process:进程。 ·Semaphore:计数信号量。 ·Thread:线程。 ·Waitable timer:定时器。 原型: DWORD WaitForSingleObject( HANDLE hHandle, // 对象句柄 DWORD dwMilliseconds // 等待时间 ); 参数说明: (1)hHandle:等待对象的对象句柄。该对象句柄必须为SYNCHRONIZE访问。 (2)dwMilliseconds:等待时间,单位为ms。若该值为0,函数在测试对象的状态后立即返回,若为INFINITE,函数一直等待下去,直到接收到 一个信号将其唤醒,如表2-1所示。 返回值: 如果成功返回,其返回值说明是何种事件导致函数返回。

Static HANDLE hHandlel = NULL; DWORD dRes; dRes = WaitForSingleObject(hHandlel,10); //等待对象的句柄为hHandlel,等待时间为10ms 2)等待对个对象 WaitForMultiple()bject()在指定时间内等待多个对象,它等待的对象与 WaitForSingleObject()相同。 原型: DWORD WaitForMultipleObjects( DWORD nCount, //句柄数组中的句柄数 CONST HANDLE * lpHandles, //指向对象句柄数组的指针 BOOL fWaitAll, //等待类型 DWORD dwMilliseconds //等待时间 ); 参数说明: (1)nCount:由指针 * lpHandles指定的句柄数组中的句柄数,最大数是MAXIMUM WAIT OBJECTS。 (2)* lpHandles:指向对象句柄数组的指针。 (3)fWaitAll:等待类型。若为TRUE,当由lpHandles数组指定的所有对象被唤醒时函数返回;若为FALSE,当由lpHandles数组指定的某一个 对象被唤醒时函数返回,且由返回值说明是由于哪个对象引起的函数 返回。 (4)dwMilliseconds:等待时间,单位为ms。若该值为0,函数测试对象的状态后立即返回;若为INFINITE,函数一直等待下去,直到接收到 一个信号将其唤醒。 返回值:、 如果成功返回,其返回值说明是何种事件导致函数返回。 各参数的描述如表2-2所示。

相关主题
文本预览
相关文档 最新文档