操作系统论文2

合集下载

有关计算机操作系统及应用的参考论文(2)

有关计算机操作系统及应用的参考论文(2)

有关计算机操作系统及应用的参考论文(2)有关计算机操作系统及应用的参考论文篇二《计算机操作系统探讨》摘要:21世纪是信息化时代,计算机的应用将更加广泛,为了更好的使用计算机,应该对操作系统基本了解,因此本文主要对操作系统的概念和发展史进行探讨,并对Windows,UNIX和Linux操作系统做了简单的介绍,使广大读者加深对计算机操作系统的理解。

关键词:计算机操作系统;Windows;UNIX;Linux中图分类号:TP316 文献标识码:A 文章编号:1674-7712 (2014) 04-0000-01当今现代,人们学习、生活等都已经不能离开计算机,计算机由硬件和软件组成,在计算机系统软件中最重要的软件就是操作系统。

操作系统如同指挥官一样,指挥着计算机里的所有部件,并指挥它们按照某个计划协同工作。

计算机系统越复杂,操作系统的作用和地位就越重要。

一、操作系统概述操作系统,负责管理计算机硬件资源和软件资源,并通过这种管理为用户提供服务,成为计算机和用户之间的接口。

操作系统的主要功能是:(1)处理机管理;(2)存储器管理;(3)文件管理;(4)设备管理;(5)用户接口。

基本上所有的操作系统都具有如下的特征:(1)并发性;(2)共享性;(3)虚拟性;(5)不确定性。

二、操作系统发展史操作系统的产生迄今已有70年的时间,最早期的操作系统诞生于20世纪50年代中期,只是简单的单道批处理操作系统;接着演变成了多道程序批处理系统,与此同时,实时操作系统也应运而生;最后伴随着微型机、多处理机和计算机网络的发展,与之相对应的微机OS、多处理机OS和网络OS也随之迅速发展。

(一)串行处理系统世界上最早的计算机诞生之时,并没有操作系统,当时程序员直接和硬件打交道,具体流程是:首先程序员将已经穿孔的纸带(或卡片)装入内存,接着通过控制台或开关启动程序运行,最后当程序全部运行完毕,取出纸带(或卡片)和运算结果。

该系统严重地降低了计算机资源的利用率,形成了所谓的人机矛盾。

Linux操作系统毕业论文(1)

Linux操作系统毕业论文(1)

Linux操作系统毕业论文(1)Linux操作系统毕业论文随着互联网的普及和计算机技术的不断发展,操作系统作为计算机系统的核心组件,起着举足轻重的作用。

Linux作为一种开源的操作系统,其优越的性能和灵活的定制性已经得到了广泛的认可。

本文将探讨Linux操作系统的特点、应用和发展趋势。

一、 Linux操作系统的特点1.开源性:Linux操作系统的源代码完全公开,任何人都可以浏览、修改、复制和分发。

这种开放性不仅激发了广大开发者的热情,同时也为用户提供了更高的安全性保障。

2.多用户支持:Linux操作系统支持多用户模式,能够同时为多个用户提供服务。

每个用户拥有独立的用户帐号和家目录,保证了每个用户之间的数据私密性。

3.多任务支持:Linux操作系统具有非常出色的多任务支持,能够同时执行多个应用程序。

这种特点不仅提高了系统的效率,同时也为用户提供了更好的用户体验。

4.安全性:Linux操作系统拥有严格的访问控制模式,能够对系统资源和用户数据实现精密的管理和控制。

对于病毒和黑客攻击等威胁,Linux操作系统的安全性也较高。

二、 Linux操作系统的应用1.网络服务器:Linux操作系统被广泛用于搭建各种网络服务器,如Web服务器、邮件服务器、FTP服务器等。

这种应用领域不仅适用于企事业单位,而且适用于个人和小型团队。

2.桌面系统:Linux已经成为了一种成熟的桌面操作系统,如Ubuntu、Fedora、Debian等。

这些操作系统拥有丰富的应用程序和界面,可以满足大部分用户的各种需求。

3.嵌入式系统:Linux能够为嵌入式应用领域提供强大的支持,如路由器、IP电话、数字电视机顶盒等。

这些领域对于空间、功耗、安全性等多方面的要求较高,而Linux正是能够满足这些要求的操作系统。

三、 Linux操作系统的发展趋势1.云计算:随着云计算的普及,Linux作为云计算最为流行的操作系统之一,将会受到更广泛的应用。

计算机操作系统论文

计算机操作系统论文

计算机操作系统论文计算机操作系统课程是计算机科学与技术专业的一门基础核心课程。

本课程从操作系统实现资源管理的管理的观点出发,阐述如何对计算机系统中的硬、软件资源进行管理。

下面是店铺给大家推荐的计算机操作系统论文,希望大家喜欢!计算机操作系统论文篇一《计算机操作系统课程教学改革探讨》摘要: 针对计算机操作系统课程在教学过程中学生总觉得抽象、难懂的问题,结合自己的教学经验,在教学内容方面提出了一些改进措施,并给出切实可行的、具体的实施办法。

Abstract: The author made some improvements and gave practical and concrete measures for the problems that students always feel abstract and difficult to understand in the teaching of computer operating system course, combining with his teaching experience in teaching.关键词: 计算机操作系统;教学改革;教学内容;教学方法Key words: computer operating system;teaching reform;teaching content;teaching methods0引言操作系统课程是计算机科学与技术专业的一门基础核心课程。

本课程从操作系统实现资源管理的管理的观点出发,阐述如何对计算机系统中的硬、软件资源进行管理,使计算机系统协调一致地、有效地为用户服务,充分发挥资源的使用效率,提高计算机系统的服务质量。

通过本课程的学习使学生掌握计算机操作系统的控制计算机硬件的基本原理以及设计方法和实现技术。

但该课程教学过程中普遍重点偏向操作系统原理的理论教学,而学生在没有学习该课程前对操作系统的认识只是在使用层面,使得学生在学习的过程中总觉得本课程所学内容与实际所用操作系统的偏差很大。

线程论文(计算机操作系统)

