期刊问答网 论文发表 期刊发表 期刊问答
  • 回答数

    4

  • 浏览数

    307

唔小Y
首页 > 期刊问答网 > 期刊问答 > 毕业论文操作系统有哪些

4个回答 默认排序1
  • 默认排序
  • 按时间排序

让我想想lee

已采纳
Linux 系统命令    指令名称:chown   使用权限:root   使用方式:chmod [-cfhvR] [--help] [--version] user[:group]   说明:Linux/Unix 是多人多工作业系统,所有的档案皆有拥有者。利用 chown 可以将档案的拥有者加以改变。一般来说,这个指令只有是由系统管理者(root)所使用,一般使用者没有权限可以改变别人的档案拥有者,也没有权限可以自己的档案拥有者改设为别人。只有系统管理者(root)才有这样的权限。   把计:  user:新的档案拥有者的使用者 IDgroup:新的档案拥有者的使用者群体(group)-c:若该档案拥有者确实已经更改,才显示其更改动作-f:若该档案拥有者无法被更改也不要显示错误讯息-h:只对于连结(link)进行变更,而非该 link 真正指向的档案-v:显示拥有者变更的详细资料-R:对目前目录下的所有档案与子目录进行相同的拥有者变更(即以递回的方式逐个变更)--help:显示辅助说明--version:显示版本   范例:  将档案 xt 的拥有者设为 users 群体的使用者 jessie:  chown jessie:users xt   将目前目录下的所有档案与子目录的拥有者皆设为 users 群体的使用者 lamport:  chmod -R lamport:users *   名称:cp   使用权限:所有使用者   使用方式:   cp [options] source dest   cp [options] directory   说明:将一个档案拷贝至另一档案,或将数个档案拷贝至另一目录。  把计:   -a 尽可能将档案状态,权限等资料都照原状予以复制。   -r 若 source 中含有目录名,则将目录下之档案亦皆依序拷贝至目的地。   -f 若目的地已经有相同档名的档案存在,则在复制前先予以删除再行复制。   范例:   将档案 aaa 复制(已存在),并命名为 bbb:  cp aaa bbb   将所有的C语言程式拷贝至 Finished 子目录中:  cp * Finished   名称:cut   使用权限:所有使用者   用法:cut -cnum1-num2 filename   说明:显示每行从开头算起 num1 到 num2 的文字。   范例:   shell>> cat example   test2   this is test1   shell>> cut -c0-6 example ## print 开头算起前 6 个字元   test2   this i  cat cd   chmod chown   cp cut  名称:cat   使用权限:所有使用者   使用方式:cat [-AbeEnstTuv] [--help] [--version] fileName   说明:把档案串连接后传到基本输出(萤幕或加 > fileName 到另一个档案)   参数:   -n 或 --number 由 1 开始对所有输出的行数编号   -b 或 --number-nonblank 和 -n 相似,只不过对于空白行不编号   -s 或 --squeeze-blank 当遇到有连续两行以上的空白行,就代换为一行的空白行   -v 或 --show-nonprinting   范例:   cat -n textfile1 > textfile2 把 textfile1 的档案内容加上行号后输入 textfile2 这个档案里   cat -b textfile1 textfile2 >> textfile3 把 textfile1 和 textfile2 的档案内容加上行号(空白行不加)之后将内容附加到 textfile3   名称:cd   使用权限:所有使用者   使用方式:cd [dirName]  说明:变换工作目录至 dirName。 其中 dirName 表示法可为绝对路径或相对路径。若目录名称省略,则变换至使用者的 home directory (也就是刚 login 时所在的目录)另外,"~" 也表示为 home directory 的意思,"" 则是表示目前所在的目录,"" 则表示目前目录位置的上一层目录。   范例:跳到 /usr/bin/:  cd /usr/bin   跳到自己的 home directory:  cd ~   跳到目前目录的上上两层:  cd /   指令名称:chmod   使用权限:所有使用者   使用方式:chmod [-cfvR] [--help] [--version] mode   说明:Linux/Unix 的档案存取权限分为三级:档案拥有者,群组,其他。利用 chmod 可以藉以控制档案如何被他人所存取。  把计:  mode:权限设定字串,格式如下:[][[+-=][rwxX]][,],其中u 表示该档案的拥有者,g 表示与该档案的拥有者属于同一个群体(group)者,o 表示其他以外的人,a 表示这三者皆是。   + 表示增加权限,- 表示取消权限,= 表示唯一设定权限。   r 表示可读取,w 表示可写入,x 表示可执行,X 表示只有当该档案是个子目录或者该档案已经被设定过为可执行。   -c:若该档案权限确实已经更改,才显示其更改动作   -f:若该档案权限无法被更改也不要显示错误讯息   -v:显示权限变更的详细资料   -R:对目前目录下的所有档案与子目录进行相同的权限变更(即以递回的方式逐个变更)   --help:显示辅助说明   --version:显示版本  范例 :将档案 xt 设为所有人皆可读取:  chmod ugo+r xt   将档案 xt 设为所有人皆可读取:  chmod a+r xt   将档案 xt 与 xt 设为该档案拥有者,与其所属同一个群体者可写入,但其他以外的人则不可写入:  chmod ug+w,o-w xt xt   将 py 设定为只有该档案拥有者可以执行:  chmod u+x py   将目前目录下的所有档案与子目录皆设为任何人可读取:  chmod -R a+r *   此外chmod也可以用数字来表示权限如 chmod 777 file   语法为:chmod abc file   其中a,b,c各为一个数字,分别表示User,Group,及Other的权限。  r=4,w=2,x=1   若要rwx属性则4+2+1=7;   若要rw-属性则4+2=6;   若要r-x属性则4+1=7。   范例:   chmod a=rwx file   和   chmod 777 file   效果相同   chmod ug=rwx,o=x file   和   chmod 771 file   效果相同   若用chmod 4755 filename可使此程式具有root的权限

