A. 操作系统如何管理存储器
不就是管理文件吗,不用怎么管理的,分好盘,每个盘里装上特定的东西就可以了,用资源管理器就行了,
B. 操作系统上机实验—存储管理
#include<stdio.h>#include <dos.h>#include<stdlib.h>#include<conio.h>#include<iostream.h>
#define n 10 /*假定系统允许的最大作业数为n,假定模拟实验中n值为10*/ #define m 10 /*假定系统允许的空闲区表最大为m,假定模拟实验中m值为10*/ #define minisize 100 /*空闲分区被分配时,如果分配后剩余的空间小于minisize,则将该空闲分区全部分配,若大于minisize,则切割分配*/
struct { float address; /*已分配分区起始地址*/ float length; /*已分配分区长度,单位为字节*/ int flag; /*已分配区表登记栏标志,用"0"表示空栏目*/ }used_table[n]; /*已分配区表*/
struct { float address; /*空闲区起始地址*/ float length; /*空闲区长度,单位为字节*/ int flag; /*空闲区表登记栏标志,用"0"表示空栏目,用"1"表示未分配*/ }free_table[m]; /*空闲区表*/
void allocate(char J,float xk) /*给J作业,采用最佳分配算法分配xk大小的空间*/ { int i,k; float ad; k=-1;
for(i=0;i<m;i++) /*寻找空间大于xk的最小空闲区登记项k*/ if(free_table[i].length>=xk&&free_table[i].flag==1) if(k==-1||free_table[i].length<free_table[k].length) k=i; if(k==-1)/*未找到可用空闲区,返回*/ { printf("无可用空闲区\n"); return; }
/*找到可用空闲区,开始分配:若空闲区大小与要求分配的空间差小于minisize大小,则空闲区全部分配;若空闲区大小与要求分配的空间差大于minisize大小,则从空闲区划出一部分分配*/ if(free_table[k].length-xk<=minisize) { free_table[k].flag=0; ad=free_table[k].address; xk=free_table[k].length; } else { free_table[k].length=free_table[k].length-xk; ad=free_table[k].address+free_table[k].length; } /*修改已分配区表*/ i=0; while(used_table[i].flag!=0&&i<n) /*寻找空表目*/ i++;
if(i>=n) /*无表目可填写已分配分区*/ { printf("无表目填写已分分区,错误\n");
/*修正空闲区表*/ if(free_table[k].flag==0) /*前面找到的是整个空闲分区*/ free_table[k].flag=1; else {/*前面找到的是某个空闲分区的一部分*/ free_table[k].length=free_table[k].length+xk; return; } } else {/*修改已分配表*/ used_table[i].address=ad; used_table[i].length=xk; used_table[i].flag=J; }
return; }/*主存分配函数结束*/
void reclaim(char J) /*回收作业名为J的作业所占主存空间*/ { int i,k,j,s,t; float S,L;
/*寻找已分配表中对应登记项*/ s=0; while((used_table[s].flag!=J||used_table[s].flag==0)&&s<n) s++;
if(s>=n)/*在已分配表中找不到名字为J的作业*/ { printf("找不到该作业\n"); return; }
/*修改已分配表*/ used_table[s].flag=0;
/*取得归还分区的起始地址S和长度L*/ S=used_table[s].address; L=used_table[s].length; j=-1;k=-1;i=0;
/*寻找回收分区的空闲上下邻,上邻表目k,下邻表目j*/ while(i<m&&(j==-1||k==-1)) { if(free_table[i].flag==1) { if(free_table[i].address+free_table[i].length==S)k=i;/*找到上邻*/ if(free_table[i].address==S+L)j=i;/*找到下邻*/ } i++; }
if(k!=-1) if(j!=-1) /* 上邻空闲区,下邻空闲区,三项合并*/ { free_table[k].length=free_table[j].length+free_table[k].length+L; free_table[j].flag=0; } else /*上邻空闲区,下邻非空闲区,与上邻合并*/ free_table[k].length=free_table[k].length+L; else if(j!=-1) /*上邻非空闲区,下邻为空闲区,与下邻合并*/ { free_table[j].address=S; free_table[j].length=free_table[j].length+L; } else /*上下邻均为非空闲区,回收区域直接填入*/ { /*在空闲区表中寻找空栏目*/ t=0; while(free_table[t].flag==1&&t<m) t++; if(t>=m)/*空闲区表满,回收空间失败,将已分配表复原*/ { printf("主存空闲表没有空间,回收空间失败\n"); used_table[s].flag=J; return; } free_table[t].address=S; free_table[t].length=L; free_table[t].flag=1; } return; }/*主存回收函数结束*/
int main( ) { int i,a; float xk; char J;
/*空闲分区表初始化:*/ free_table[0].address=10240; /*起始地址假定为10240*/ free_table[0].length=10240; /*长度假定为10240,即10k*/ free_table[0].flag=1; /*初始空闲区为一个整体空闲区*/ for(i=1;i<m;i++) free_table[i].flag=0; /*其余空闲分区表项未被使用*/
/*已分配表初始化:*/ for(i=0;i<n;i++) used_table[i].flag=0; /*初始时均未分配*/
while(1) { printf("选择功能项(0-退出,1-分配主存,2-回收主存,3-显示主存)\n"); printf("选择功项(0~3) :");
scanf("%d",&a); switch(a) { case 0: exit(0); /*a=0程序结束*/
case 1: /*a=1分配主存空间*/ printf("输入作业名J和作业所需长度xk: "); scanf("%*c%c%f",&J,&xk); allocate(J,xk); /*分配主存空间*/ break;
case 2: /*a=2回收主存空间*/ printf("输入要回收分区的作业名"); scanf("%*c%c",&J); reclaim(J); /*回收主存空间*/ break;
case 3: /*a=3显示主存情况*/ /*输出空闲区表和已分配表的内容*/ printf("输出空闲区表:\n起始地址 分区长度 标志\n"); for(i=0;i<m;i++) printf("%6.0f%9.0f%6d\n",free_table[i].address,free_table[i].length, free_table[i].flag); printf(" 按任意键,输出已分配区表\n"); getch(); printf(" 输出已分配区表:\n起始地址 分区长度 标志\n"); for(i=0;i<n;i++) if(used_table[i].flag!=0) printf("%6.0f%9.0f%6c\n",used_table[i].address,used_table[i].length, used_table[i].flag); else printf("%6.0f%9.0f%6d\n",used_table[i].address,used_table[i].length, used_table[i].flag); break;
default:printf("没有该选项\n"); }/*case*/ }/*while*/
return 1;}
C. 操作系统 存储器管理
M是3时,缺页次数是6,缺页率是50%
M是4时,缺页次数是3,缺页率是25%
D. 操作系统中 存储器对什么进行管理
存储管理即是对主存的管理,它是操作系统的重要功能之一。主存储器是计算机系统中的一种宝贵资源,对主存的管理和有效使用是操作系统中十分重要的内容。为了便于对主存进行有效的管理,应该将主存分成若干个区域,以便同时存放多个用户程序和系统软件。因此,存储管理应具有如下功能:主存的分配和回收、提高主存的利用率、“扩充”主存容量和存储保护。存储分配主要解决多道作业之间划分主存空间的问题,存储分配有三种主要方式:直接分配方式、静态分配方式和动态分配方式。绝大多数计算机系统都采用静态分配方式或动态分配方式。为了实现静态和动态两种存储分配策略,需要采用将逻辑地址与物理地址分开,并对逻辑地址实施地址重定位技术。所谓重定位是由于一个作业装入到与其地址空间不一致的存储空间时所引起的有关地址调整过程,实质上,这是一个地址变换过程,地址变换也称为地址映射。根据地址变换进行的时间及采用的技术手段不同,可以把重定位分为两类:静态重定位和动态重定位。所谓静态重定位是在程序运行之前,由链接装配程序进行的重定位。静态重定位的特点是无需增加硬件地址变换机构,但要求为每个程序分配一个连续的存储区,且在程序执行期间不能移动,故难于做到程序和数据的共享;动态重定位是在程序的执行过程中,每当访问到指令或数据时,将要访问的程序或数据的逻辑地址转换成物理地址。动态重定位的实现需要依靠硬件地址变换机构。最简单的实现方法是利用一个重定位寄存器。动态重定位的特点是需要附加硬件的支持,优点是可以将程序分配到不连续的存储区中,在程序运行之前可以只装入部分代码即可运行,然后在程序运行期间,根据需要动态地申请分配内存,所以,便以程序段的共享,并且可向用户提供一个比主存的存储空间大得多的地址空间,该地址空间也称为虚拟存储器。
E. 操作系统:请求分页存储管理模拟实现
#include<iostream.h>
#include<stdlib.h>
#include<iomanip.h>
#include"windows.h"
#include"os.h"
#define n 64//实验中假定主存的长度
#define m 4//实验中假定每个作业分得主存块块数
int p[m];//定义页
struct
{
short int lnumber;//页号
short int flag;//表示该页是否在主存,“1”表示在主存,“0”表示不在主存
short int pnumber;//该页所在主存块的块号
short int write;//该页是否被修改过,“1”表示修改过,“0”表示没有修改过
short int dnumber;//该页存放在磁盘上的位置,即磁盘块号
short int times;//被访问的次数,用于LRU算法
}page[n];//定义页表
//各个函数的实现如下:
computer::computer()
{
int i;
for(i=0;i<n;i++)
{
page[i].lnumber = i;
page[i].flag = 0;
page[i].pnumber = 10000;//用10000表示为空
page[i].write = 0;
page[i].dnumber = i;
page[i].times = 0;
}//初始化页表
for(i=0;i<m;i++)
{
page[i].pnumber = i;
}
for(i=0;i<m;i++)
{
p[i] = i;
page[i].flag = 1;
}//初始化页
}
void computer::showpagelist()
{
int i;
cout<<"页号"<<"\t"<<"是否在主存中"<<"\t"<<"块 号"<<"\t"<<"是否被修改过"<<"\t"<<"磁盘块号"<<"\t"<<"访问次数"<<endl;
for(i=0;i<n;i++)
{
cout<<page[i].lnumber<<"\t"<<page[i].flag<<" "<<page[i].pnumber<<"\t"<<page[i].write<<" "<<page[i].dnumber<<" \t"<<page[i].times<<endl;
}
}
void computer::showpage()
{
int i;
for(i=0;i<m;i++)
{
cout<<"\t"<<p[i];
}
cout<<endl;
}
void computer::transformation()
{
unsigned logicAddress,logicNumber,innerAddress,physicsAddress,physicsNumber;
int i,head=0,fail = 0;
int method,temppage=0;
short int times = 10000;
cout<<"请输入一个逻辑地址(四位十六进制数):";
cin>>hex>>logicAddress;//读入逻辑地址
logicNumber = logicAddress >> 10;//得到页号
cout<<"页号为:"<<logicNumber<<endl;
innerAddress = logicAddress & 0x03ff;//得到页内地址
cout<<"页内地址为:"<<innerAddress<<endl;
for(i=0;i<n;i++)
{
if(logicNumber==(unsigned)page[i].lnumber)
{
if(page[i].flag == 1)
{
cout<<"请求的页面在主存中!"<<endl;
page[i].times++;
physicsNumber = page[i].pnumber;//由页号得到块号
cout<<"请求的主存块号为:"<<physicsNumber<<endl;
physicsAddress = physicsNumber << 10 |innerAddress;//得到物理地址
cout<<"请求的物理地址为:"<<physicsAddress<<endl;//输出物理地址
break;
}
else
{
cout<<"请求的页面不在主存中! 将进行缺页中断处理!"<<endl<<"请选择算法!"<<endl;
cout<<"1.先进先出"<<endl<<"2.最近最少用"<<endl<<"请选择置换算法:";
cin>>method;
if(method == 1) //采用先进先出算法
{
cout<<"采用先进先出算法!"<<endl;
fail = p[head];
cout<<"第"<<fail<<"页将被替换!"<<endl;
p[head] = logicNumber;
head = (head+1) % m;
if(page[fail].write == 1)
cout<<"第"<<fail<<"页曾被修改过!"<<endl;
page[fail].flag = 0;
page[logicNumber].flag = 1;
page[logicNumber].write = 0;
page[logicNumber].pnumber = page[fail].pnumber;
page[fail].pnumber = 10000;
page[logicNumber].times++;
break;
}
else if(method == 2) //采用最近最少用算法
{
cout<<"采用最近最少用算法!"<<endl;
for(i=0;i<n;i++)
{
if(page[i].flag == 1)
{
if(page[i].times<times)
{
times = page[i].times;
temppage = page[i].lnumber;
}
}
}
cout<<"第"<<temppage<<"页将被替换!"<<endl;
for(i=0;i<m;i++)
{
if(p[i] == temppage)
{
p[i] = logicNumber;
}
}
if(page[temppage].write == 1)
cout<<"第"<<temppage<<"页曾被修改过!"<<endl;
page[temppage].flag = 0;
page[logicNumber].flag = 1;
page[logicNumber].write = 0;
page[logicNumber].pnumber = page[temppage].pnumber;
page[temppage].pnumber = 10000;
page[logicNumber].times++;
break;
}
else
{ cout<<"你输入有误,即将退出!";
exit(1);
}
}
}
}
}
void main()
{
char c,d;
computer os;
cout<<"页表正在初始化中...,3秒钟后为你显示页和页表!"<<endl;
Sleep(3000);
os.showpage();
os.showpagelist();
T:
os.transformation();
cout<<"是否显示页和页表?(Y/N)";
cin>>c;
switch(c)
{
case 'y':
os.showpage();
os.showpagelist();
case 'n':
cout<<"是否继续进行请求分页?(Y/N)";
cin>>d;
if (d=='Y'||d=='y')
goto T;
else if (d=='N'||d=='n')
exit(1);
else
cout<<"输入错误!"<<endl;
default:cout<<"输入错误!"<<endl;
}
}
F. 操作系统课程设计 (包括进程管理、进程的同步和互斥、存储管理)
- 课程设计的计算机操作系统程序
课程概述
计算机操作系统是中央广播电视大学计算机科学与技术专业(本科),系统设置必修课程。教学总时数72.4学分,开设一学期。前课程,计算机组成原理,面向对象编程和数据结构。
计算机操作系统课程是计算机专业的课程,通过学习,使学生掌握电脑作业系统的设计和组成的基本原则之一;计算机操作系统的基本概念和新的概念,术语和术语;了解计算机的发展,操作系统的功能和设计技巧和方法,基本操作使用最常用的计算机操作系统(DOS,Windows,UNIX或Linux)的。
?课程内容
主要内容包括:概述电脑的操作系统,作业管理,文件管理,存储管理,输入输出设备管理,工艺和管理处理器,操作系统结构和编程。
二,系统的教学内容和教学要求
章概述操作系统的中
教学内容:
操作系统的定义和发展形成的操作系统和五个主要类型,操作系统五大功能特性的操作系统的性能,配置的操作系统,“生成”的概念
教学要求:
主:什么是操作系统;知道五类和五功能的操作系统;
至少掌握:掌握操作系统的安装,使用和维护的实际怀抱;
理解:如何理解一个初步的了解,熟悉和解剖学的人机交互界面的操作系统
任务的作业管理
教学内容如下:
的特点,人机界面的发展;操作系统的shell语言的第一,第二和第三代接口的发展特点,基本键盘命令和系统调用任务调度算法; 教学要求:
主的人机界面设计
大师:掌握基本的作业系统人机界面的设计思路;
理解:传统的接口界面
章文件管理的
教学内容:
文件管理任务和功能的操作系统文件的结构和分类的物理结构和逻辑结构的文件,文件目录结构,文件访问控制和安全机制,文件系统模型结构;
教学要求:
水平:基本的文件访问控制和系统管理;
>掌握的文件系统目录分类管理功能;
理解:文件系统的程序设计
的章内部存储管理
教学内容:
内存分区,分页,子段的管理理念;物理地址和逻辑地址内存“扩展”技术;存储管理,支柱存储管理的内存分配算法的
教学的要求:
掌握基本配置:内存管理和调度方法;
主:主不同的分区存储管理,分页和分段方法;
有关:有效利用的内存空间
第五章输入和输出设备管理器的教学内容:
的输入和输出设备的功能分类;独占的,共享的,虚拟装置的管理功能;输入和输出设备的处理程序;管理策略的输入和输出设备;
教学要求:
法师:法师的输入和输出设备的管理特性;
法师:法师分类设计方法的输入和输出设备;
明白了:
编程元素的输入和输出设备处理程序第
教学内容的低级别的处理器管理:
操作系统的核心功能,“过程”的概念,过程的并发和并行的基本状态的转换的过程;进程调度算法进程同步和互斥过程PV操作,“锁”的概念;
教学要求:
大师:在操作系统内核运行的基本概念“过程“;
掌握的基本转换过程中的状态和特征;
理解:操作系统
教学内容,进程调度算法的编程方案的结构
BR />第七章:
操作分层的模块化的系统结构设计和操作系统的测试;的
教学的要求:
本章教学基本要求:了解基本的设计思路和方法现代计算机操作系统
三,教学媒体
本课程使用的教学媒体:文字材料,视频材料,网络教学和辅导。
1。文字材料
计算机操作系统(2)武企业万元清华大学出版社
注:本课程实验的主要教材。
文字教材过程中的主要传播媒介。准备的文字材料,同时保持先进性,科学的学科体系,这两种作业系统的理论,技术,实现了一体化的三个强调的能力。
2。视频教材
该课程16节和视频,每讲50分钟,讲授的课程集中困难,科目汇总。为了帮助学生理解操作系统的整体概念和思想,伍启元教授扬声器。
当然,视频与相应的文字材料,注重艺术表达播放视频教材,教学形象化。
3。
在线教学网上教学和指导,咨询与上述有机介质方面的作用:(1)释放的教学和指导性文件,课程公告,咨询,参考材料;(2)根据工程进度教学,心理咨询聊天室发表的一篇文章“自我测试题(3)实时Q&A,一天到一天的课程论坛Q;(4)开展网上教师培训与教学研讨会。
文字材料的基础上,对学生的学习,视频教科书的补充文字材料,在线咨询是一个方便的教学和学习方式的互动。总之,分工和各种媒体,让学生有更大的自主学习空间,以方便学生自由选择,自主学习,提高学生的自我学习能力。
教学安排建议
当然主要教科书和课程实验教学安排建议
教学点,请根据中央电大统一安排课程,面对面辅导的要求,如表1所示。
表1的主要教科书和课程实验教学安排建议
每周教学内容小时的实验内容推荐小时
操作系统的教学安排概述
2操作系统定义了五种类型, 5 4
三人人机界面管理Linux的实践准备1
四个工作管理任务调度4
五个文件管理的任务和功能的Linux操作系统命令的逻辑结构和物理结构4
7个存储管理任务和功能2命令解释器4
九编制2
八分分配存储管理段4
分配的存储管理作业调度模拟编程的六个文件10设备管理的任务和职能
11种设备,技术和管理存储分配管理设计4
过程的定义和特征4 13进程调度和通信进程调度模拟编程 p> 15操作系统级模块结构僵局的产生和处理14 26 4
(总复习)4
共56条16
课程视频内容,示于表2。
章教学内容表2视频教材课程小时的视频时间分配
操作系统提供了一个概述8小时4
运营管理8小时2
文件管理2
8小时的存储管理8小时
5个设备管理器
6过程管理8小时10小时4
7操作系统的系统程序结构6小时0
56小时16
2在线咨询在线咨询内容
包括教学文件,课程辅导,网络教室。充分利用网络资源,和偶尔的在线课程相关的辅导材料,定期,根据教学在线辅导和考试Q&A活动,适当安排的需要。具体安排如下:
?
包括课程介绍,教师,教学大纲,教学设计,教学档案。
?课程辅导
包括课程学习和答案,专题辅导,习题和答案,自我测试,评估说明,网上还提供了教师讲课教案教学点的教学使用。
?网络课堂
包括直播课堂和IP课件。
基于网络的教学活动:中央广播电视大学一般集中在每学期安排的实时在线辅导学生,教师的教学和研究活动。具体的时间表,每学期上发布的TVU的网上家园。
?论坛:每天的日常应答的过程中。
课程的课堂直播第一学期,通过教育电视台播出,安排四次直播课堂,每次50分钟。的第一堂课3个教学点,难点的教学和演讲后代表咨询审查的辅导和考试说明的过程中反映的共性问题。直播课堂挂在网页上的内容。
工作
课程形成性评估书,当然工作量。工作成绩计入课程成绩。中央电大的工作,不时抽查,检查审查和完成作业。
课程考试,请参阅“中央广播电视大学计算机操作系统课程评估的指示。建议
五,教学方法?教学建议
(1)计算机操作系统是一个实用的课程。其特点是概念多,涉及范围广。要求教学辅导深和混乱的概念来进行详细说明,并详细描述每章的重点,管理和控制的调度算法技能。
(2)注重培养学生熟悉的操作系统,以及在维护操作系统的问题进行分析,并在实验中解决问题的能力。
?建议
(1)从宏观和微观把握学习操作系统。在宏观上,要认识到在计算机系统中的操作系统的地位清除操作系统的整体结构;微观方面应把握的操作系统是管理计算机资源(过程中,处理器,内存,文件,设备),了解概念,原理和技术。
(2)操作系统是计算机技术和管理技术相结合的联想日常生活学习重复熟悉的样品管理实现运营系统的管理方法,以加深对问题的理解。
(3)要注意加强自我学习的能力,有能力实现这一目标的“学习”的文化。