线程论文(计算机操作系统)

线程论文(计算机操作系统) 线程论文(计算机操作系统)1. 引言1.1 背景介绍1.2 研究目的1.3 论文结构2. 线程基础知识2.1 线程概念2.2 线程与进程的区别2.3 线程调度算法2.4 线程同步与互斥2.5 线程通信3. 多线程编程模型3.1 线程库介绍3.2 POSIX线程3.3 Java线程3.4 Windows线程4. 线程创建和销毁4.1 线程创建方法4.1.1 通过操作系统接口创建线程4.1.2 使用线程库创建线程4.2 线程销毁方法4.2.1 线程主动退出4.2.2 线程被动退出5. 线程同步与互斥5.1 互斥锁5.2 读写锁5.3 条件变量5.4 信号量5.5 屏障6. 线程调度6.1 抢占式调度与协同式调度6.2 进程调度策略6.2.1 先来先服务调度算法6.2.2 短作业优先调度算法6.2.3 优先级调度算法6.2.4 时间片轮转调度算法6.2.5 多级反馈队列调度算法7. 线程安全性7.1 线程安全性概述7.2 竞态条件7.3 原子操作7.4 临界区7.5 内存一致性问题8. 线程性能优化8.1 并发编程的性能瓶颈8.2 并发性优化技术8.2.1 减少锁的使用8.2.2 减少线程上下文切换8.2.3 提高数据局部性8.2.4 使用无锁数据结构8.3 常见的线程性能问题和解决方案9. 线程安全的设计与实现9.1 设计线程安全的接口9.2 使用锁进行线程安全的控制9.3 使用无锁数据结构实现线程安全附件:本文档涉及到的附件,请参阅附件部分。

法律名词及注释:1. 互斥锁:一种保护共享资源的机制,只能有一个线程拥有互斥锁,其他线程需要等待锁的释放才能访问该资源。

2. 读写锁:一种特殊的互斥锁,允许多个线程同时访问共享资源,但读操作和写操作不能同时进行。

3. 条件变量:一种线程间通信机制,用于在线程等待某个条件满足时暂停执行。

4. 信号量:一种用于控制多个线程对共享资源的访问的机制,可以用来实现线程同步与互斥。

linux操作系统课程论文

linux操作系统课程论文

Linux操作系统课程论文目录一、1.1什么是linux****************************************21.2Linux与其他操作系统有什么区***********************2二、Linux的安装******************************************3三、Linux的常用命令总结**********************************6四、X window系统总结*************************************9五、Linux常用工具的使用**********************************11六、Linux的NFS的使用***********************************15七、Linux Samba服务的使用*******************************19八、Linux OpenSSH与远程登录工具的使用********************23九、Linux系统管理与配置**********************************24十、Linux的脚本程序设计**********************************29一、什么是linux呢?简单地说,Linux是一套免费使用和自由传播的类Unix操作系统,它主要用于基于Intel x86系列CPU的计算机上。

这个系统是由世界各地的成千上万的程序员设计和实现的。

其目的是建立不受任何商品化软件的版权制约的、全世界都能自由使用的Unix兼容产品。

Linux的出现,最早开始于一位名叫Linus Torvalds 的计算机业余爱好者,当时他是芬兰赫尔辛基大学的学生。

他的目的是想设计一个代替Minix(是由一位名叫Andrew Tannebaum的计算机教授编写的一个操作系统示教程序)的操作系统,这个操作系统可用于386、486或奔腾处理器的个人计算机上,并且具有Unix操作系统的全部功能,因而开始了Linux雏形的设计。

毕业论文 安卓

毕业论文 安卓

毕业论文安卓安卓操作系统在移动设备领域的广泛应用,使得它成为了许多人毕业论文的研究对象。

本文将探讨安卓操作系统的发展历程、特点以及在毕业论文中的应用。

首先,我们来回顾一下安卓操作系统的发展历程。

安卓操作系统最初由安迪·鲁宾(Andy Rubin)等人于2003年创立,并于2005年被谷歌收购。

安卓的设计初衷是为智能手机提供一个开放的、可定制的操作系统。

随着智能手机市场的迅速发展,安卓迅速成为了全球最受欢迎的移动操作系统之一。

安卓操作系统的特点之一是开放性。

相比于其他操作系统,安卓允许用户自由选择应用程序和定制界面。

这种开放性为开发者提供了更大的创作空间,也为用户提供了更多的选择。

在毕业论文中,研究者可以通过分析安卓操作系统的开放性对用户体验、应用市场等方面进行深入研究。

另一个安卓操作系统的特点是多样性。

由于安卓操作系统的开放性,各个手机厂商可以根据自己的需求进行定制和优化。

这导致了市面上存在着各种不同的安卓手机,它们在硬件配置、界面设计等方面存在着差异。

在毕业论文中,研究者可以通过对不同安卓手机的比较研究,探讨其对用户体验和性能的影响。

此外,安卓操作系统还具有强大的生态系统。

谷歌为安卓提供了丰富的应用市场(Google Play)和开发者平台(Android Studio),使得开发者可以更加便捷地开发和发布应用程序。

这为毕业论文提供了研究的材料,例如,研究者可以通过分析应用市场的趋势和用户评论来研究应用程序的质量和用户满意度。

在毕业论文中,研究者可以从多个角度进行安卓操作系统的研究。

例如,他们可以通过用户调查和数据分析来研究安卓操作系统在用户群体中的普及程度和满意度。

另外,他们还可以通过开发安卓应用程序并进行实证研究,探讨安卓操作系统在特定领域中的应用潜力和优化方向。

总结起来,安卓操作系统作为一种广泛应用于移动设备的操作系统,具有开放性、多样性和强大的生态系统。

在毕业论文中,研究者可以通过对安卓操作系统的发展历程、特点以及应用领域的研究,为移动设备领域的发展提供有益的思考和建议。

OS操作系统论文

OS操作系统论文

《计算机操作系统》非MS-Win操作系统综述论文报告摘要手机操作系统一般只应用在高端智能化手机上。

