《操作系统》课程设计说明书
-操作系统课程设计说明书
中北大学操作系统课程设计说明书学院、系:软件学院专业:软件工程学生姓名:刘婷学号:0921010708 设计题目:基于Linux的实现进程的信号量互斥申请起迄日期: 2011年12月22日- 2012年1月7日指导教师:贾美丽2012 年 1月 7 日1需求分析基于Linux的进程同步与通信的模拟实现需要完成以下功能:(1).创建进程:手动创建几个进程,或者随即创建几个进程,都在界面上完成;要求包括进程的名称(不能重复)、执行时间和申请资源的等待时间等。
在同一时刻可能有多个进行在内存申请某资源,即可以输入多个进程的资源申请。
(2).3类临界资源的管理,包括申请以及分配等。
分别通过信号量实现或者管程实现。
(3).银行家算法,判断是否可以进行资源的分配。
基于以上的功能,可以使用户选择操作,模拟临界资源的管理和银行家算法。
目的:实现临界资源的管理及死锁的避免。
2总体设计进程同步与模拟实现系统分为4个模块:输入输出,进程对资源的随机申请及分配,临界资源管理,银行家算法避免死锁。
输入输出:包括系统运行所需要的进程的名称,执行时间,申请资源的等待时间,进程对资源的需要量等信息以及系统所要显示出的进程的创建信息,资源的分配信息,进行执行信息,进行动态申请资源信息等。
进程对资源的随机申请及分配:根据所输入的进程、资源、以及进程对资源的最大申请情况,随机产生进程当前对资源的申请,输出相应的分配信息与进程执行信息并调用银行家算法对进程的资源申请进行判断。
临界资源的管理:创建相应个数的进程,完成进程的并发执行,使用互斥信号量使各进程互斥的进入各自的临界区对资源进行申请,进程执行完毕后,互斥的对资源进行恢复。
银行家算法避免死锁:对当前进程对资源的申请利用银行家算法进行判断,看系统分配后是否处于安全状态,若处于安全状态,则将资源分配给进程,并输出分配信息,否则对不予以分配。
3.详细设计在该系统中我主要实现了银行家算法避免死锁的模块,该模块中主要使用了数组的数据结构.3.1银行家算法:设Request[i]是进程i的请求向量,如果Request[i][j]=k,表示进程i需要k各j类型的资源。
操作系统课程设计指导书
操作系统课程设计指导书计算机工程学院一、课程教学的目标(一)课程性质“操作系统基础”是计算机专业的核心专业课,“操作系统课程设计”是理解和巩固操作系统基本理论、原理和方法的重要的实践环节。
(二)课程的目的操作系统课程主要讲述的内容是多道操作系统的原理与技术,与其它计算机原理、编译原理、汇编语言、计算机网络、程序设计等专业课程关系十分密切。
本课程设计的目的综合应用学生所学知识,建立系统和完整的计算机系统概念,理解和巩固操作系统基本理论、原理和方法,掌握多道程序设计基本技能。
二、教学内容基本要求及分配学时(一)课程设计的题目基于WINDOWS的多道程序设计(二)设计内容在windows98、windows2000操作系统下,使用的VC、VB、java或C等编程语言,采用多道程序设计技术编写一个游戏软件或解决一个简单的实际问题。
(三)设计的要求(1)经调试后程序能够正常运行,并体现多道程序的特点。
(2)本程序可运行在win98或winNT/2000操作系统下,可安装到任意路径下。
(3)采用多进程或多线程方式运行,尽量体现进程间的同步和互斥关系。
(四)参考软件外观设计参考“大炮打飞机”类的游戏软件。
(五)学时分配(1)基本任务简介、原理讲解 2学时(2)软件设计 4学时(3)上机编程、调试 24学时(4)检查考核 2学时三、主要教学环节(一)设计的步骤(1)需求分析:了解基本原理,确定软件的基本功能,查找相关资料,画出基本的数据流图;(2)总体设计:确定软件的总体结构、模块关系和总体流程;(3)详细设计:确定模块内部的流程和实现算法。
(4)上机编码和调试;(5)实际数据运行测试。
(二)设计的指导与答疑每小班30人,每小班至少配备一名指导教师跟综辅导答疑,解决技术难题。
(三)设计的考评教师根据设计报告、软件的运行演示和学生回答问题的情况评定成绩。
(1)设计报告规范、完整,概念原理论述清楚、软件设计结构合理,独立完成设计,软件运行正常,能够突出表现多道程序运行的特点,回答问题准确明了,可以评为优秀(A)。
《操作系统》课程设计
《操作系统》课程设计一、课程目标知识目标:1. 让学生掌握操作系统的基本概念,包括进程、线程、内存管理、文件系统等核心知识;2. 了解操作系统的历史发展,掌握不同类型操作系统的特点及使用场景;3. 掌握操作系统的性能评价方法和常用的调度算法。
技能目标:1. 培养学生运用操作系统知识解决实际问题的能力,如分析系统性能瓶颈、优化系统资源分配等;2. 培养学生具备基本的操作系统编程能力,如进程创建、线程同步、文件操作等;3. 提高学生的团队协作能力和沟通能力,通过小组讨论和项目实践,学会共同解决问题。
情感态度价值观目标:1. 培养学生对操作系统学科的兴趣,激发学生的学习热情,使其形成积极向上的学习态度;2. 培养学生具备良好的信息素养,尊重知识产权,遵循法律法规;3. 培养学生的创新精神和批判性思维,敢于质疑、勇于探索,形成独立思考的能力。
课程性质:本课程为计算机科学与技术专业的核心课程,旨在让学生掌握操作系统的基本原理和实现方法,提高学生的系统分析和编程能力。
学生特点:学生具备一定的编程基础和计算机系统知识,具有较强的逻辑思维能力和动手实践能力。
教学要求:结合学生特点和课程性质,注重理论与实践相结合,通过案例分析和项目实践,帮助学生将所学知识内化为具体的学习成果。
在教学过程中,关注学生的学习进度和反馈,及时调整教学策略,确保课程目标的实现。
二、教学内容1. 操作系统概述:介绍操作系统的定义、发展历程、功能、类型及特点,对应教材第一章内容。
- 操作系统的起源与发展- 操作系统的功能与类型- 操作系统的主要特点2. 进程与线程:讲解进程与线程的概念、状态、调度算法,对应教材第二章内容。
- 进程与线程的定义与区别- 进程状态与转换- 进程调度算法3. 内存管理:分析内存管理的基本原理、策略和技术,对应教材第三章内容。
- 内存分配与回收策略- 虚拟内存技术- 页面置换算法4. 文件系统:介绍文件系统的基本概念、结构、存储原理,对应教材第四章内容。
燕山大学操作系统课程设计说明书
目录1概述--------------------------------------------------------------------------------------31.1 目的--------------------------------------------------------3 1.2 主要完成的任务----------------------------------------------3 1.3 使用的开发工具、开发语言------------------------------------3 1.4 本软件解决的主要问题 ---------------------------------------42 设计的基本理念、概念和原理------------------------------------------------42.1 设计的基本理念----------------------------------------------4 2.2 基本概念----------------------------------------------------4 2.3 基本原理----------------------------------------------------53 总体设计----------------------------------------------------53.1基本的技术路线:面向对象--------------------------------------------------------5 3.2模块关系及总体流程-------------------------------------------54 详细设计----------------------------------------------------74.1 变量设计----------------------------------------------------7 4.2 线程的设计--------------------------------------------------7 4.3 button按钮的设计-------------------------------------------85编码设计----------------------------------------------------95.1开发环境----------------------------------------------------9 5.2注意事项----------------------------------------------------9 5.3主要代码设计------------------------------------------------9PUTTER线程的设计---------------------------------------------------9 MOVER1线程的设计---------------------------------------------------10 GETTER1线程的设计--------------------------------------------------11 “开始”按钮的设计--------------------------------------------------12 “结束”按钮的设计--------------------------------------------------14 5.4解决的主要难题----------------------------------------------16 6测试出现的问题及其解决方案-------------------------------167工程总结----------------------------------------------------16 8参考文献----------------------------------------------------16多道程序缓冲区协调操作演示程序设计说明书1概述1.1目的计算机操作系统是计算机系统中最不可缺少的,最常用的软件,也是核心的,最接近于计算机硬件的软件。
操作系统课程设计
• 一、设计目的
– 学完《操作系统》课程后,进行一次全面的综合训练。 通过本课程设计,让学生更好地掌握计算机操作系统 的原理,加深对操作系统基础理论和重要算法的理解, 加强学生的动手能力。
– 在OS理论基础上,掌握Linux操作系统的使用方法;了 解Linux系统内核代码结构;掌握实例操作系统的实现 方法。
题目6
• 要求:进程调度的模拟实现 • 内容:
题目7
• 要求:生产者-消费者问题的模拟实现 • 内容:
题目8
• 要求:页面置换算法的模拟实现 • 内容:
– 设计一个虚拟存储区和内存工作区,编程序演 示算法的具体实现过程,并计算访问命中率。
– 需要实现的算法:
• 先进先出算法 FIFO • 最近最久未使用算法 LRU
课程设计报告内容与格式
• 主要内容
– (1)概述:设计主要完成的任务和解决的问题 – (2)设计原理:涉及的概念与原理 – (3)详细设计与编码:算法流程图、编码 – (4)结构分析 – (5)设计小结:本设计的特色、经验和体会 – (6)参考资料
• 大概格式如下
二、设计要求与资料提交
– 题目选定或自定,题目可以相同。但每学生必须 独立完成课程设计,严禁抄袭。
– 第2周周三、周四下午课设答辩,每学生讲述5 分钟,并提交一份正式纸质报告、以及电子文档 和源程序文档,交给指导教师。
三、设计内容
• 题目1:
• 要求:熟悉和理解Linux编程环境
• 内容
1)编写一个C程序,实现文件拷贝功能。
题目5
• 要求:银行家算法的模拟实现
• 内容:
– 用C/C++编程据结构
• 1)可利用资源向量Available • 2)最大需求矩阵Max • 3)分配矩阵Allocation • 4)需求矩阵Need
操作系统课程设计说明书
操作系统课程设计说明书在Linux环境下模拟实现命令解释器专业:班级:姓名:学号:班内序号:一.程序概述1. 命令解释器的源程序保存在服务器上的路径为:home / 1-31 / j j . c的目录文件中。
可执行程序保存在服务器上的路径为:home / 1-31 / j 。
2. 该命令解释器所完成的功能如下:输入pwd指令来查看目前所在的工作目录的绝对路径名称。
简单得说,每当你在终端进行操作时,你都会有一个当前工作目录。
一般开启终端后默认的“当前工作目录”是用户的“主文件夹”。
输入dir指令显示目录,显示指定目录下或当前目录下的信息,包括文件名等等。
输入cd +<目录名或路径>指令改变当前文件路径,实现将当前用户的当前工作目录更改至cd 命令中指定的目录或文件夹。
如果未指定目标目录名(即只输入“cd”或没输入目录名或文件名),则输出错误信息。
输入newdir +<目录名>指令创建一个新的目录或文件夹,如果创建已存在的目录,则输出创建失败。
输入deldir+<目录名>指令删除一个指定的目录或文件夹,若删除不存在的目录或文件,则显示删除失败。
输入exit指令退出命令解释程序二.概念原理strcmp(str1,str2)函数就是比较参数中两个字符串str1 和str2的大小(大小写敏感,即"A" != "a"),如果完全相等,返回0,如果str1 < str2(按照字母顺序比较),返回-1,如果str1 > str2,则返回1。
本程序的strcmp()函数就是比较t1与6个指令的大小,来输出相应的信息。
chdir()是C语言中的一个系统调用函数,功能:改变工作目录,用法: int chdir(const char *path);返回值:成功返回0 ,失败返回-1。
mkdir()创建由dir-name命名的目录。
要求创建目录的用户在当前目录中(dir-n ame的父目录中)具有写权限,并且dirname不能是当前目录中已有的目录或文件名称。
操作系统课程设计报告说明书
操作系统课程设计报告说明书-----------银行家算法的实现指导老师:欧阳浩班级:计071姓名:苏建学号:200700401006操作系统课程设计报告说明书---银行家算法1 课设简介:1.1 课程设计题目银行家算法的模拟实现1.2 课程设计目的通过编写和调试一个系统动态分配资源的简单模拟程序,观察死锁产生的条件,并采用适当的算法,有效地防止和避免死锁地发生。
1.3 课程设计内容模拟实现动态资源分配。
同时要求编写和调试一个系统动态资源的简单模拟程序,观察死锁产生的条件,并使用适当的算法,有效的防止和避免死锁的发生。
2 实验原理分析:银行家算法是避免死锁的一种重要方法,通过编写一个简单的银行家算法程序,加深了解有关资源申请、避免死锁等概念,并体会和了解死锁和避免死锁的具体实施方法。
死锁的产生,必须同时满足四个条件,即一个资源每次只能由一个进程申请;第二个为等待条件,即一个进程请求资源不能满足时,它必须等待,单它仍继续宝石已得到的所有其他资源;第三个为非剥夺条件,即在出现死锁的系统中一定有不可剥夺使用的资源;第四个为循环等待条件,系统中存在若干个循环等待的进程,即其中每一个进程分别等待它前一个进程所持有的资源。
防止死锁的机构只能确保上述四个条件之一不出现,则系统就不会发生死锁。
通过这个算法可以用来解决生活中的实际问题,如银行贷款等。
3 程序结构分析:3. 1.银行家算法:设进程i提出请求Request[n],则银行家算法按如下规则进行判断。
(1)如果Request[n]>Need[i,n],则报错返回。
(2)如果Request[n]>Available,则进程i进入等待资源状态,返回。
(3)假设进程i的申请已获批准,于是修改系统状态:Available=Available-RequestAllocation=Allocation+RequestNeed=Need-Request(4)系统执行安全性检查,如安全,则分配成立;否则试探险性分配作废,系统恢复原状,进程等待。
操作系统课程设计说明书
操作系统课程设计说明书课程设计说明书课程设计名称:操作系统题目:XXXXXXX年级:开发小组名称:小组自评成绩:小组负责人:课题组成员:姓名学号班级自评成绩分工签字课题开发日期:指导教师:1. 概述1、目的与意义题目:多道程序缓冲区协调操作设自行车生产线上有3只箱子(BOX ),箱中有N 个位置(N>=2),BOX1每个位置可存放下一个车架,BOX2每个位置可存放一个车轮,BOX3每个位置可存放下一台组装好的车。
有设有3个(类)工人,工人1不定地向箱1中放车架,工人2不定地向箱2中放车轮,工人3不定地从箱中1取出一个车架和箱2中取2个轮子,组装成一台自行车,并把它放到BOX3中。
任何一个时刻只能有1个工人对箱子操作。
有很多个搬运工(Carrier )不停地将BOX3取出运走。
其活动可分别可以抽象为图1。
采用多进程或多线程方式,运用同步和互斥机制,设计一个多道程序完成上述任务和操作。
提示:需要设计Worker1、Worker2、Worker3、Carrier 类线程基本功能要求:(1)提供良好图形界面,显示整个系统操作过程,可以暂停和继续系统的执行;(2) 可以设定各BOX 容量;(3) 可以设定PUT 、GET 、Move 操作的速度;(4) 实时显示每个BOX 中当前物品的数量,空闲空间的数量;(5) 实时显示线程、进程所处于等待(阻塞)状态的个数;(6)程序运行结束,显示汇总数据:总的运行时间;处理个物品的个数;平均每个BOX 中的物品个数。
(7)能够将每次的实验输入和实验结果存储起来,随时可查询。
意义:通过本次课设应对消费者生产者问题有一个更加透彻的了解,加深对于多线程下的互斥同步机制的理解。
2、主要完成的任务;1、数据的输入:包括文件输入和键盘输入。
输入工人数量可用资源数量以及BOX 的容量和工人的生产时间;2、数据的处理(多线程机制):根据可用资源计算生产最大车辆人员最佳分配比例以及根据输入安装生产线按照多线程方式运转;3、数据的输出:运行中实时显示BOX 中的物品数量和余量以及系统中线程阻塞的个数和名称,以及历史纪录。
操作系统课程方案说明书郑丽波
个人资料整理仅限学习使用中北大学操作系统课程设计说明书学院、系:软件学院专业:软件工程学学生姓名:郑丽波号: 1121011747设计题目:鉴于 Linux 的模拟进度调动算法的实现起迄日期:2018年 11月 22日- 2018 年 12月 6 日指导教师:康珺2018年12月6 日1需求剖析在操作系统中,进度调动实质就是给进度分派内存资源,跟着计算机系统的发展,为了更充足的利用系统资源以及提升计算机的运转效率,所以需要在不一样的环境下采纳不一样的调动算法,使得系统拥有合理的响应时间,就要求系统能依据某种算法,动向的把办理机分派给就绪行列中的一个进度,使之履行。
所以,就需要设计出几种不一样的算法,经过比较,选出一种最优的。
个人资料整理仅限学习使用务调动算法,短作业优先调动,高响应比调动算法。
在程序的履行过程中,能够自主输入进度的个数以及进度必需的信息,如:进度的创立时间,服务时间等,而后经过不一样的调动算法实现进度的调动,每一种算法都能动向的演示进度调动的过程,时间间隔为一秒钟,而且能够计算出每种调动算法下的均匀周转时间和均匀带权周转时间,经过排序比较各样调动算法的好坏。
2整体设计本程序主要分为四大模块:1.创立进度:能够手动创立进度,用户能够自主决定进度的个数,而且在创立进度时自主决定进度名,进度的创立时间以及履行时间。
2.几种不一样的调动算法:分别是先来先服务调动算法,短作业优先调动和高响应比调动算法。
3.显示结果函数:在各个调动算法中,每一步履行完后都会以表格的形式显示出进度的信息,包含:进度名,创立时间,服务时间,开始履行时间,达成时间,周转时间,带权周转时间。
4.比较各算法的好坏:对均匀周转时间和均匀带权周转时间依据由小到大的次序进行排序比较。
构造图以下:鉴于 linux 的进度调动算法寄存 PCB 信息构造体数组录入 PCB 信息三种调动算法先来先服务短作业优先高响应比调动FCFS SJF HHRN显示结果比较各算法的好坏struct Pro//进度调动信息构造体{char name。
操作系统课程设计说明书
操作系统课程设计说明书在Linux环境下模拟实现命令解释器学院:计算机工程学院专业班级:11软件工程1班姓名:黄少杰学号:201130098062班内序号:24一.程序概述本程序是内核为:Kernel 2.6.9-42.ELsmp on an i686的Linux环境下运行,是一个基于linux系统下的实现的命令解释器。
以下为源程序在服务器上执行的步骤:Linux服务器位置为:telnet 10,5,1,6用户名:11124 密码:123456①进入linux服务器②进入源程序所在目录,代码为:cd huangshaojie③运行源程序,代码:./a.out这个huangshaojie目录为本次操作系统课程设计的目录ls 显示huangshaojie下的文件:hsj2.cpp为本次课程设计的源文件,采用语言为C++。
执行命令g++ hsj2.cpp,产生可执行文件:a.out在命令行键入:./a.out 就可以直接运行程序功能列表本次课程设计在Linux环境下模拟实现命令解释器:本人实现的功能如下:1.使用pwd命令,实现查看目录所处路径的功能。
2.使用dir命令,实现显示列出指定目录名中的所有目录及文件的功能。
3.使用cd命令,实现改变工作目录的功能。
4.使用newdi r命令,实现创建新的目录的功能。
5.使用deldir命令,实现删除目录的功能。
6.使用rename命令,实现重命名一个文件或目录的功能。
7.使用find命令,实现查找指定目录下及其子目录的指定文件。
8.使用date命令,实现显示当前日期。
9.使用exit命令,实现退出命令行模式。
二.概念原理本次操作系统课程设计使用的语言为C++,包含的头文件大多是Linux下c的函数库。
通过调用相关的函数库来实现模拟shell命令操作。
下面是对一些概念原理的说明:1.源程序包含的头文件#include<iostream>//主要用于一些标准输入输出:cin,cout操作#include<cstring>//标准C++函数库,主要用于字符串处理#include<sys/types.h>//基本系统数据类型#include<sys/stat.h>//文件状态#include<dirent.h>//文件操作函数#include<fcntl.h>//文件控制#include<time.h>//定义关于时间的函数以上是整个源程序涉及到的一些函数头文件2.函数概念说明以下是对程序调用Linux c函数库的方法说明:函数原型:char * getcwd(char * buf,size_t size);函数说明:getcwd()会将当前的工作目录绝对路径复制到参数buf所指的内存空间,参数size为buf的空间大小。
操作系统课程设计指导书
《计算机操作系统》课程设计指导书一、课程设计的目的和意义本课程设计是学生学习完《计算机操作系统》课程后,进行的一次全面的综合训练,通过课程设计,让学生更好地掌握操作系统的原理及实现方法,加深对操作系统基础理论和重要算法的理解,加强学生的动手能力。
二、总体要求:1、课程设计总时间为五天。
2、课程设计地点是实验楼616机房。
3、一个班分若干个组,每组2人,个别可以3人组(自由组合)课程设计题目由任课老师指定;4、人员分工:组长1人、组员1到2人。
组长可由小组人员自行选出或自荐,组长的职责是负责与老师交流,合理安排分配本组的各项任务,任务有:系统总体设计、编码、测试、写文档。
三、设计要求:本课程设计以Linux操作系统为实验平台,进行源代码分析和修改或应用。
通过该课程设计,使学生掌握Linux操作系统各部分结构、实现机理和各种典型算法;或使学生进行网络管理和系统管理,系统地了解操作系统的设计和实现思路,运用内核开发环境实现对内核的修改,培养学生的系统设计能力,并了解操作系统的发展动向和趋势。
要求如下:1、要充分认识课程设计对培养自己的重要性,认真做好设计前的各项准备工作。
2、既要虚心接受老师的指导,又要充分发挥主观能动性。
结合课题,独立思考,努力钻研,勤于实践,勇于创新。
3、独立按时完成规定的工作任务,不得弄虚作假,不准抄袭他人内容,否则成绩以不及格计。
4、课程设计期间,无故缺席按旷课处理;缺席时间达四分之一以上者,其成绩按不及格处理。
5、在设计过程中,要严格要求自己,树立严肃、严密、严谨的科学态度,必须按时、按质、按量完成课程设计。
6、小组成员之间,分工明确,但要保持联系畅通,密切合作,培养良好的互相帮助和团队协作精神。
四、成绩评定1、同学平时表现占总成绩30%,若迟到扣5分,无故旷课每次扣10 分,二次不到者总成绩以0分计。
2、课程设计报告占总成绩70%,在规定时间内上交。
3、严禁抄袭,复制设计内容,查出后相关同学设计成绩以零分处理。
操作系统课程设计说明书格式要求范本
操作系统课程设计说明书格式要求湖南工业大学课程设计资料袋计算机与通信___ 学院(系、部)年第一2」学期课程名称计算机操作系统指导教师文志强职称博士学生姓名邓德尽专业班级计算机081班学号题目 __________ 磁盘调度成绩____________ 起止日期_年丄月土日〜_年丄月_6日目录清单湖南工业大学课程设计任务书—年第2学期计算机与通信学院(系、部)计算机专业081班级课程名称:计算机操作系统课程设计设计题目:__________ 磁盘调度完成期限:自_年丄月4日至—年丄月_6_日共丄周指导教师(签字): ______ 年月曰系(教研室)主任(签字):年月曰设计说明书(题目) 磁盘调度起止日期: _年_±月_4_0至_年月_6日学 生 姓 名 邓德尽 班 级081学号 _______________________________ 成绩 _______________________________指导教师(签字) ______________________________XXXXXXX 学院(部)年 月曰目录计算机操作系统课程设计1 课程设计简介 ............................... 错误! 未定义书签1.1 课程设计的目的........................ 错误! 未定义书签1.2 课程设计内容.......................... 错误! 未定义书签2 数据结构的设计 .............................. 错误! 未定义书签2.1 XXXXXXX ....................................................... 错误! 未定义书签2.2 XXXXXXX ..................................................... 错误! 未定义书签3 功能模块(或算法)描述...................... 错误! 未定义书签3.1 XXXXXXX ....................................................... 错误! 未定义书签3.2 XXXXXXX ..................................................... 错误! 未定义书签4 程序运行结果 ............................... 错误! 未定义书签5 心得体会 ................................... 错误! 未定义书签参考文献..................................... 错误! 未定义书签附源代码..................................... 错误! 未定义书签1 课程设计简介1.1 课程设计的目的使学生熟悉磁盘管理系统的设计方法;加深对所学各种磁盘调度算法的了解及其算法的特点。
操作系统课程设计(完整规范版)
操作系统课程设计(完整规范版)一、引言操作系统是计算机系统的核心软件,它管理计算机的硬件资源,为应用程序提供运行环境。
本课程设计旨在通过实践,加深学生对操作系统原理的理解,提高学生的编程能力和系统设计能力。
二、课程目标1. 理解操作系统的基本原理和功能。
2. 掌握进程管理、内存管理、文件系统等核心模块的设计和实现。
3. 熟悉操作系统调度的基本算法。
4. 提高学生的编程能力和系统设计能力。
三、课程内容1. 操作系统概述操作系统的定义、功能和发展历程操作系统的基本组成和结构操作系统的类型和特点2. 进程管理进程的定义、状态和转换进程控制块(PCB)的结构和作用进程同步与互斥进程通信进程调度算法3. 内存管理内存管理的目标连续内存管理技术非连续内存管理技术页面置换算法4. 文件系统文件系统的定义和功能文件的结构和类型文件存储空间管理文件目录管理文件操作5. I/O系统I/O系统的功能和组成 I/O设备管理I/O调度算法缓冲管理6. 系统调用系统调用的定义和类型系统调用的实现机制常用系统调用分析7. 实验与课程设计实验目的和要求实验内容和步骤课程设计题目和要求课程设计报告格式四、课程考核1. 平时成绩(30%):包括课堂表现、实验报告和作业完成情况。
2. 实验成绩(30%):包括实验操作和实验报告。
3. 课程设计成绩(40%):包括设计报告、代码实现和答辩表现。
1. 《操作系统概念》作者:亚伯拉罕·西尔伯斯查茨等2. 《现代操作系统》作者:安德鲁·S·塔嫩鲍姆3. 《操作系统导论》作者:威廉·斯托林斯六、附录1. 课程设计报告模板2. 实验报告模板3. 课程设计答辩评分标准七、课程安排1. 理论学习操作系统概述(2课时)进程管理(4课时)内存管理(4课时)文件系统(4课时)I/O系统(2课时)系统调用(2课时)2. 实验与课程设计进程管理实验(2课时)内存管理实验(2课时)文件系统实验(2课时)I/O系统实验(2课时)课程设计(8课时)课程考核(2课时)八、实验与课程设计指导1. 实验指导进程管理实验:通过模拟进程的创建、撤销、阻塞和唤醒等操作,理解进程管理的原理。
操作系统课程设计说明书(最后修正)
华南理工大学广州学院操作系统课程设计说明书在Linux环境下模拟实现命令解释器学号:************专业:软件工程班级:09级软件工程1班姓名:***一.程序概述1.进入程序的目录如下:使用gcc 05.c –o 05 编译后生成可执行文件05.当输入./05的时候源程序的执行结果就显示如上图,进入了该程序,就可以输入图上的命令exit,mypwd,mydir,mycd,mydel,newdir,mycp.程序存取在/home/09469/05.2.完成的功能本程序在不使用system()系统调用的前提下实现了某些Linux环境下的系统自带功能,如:1、mypwd命令是显示当前所在目录的路径名输入格式:mypwd2、mydir命令是列出当前目录中的所有目录及文件输入格式:mydir3、mycd命令是改变当前工作目录输入格式:mycd <目录名或路径>4、newdir命令是新建所输入的目录输入格式:newdir <目录名>5、mydel命令是删除所输入的目录输入格式:mydel <目录名>6、exit命令是退出命令解释程序输入格式:exit7、mycp命令是复制文件的功能输入格式:mycp <文件1><文件2>二.概念原理该命令解析器程序运用了C++与C语言相结合完成了题目所要求的几种功能,并充分调用了外部函数实现各项功能。
如下是程序中运用到较为重要的几个函数:1、在mypwd()函数里用到了getcwd()函数,该函数原型为:char *_getcwd( char *buffer, int maxlen );功能:获取当前工作目录。
参数说明:_getcwd()会将当前工作目录的绝对路径复制到参数buffer所指的内存空间中,参数maxlen为buffer的空间大小。
所以需要显示当前所在目录的路径名只需要运用getcwd()函数就能直接获取出来。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
河南城建学院《操作系统》课程设计说明书设计题目:UNIX/Linux文件系统分析专业:计算机科学与技术指导教师:邵国金耿永军陈红军班级:0614082学号:061408261姓名:贠炳森同组人:叶矿辉、陈宇计算机科学与工程系2011年1月7日前言在现在计算机更新如此迅速的时代要学好计算机软件技术,特别是操作系统的学习,不仅要努力学好课本上的基础知识,还要经常在图书馆看些有关这方面的书籍,而更重要的是要有足够的实践经验,也要注重和同学的交流,经常尝试性的做些小的操作系统,对自己技术的提升会有很大的帮助。
同时,学习计算机操作系统技术,除了需要刻苦努力外,还需要掌握软件和操作系统的原理与设计技巧。
如何学习和掌握操作系统技术的原理与实际技巧呢?除了听课和读书之外,最好的方法恐怕就是在实践中练习。
例如,自己设计一个小型操作系统,多使用操作系统,多阅读和分析操作源代码等。
但由于我们的条件和学时有限,在理论学习过程中没有给同学们提供更多的实验机会。
本操作系统课程设计,是给同学提供一个集中实验的机会。
希望同学们通过该设计加深对所学习课程的理解。
本设计是基于课程中学到的UNIX系统调用,使用操作系统环境是Red Hat Linux 9,言语开发环境是Linux的GNU C或C++。
我做的课程设计是:Linux/Unix文件系统分析。
在Linux系统下,使用与文件相关的系统调用实现对物理设备文件的读写,参照Linux系统源代码以及Grub 系统的源代码,对不同介质上的FAT格式文件系统进行分析。
要求在Linux环境下设计出C语言程序,实现以下功能:1)分析UNIX SysV/Linux系统引导记录的作用;2)分析UNIX SysV/Linux的超级块及其结构,并建立相关数据结构,通过编程实现UNIX SysV/Linux文件系统内各部分的定位。
3)至少要实现对给定i节点文件的只读访问目录一.系统环境 (3)1.1硬件环境 (3)1.2软件环境 (3)二.设计目的及要求 (3)三.总体设计 (5)四.详细设计 (6)五.调试与测试 (6)六.设计中遇到的问题及解决方法 (6)七.Linux/Unix文件系统分析源程序清单 (7)7.1 头文件 (7)7.2 示例程序 (10)八.运行结果及分析 (16)8.1 linux文件系统读取 (16)8.2 UNIX文件系统读取 (18)九.心得体会 (19)十.参考文献 (20)Linux/Unix文件系统分析一.系统环境1.1硬件环境cpu为pentium4双线程技术,频率为2.8GHZ,内存为256MB。
1.2软件环境使用操作系统环境是Red Hat Linux 9,言语开发环境是Linux的 GNU C或C++。
二.设计目的及要求1、设计目的学习计算机软件技术,特别是计算机操作系统技术,除了需要刻苦努力外,还需要掌握软件和操作系统的原理与设计技巧。
如何学习和掌握操作系统技术的原理与实际技巧呢?除了听课和读书之外,最好的方法恐怕就是在实践中练习。
例如,自己设计一个小型操作系统,多使用操作系统,多阅读和分析操作源代码等。
但由于条件和学时有限,在理论学习过程中没有给提供更多的实验机会。
本操作系统课程设计,是提供了一个集中实验的机会。
应该通过该设计加深对所学习课程的理解。
2、设计要求按软件工程的思想和方法进行设计,并把它作为一个工程来做。
设计的每一步都有要形成文档,“成品”出来以后要有使用说明书和测试报告。
最后按院方统一要求整理出软件实习“论文”,并分别以电子和书面文档的形式上交。
最后,设计的程序要编译通过,并在验收时进行演示。
本设计的内容是基于《操作系统原理》教材的,但同学们必须对以前的《C 语言程序设计》和《数据结构》等内容进行认真的复习。
本设计是基于课程中学到的UNIX系统调用,使用操作系统环境是Red Hat Linux 9,言语开发环境是Linux的GNU C或C++。
因此,要求课程设计者对Linux 操作系统和GNU C或C++有一定的了解。
3、设计内容在Linux系统下,使用与文件相关的系统调用实现对物理设备文件的读写,参照Linux系统源代码以及Grub系统的源代码,对不同介质上的FAT格式文件系统进行分析。
要求在Linux环境下设计出C语言程序,实现以下功能:1)分析UNIX SysV/Linux系统引导记录的作用;2)分析UNIX SysV/Linux的超级块及其结构,并建立相关数据结构,通过编程实现UNIX SysV/Linux文件系统内各部分的定位。
3)至少要实现对给定i节点文件的只读访问。
4)建议根据文件读取文件。
文件系统必须完成下列工作:1)为了合理的存放文件,必须对磁盘等辅助空间(或称文件空间)进行统一管理。
在用户创新新文件时为其分配空闲区,而在用户删除或修改某个文件时,回收和调整存储区。
2)为了实现按名存取,需要有一个用户可见的文件逻辑结构,用户按照文件逻辑结构所给定的方式进行信息的存取和加工。
这种逻辑结构时独立于物理存储设备的。
3)为了便于存放和加工信息,文件在存储和设备上应按一定的顺序存放。
这种存放方式被称为文件物理结构。
4)完成对存放在存储设备上的文件信息的查找。
5)完成文件的共享和提供保护功能。
三.总体设计程序开始读取超级快内容到buff读取判断参数,打开文件系统,设置文件指针到超级快开头判断第二个参数UNIX 超级快内容解释程序段 LINUX 超级快内容解释程序段显示超级快内部包含的文件系统信 显示超级块内部包含的文件系统信息是否有第四参数 是否有第四参数解释为i 节点号 提示输入i 节点提示输入i 节点解释为i 节点号 根据i 节点读i 节点信息及i 节点所指向盘快信息并显示根据i 节点读i 节点信息及i 节点所指向盘快信息并显示四.详细设计分析UNIX SysV/Linux系统引导记录的作用UNIX SysV/Linux系统引导记录存放于整个硬盘的第一个扇区,即0柱面0磁头l扇区,也叫做MBR(MaserBoot Reoofd)扇区,即主引导记录。
主引导记录在计算机引导过程中起着举足轻重的作用,计算机在按下电源键以后,开始执行主板BI0S程序,进行完一系列检测和配置以后,开始按BI0S 中设定的系统引导顺序引导系统。
BIOS执行完自己的程序后如何把执行投交给硬盘呢。
交给硬盘后叉执行存储在哪里的程序呢?其实,称为MBR的扇区中的一段代码起着举足轻重的作用。
MBR不随操作系统的不同而小同,即不同的操作系统町能会存在相同的MBR.即使不同,MBR也不会夹带操作系统的性质,具有公共引导的特性。
对文件系统的操作参看程序源代码。
实现对磁盘文件的访问,实现读写、查看文件系统的存取信息,对应各个i节点的相关信息,以及各个i节点的排列情况,使用户能清楚的看到文件系统磁盘结构。
更加了解计算机文件系统的工作流程。
五.调试与测试(1)通过输入命令cc chengxu.c将文件编译为可执行文件a.out,通过输入命令./a.out加参数执行文件。
(2)判断命令行参数进行操作,当参数为./a.out u s51k .img时进行Linux文件系统读取,当参数为../a.out x xenix.img时进行Unix文件系统读取。
(3)判断是否有第四个参数,若没有,则提示输入i节点号并实现对给定i节点文件的只读访问。
六.设计中遇到的问题及解决方法在设计程序时。
我们按自己的理解编写了一个超级块和inode节点的结构体。
然后放在主程序中去读取信息,但是运行的结果大出我们的预料。
没有按我们的预期读出文件系统的信息,而是输出了一堆乱码,我们有经过查资料最后终于解决了问题,程序输出正常。
七.Linux/Unix文件系统分析源程序清单7.1 头文件#include <asm/types.h>typedef __s16 s16;typedef __u16 u16;typedef __s32 s32;typedef __u32 u32;typedef u16 sysv_ino_t;/* Block numbers are 24 bit, sometimes stored in 32 bit.On Coherent FS, they are always stored in PDP-11 manner: the leastsignificant 16 bits come last.*/typedef u32 sysv_zone_t;/* Among the blocks ... *//* Xenix FS, Coherent FS: block 0 is the boot block, block 1 the super-block.SystemV FS: block 0 contains both the boot sector and the super-block. *//* The first inode zone is sb->sv_firstinodezone (1 or 2). *//* Among the inodes ... *//* 0 is non-existent */#define SYSV_BADBL_INO 1/* inode of bad blocks file */#define SYSV_ROOT_INO 2 /* inode of root directory *//* Xenix super-block data on disk */#define XENIX_NICINOD 100 /* number of inode cache entries */#define XENIX_NICFREE 100 /* number of free block list chunk entries */struct xenix_super_block {u16 s_isize; /* index of first data zone */u32 s_fsize;// __packed2__; /* total number of zones of this fs *//* the start of the free block list: */u16 s_nfree;/* number of free blocks in s_free, <= XENIX_NICFREE */u32 s_free[XENIX_NICFREE]; /* first free block list chunk *//* the cache of free inodes: */u16 s_ninode; /* number of free inodes in s_inode, <= XENIX_NICINOD */sysv_ino_t s_inode[XENIX_NICINOD]; /* some free inodes *//* locks, not used by Linux: */char s_flock;/* lock during free block list manipulation */char s_ilock;/* lock during inode cache manipulation */char s_fmod; /* super-block modified flag */char s_ronly;/* flag whether fs is mounted read-only */u32 s_time;//__packed2__;/*time of last super block update*/u32 s_tfree;// __packed2__; /* total number of free zones */u16 s_tinode; /* total number of free inodes */s16 s_dinfo[4]; /* device information ?? */char s_fname[6]; /* file system volume name */char s_fpack[6]; /* file system pack name */char s_clean; /* set to 0x46 when filesystem is properly unmounted */ char s_fill[371];s32 s_magic; /* version of file system */s32 s_type; /* type of file system: 1 for 512 byte blocks2 for 1024 byte blocks3 for 2048 byte blocks */};/* SystemV FS comes in two variants:* sysv2: System V Release 2 (e.g. Microport), structure elements aligned(2).* sysv4: System V Release 4 (e.g. Consensys), structure elements aligned(4). */#define SYSV_NICINOD 100 /* number of inode cache entries */#define SYSV_NICFREE 50 /* number of free block list chunk entries *//* SystemV4 super-block data on disk */struct sysv4_super_block {u16 s_isize; /* index of first data zone */u16 s_pad0;u32 s_fsize; /* total number of zones of this fs *//* the start of the free block list: */u16 s_nfree;/* number of free blocks in s_free, <= SYSV_NICFREE */u16 s_pad1;u32 s_free[SYSV_NICFREE]; /* first free block list chunk *//* the cache of free inodes: */u16 s_ninode;/* number of free inodes in s_inode, <= SYSV_NICINOD */ u16 s_pad2;sysv_ino_t s_inode[SYSV_NICINOD]; /* some free inodes *//* locks, not used by Linux: */char s_flock; /* lock during free block list manipulation */char s_ilock; /* lock during inode cache manipulation */char s_fmod; /* super-block modified flag */char s_ronly; /* flag whether fs is mounted read-only */u32 s_time; /* time of last super block update */s16 s_dinfo[4]; /* device information ?? */u32 s_tfree; /* total number of free zones */u16 s_tinode; /* total number of free inodes */u16 s_pad3;char s_fname[6]; /* file system volume name */char s_fpack[6]; /* file system pack name */s32 s_fill[12];s32 s_state;/* file system state: 0x7c269d38-s_time means clean */s32 s_magic; /* version of file system */s32 s_type; /* type of file system: 1 for 512 byte blocks2 for 1024 byte blocks */};/* SystemV/Coherent inode data on disk */struct sysv_inode {u16 i_mode;u16 i_nlink;u16 i_uid;u16 i_gid;u32 i_size;union { /* directories, regular files, ... */unsigned char i_addb[3*(10+1+1+1)+1]; /* zone numbers: max. 10 data blocks, * then 1 indirection block,* then 1 double indirection block,* then 1 triple indirection block.* Then maybe a "file generation number" ??*//* named pipes on Coherent */struct {char p_addp[30];s16 p_pnc;s16 p_prx;s16 p_pwx;} i_p;} i_a;u32 i_atime; /* time of last access */u32 i_mtime; /* time of last modification */u32 i_ctime; /* time of creation */};/** SystemV/V7/Coherent FS inode data in memory*/struct sysv_inode_info {u32 i_data[10+1+1+1]; /* zone numbers: max. 10 data blocks,* then 1 indirection block,* then 1 double indirection block,* then 1 triple indirection block.*/};7.2 示例程序#include<stdio.h>#include<sys/types.h>#include<sys/stat.h>#include<fcntl.h>#include<unistd.h>#include"sysvfs.h"#include<ctype.h>main(int argc, char **argv){int i,j,k,typ,fd,L=5;char*file_sys,*tmp,buff[1024],buff_i[1025];struct sysv4_super_block *sbu;struct xenix_super_block *sbx;struct sysv_inode *inode;int inode_size, inode_no,blk_size;int i_start,d_start;long ll;ulong i_add[13];if(argc<3) {fprintf(stderr,"Usage:\n\t%argv[0] u|x filesystem\n",argv[0]);exit(1);}switch(argv[1][0]){case'U':case'u':typ=1;break;case'X':case'x':typ=2;break;default:typ=0;}file_sys=argv[2];if((fd=open(file_sys, O_RDONLY))==-1){fprintf(stderr,"File System '%s' OPEN error!\a\n",file_sys);exit(2);}if(lseek(fd,typ*512,SEEK_SET)!=typ*512){fprintf(stderr,"File System '%s' SEEK error!\a\n",file_sys);close(fd);exit(3);}if(read(fd,buff,512*typ)!=512*typ){fprintf(stderr,"File System '%s' READ error!\a\n",file_sys);close(fd);exit(4);}if(typ==1) goto unix_;if(typ==2) goto xenix_;exit(100);unix_:sbu=(struct sysv4_super_block *)buff;printf("index of first data zone:%x\n",sbu->s_isize);printf("s_pad0:%x\n", sbu->s_pad0);printf("total number of zones of this fs:%x\n",sbu->s_fsize);printf("/* the start of the free block list: */\n");printf("number of free blocks in s_free, <= SYSV_NICFREE:%x\n",sbu->s_nfree);printf("s_pad1:%x\t%ud\n", sbu->s_pad1, sbu->s_pad1);printf("/* the cache of free inodes: */\n");printf("number of free inodes in s_inode, <= SYSV_NICINOD:%x\n",sbu->s_ninode);printf("s_pad2:%x\n" ,sbu->s_pad2);printf("some free inodes:\n");printf("/* locks, not used by Linux: */\n");printf("time of last super block update:%x\n" ,sbu->s_time);printf("total number of free zones:%x\n" ,sbu->s_tfree);printf("total number of free inodes:%x\n" ,sbu->s_tinode);printf("file system volume name:%x\n" ,sbu->s_fname);char s_fpack[6]; /* file system pack name */printf("s_state:%x\n" ,sbu->s_state);/* file system state: 0x7c269d38-s_time means clean */printf("s_magic:%x\n" ,sbu->s_magic);/* version of file system *//* type of file system: 1 for 512 byte blocks */blk_size=512*sbu->s_type;i_start=2;d_start=sbu->s_isize;//+i_start-1;printf("Inode_from:%x\n",2*512*i_start);printf("Data_from:%x\n",2*512*d_start);inode_size=sizeof(struct sysv_inode);printf("Size of INODE struct= %d\n",inode_size);// get inode_noif(argc>=4){if(!isnum(argv[3])) inode_no=atoi(argv[3]);else{fprintf(stderr,"%s is not a INT");close(fd);exit(9);}}else {printf("\n\n\tPlease input INODE_NO:");scanf("%d",&inode_no);}printf("=========== inode=%d ==============\n",inode_no);--inode_no;j=inode_no*inode_size/1024;k=(inode_no*inode_size/*-1*/)%1024;j+=i_start;if((ll=lseek(fd,blk_size*j,SEEK_SET))!=blk_size*j){fprintf(stderr,"File System '%s' SEEK error!\a\n",file_sys);close(fd);exit(5);}printf("LL=%dl\n",ll);if(read(fd,buff_i,blk_size)!=blk_size){fprintf(stderr,"File System '%s' READ error!\a\n",file_sys);close(fd);exit(6);}tmp=buff_i+k;inode=(struct sysv_inode *)tmp;printf("i_mode=%x\n" ,inode->i_mode);printf("i_link=%x\n" ,inode->i_nlink);printf("I_ADDR:\n");for(i=0;i<40;i++) printf("%x| " ,inode->i_a.i_addb[i]);printf("I_ADDR_ALL:\n");for(i=0;i<64;i++) printf("%x| " ,tmp[i]);printf("\n");i=0;for(j=0;j<39;j+=3){i_add[i]=inode->i_a.i_addb[j]+256*inode->i_a.i_addb[j+1]+256*256*inode->i_a .i_addb[j+2];++i;}for(i=0;i<13;i++) printf("i_add[%d]=%d |", i,i_add[i]);printf("\n");// direct Blockfor(i=0;i<10;i++){if((ll=lseek(fd,blk_size*i_add[i],SEEK_SET))!=blk_size*i_add[i]){ fprintf(stderr,"File System '%s' SEEK error!\a\n",file_sys);close(fd);exit(7);}if(read(fd,buff_i,blk_size)!=blk_size){fprintf(stderr,"File System '%s' READ error!\a\n",file_sys);close(fd);exit(8);}buff_i[blk_size]='\0';fprintf(stderr,"%s",buff_i);}close(fd);exit('U');xenix_:sbx=(struct xenix_super_block *)buff;uint isize,nfree,ninode,tinode,*ii;ulong fsize,*ul;tmp=buff;isize=sbx->s_isize;tmp+=2;ul=(ulong *)tmp;fsize=*ul;printf("index of first data zone:%x\n",sbx->s_isize);printf("total number of zones of this fs:%lx\n",fsize);printf("/* the start of the free block list: */\n");tmp=buff;tmp+=6;nfree=tmp[0]+256*tmp[1];printf("number of free blocks in s_free, <= SYSV_NICFREE:%x\n",nfree);tmp=buff+1024-4;ll=*(long *)tmp;/* type of file system: 1 for 512 byte blocks */blk_size=512*ll;printf("blk_size=%d\n",blk_size);i_start=2;d_start=sbx->s_isize;//+i_start-1;printf("Inode_from:%x\n",2*512*i_start);printf("Data_from:%x\n",2*512*d_start);inode_size=sizeof(struct sysv_inode);printf("Size of INODE struct= %d\n",inode_size);// get inode_noif(argc>=4){if(!isnum(argv[3])) inode_no=atoi(argv[3]);else{fprintf(stderr,"%s is not a INT");close(fd);exit(9);}}else {printf("\n\n\tPlease input INODE_NO:");scanf("%d",&inode_no);}printf("=========== inode=%d ==============\n",inode_no);--inode_no;j=inode_no*inode_size/1024;k=(inode_no*inode_size)%1024;j+=i_start;if((ll=lseek(fd,blk_size*j,SEEK_SET))!=blk_size*j){fprintf(stderr,"File System '%s' SEEK error!\a\n",file_sys);close(fd);exit(5);}printf("LL=%dl\n",ll);if(read(fd,buff_i,blk_size)!=blk_size){fprintf(stderr,"File System '%s' READ error!\a\n",file_sys);close(fd);exit(6);}tmp=buff_i+k;printf("\n\n");for(i=0;i<sizeof(struct sysv_inode);i++) printf("%x| ",tmp[i]);inode=(struct sysv_inode *)tmp;printf("i_mode=%x\n" ,inode->i_mode);printf("i_link=%x\n" ,inode->i_nlink);printf("I_ADDR:\n");for(i=0;i<40;i++) printf("%x| " ,inode->i_a.i_addb[i]);printf("I_ADDR_ALL:\n");for(i=0;i<64;i++) printf("%x| " ,tmp[i]);printf("\n");i=0;for(j=0;j<39;j+=3){i_add[i]=inode->i_a.i_addb[j]+256*inode->i_a.i_addb[j+1]+256*256*inode->i_a .i_addb[j+2];++i;}for(i=0;i<13;i++) printf("i_add[%d]=%d |", i,i_add[i]);printf("\n");// direct Blockfor(i=0;i<10;i++){if((ll=lseek(fd,blk_size*i_add[i],SEEK_SET))!=blk_size*i_add[i]){ fprintf(stderr,"File System '%s' SEEK error!\a\n",file_sys);close(fd);exit(7);}if(read(fd,buff_i,blk_size)!=blk_size){fprintf(stderr,"File System '%s' READ error!\a\n",file_sys);close(fd);exit(8);}fprintf(stderr,"%s",buff_i); // Maybe write to a file}close(fd);exit('X');}isnum(char *s){int i;for(i=0;s[i]!='\0';i++)if(!isdigit(s[i])) return 1;return 0;}八.运行结果及分析8.1 linux文件系统读取8.2 UNIX文件系统读取九.心得体会为期一周的课程设计即将告一段落,这次课程设计中,我收获了很多。