操作系统课程设计报告 10Word文档下载推荐.docx
- 文档编号:16128672
- 上传时间:2022-11-20
- 格式:DOCX
- 页数:9
- 大小:103.64KB
操作系统课程设计报告 10Word文档下载推荐.docx
《操作系统课程设计报告 10Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《操作系统课程设计报告 10Word文档下载推荐.docx(9页珍藏版)》请在冰豆网上搜索。
1.3流程图1
1.4实现技术2
1.5设计结论和心得2
2Linux代码分析3
2.1功能说明3
2.2接口说明3
2.3局部数据结构3
2.4流程图3
2.5以实例说明运行过程4
1文件存储空间管理问题课程设计
1.1题目分析
文件存储空间管理问题是操作系统中的重要问题之一。
主要用于对文件和相应的盘块进行分配与互斥。
在系统中有1个空闲盘块,我们要向盘块中存放文件,为了实现存储空间的分配,系统首先必须能记住存储空间的使用情况,为此,系统应为分配存储空间而设置相应的数据结构;
其次,系统应提供对存储空间进行分配和回收的手段。
数据结构
文件存储空间问题中涉及的数据结构包括存储盘块、文件要占用的目标盘块、表示空盘块的信号量、表示已占用盘块的信号量…等。
为了实现这些数据结构,用Java语言定义变量如下:
intb=console.nextInt();
//用来写入文件将要占用的盘块
int[]FAT=newint[20];
//要分配的盘块
int[]temp=newint[20];
//用来输出文件要占用的盘块
1.2流程图
生产者生产产品流程如图1所示:
图1 文件存储流程图
1.3实现技术
为实现上述设计,采用Java语言,Eclipse开发环境。
具体采用的技术如下:
(1)应用Eclipse软件,和其带有的API进行算法的编写
(2)结合书上的理论知识,对文件存储空间分配的算法进行需求分析
实现步骤如下:
(1)定义模拟盘块(数组,容量例为20),并由用户输入要存入的文件名,以及该文件想要存入的目标盘块。
int[]temp=newint[20];
Scannerconsole=newScanner(System.in);
while(true){
System.out.println("
请输入文件名:
"
);
Strings=console.next();
booleanfl=true;
while(fl){
System.out.println("
请输入要分配的盘块(0-20/-1结束):
intb=console.nextInt();
inti=1;
(2)对文件当前要占用的盘块进行存储,然后存放下一盘块的索引
FAT[b]=flag;
b=flag;
temp[i]=b;
(3)解决多个文件录入问题。
a:
while(true){
intflag=console.nextInt();
if(FAT[b]!
=0){
System.out.println("
该盘块已经分配,请重新输入!
(4)对文件、文件占用的盘块、盘块的分配和空闲,以及相关的相位图进行输出打印。
System.out.println("
文件名:
+s);
盘块分配情况是:
for(intq=0;
q<
FAT.length;
q++){
System.out.print(FAT[q]+"
\t"
}
System.out.println();
相应的位示图:
for(intj=0;
j<
j++){
if(FAT[j]!
System.out.print(1+"
}else{
System.out.print(0+"
}
文件"
+s+"
所占用的盘块有"
for(intx=0;
x<
temp.length;
x++){
if(temp[x]!
=0&
&
temp[x]!
=-1){
System.out.print(temp[x]+"
运行结果如下:
(1)输入文件名及文件所请求的盘块号
(2)对文件a相关的盘块,位示图进行输出打印。
(3)操作继续输入,或者清除数据。
3.1因为文件a已经对2号盘块请求过了,所以需要重新输入。
3.2重新对文件b进行盘块的分配和输出打印。
1.4设计结论和心得
通过课程设计得到如下结论:
(1)程序满足要求。
(2)在系统分配文件所需盘块时,需调用盘块分配过程来完成,栈顶指针下移;
在系统回收盘块时,需调用盘块回收过程进行回收,将空闲盘块中的数据进行清零。
有如下几点心得体会:
如何登记空闲区的分布情况;
如何按需要给一个文件分配存储空间;
如何回收因文件删除而释放的空间。
本程序的设计,刚好通过文件目录法和空白块链法实施空间分配方案,从而很好的解决了这些问题。
在设计的过程中,有一些小小的误区,这些误区都是平时学习遗留下来的没有及时解决的问题。
通过这次程序设计,在老师的讲解与帮助下,结合课本,使得我对文件存储管理的过程有了更为深刻的理解。
2Linux代码分析
为了进一步了解操作系统内核,学习了Linux操作系统的进程同步程序,主要程序源代码如下:
Permission()
#define_LINUX_PREFETCH_H
#ifndefARCH_HAS_PREFETCH
staticinlinevoidprefetch(constvoid*x){;
}
#endif
#ifndefARCH_HAS_PREFETCHW
staticinlinevoidprefetchw(constvoid*x){;
#ifndefARCH_HAS_SPINLOCK_PREFETCH
#definespin_lock_prefetch(x)prefetchw(x)
#ifndefPREFETCH_STRIDE
#definePREFETCH_STRIDE(4*L1_CACHE_BYTES)
#endif//PREFETCH_STRIDE
staticinlinevoidprefetch_range(void*addr,size_tlen)
{
#ifdefARCH_HAS_PREFETCH
char*cp;
char*end=addr+len;
for(cp=addr;
cp<
end;
cp+=PREFETCH_STRIDE)
prefetch(cp);
#endif//ARCH_HAS_PREFETCH
#endif//_LINUX_PREFETCH_H
-----asm-x86_64\processor.h---prefetch()---------
staticinlinevoidprefetch(void*x)
asmvolatile("
prefetcht0%0"
:
:
"
m"
(*(unsignedlong*)x));
2.1功能说明
这一段程序的主要功能为:
(1)Linux文件系统的访问权限是一种二维结构。
就同一个用户来说,对一个文件的访问分成读、写和执行三种方式,因而形成三种不同的权限,每个进程在其task_struct结构中有uid、euid等说明其身份的信息。
这就是判定一个进程是否有权对某个文件进行某种访问的基础。
而对访问权限的判定就主要由函数permission()完成的。
(2)根据低三位判断,如果发出的请求操作属于文件低三位权限的允许操作或者被赋予了超越特权,则允许对该文件执行发出的访问请求操作,若当前进程确实不属于文件主的同组人,那就是属于“其他”用户了,此时则需要第二段代码mode不需要移位,因为常数S_irwxo的值为7,所以比对的是此时mode中的最低三位。
此时比对失败,则看当前进程是否得到授权,允许其CAP_DAC_OVERRIDE,也就是可以凌驾于文件系统的访问权限控制机制之上,则基本上不受其限制。
2.2接口说明
本程序的输入参数为:
ls-lxxx.xxx(xxx.xxx是文件名)
输出结果为:
-rw-rw-r——
2.3局部数据结构
本程序共有4个局部变量及数据结构,其类型定义及语义如下:
Intpermission(structinode*inode,intmask)
Intretval;
Intvfs_permission(structinode*inode,intmask)
Intmode=inode->
i_mode;
2.4流程图
本程序的流程图如图2所示
图2 程序流程图
2.5以实例说明运行过程
例如,当有输入文件名字Host,根据分析,运行结果应为:
-rwxrwxrx
实际运行结果如下:
rwxrwxrwx。
证明程序分析无误。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 操作系统课程设计报告 10 操作系统 课程设计 报告