目前,在智能手机市场上,中国市场仍以个人信息管理型手机为主,随着更多厂商的加入,整体市场的竞争已经开始呈现出分散化的态势。

从市场容量、竞争状态和应用状况上来看,整个市场仍处于启动阶段。

目前应用在手机上的操作系统主要有Palm OS、Symbian(塞班)、Windows mobile、Linux、Android(安卓)、iPhone(苹果)OS、Black Berry (黑莓)OS 6.0、Windows Phone 7(自Windows Phone7出现后,Windows Mobile系列正式退出手机系统市场)。

主流的智能手机有Google Android 和苹果的iOS 其次是三星的BaDa、WINDOWS Phone 、PALM 黑莓、(S60 UIQ)、LINUX 和非智能手机的操作系统也算不上真正意义的操作系统S40是诺基亚软件平台它的系统诺基亚并未命名至于三星LG等大多使用自己开发的非主流系统。

智能与非智能手机都支持JAVA ,智能机与非智能机的区别主要看能否基于系统平台的功能扩展,非JAVA应用平台。

还有就是支持多任务。

关键字:手机操作系统;智能;市场Abstract:Mobile phone operating system generally used only in high-end intelligent mobile phone. At present, in the smartphone market, the Chinese market still with personal information management type mobile phone is given priority to, with more and more manufacturers to join, and the overall market competition has begun to present a diversified situation. From market capacity, the competition status and application status of perspective, the market is still at the start stage. At present the application on the mobile Phone operating system mainly has Palm OS, Symbian (Sabina), Windows mobile, Linux, Android (result), iPhone (apple) OS, Black Berry (blackberry) OS 6.0, Windows Phone 7 (from Windows Phone7 appearing, Windows mobile Phone series formally out system market).The mainstream of smart phones have Google Android and apple's iOS followed by Samsung BaDa, WINDOWS Phone, PALM blackberry, (S60 UIQ), LINUX and the smart phone operating system is not the real meaning of the operating system S40 is nokia software platform it system did not named as for nokia Samsung LG mostly used his development of a mainstream system. Intelligence and the smart phones support JAVA, and the difference between the smart phone smart phone platform based on system can basically see the function expansion, the JAVA application platform. There is support multitasking.Key word: mobile phone operating system; Intelligent; market目录摘要 (2)一.智能手机操作系统概况 (5)1.智能手机操作系统的背景与意义: (5)2.智能手机操作系统的技术特点: (7)3.智能手机操作系统的性能: (10)4.智能手机操作系统的市场占有: (12)《报告称中国iOS设备数量达2100万部》 (12)《去年底iOS市场份额升至43% 与Android势均力敌》 (15)5.智能手机操作系统价格: (19)6.智能手机操作系统用户意见: (21)二.多款智能手机操作系统简介 (28)1.WINDOWS PHONE (28)2.ANDROID (31)3.IOS: (40)参考文献: (44)一.智能手机操作系统概况1.智能手机操作系统的背景与意义:随着移动多媒体时代的到来和3G无线通信的兴起,互联网的普及。

linux操作系统(论文)

linux操作系统(论文)

Linux操作系统1. 引言Linux操作系统是一种开源的、免费的操作系统,具有稳定性、高性能和安全性等优点,因此在计算机领域得到广泛应用。

本文将着重介绍Linux操作系统的历史、特点、架构以及在实际应用中的优势。

2. 历史2.1 Unix操作系统的起源Linux操作系统起源于Unix操作系统,Unix操作系统由Ken Thompson和Dennis Ritchie在20世纪70年代初开发。

Unix操作系统成为了多用户、多任务操作系统的鼻祖,为后来的操作系统提供了参考和灵感。

2.2 Linux的开发与诞生Linux操作系统的开发始于1991年,当时Linus Torvalds在芬兰赫尔辛基大学上学时开始对自己的个人计算机编写一个操作系统内核。

他将自己的操作系统命名为Linux,并在全球范围内开放源代码,吸引了大量开发者对其进行改进和贡献。

2.3 Linux的发展与应用随着Linux的不断发展,越来越多的人开始使用和推崇Linux操作系统。

Linux操作系统广泛应用于服务器、嵌入式系统、超级计算机等领域,在互联网时代的推动下,Linux形成了一个强大的生态系统。

3. 特点Linux操作系统具有以下主要特点:3.1 开源和免费Linux操作系统是开源的,用户可以自由获取、使用和修改其源代码。

这使得用户能够根据自己的需求对系统进行定制和优化,同时也使得Linux操作系统成为了一种免费的选择。

3.2 稳定性与可靠性由于开源特性和全球开发者的共同努力,Linux操作系统具有出色的稳定性和可靠性。

相比其他操作系统,Linux在长时间运行和高负载情况下表现更好,稳定性得到了业界的广泛认可。

3.3 高度可定制化Linux操作系统提供了丰富的命令行工具和配置选项,使得用户可以根据自己的需要对系统进行高度定制。

这种可定制性使得Linux操作系统适用于各种不同的场景和应用。

3.4 安全性由于开放源代码和许多安全性功能的内置,Linux操作系统被认为是相对较安全的操作系统之一。

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

一引言1.1实验的性质、目的和任务1.1.1性质操作系统是计算机专业的核心系统,此课程设计用于模拟操作系统的实现。

操作系统对计算机系统资源实施管理,是所有其他软件与计算机硬件的唯一接口,所有用户在使用计算机时都要得到操作系统提供的服务。

要掌握操作系统的基本概念、基本原理、设计方法和实现技术,具有初步分析实际操作系统的能力,为其今后在相关领域开展工作打下坚实的基础。

1.1.2任务模拟采用多道程序设计方法的单用户操作系统,该操作系统包括四部分内容:文件管理和用户接口、存储管理、设备管理、进程管理。

1.1.3目的通过模拟操作系统原理的实现,加深对操作系统工作原理和操作系统实现方法的理解;通过模拟操作系统原理的实现练习编程,进一步了解操作系统的实现方法;练习合作完成系统的团队精神和提高程序设计能力。