毕业论文操作系统有哪些

254 评论(14)

高等有机

摘要:本文介绍了BLP、DTE和RBAC三种安全策略访问模型,并结合这三种安全策略模型,形成一个适应各类安全产品的实用操作系统。此设计方案遵循GB17859-1999[1]中规定的结构化保护级(相当于《TCSEC》标准的B2级[2])的安全要求进行设计,并在Linux操作系统上得以实现。 关键字:安全技术;安全模型;Linux操作系统中图分类号:TP309 文献标识码:② 文章编号: 引言随着社会信息化的发展,计算机安全问题日益严重,建立安全防范体系的需求越来越强烈。操作系统是整个计算机信息系统的核心,操作系统安全是整个安全防范体系的基础,同时也是信息安全的重要内容。本课题将通过研究操作系统的安全策略访问模型,结合国内、外的相关安全标准和已有的先进技术,将密码服务与高级别存取控制机制有机地结合起来,探索适合国情的安全操作系统结构,最终形成一个适应各类安全产品系统安全需求的结构化保护级(相当于TCSEC中规定的B2级)实用操作系统。并且通过推动安全操作系统的应用,取得良好的经济效益和社会效益。 安全模型该类模型是从安全策略和访问控制的角度描述安全系统,主要针对系统中主体对客体的访问及其安全控制。[3]1 多级安全及自主访问策略模型多级安全及自主访问策略模型的每个主体在替代用户之前,必须被配置最大安全级及标签范围;除某些可信客体外,每一个客体都要配置标签范围。Bell&Lapadula(BLP)模型[4,5]是最典型的信息保密性多级安全模型,包括强制访问控制和自主访问控制两部分。强制访问控制中的安全特性,要求对给定安全级别的主体,仅被允许对同一安全级别和较低安全级别上的客体进行“读”,对给定安全级别上的主体,仅被允许向相同安全级别或较高安全级别上的客体进行“写”,任意访问控制允许用户自行定义是否让个人或组织存取数据。2 多域安全策略模型多域策略的基本思想是:赋予保护对象一种抽象的数据类型,该类型表明了保护对象要保护的完整性属性,然后规定只有经授权的主动进程能替代用户访问这一完整性属性,并限制该主动进程的活动范围,使其获得它应该完成目标以外的能力极小化。DTE (Domain and Type Enforcement)模型[6]是近年来被较多的作为实现信息完整性保护的模型。该模型定义了多个域(Domain)和型(Type),并将系统中的主体分配到不同的域中,不同的客体分配到不同的型中,通过定义不同的域对不同的型的访问权限,以及主体在不同的域中进行转换的规则来达到保护信息完整性的目的。3 基于角色的访问控制模型基于角色的访问控制模型的目的就是通过域隔离,确保对系统的完整性破坏的极小化。RBAC模型[6]是基于角色的访问控制模型。该模型主要用于管理特权,在基于权能的访问控制中实现职责隔离及极小特权原理。其基本要素之间的关系如图1所示:图1 RBAC基本要素关系F1 the relationship of basic elements in RBAC在本系统中,将实现基于角色的授权和控制,支持角色互斥,不支持角色的继承,不支持同一个用户的多个角色。 安全系统的设计1 安全模型的设计本系统中的安全服务器将遵循改进的BLP模型、DTE模型以及RBAC模型来实现系统的安全策略。其中,BLP模型保护信息的机密性;DTE模型保护信息的完整性;RBAC模型是授权模型。通过三种模型的相互作用和制约,保证系统中的信息以及系统自身的安全性。图2为本系统中三种模型以及重要功能的相互关系。图2 模型间的相互关系F2 the relationship of models如图2所示,授权策略RBAC是整个系统的基础,它通过为用户设置特定角色,影响IA控制、特权控制、多域访问控制和强制访问控制等基本功能,达到控制系统中用户/主体对客体/对象的访问目的。在本系统中,每个用户都有且只有一个角色。为某个用户给定一个角色,相当于给定该用户的最大特权集、安全标记范围、DTE域范围和最小审计掩码。该用户的上述属性只能够在给定角色的范围内指定。RBAC是通过最小特权、强制访问控制(包括MAC机密性保护和DTE完整性保护)和安全审计等功能组合实现的。而多域策略DTE和多级安全策略BLP则是在授权策略授权的基础上,调用多域访问控制和强制访问控制功能,实现对客体/对象信息的完整性和机密性保护。本系统在BLP模型的基础上进行了一些改动: 对BLP模型“上写下读”的信息流规则进行了限制,将其中的“上写”改为:低安全等级的主体可以创建高安全等级的客体或向高安全等级的客体中添加信息,但是不能修改或删除高安全等级客体中的原有信息。例如,低安全等级的主体可以在高安全等级目录下(在通过了DAC和DTE检查的情况下)创建新的文件(包括子目录、命名管道等),但是不能删除原有的文件(包括子目录、命名管道等),也不能改写高安全等级文件的内容; 引入可信主体的概念,即:所谓可信主体,就是拥有多个安全级或一个安全级范围的主体; 引入可信客体的概念,即:所谓可信客体,就是拥有多个安全级或一个安全级范围的客体。本系统中DTE实现采用为主体/客体指定域/型标识(统称为DTE标识)的方法,DTE策略将通过为主体赋“域”(Domain),为客体赋“型”(Type),并定义“域”和“型”之间的访问权限实现DTE完整性保护,并采用DTEL(DTE Language)语言进行描述,通过命令设置到系统核心。核心中将为每个主体维护一个“域”标记,为每个文件维护一个“型”标记。当操作发生时,系统将根据主体“域”标记、文件“型”标记以及访问控制表判断是否允许操作发生。原则上,构造一个安全系统必须同时兼顾用户应用系统、O/S服务系统、Linux 内核、硬件这四个子系统,使它们都获得有效的保护;但本系统主要关心用户应用系统和Linux 内核系统,因为它们与Linux 系统安全联系最直接。构筑安全Linux 系统的最终目标就是支持各种安全应用,如果系统在构造之初就没有区别地对待不同的应用,或者说不采取隔离的方式对待不同的应用,那么这样的系统是不实用的,因为不同的应用对系统安全可能造成的威胁是不同的。对用户应用系统的控制,我们主要采用角色模型与DTE技术的结合;而对Linux 内核的控制,则通过权能访问控制、增强的BLP模型及DTE策略来实现。2 安全系统的结构设计图3 Linux 结构化保护级安全服务器系统结构图F3 the structure chart of Linux structure protection security server 图3说明了本系统的体系结构。如图3,用户请求的系统操作进入核心后,首先经过安全策略执行点,调用相应的安全策略执行模块,安全策略执行模块读取相关的系统安全信息和主/客体安全属性,并调用安全策略判定模块进行安全判定,决定是否允许用户请求的操作继续执行;当用户请求的系统操作得到允许并执行结束后,再次通过安全策略执行点,进行相关安全信息/属性的设置和安全审计。安全服务器中的功能模块与原有的系统操作是相对独立的,双方通过hook函数进行联系。通过改变hook函数的指向,可以启用不同的安全服务器。不同的安全服务器可以选择不同的安全策略,从而达到支持多安全策略的目的。3 安全系统的功能特性安全系统在原有Linux操作系统基础上,新增了的强制访问控制、最小特权管理、可信路径、隐通道分析和加密卡支持等功能组成,系统的主要功能如下: 标识与鉴别标识与鉴别功能用于保证只有合法的用户才能存取系统资源。本系统的标识与鉴别部分包括角色管理、用户管理和用户身份鉴别等三个部分: 角色管理是实现RBAC模型的重要部分,将角色配置文件存放在/etc/security/role文件中,角色管理就是对角色配置文件的维护。 用户管理就是对用户属性文件的维护,是在系统原有用户管理的基础上修改和扩充而来;本系统改变了原有系统集中存放用户属性的方式,在/etc/security/ia目录下为每个用户创建一个属性文件。 用户身份鉴别过程就是控制用户与系统建立会话的过程;本系统将修改原有系统的pam模块和建立会话的程序,增加对管理员用户的强身份鉴别(使用加密卡),增加为用户设置初始安全属性(特权集、安全标记、域、审计掩码)的功能。 自主访问控制(DAC)用于进行按用户意愿的存取控制。使用DAC,用户可以说明其资源允许系统中哪个(些)用户使用何种权限进行共享。本系统在自主访问控制中加入ACL机制。利用ACL,用户能够有选择地授予其他用户某些存取权限,来对信息进行保护,防止信息被非法提取。 强制访问控制(MAC)提供基于数据保密性的资源存取控制方法。MAC是多级安全及自主访问策略的具体应用,通过限制一个用户只能在低级别上读访问信息、只能在自身的级别上写访问信息,来加强对资源的控制能力,从而提供了比DAC更严格的访问约束。 安全审计审计是模拟社会监督机制而引入到计算机系统中,用于监视并记录系统活动的一种机制。审计机制的主要目标是检测和判定对系统的渗透,识别操作并记录进程安全级活动的情况。本系统中的审计事件分为可信事件与系统调用。系统对每个用户审计的内容不同,需要设置系统的审计事件掩码和用户的审计事件掩码。在形成审计记录时,核心将根据审计掩码进行选择。 客体重用客体重用是指TSF必须确保受保护资源内的任何信息,在资源被重用时不会被泄露。客体重用功能可以防止重要的客体介质在重新分配给其他主体的时候产生信息泄漏。在本系统中,出于系统效率和可靠性的考虑,只实现对核心重要数据结构剩余信息的自动清除和文件内容的人工清除。 最小特权管理根据《TESCE》B2级中提出的最小特权原理,系统中的每个进程只应具有完成其任务和功能所需要的最小特权。因此,在本系统中开发了一种灵活的特权管理机制,把超级用户的特权划分成一组细粒度特权的集合,通过对系统中用户和进程特权的赋值、继承和传递的控制,将其中的部分特权赋给系统中的某个用户,从而使系统中的普通用户也能具有部分特权来操作和管理系统。 可信路径可信路径要求为用户提供与系统交互的可信通道。可信路径的实现方法是通过核心对安全注意键的监控,并退出当前终端下的所有应用程序,启动新的可信登陆程序。根据《TESEC》B2级对可信通路的要求,在本系统中开发了可信通路机制,以防止特洛伊木马等欺诈行为的发生。用户无论在系统的什么状态下,只要激活一个安全注意键(一般设置为Ctrl-Alt-A),就可以进入一个安全的登录界面。另外,本系统还采用了管理员用户的强身份认证和建立加密通道等技术,也可以保证用户与系统间交互的安全性。 隐蔽通道分析我国《计算机信息系统安全保护等级划分准则》[1]要求第四级及以上级别安全信息系统产品必须分析与处理隐蔽通道。本系统掩蔽通道分析将基于源代码,采用下列方法进行:分析所有操作,列出操作及其涉及的共享资源(客体属性) 列出操作与共享资源的关系图 找出所有可能的存储隐蔽通道 分析、标识每个存储隐蔽通道,并给出带宽 加密卡支持 本系统基于国产密码硬件资源,实现的密码服务主要包括三个方面:文件存储加解密:在命令层为用户提供一套SHELL命令,实现文件的机密性、完整性保护,同时提供一套接口库函数,供用户编程使用。特权用户强身份认证:结合RBAC、DTE策略,对特权(角色)用户实施强身份认证。数据传输加解密:在核心提供一套函数接口,用于实现数据的机密性和完整性。 结论本方案通过对Linux核心结构和操作系统域外层安全体系的层次结构的研究,遵循国内、外的相关安全标准,将三种安全策略模型和已有的先进技术有机地结合起来,增加了强制访问控制、最小特权、可信路径等安全功能,成功的在Linux操作系统上得已实现,基本达到了GB17859-1999中规定的结构化保护级(相当于《TCSEC》标准的B2级)的要求。操作系统安全增强技术作为信息安全的关键部分,得到了国内、外的普遍重视。在安全领域,系统的安全性总是相对的。因此,对安全模型的研究和建模以及信息安全系统体系和方案设计的研究还有待进一步的深入。本设计方案已经在Linux操作系统上得到具体的实现,还有待于在实际应用中对安全操作系统进一步的考验和完善。 参考文献[1] GB17859-1999, 计算机信息系统安全保护等级划分准则[S][2] DoD 28-STD, Department of Defense Trusted Computer System Evaluation Criteria[S] Department of Defense, Washington,DC, [3] 石文昌, 孙玉芳 计算机安全标准演化与安全产品发展[J] 广西科学, 2001, 8 (3): 168-[4] BELL D E, LaPADULA L J Secure computer system: mathematical foundation and model[R] Bedford MA: Mitre Corp, M74-[5] 石文昌, 孙玉芳, 梁洪亮 经典BLP安全公理的一种适应性标记实施方法及其正确性[J] 计算机研究与发展, 2001,11 (38): 1366~1371[6] 季庆光,唐柳英《结构化保护级》安全操作系统安全策略模型[R] 北京:中科院信息安全技术工程研究中心,中软网络技术股份有限公司,The Research and Design of Security Model LI Fang, HU Zhi-xing(Information Engineering Institute, University of Science and Technology Beijing, Beijing 100083, China)Abstract: After study of BLP model, DTE model and RBAC model, and combination of the three security models, an implementation scheme of security system and its components and functions is provided, which achieves the structure protection of GB17859 (as the level B2 of TCSEC standard) The scheme is implemented on Linux operating system Key words: security techniques; security model; Linux operating system
175 评论(15)