1.2实验要求和实验意义实现对操作系统的模拟,具体是在采用文件分配表的基础上实现单用户的磁盘文件管理部分和用户接口;加深对操作系统的工作原理和实现方式的理解,提高动手实践的能力。

1.3论文结构安排本论文主要内容:引言、系统分析与设计、系统实现、结束语、参考文献。

二系统分析与设计2.1系统要求模拟采用多道程序设计方法的单用户操作系统,该操作系统包括四部分内容:文件管理和用户接口、存储管理、设备管理、进程管理。

2.2主要模块2.2.1文件模块2.2.1.1文件模块的定义文件是在逻辑上具有完整意义的信息组合,它有一个名字做标识符。

一个文件必须要有一个文件名,用户利用文件名来访问文件。

文件名通常由一串字符构成,名字的长度因系统而异。

文件系统具有5大功能:完成文件存储空间的管理,实现文件名到物理地址的映射,实现文件和目录的操作管理,提供文件共享能力和安全可靠措施,文件系统向用户提供了有关文件和目录操作的接口。

2.2.1.2文件的逻辑结构文件的逻辑结构采用流式结构,流式文件指文件内的数据不再组成记录,只是一串的信息组合,字符是构成文件的基本单位,这种文件常常按长度来读取所需信息。

文件的内容均采用文本文件,系统中有两种文件:一种是存放任意字符的文件;一种是可执行文件:可执行文件的内容就是系统内进程的程序体。

2.2.1.3文件的物理结构实验中采用显示链接的物理文件结构,把磁盘中每一块的指针部分提出来,组织在一起,形成文件分配表(FAT表)。

一个磁盘仅设置一张文件分配表,磁盘有多少块,文件分配表就有多少项,若文件的一个磁盘块号为i,则这个文件的下一个磁盘的块号应该记录在文件分配表的第i项。

2.2.1.4磁盘模拟用一个文件C模拟磁盘,磁盘的每个盘块64字节,模拟磁盘共有128块。

第0,1块存放文件分配表,第2块存放根目录,其余存放子目录和文件。

2.2.1.5目录结构目录结构采用树形目录结构。

目录项内容(8个字节)目录名,文件名:2个字节;扩展名:2个字节(目录没有扩展名)。

目录,文件属性:1字节;起始盘块号:1个字节;文件长度:2个字节;●根目录根目录位置固定,为磁盘第2块;大小固定,共8项,占用模拟磁盘第2块。

●子目录位置不固定,大小不固定。

2.2.2用户接口●创建文件:create 文件名建立新文件,如果原来存在同名文件要提示是否覆盖。

●拷贝文件:copy 源文件名目标文件名当用户需要拷贝一些文件时,首先要先找到该文件,可同名拷贝,也可更名拷贝。

●删除文件: delete 文件名●显示文件: type 文件名仅显示文件内容。

●编辑文件: edit 文件名此命令完成对文件的编辑,只读文件不可以修改。

●改变文件属性: change 文件名属性将文件在只读和非只读、隐藏和非隐藏之间转换。

●磁盘格式化: format 盘符●建立目录: makdir 目录建立目录,若同名目录存在则建立失败。

●改变目录路径: chadir目录改变当前目录。

●删除空目录: rdir 目录当前目录、非空目录、根目录不能删除。

●删除目录: deldir 目录既可删除空目录又可删除非空目录,对于非空目录,首先要删除其下文件和目录然后才能删除其本身。

2.2.3屏幕显示屏幕显示要求包括:●用户命令接口,用于系统运行时用户输入命令;●磁盘目录显示,要求显示磁盘的树型目录结构;●磁盘使用情况,显示磁盘每一个磁盘块的空间是否空闲。

第三章系统实现3.1文件模块3.1.1创建FAT表这一部分主要实现FAT表的定义和初始化,代码如下:public class FAT{public byte[] fblock = new byte[128]; //FAT一共128项public byte leave = 125; //剩余空闲盘块数量public FAT() //构造函数{fblock[0] = fblock[1] = fblock[2] = 255;for (int i = 3; i < 128; i++)fblock[i] = 0;}public byte allempty() //空闲盘块数量{byte num = new byte();for (int i = 0; i < 128; i++)if (fblock[i] == 0)num++;return num;}public byte former(byte num) //查找第一个盘块{if (fblock[num] == 0)return 0; //此盘块为空byte pir = pirorblock(num);for (; pir != num; pir = pirorblock(pir)) //若num的前一个块号为它本身,则num为首块号num = pir;return num;}public byte last(byte num) //查找该块的最后一个块号{byte next = nextblock(num);for (; next != num; next = nextblock(next)) //无后续盘块时返回为0num = next;return num;}public byte pirorblock(byte num) //查找该块的前一个块号{if (fblock[num] == 0)return 0; //此盘块为空else if (fblock[num] == 255)return num; //单独存放一个盘块,为第一个盘块for (byte i = 3; i < 128; i++)if (fblock[i] == num)return i;return 255; //没找到}public byte nextblock(byte num) //查找该块的下一个块号{if (fblock[num] != 255)return fblock[num];elsereturn num; //该块为最后一块}public byte numall(byte num){byte i = 1;byte next = nextblock(num);for (; next != num; num = next, next = nextblock(next))i++;return i;}public bool add(byte block){byte b = last(block);byte n;if (findempty() == 0){MessageBox.Show("磁盘空间不够");return false;}else{n = findempty();fblock[b] = n;fblock[n] = 255;return true;}}public byte dirshenqing(){if (leave == 0){MessageBox.Show("磁盘空间不够");return 255; //剩余数目不够}byte b = findempty();fblock[b] = 255;leave--;return b;}public byte shenqing(int length) //根据文件长度申请盘块{byte n = Convert.ToByte(Math.Ceiling((double)(length / (double)64))); //共需多少盘块if (n > leave){MessageBox.Show("磁盘空间不够");return 255; //剩余数目不够}else{byte b = new byte();byte bb = new byte();b = findempty();fblock[b] = 255;for (int i = 0; i < n - 1; i++){bb = findempty();fblock[bb] = b;b = bb;}leave = Convert.ToByte(leave - n);return b; //首块号}}public bool huishou(byte block) //回收盘块{if (block > 2 && block <= 127){byte b = block;byte bb = block;byte i = 0;while (fblock[b] != 255){bb = fblock[b];fblock[b] = 0;b = bb;i++;}fblock[b] = 0;leave = Convert.ToByte(leave + i + 1); //剩余盘块量增加return true;}else{return false;}}}3.1.2磁盘模拟这一部分主要实现磁盘的组织情况,代码如下public void initdisk(){for (int i = 0; i < 128; i++){picture[i] = new PictureBox();picture[i].Location = new Point(6 + 22 * (i % 16), 20 + 18 * (i / 16));picture[i].Size = new Size(16, 12);if (file1.disk.fat.fblock[i] != 0)picture[i].BackColor = Color.Lime;elsepicture[i].BackColor = Color.White;this.groupBox3.Controls.Add(picture[i]);}}public void showdisk(){for (int i = 0; i < 128; i++){picture[i].Location = new Point(6 + 22 * (i % 16), 20 + 18 * (i / 16));picture[i].Size = new Size(16, 12);if (file1.disk.fat.fblock[i] != 0)picture[i].BackColor = Color.Lime;elsepicture[i].BackColor = Color.White;this.groupBox3.Controls.Add(picture[i]);}}3.1.3利用窗体实现文件的操作●创建txt文件private void文件ToolStripMenuItem_Click(object sender, EventArgs e) {creatnamelen cnl = new creatnamelen();cnl.ShowDialog();string str = ;byte len = Convert.ToByte(str.Length);if (len == 0)return;if (len > 3){MessageBox.Show("输入长度超过三个字符,只取前三个");str = str.Remove(3, len - 3);}string fullname = treeView1.SelectedNode.FullPath;str += "." + "tx";fullname += "\\" + str;bool a = file1.create(fullname);if (a == true){TreeNode now = treeView1.SelectedNode;TreeNode newnode = new TreeNode();newnode.Text = str;newnode.SelectedImageIndex = 3;newnode.ImageIndex = 3;now.Nodes.Add(newnode);showdisk();}●创建可执行文件private void可执行文件ToolStripMenuItem_Click(object sender, EventArgs e) {creatnamelen cnl = new creatnamelen();cnl.ShowDialog();string str = ;byte len = Convert.ToByte(str.Length);if (len == 0)return;if (len > 3){MessageBox.Show("输入长度超过三个字符,只取前三个");str = str.Remove(3, len - 3);}string fullname = treeView1.SelectedNode.FullPath;str += "." + "ex";fullname += "\\" + str + "." + "ex";bool a = file1.create(fullname);if (a == true){TreeNode now = treeView1.SelectedNode;TreeNode newnode = new TreeNode();newnode.Text = str;newnode.SelectedImageIndex = 1;newnode.ImageIndex = 1;now.Nodes.Add(newnode);}showdisk();}●显示文件private void显示文件ToolStripMenuItem_Click(object sender, EventArgs e) {string fullname = treeView1.SelectedNode.FullPath;TreeNode now = treeView1.SelectedNode;if (now.ImageIndex != 1 && now.ImageIndex != 3){MessageBox.Show("不是文件,不能显示");return;}file1.show(fullname, 0);showdisk();}●编辑文件private void编辑文件ToolStripMenuItem_Click(object sender, EventArgs e) {string fullname = treeView1.SelectedNode.FullPath;TreeNode now = treeView1.SelectedNode;if (now.ImageIndex != 1 && now.ImageIndex != 3){MessageBox.Show("不是文件,不能编辑");return;}file1.edit(fullname);showdisk();}●改变属性private void改变属性ToolStripMenuItem_Click(object sender, EventArgs e) {string fullname = treeView1.SelectedNode.FullPath;TreeNode now = treeView1.SelectedNode;if (now.ImageIndex != 1 && now.ImageIndex != 3){MessageBox.Show("不是文件,不能改变");return;}changeexten ct = new changeexten();ct.ShowDialog();string ex = ct.extension;bool a = file1.changefile(fullname, ex);if (a == true){string name = now.Text;now.Text = name.Substring(0, 4) + ex;if (ex == "ex"){now.ImageIndex = 1;now.SelectedImageIndex = 1;}else{now.ImageIndex = 3;now.SelectedImageIndex = 3;}}showdisk();}●运行可执行文件private void运行ToolStripMenuItem_Click(object sender, EventArgs e) {TreeNode now = treeView1.SelectedNode;if (now.ImageIndex != 1){MessageBox.Show("不是可执行文件,不能运行");return;}string fullname = now.FullPath;string str = file1.show(fullname, 0);creat(str.Length ,str );}●删除文件private void文件ToolStripMenuItem1_Click(object sender, EventArgs e) {TreeNode del = treeView1.SelectedNode;string fullname = "";fullname = del.FullPath;string str = "";for (int i = 0; i < del.Text.Length; i++){char[] nchar = del.Text.ToCharArray();if (nchar[i] != '\0')str += nchar[i].ToString();elsebreak;}treeView1.Nodes.Remove(del);file1.dirdelete(fullname);showdisk();}●拷贝文件private void复制ToolStripMenuItem_Click(object sender, EventArgs e) {fufrom = treeView1.SelectedNode;if (fufrom.ImageIndex != 1 && fufrom.ImageIndex != 3){MessageBox.Show("不是文件,不能复制");return;}fuzhi = fufrom.FullPath;}private void粘贴ToolStripMenuItem_Click(object sender, EventArgs e) {TreeNode now = treeView1.SelectedNode;string b = now.FullPath;string to = "";for (int i = 0; i < b.Length; i++){char[] nchar = b.ToCharArray();if (nchar[i] != '\0')to += nchar[i].ToString();elsebreak;}if (fuzhi != " "){bool a = file1.copyfile(fuzhi, to);if (a == true){TreeNode newnode = new TreeNode();newnode.Text = fufrom.Text;newnode.ImageIndex = fufrom.ImageIndex;newnode.SelectedImageIndex = fufrom.SelectedImageIndex;now.Nodes.Add(newnode);}}else if (cut != " "){if (cutnode == now)return;bool a = file1.copyfile(cut, to);file1.filedelete(cut);if (a == true){TreeNode newnode = new TreeNode();newnode.Text = cutnode.Text;newnode.ImageIndex = cutnode.ImageIndex;newnode.SelectedImageIndex = cutnode.SelectedImageIndex;now.Nodes.Add(newnode);}cut = " ";}showdisk();}3.2用户接口模块3.2.1创建文件图3-1创建文件的流程图public bool create(string fullname){byte d;byte m;byte cur;int len; //文件长度string filecontent; //文件内容byte num = 0; //文件所需块数byte[] nbyte;byte[] buffer1 = new byte[64]; //存放一个盘块中内容byte b = finddir(fullname); //文件所在根目录string[] strpat = splitfullname(fullname);string pathname = "";for (int i = 0; i < strpat.Length - 2; i++)pathname += strpat[i] + "\\";pathname += strpat[strpat.Length - 2];string[] str = splitfullname(fullname); // 文件路径名分段byte roadlen = Convert.ToByte(str.Length); //路径名长度string[] name = str[roadlen - 1].Split('.')//划分文件名和扩展名if (pare(name[1], "ex") != 0 && pare(name[1], "tx") != 0) {MessageBox.Show("文件扩展名错误");return false;}char[] nchar = new char[3]; //存放文件名char[] nchar1 = new char[2]; //存放扩展名byte[] f = empty(b); //根目录是否已满if (filechongming(fullname) != 255){MessageBox.Show("文件重名");return false;}if (f[0] == 255 && b == 2) //在根目录中插入{MessageBox.Show("根目录中已满,不能创建文件");return false;}else if (f[0] != 255) //255为此块盘已满,disk.readblock(f[0], 64);disk.rootdir.set(disk.buffer); //文件存放根目录内容nchar = name[0].ToCharArray(); //存放文件名nchar1 = name[1].ToCharArray();for (int i = 0; i < nchar.Length; i++)disk.rootdir.root[f[1]].filename[i] = Convert.ToByte(nchar[i]);for (int i = 0; i < 2; i++)disk.rootdir.root[f[1]].extension[i] = Convert.ToByte(nchar1[i]);if (name[1] == "ex")disk.rootdir.root[f[1]].dirORfile = 1;elsedisk.rootdir.root[f[1]].dirORfile = 2;createfile cf = new createfile();cf.ShowDialog();len = cf.length;filecontent = cf.str;num = Convert.ToByte(Math.Ceiling((double)(len / (double)64)));//文件所需盘块数m = disk.fat.shenqing(len);disk.writefat();if (m == 255) //磁盘空间不够,放不下此文件{return false;}disk.rootdir.root[f[1]].startblock = m;disk.rootdir.root[f[1]].length = Convert.ToByte(len);disk.buffer = disk.rootdir.get();disk.writein(f[0], 64);nbyte = disk.fat.findall(m); //所有盘块string str1;char[] fileneirong = new char[64];for (byte i = 0; i < num; i++){if (i == num - 1){str1 = filecontent.Substring(i * 64, len - 64 * (num - 1));fileneirong = str1.ToCharArray();for (int j = 0; j < fileneirong.Length; j++)disk.buffer[j] = Convert.ToByte(fileneirong[j]);disk.writein(nbyte[i], Convert.ToByte(len - 64 * (num - 1)));}else{str1 = filecontent.Substring(i * 64, 64);fileneirong = str1.ToCharArray();for (int j = 0; j < 64; j++)disk.buffer[j] = Convert.ToByte(fileneirong[j]);disk.writein(nbyte[i], 64);}}return true;}}3.2.2拷贝文件public bool copyfile(string from, string to){string[] fromstr = splitfullname(from); //源文件路径分解byte strlen = Convert.ToByte(fromstr.Length); //路径名长度string[] fromname = fromstr[strlen - 1].Split('.'); //划分文件名和扩展名string[] tostr = splitfullname(to); //复制文件路径分解;string toroot = tostr[tostr.Length - 1];byte dirstart = dirchongming(to); //目标目录所在盘块disk.readblock(dirstart, 64); //文件目录所在盘块disk.rootdir.set(disk.buffer);dirstart = disk.rootdir.filefindfat(toroot, 0);string strfull = show(from, 1); //源文件内容int len = strfull.Length; //文件长度string filecontent = strfull; //文件内容byte num = Convert.ToByte(Math.Ceiling((double)(len / (double)64)));//文件所需盘块数byte[] nbyte;byte[] buffer1 = new byte[64]; //存放一个盘块中内容byte m; //申请到的首盘块byte d;if (dirstart == 255){MessageBox.Show("路径错误");return false;}string tofullname = to + "\\" + fromstr[strlen - 1];byte tochong = filechongming(tofullname);if (tochong != 255){DialogResult r = MessageBox.Show("已存在此文件,是否覆盖", "粘贴", MessageBoxButtons.YesNo);if (r == DialogResult.No) //已存在此文件,不覆盖,不做操作{return false;}else//覆盖,将原来的删除,再新建filedelete(tofullname);}char[] nchar = fromname[0].ToCharArray(); //存放文件名char[] nchar1 = fromname[1].ToCharArray(); //存放扩展名byte[] f = empty(dirstart); //根目录是否已满,若满,则链接一个新盘块disk.readblock(f[0], 64);disk.rootdir.set(disk.buffer); //文件存放根目录内容if (f[0] == 255 && dirstart == 2) //在根目录中插入{MessageBox.Show("根目录中已满,不能创建文件");return false;}else if (f[0] != 255) //255为此块盘已满{for (int i = 0; i < 3; i++)disk.rootdir.root[f[1]].filename[i] = Convert.ToByte(nchar[i]);for (int i = 0; i < 2; i++)disk.rootdir.root[f[1]].extension[i] = Convert.ToByte(nchar1[i]);if (fromname[1] == "ex")disk.rootdir.root[f[1]].dirORfile = 1;elsedisk.rootdir.root[f[1]].dirORfile = 2;m = disk.fat.shenqing(len);disk.writefat();if (m == 255) //磁盘空间不够,放不下此文件{return false;}disk.rootdir.root[f[1]].startblock = m;disk.rootdir.root[f[1]].length = Convert.ToByte(len);disk.buffer = disk.rootdir.get();disk.writein(f[0], 64);nbyte = disk.fat.findall(m); //所有盘块string str1;char[] fileneirong = new char[64];for (byte i = 0; i < num; i++){if (i == num - 1){str1 = filecontent.Substring(i * 64, len - 64 * (num - 1));fileneirong = str1.ToCharArray();for (int j = 0; j < fileneirong.Length; j++)disk.buffer[j] = Convert.ToByte(fileneirong[j]);disk.writein(nbyte[i], Convert.ToByte(len - 64 * (num - 1)));}else{str1 = filecontent.Substring(i * 64, 64);fileneirong = str1.ToCharArray();for (int j = 0; j < 64; j++)disk.buffer[j] = Convert.ToByte(fileneirong[j]);disk.writein(nbyte[i], 64);}}return true;}3.2.3删除文件图3-3删除文件的流程图public bool filedelete(string fullname){byte b = filechongming(fullname);if (b == 255)return false;disk.readblock(b, 64);disk.rootdir.set(disk.buffer);string[] str = splitfullname(fullname); // 文件路径名分段byte strlen = Convert.ToByte(str.Length); //路径名长度string[] name = str[strlen - 1].Split('.')//划分文件名和扩展名byte attribute = new byte();if (name[1] == "ex")attribute = 1;elseattribute = 2;if (name[1] != "ex" && name[1] != "tx"){MessageBox.Show("文件扩展名错误");return false;}byte start = disk.rootdir.filefindfat(name[0], attribute);byte site = disk.rootdir.filesite(name[0], attribute);disk.fat.huishou(start);disk.rootdir.root[site].dirORfile = 3;for (int i = 0; i < 3; i++)disk.rootdir.root[site].filename[i] = 0;for (int i = 0; i < 2; i++)disk.rootdir.root[site].extension[i] = 0;disk.rootdir.root[site].startblock = disk.rootdir.root[site].length = 0;disk.writefat();disk.buffer = disk.rootdir.get();disk.writein(b, 64);return true;}3.2.4磁盘格式化图3-4 磁盘格式化是的流程图这一部分实现磁盘格式化,代码如下:public void format(){DialogResult r = MessageBox.Show("确实要格式化吗?", "格式化", MessageBoxButtons.YesNo);byte[] nbyte = new byte[64];if (r == DialogResult.Yes){nbyte[0] = nbyte[1] = nbyte[2] = 255;for (int i = 3; i < 64; i++)nbyte[i] = 0;disk.buffer = nbyte;disk.writein(0, 64);for (int i = 0; i < 64; i++)nbyte[i] = 0;disk.buffer = nbyte;disk.writein(1, 64);for (byte i = 2; i < 128; i++){for (int j = 0; j < 64; j++)nbyte[j] = 0;for (int j = 5; j < 64; j = j + 8)nbyte[j] = 3;disk.buffer = nbyte;disk.writein(i, 64);}setfat();}}3.2.5改变文件属性图3-5 改变文件属性的流程图这一部分实现改变文件属性,主要代码如下:public bool changefile(string fullname, string extention){byte b = filechongming(fullname);if (b == 255)return false;string[] str = splitfullname(fullname);byte roadlen = Convert.ToByte(str.Length); //路径名长度string[] name = str[roadlen - 1].Split('.');//划分文件名和扩展名disk.readblock(b, 64);disk.rootdir.set(disk.buffer);byte attribute;if (extention == "ex" || extention == "tx"){if (name[1] == "ex")attribute = 1;elseattribute = 2;char[] nc = new char[2];nc = extention.ToCharArray();byte site = disk.rootdir.filesite(name[0], attribute);for (int i = 0; i < 2; i++)disk.rootdir.root[site].extension[i] = Convert.ToByte(nc[i]);if (extention == "ex")disk.rootdir.root[site].dirORfile = 1;elsedisk.rootdir.root[site].dirORfile = 2;disk.buffer = disk.rootdir.get();disk.writein(b, 64);return true;}return false;}}3.2.6显示文件图3-6 显示文件的流程图这一部分主要实现文件的显示,代码如下:public string show(string fullname, int m){ string[] str = splitfullname(fullname);byte strlen = Convert.ToByte(str.Length); //路径名长度string[] name = str[strlen - 1].Split('.'); //划分文件名和扩展名string fileneirong = "";if (name[1] != "ex" && name[1] != "tx"){MessageBox.Show("不能显示");return fileneirong;}byte b = filechongming(fullname);if (b == 255){MessageBox.Show("不存在此文件,不能显示");return fileneirong;}disk.readblock(b, 64);disk.rootdir.set(disk.buffer);byte attribute = new byte();if (name[1] == "ex")attribute = 1;elseattribute = 2;byte start = disk.rootdir.filefindfat(name[0], attribute);byte site = disk.rootdir.filesite(name[0], attribute);byte len = disk.rootdir.root[site].length;byte[] nbyte = disk.fat.findall(start);for (int i = 0; i < nbyte.Length; i++){UTF8Encoding nnn = new UTF8Encoding();if (i != nbyte.Length - 1){disk.readblock(nbyte[i], 64);fileneirong += nnn.GetString(disk.buffer);}else{disk.readblock(nbyte[i], Convert.ToByte(len - 64 * i));fileneirong += nnn.GetString(disk.buffer);}}if (m == 0){showfile ss = new showfile(name[0], fileneirong);ss.ShowDialog();}return fileneirong;}3.2.7创建目录图3-7 创建目录的流程图这一部分主要实现创建目录,代码如下:public bool createdir(string fullname){setfat();byte d; //文件所在根目录不够时新增盘块号b yte cur;byte[] buffer1 = new byte[64]; //存放一个盘块中内容byte b = finddir(fullname); //文件所在根目录string[]str = splitfullname(fullname); // 文件路径名分段string name = str[str.Length - 1]; //划分目录名string pathname = "";for (int i = 0; i < str.Length - 2; i++)pathname += str[i] + "\\";pathname += str[str.Length - 1];if (b == 255){MessageBox.Show("路径错误");return false;}char[] nchar = new char[3]; //存放文件名byte[] f = empty(b); //根目录是否已满if(dirchongming(fullname) != 255){MessageBox.Show("文件重名");return false;}if (f[0] == 255 && b == 2) //在根目录中插入{MessageBox.Show("根目录中已满,不能创建文件");return false;}else if (f[0] != 255) //255为此块盘已满disk.readblock(f[0], 64);disk.rootdir.set(disk.buffer); //文件存放根目录内容nchar = name.ToCharArray();//存放文件名for (int i = 0; i < 3; i++)disk.rootdir.root[f[1]].filename[i] = Convert.ToByte(nchar[i]);for (int i = 0; i < 2; i++)disk.rootdir.root[f[1]].dirORfile = 0;disk.rootdir.root[f[1]].startblock = disk.fat.dirshenqing();disk.writefat();disk.rootdir.root[f[1]].length = 0;disk.buffer =disk.rootdir.get();disk.writein(f[0], 64);}else{cur = finddir(pathname);disk.readblock(cur, 64);disk.rootdir.set(disk.buffer); //文件存放根目录内容cur = disk.rootdir.filesite(pathname, 0);disk.buffer = disk.rootdir.get();disk.writein(finddir(pathname), 64);disk.fat.add(b);d = st(b);disk.readblock(d, 64);disk.rootdir.set(disk.buffer); //文件存放根目录内容nchar = name.ToCharArray(); //存放文件名for (int i = 0; i < 3; i++)disk.rootdir.root[0].filename[i] = Convert.ToByte(nchar[i]);for (int i = 0; i < 2; i++)disk.rootdir.root[0].extension[i] = 0;disk.rootdir.root[0].dirORfile = 0;disk.rootdir.root[0].startblock = disk.fat.dirshenqing();disk.rootdir.root[0].length = 0;disk.writefat();disk.buffer = disk.rootdir.get();disk.writein(d, 64);}return true;}3.2.8删除目录图3-8 删除目录的流程图这一部分主要实现删除目录,代码如下:public bool dirdelete(string fullname){byte b = dirchongming(fullname); //得到此路径目录所在盘块号if (b == 255)return false;disk.readblock(b, 64);disk.rootdir.set(disk.buffer);string[] str = splitfullname(fullname); // 文件路径名分段string name = str[str.Length - 1];byte start = disk.rootdir.filefindfat(name, 0);byte[] fatall =disk.fat.findall(start);byte site = disk.rootdir.filesite(name, 0);for (int i = 0; i < fatall.Length; i++){disk.readblock(fatall[i], 64);disk.rootdir.set(disk.buffer);for (int j = 0; j < 8; j++){if (disk.rootdir.root[j].dirORfile == 0) //仍为目录{UTF8Encoding nnn = new UTF8Encoding();dirdelete(fullname + "\\" +nnn.GetString(disk.rootdir.root[j].filename));}else if (disk.rootdir.root[j].dirORfile == 1) //文件{UTF8Encoding nnn = new UTF8Encoding();filedelete(fullname + "\\" +nnn.GetString(disk.rootdir.root[j].filename) + ".tx");}else if (disk.rootdir.root[j].dirORfile == 2){UTF8Encoding nnn = new UTF8Encoding();filedelete(fullname + "\\" +nnn.GetString(disk.rootdir.root[j].filename) + ".ex");}else if (disk.rootdir.root[j].dirORfile == 3) //空目录项continue;}disk.writefat();disk.buffer = disk.rootdir.get();disk.writein(fatall[i], 64);}//回收此目录在fat和此目录中位置信息disk.fat.huishou(start);disk.readblock(b, 64);disk.rootdir.set(disk.buffer);disk.rootdir.root[site].dirORfile = 3;for (int i = 0; i < 3; i++)disk.rootdir.root[site].filename[i] = 0;for (int i = 0; i < 2; i++)disk.rootdir.root[site].extension[i] = 0;disk.rootdir.root[site].startblock = disk.rootdir.root[site].length = 0;disk.writefat();disk.buffer = disk.rootdir.get();disk.writein(b, 64);return true;}3.3屏幕显示总体界面:图3-9 总体界面用户命令接口显示:图3-10 用户接口磁盘目录显示public void treeshow(byte block){file1.disk.readblock(block, 64);file1.disk.rootdir.set(file1.disk.buffer);for (int i = 0; i < 8; i++){if (file1.disk.rootdir.root[i].dirORfile != 3){string str = "";UTF8Encoding nnn = new UTF8Encoding();if (file1.disk.rootdir.root[i].dirORfile == 0)str = "C:\\" + nnn.GetString(file1.disk.rootdir.root[i].filename);elsestr = "C:\\" + nnn.GetString(file1.disk.rootdir.root[i].filename) + "." + nnn.GetString(file1.disk.rootdir.root[i].extension);diskdis.Nodes.Add(makenode(str));}}}图3-11 磁盘目录显示磁盘使用情况:显示磁盘使用情况的函数:public void showdisk(){for (int i = 0; i < 128; i++){picture[i].Location = new Point(6 + 22 * (i % 16), 20 + 18 * (i / 16));picture[i].Size = new Size(16, 12);if (file1.disk.fat.fblock[i] != 0)picture[i].BackColor = Color.Lime;elsepicture[i].BackColor = Color.White;this.groupBox3.Controls.Add(picture[i]);}}图3-12 磁盘使用情况四结束语通过做操作系统课程设计,我对操作系统的工作原理和实现方式有了更新更全面的认识,我所做的操作系统模拟程序文件管理部分基本实现了课程设计所要求的操作系统模拟的内容,但是由于水平有限仍有部分功能没有实现,尚需改善,以后需要改进和不断学习。

相关文档
最新文档