ltx08

Windows进程管理工具设计与实现(论文+源码)行不行挖,,,,可以就去看看嘛
255 评论(12)

hqook

操作系统课程设计报告  一. 简介  Linux系统是从UNIX发展来的。UNIX是世界上最流行的操作系统之一,它是一种实时操作系统,可以运行于大型和小型计算机上的多任务系统。但由于它比较庞大,而且价格昂贵,所以不适合PC机用户使用。而Linux正好弥补了这些缺点,同时还继承了UNIX大多数优点。由于它基于PC机上运行的操作系统,并且内核源代码是公开的,使得Linux成为时下最浒的操作系统。Linux是一种适用于PC机的计算机操作系统,它适合于多种平台,是目前唯一免费的非商品化操作系统。由于有结构清晰、功能强大等特点,它很快成为许多院校学生和科研机构的研究人员学习和研究的对象。在他们的热心努力下,Linux渐渐成为一个稳定可靠、功能完善的操作系统。Linux是由UNIX发展来的,它不仅继承了UNIX操作系统的特征,而且许多方面还超过了UNIX系统。另外它还有许多UNIX所不具有的优点和特征。它的源代码是开放的,可运行于许多硬件平台 ,支持多达32种文件,支持大量的外部设备等。 Linux有广泛的用处,它可用于:   个人UNIX工作站。   终端用户和应用服务器。   UNIX开发平台。   商业开发。   网络服务器。   Internet服务器。   终端服务器、传真服务器、Modem服务器。  二、Linux系统下C编程原理  1. Linux系统的主要优异性能   Linux系统是真正的爽用户。多任务、多平台操作系统。   Linux系统提供提供具有内置安全措施的分层的文件系统,支持多达32种文件系统。   Linux系统提供命令解释程序和编程语言。   Linux系统提供强大的管理功能。   Linux系统具有内枋的编程接口。   Linux系统具有图形用户接口。   Linux系统许多组成部分的源代码是开放的,任何人都能修改和重新发布它。   Linux系统不公可以运行许多自由发布的应用软件,还可以运行许多商业化的应用软件。  2. Linux系统的主要构成   存储管理  在Linux中,每一个进程都有一个比实际物理空间大得多的进程虚拟空间,每个进程还保留一张页表,用于将本进程空间中的虚地址变换成物理地址,页表还对物理页的访问权限作了规定,从而达到存储保护的目的。   进程管理  在Linux中,进程是资源分配的基本单位,所有资源都是以进程为对象进行分配的,在一个进程的生命周期中,会用到许多系统资源,Linux的设计可以准确描述进程的状态和资源的使用情况,以确保不出现某些进程过度占用系统资源而导致另一些进程无休止地等待的情况。   文件系统  Linux最重要的特征之一就是支持多种不同的文件系统。在Linux中,一个分离的文件系统不是通过设备标志来访问,而是把它合到一个单一的目录树结构中去,通过目录访问。Linux把一个新的文件系统安装到系统单一目录树的某一目录下,则该目录下的所有内容被新安装的文件系统所覆盖,当文件系统被卸下后,安装目录下的文件将会被重新恢复。   进程间通信  Linux提供多种进程间的通信机制,管道和信号是其中最基本两种,其他还有消息队列、信号灯及共享内存。为支持不同机器之间的进程通信,Linux还引入了机制。  3. gcc编译器的使用  在Linux开发环境下,gcc是进行程序开发不可或缺的编译工具,是GUN C Compile的缩写,它是在GUN系统下的标准C编译器。gcc作为Linux平台下的标准C编译器,功能强大。人们可以使用gcc编译器编译单一文件的最基本的命令,正是有了gcc编译器人们才能使用它编译C源程序。  gcc的完整格式是gcc [options] [filenames] ,编译选项指定的操作对给定的文件进行编译处理。在后面可以有多个编译选项,同时进行多个编译操作。  三、总体设计  下面介绍Linux系统中的文件以及与文件有关的操作。在C编程环境中,与文件有关的操作主要是I/O操作,即基于文件描述符的操作。此外,还将介绍其他一些与文件有关的操作。  在Linux系统中,有关的I/O操作可以分为两类。它们是基于文件描述符的I/O操作和基于流I/O的操作。它们有各自不同的特点和优势。基于文件描述符的I/O操作是通过文件描述符对一个文件执行I/O操作的。文件是一个十分重要的概念。通常保存在外存中的数据都是以文件的形式保存的。文件描述符则是用于描述被打开文件的索引值。通常情况下,都是通过文件描述符打开一个文件执行I/O操作。  文件和文件系统是重要而复杂的概念。文件是有名字的一组相关信息的集合。在Linux系统中,文件的准确定义是不包含有任何其他结构的字符流。通俗的说,就是文件中的字符与字符之间除了同属于一个文件之外,不存在任何其他的关系。文件中字符的关系,是由使用文件的应用程序来建立各解释的。每一个文件都具有特定的属性。Linux系统的文件属性比较复杂,主要包括文件类型和文件权限两个方面。  1.文件类型  Linux下的文件可以分为5种不同的类型 。它们是普通文件、目录文件、链接文件、设备文件和管道文件。  (1)、普通文件  普通文件也称正规文件,是最常见的一类文件,也是最常使用到的一类文件。其特点是不包含有文件系统的结构信息。通常所接触到的文件,包括图形文件、数据文件、文档文件、等等都属于普通文件。这种类型的文件按其内部结构又可细分为两个文件类型:文本文件和二进制文件。  (2)、目录文件  目录文件是用于存放文件名及其相关信息的文件。是内核组织文件系统的基本节点。目录文件可以包含下一级目录文件或普通文件。  (3)、链接文件  链接文件是一种特殊的文件。它实际上是指向一个真实存在的文件的链接。根据链接对象的不同,链接文件又可以细分为硬链接文件和符号链接文件。  (4)、设备文件  设备文件是Linux中最特殊的文件。正是由于它的存在,使得Linux系统可以十分方便地访问外部设备。Linux系统为外部设备提供一种标准接口,将外部设备视为一种特殊的文件。用户可以像访问普通文件一样访问外部设备。这就使Linux系统可以很方便的适应不断发展的外部设备。  (5)、管道文件  管道文件也是一种很特殊的文件。主要用于不同进程间的信息传递。当两个进程间需要进行数据或信息传递时,可以通过管道文件。一个进程将需传递的数据或信息写入管道的一端,另一进程则从管道的另一端取得所需的数据或信息。  2.进程基本介绍  在Linux环境下,进程是一个十分重要的概念。按现在通行的认识,进程是具有一定功能的程序关于一个数据集合的一次执行过程。对一个特定程序来说,它的每一个正在运行中的副本都有自己的进程。就是说,如果用户在一个进程的一次运行尚未结束时再次启动该程序,则将有两个进程在运行这一程序。多个进程可以同时运行,各个进程之间相互隔开,除非不同进程之间需要进行数据交换,否则互不影响。  一个进程的存在过程,可以分为进程的产生、进程的执行和进程的结束3个步骤。当一个程序被启动时,就产生一个新的进程。进程在系统内核的管理下得到执行。当某个进程执行完毕后,该进程就消亡了。  Linux系统支持多个进程同时进行。所谓同时,其实是Linux系统在各个进程之间调度,轮流是每个进程占用CPU 的一个时间片。由于每个时间片和宏观的时间相比很小,而每个进程可以频繁的得到时间片,于是就使用户看到了多个进程“同时”运行的情况。在每个进程属性的安全信息里都设有一个优先级,系统根据它来决定各个进程从CPU获得的时间片的大小。  用户在执行一个程序以完成一定的功能时,为了提高程序执行的效率,可以把一个程序设计成由若干个部分组成,由若干个部分组成,由若干个进程同时执行。这就是所谓并发程序的概念。此外,不同进程之间可能会需要相互合作,即进程通信和进程同步。  当然,多个进程并不需要同上时间产生并都维持到整个程序运行结束。用户可以根据需要动态地产生结束进程。也就是说,一个进程可以派生另一个进程,这就是所谓父进程和了进程的关系。  每个进程都有各自的属性,其中包括了进程的详细信息。  库的使用  代码的重用性是当代计算机编程语言中一个重要的概念,可以把编译好的目标文件模块统一放到一个库中,使得程序员可以在不同的程序中共享这些代码。  在操作系统中,最终链接生成可执行文件时,如果链接的是一般的文件,则  整个文件的内容都会被装入可执行文件中;如果链接的是库,则只是从库存中找到程序中用到的变量和数,将它们装入可执行文件中,那些放在库中但是没有被程序所引用的变量和数则不会被链接到最终的可执行文件。  所以,使用库可以节省在大量的开发时间,在写较大的程序时,最好把程序  模块放在库中。  对于任何典型的操作系统命令都由简单命令、参数、输入文件名、输出文件名、I/O重定向文件名等组成。(关于以上术语的数据字典见下表)  以命令 gcc –ggdb3 –o moon 为例:  数据字典一:  术语 说明  简单命令 一个Linux长命令可以有多个像gcc,more等这样的纯命令组成。其中每个纯命令如gcc,more就是这里说的简单命令  参数 范例命令中的-g,-o就是参数,它们是命令的扩展,可以根据用户的不用需要提供相应的不同服务  输入文件名 范例命令中的就是输入文件名,它相当于一个源文件,在文件的连接和复制的命令中也常常用到这样的文件  输出文件名 范例命令中的moon就是输出文件名,它相当与一个目标文件,在文件的连接和复制的命令中也常常用到这样的文件  I/O重定向文件名 在Linux系统中所有的设备都被看作文件进行管理,I/O文件(设备)作为输出的目标时是可以根据用户的需要进行调整的,I/O重定向文件名就是用来指定I/O文件(设备)名的  模块说明:  模块名称 功能说明  总控模块  main() 该模块调用其他模块实现命令解释功能,保证无论命令执行成功与否都在命令执行后返回命令提示符  命令初始化模块  init_command() 使用singnal函数对进程进行处理,达到初始化命令的效果  命令行输入  get_comln() 该模块接受用户键盘输入的所有字符并存入相应的字符数组,供其他模块使用  分析简单命令个数  get_simcom() 该模块对用户键盘输入的长命令进行分析并最终将长命令分割成数据字典一中的元素,存入相应的结构数组,供执行模块执行  执行指令  execute() 对各种的数据字典一中的元素进行最后的处理,完成区分前后台程序,封锁、开启键盘等功能  分析简单命令  get_simarg() 对简单命令进行分割,为执行模块提供最直接的信息  得到下一个标志符  get_word() 该过程用来记录输入文件名、输出文件名、I/O重定向并存入相应的结构数组  查看字符串是否匹配  check() 用来区分长命令中各个数据字典一中的元素的标准,为分割长命令提供参考信息  执行简单命令  run_com() 该模块与操作系统底层联系,使用系统调用完成各个简单命令的最终执行  程序初始化  init_once() 对程序中用到的所有变量和数据结构进行初始化  模块图:  四.详细设计  /*执行输入命令的文件*/  execute(int j)  {  int m,fd,fds[2]; /*fd 文件描述符号*/  if(infile[0]!=’0’)  /*如果命令指定了输入文件则打开输入文件*/  cmdlin[0]infd=open(infile,O_RDONLY);  if(outfile[0]!=’/0’)  /*如果命令指定了输出文件则打开相应的输出文件*/  if(append= =FLASE)  cmdlin[j-1]utfd=open(outfile,O_WRONLYIO_CREATIO_TRUNC,0666);  /*本句意思:一个已只读方式打开某指定文件的函数,如果该文件不存在*/  /*则创建此文件,如果该文件存在则将文件长度截至0*/  else  cmdlin[j-1]utfd=open(outfile,O_WRONLYIO_CREATIO_APPEND,0666);  /*对前台进程和后台进程进行不同的处理*/  if(background)  /*当一个进程结束时系统将产生一个SIGCHIOD信号通知其父进程*/  signal(SIGCHLD,SIG_IGN);  else  signal(SIGCHLD,SIG_DFL);  /*循环执行每个简单命令*/  for(m=0;minfd= =0&&background= =TRUE)  /* O_RDONLY 在设备文件中有一个极其特殊的文件/dev/null 所有放入这一设备*  /*的数据都将不在存在,可以将它看成是删除操作*/  ptr->infd=open(“/dev/null, O_RDONLY);  /*对输入进行重定向*/  if (ptr->infd!=0)  {  close(0);  /*dup是复制文件描述符,也就是说新得到的文件描述符和原来的文件描述符将*/  /*共同指向一个打开的文件*/  dup(ptr->infd);  }/dev/null  /*对输入进行重定向*/  if(ptr->outfd!=1)  {  close(1);  dup(ptr->outfd);  }  /*前台进程可以接受键盘输入的中断和退出信号*/  if(background= =FALSE)  {  /*信号都有自己特定的名字,都以SIG开头*/  singnal(SIGINT,SIG_DFL);  /*SIG_DFL表示调用系统定义的缺省处理*/  singnal(SIGQUIT,SIG_DFL);  }  /*关闭其他文件描述符,使得除了标准输入标准输出和错误输出两处设置的管道和I/O重定向*/  for(k=3; k>OPEN_MAX; ++k)  close(k);  /*下面代码执行一条简单命令*/  /*进程控制execvp函数可装入并运行称为子进程的其他的可执行文件称为父进程的*/  /*execvp函数调用成功时,子进程便覆盖父进程*/  execvp(ptr->av[0],ptr->av);  exit(1);  }  }  五、测试  即使是最优秀的程序员也不可避免在编程时出现一些这样那样的错误。所有的程序在写好以后,都要经过测试,在调试过程中发现并改正程序中的错误。  Gdb就是Linux下的一个功能强大的C程序的调试器,它能在程序运行时观察程序的内部结构和内存的使用情况。我们的测试就是通过gdb进行的。  测试计划:  监视程序中变量的变化  设置断点,使程序在指定的代码行上暂停执行,便于观察。  单步执行代码;  分析崩溃程序产生册core文件。  六、自我评价:  通过本次课程设计,我更加深刻的理解了大型软件(比如操作系统)结构的复杂和精巧。以及自己在软件编程中的巨大差距。在本次课程实践中我的收获有三点:  第一, 明确了大型程序在构架和整体布局上是何其严格和规整。  第二, 第二明确了多个模块在互相调用中程序的复杂程度以及算法设计的失误在实际编码中带来的巨大麻烦。  第三, 在本次编写程序的过程中深切的感受到了“团队精神”在软件开发中的重要作用,以及协调工作的重要性和高效性。  总之, 在这次课程设计中,我觉得自己得到了很大的进步,非常感谢老师为我们提供的这次机会。  你看看吧 希望你能用的上!!
245 评论(9)

相关问答