unix操作系统设计第一章_unix操作系统设计 - CSDN
  • Unix操作系统设计第一章学习

    千次阅读 2017-10-10 18:46:14
    一章主要对Unix系统的整个结构、进程间的关系以及内核进行了简要的描述。 系统结构

    这一章主要对Unix系统的整个结构、进程间的关系以及内核进行了简要的描述。
    系统结构
    图1给出了Unix系统的体系结构。该图的中心部分是硬件,它向操作系统提供基本的服务。操作系统部分直接和硬件进行交互,并向程序提供公共服务,使它们同硬件特性隔离开来。这样一来的话,如果程序对硬件没有做什么假定的话,那么它就具有很高的可移植性。外层的程序,例如shell及编辑程序等等,是通过引用一组明确定义的系统调用而与内核交互的。

    这里写图片描述
    图1
    系统高层特征
    文件系统的特点
    1. 层次结构,如图2。文件系统被组织成树状结构,树有个称为根(root)的节点(记作“/”)。其中每个非叶子节点都是文件的一个目录,而叶节点的问题既可以是目录也可以是正规文件还可以是特殊文件。
    这里写图片描述
    图2
    2. 对文件数据的一致处理。在UNIX系统中,程序是不需要了解文件的内部存储格式,而是把数据统一看成无格式的字节流。所以程序可以按照自己的意愿来解释字节流。
    3. 文件数据的保护。在Unix系统中,对一个文件的存取许可权是由与该文件相联系的访问控制权所控制的,存取许可权能够分别对文件所有者,同组用户以及其他人这三类用户独立地建立存取许可权,以控制读、写及执行的许可权。

    处理环境
    一个程序是可执行文件,而一个进程是一个执行中的程序的实例。在UNIX系统上可以同时执行多个进程。特别的是,一个程序是可以有着多个相对应的进程。进程可以通过各种系统调用来创建新进程、终止其他进程以及进行进程间的通信等等。

    操作系统的服务

    1. 进程管理
    2. 存储管理
    3. 文件管理

    内核
    在UNIX系统上用户进程的执行分为两个级别:用户与内核。当发生系统调用时,进程的执行态从用户态变成内核态。用户态和内核态的区别主要在于:在用户态下的进程能存取它们自己的指令和数据,但是不能存取内核指令和数据,然而内核态下的进程是可以存取内核和用户地址的。但是内核并不是与用户进程平行运行的孤立的进程集合,而是每个用户进程的一部分。相应地,每一个进程的虚拟地址空间划分为仅在内核态下可存取及在内核态、用户态下都可存取的两部分。

    展开全文
  • UNIX操作系统设计》是其中非常引人注目的本。本书作者Maurice J.Bach多年来在AT&T公司的贝尔实验室工作,对UNIX系统的设计思想有深刻了解,又有讲授UNIX系统的丰富经验。作者在回顾UNIX操作系统的发展演变的...

    当前,介绍UNIX系统的书籍很多,然而论述UNIX系统内部结构的专著却屈指可数。《UNIX操作系统设计》是其中非常引人注目的一本。本书作者Maurice J.Bach多年来在AT&T公司的贝尔实验室工作,对UNIX系统的设计思想有深刻了解,又有讲授UNIX系统的丰富经验。作者在回顾UNIX操作系统的发展演变的基础上,描述了UNIX系统Ⅴ内核内部的数据结构和算法,并对其做了深入浅出的分析。在每章之后,本书还给出了大量富有启发性和实际意义的题目。因而,本书不仅可用作大学本科高年级和研究生操作系统课程的教科书和参考书,也为从事UNIX操作系统的研究人员或UNIX实用程序开发人员提供了极有价值的参考资料。

    必读经典书名:《UNIX操作系统设计》

    在这里插入图片描述

    主要目录结构:

    第1章 系统概貌
    第2章 内核导言
    第3章 数据缓冲区高速缓冲
    第4章 文件的内部表示
    第5章 文件系统的系统调用
    第6章 进程结构
    第7章 进程控制
    第8章 进程调度和时间
    第9章 存储管理策略
    第10章 输入/输出子系统
    第11章 进程间通信
    第12章 多处理机系统
    第13章 分布式UNIX系统

    样章试读:内核导言

    上一章给出了对UNIX系统环境的高层次的看法。本章重点放在内核上,对内核的体系结构提出一个总的看法,勾画出它的基本概念和结构,而这些对于了解本书的其余部分是必不可少的。

    2.1 UNIX操作系统的体系结构

    Christian曾提出,UNIX系统支持文件系统有“空间”而进程有“生命”的假象(见[Christian 83)第239页)。文件和进程这两类实体是UNIX系统模型中的两个中心概念。图2-1给出了内核框图,显示出了各种模块及它们之间的相互关系,尤其是,它显示出了内核的两个主要成分:左边的文件子系统和右边的进程控制子系统。虽然在实际上,由于某些模块同其他模块的内部操作进行交互而使内核偏离该模型,但该图仍可作为观察内核的一个有用的逻辑视图。

    图2-1让我们看到了三个层次:用户级、内核级及硬件级。系统调用与库接口体现了图1-1中描绘的用户程序与内核间的边界。系统调用看起来像C程序中普通的函数调用,而库把这些函数调用映射成进入操作系统所需要的原语。这在第6章中有更详细的叙述。然而,汇编语言程序可以不经过系统调用库而直接引用系统调用。程序常常使用像标准I/O库这样的一些其他库程序以提供对系统调用的更高级的使用。在编译期间把这些库连接到程序上,因此,就这里所讨论的目的来说,这些库是用户程序的一部分。下面的一个例子将阐明这一点。

    图2-1把系统调用的集合分成与文件子系统交互的部分以及与进程控制子系统交互的部分。文件子系统管理文件,其中包括分配文件空间、管理空闲空间、控制对文件的存取以及为用户检索数据。进程通过一个特定的系统调用集合,比如,通过系统调用open(为了读或写而打开一个文件)、close、read、write、stat(查询一个文件属性)、chown(改变文件所有者)及chmod(改变文件存取许可权)等与文件子系统交互。这些及另外一些有关的系统调用将在第5章介绍。

    文件子系统使用一个缓冲机制存取文件数据,缓冲机制调节在内核与二级存储设备之间的数据流。缓冲机制同块I/O设备驱动程序交互,以便启动往内核去的数据传送及从内核来的数据传送。设备驱动程序是用来控制外围设备操作的内核模块。块I/O设备是随机存取存储设备,或者说,它们的设备驱动程序使得它们对于系统的其他部分来说好像是随机存取存储设备。例如,一个磁带驱动程序可以允许内核把一个磁带装置作为一个随机存取存储设备看待。文件子系统还可以在没有缓冲机制干预的情况下直接与“原始”I/O设备驱动程序交互。原始设备,有时被称为字符设备,包括所有不是块设备的设备。

    ..\18-1394改4.11\0201.tif{65%}

    图2-1 系统内核框图

    进程控制子系统负责进程同步、进程间通信、存储管理及进程调度。当要执行一个文件而把该文件装入存储器中时,文件子系统与进程控制子系统交互——进程子系统在执行可执行文件之前,把它们读到主存中。这些我们将在第7章看到。

    用于控制进程的系统调用有fork(创建一个新进程)、exec(把一个程序的映象覆盖到正在运行的进程上)、exit(结束一个进程的执行)、wait(使进程的执行与先前创建的一个进程的exit相同步)、brk(控制分配给一个进程的存储空间的大小)及signal(控制进程对特别事件的响应)。第7章将介绍这些及其他系统调用。

    存储管理模块控制存储分配。在任何时刻,只要系统没有足够的物理存储供所有进程使用,内核就在主存与二级存储之间对进程进行迁移,以便所有进程都得到公平的执行机会。第9章将描述存储管理的两个策略:对换与请求调页。对换进程有时被称为调度程序,因为它为进程进行存储分配的调度,并且影响到CPU调度程序的操作。然而,本书仍将称它为对换程序,以避免与CPU调度程序混淆。

    调度程序(scheduler)模块把CPU分配给进程。该模块调度各进程依次运行,直到它们因等待资源自愿放弃CPU,或它们最近一次的运行时间超过一个时间量,从而内核抢占它们。于是调度程序选择最高优先权的合格进程投入运行;当原来的进程成为最高优先权的合格进程时,还会再次投入运行。进程间通信有几种形式,从事件的异步软中断信号到进程间消息的同步传输,等等。

    最后,硬件控制负责处理中断及与机器通信。像磁盘或终端这样的设备可以在一个进程正在执行时中断CPU。如果出现这种情况,在对中断服务完毕之后内核可以恢复被中断了的进程的执行:中断不是由特殊的进程服务的,而是由内核中的特殊函数服务的,这些特殊函数是在当前运行的进程的上下文中被调用的。

    2.2 系统概念介绍

    本节将概述一些主要的内核数据结构,并且更详细地描述图2-1中给出的各模块的功能。

    2.2.1 文件子系统概貌

    一个文件的内部表示由一个索引节点(inode)给出,索引节点描述了文件数据在磁盘上的布局,并且包含诸如文件所有者、存取许可权及存取时间等其他信息。“索引节点”这一术语是index node的缩写,并且普遍地用于UNIX系统的文献中。每个文件都有一个索引节点,但是它可以有几个名字,且这几个名字都映射到该索引节点上。每个名字都被称为一个联结(link)。当进程使用名字访问一个文件时,内核每次分析文件名中的一个分量,检查该进程是否有权搜索路径中的目录,并且最终检索到该文件所对应的索引节点。例如,如果一个进程调用

    open( “/fs2/mjb/rje/sourcefile”,1);
    

    则内核检查“/fs2/mjb/rje/sourcefile”所对应的索引节点。当一个进程建立一个新文件时,内核分配给它一个尚未使用的索引节点。正如我们很快就会看到的那样,索引节点被存储在文件系统中,但是当操控文件时,内核把它们读到内存(in-core)[1]索引节点表中。

    内核还包含另外两个数据结构,文件表(file table)和用户文件描述符表(user file descriptor table)。文件表是一个全局核心结构,但用户文件描述符表对每个进程分配一个。当一个进程打开或建立一个文件时,内核在每个表中为相应于该文件的索引节点分配一个表项。这样一共有三种结构表——用户文件描述符表、文件表和索引结点表(inode table),用这三种结构表中的表项来维护文件的状态及用户对它的存取。文件表保存着文件中的字节偏移量——下一次读或写将从那里开始,并保存着对打开的进程所允许的存取权限。用户文件描述符表标识着一个进程的所有打开文件。图2-2表明了这三张表及它们之间的相互关系。对于系统调用open和系统调用creat,内核返回一个文件描述符(file descriptor),它是在用户文件描述符表中的索引值。当执行系统调用read和write时,内核使用文件描述符以存取用户文件描述符表,循着指向文件表及索引节点表表项的指针,从索引节点中找到文件中的数据。第4章和第5章将详细地描述这些结构,此刻,我们只要说使用这三张表可以实现对一个文件的不同程度的存取共享就够了。

    ..\18-1394 图\0202.tif{55%}

    图2-2 文件描述符表、文件表和索引节点表

    UNIX系统把正规文件(regular file)及目录保存在诸如磁带或磁盘这样的块设备上。由于磁带和磁盘在存取时间上的差别,所以没有什么UNIX系统装置使用磁带实现它们的文件系统。今后,无盘工作站将用得很普遍。在无盘工作站中,文件被存放在一个远程系统上,并通过网络进行存取(见第13章)。然而,为简单起见,下面假设讨论的是有磁盘的系统。一套系统装置可以有若干物理磁盘设备,每个物理磁盘设备包含一个或多个文件系统。把一个磁盘分成几个文件系统可以使管理人员易于管理存储在那儿的数据。内核在逻辑级上只涉及文件系统,而不涉及磁盘,把每个文件系统都当作由一个逻辑设备号标识的逻辑设备(logical device)。由磁盘驱动程序实现逻辑设备(文件系统)地址与物理设备(磁盘)地址之间的转换。除非另有明确的说明,否则,本书在使用“设备”这一术语时总是意味着一个逻辑设备。

    一个文件系统由一个逻辑块(logical block)序列组成,每个块都包含512、1024、2048 个字节或512个字节的任意倍数,这要依赖于系统实现。在一个文件系统中,逻辑块大小是完全相同的,但是在一个系统配置中的不同文件系统间逻辑块大小可以是不同的。使用大的逻辑块增加了在磁盘与主存之间的有效数据传送率,因为内核在每次磁盘操作中能传送较多的数据,所以只执行很少几次费时的操作。比如,一次从磁盘读1KB的读操作,会比读两次每次读512B的操作要快。然而,正如将在第5章中看到的那样,如果一个逻辑块太大,将失去有效的存储能力。为简单起见,本书将使用“块”这一术语表示一个逻辑块,并且它将假设一个逻辑块包含1KB数据,除非另有明确说明。

    一个文件系统具有如下结构(图2-3):

    ..\18-1394改10.9\0203.tif{65%}

    图2-3 文件系统布局

    • 引导块(boot block)占据文件系统的开头,典型地,是一个扇区。它可以含有被读入机器中起引导或初启操作系统作用的引导代码。虽然为了引导系统只需一个引导块,但每个文件系统都有一个(可能是空的)引导块。
    • 超级块(super block)描述了文件系统的状态——如它有多大,它能存储多少文件,在文件系统的何处可找到空闲空间,以及其他信息。
    • 索引节点表(inode list)是一张装有索引节点的表,它在文件系统中跟在超级块后面。当配置一个文件系统时,管理人员应指明索引节点表的大小。内核通过索引来访问索引节点表中的索引节点。有一个索引节点是文件系统的根索引节点(root inode):在执行了系统调用mount(见5.14节)之后,该文件系统的目录结构就可以从这个根索引节点开始进行存取了。
    • 数据块(data block)在索引节点表结束后开始,并且包含文件数据与管理数据。一个已被分配的数据块,能且仅能属于文件系统中的一个文件。

    2.2.2 进程

    本节将更进一步介绍进程子系统:先描述一个进程的结构及用于存储管理的若干进程数据结构;然后给出进程状态图的初步看法,并考虑状态转换中的各种问题。

    一个进程是一个程序的执行,它是由一系列有格式字节组成的,这些有格式字节被解释成机器指令[以下被称为“正文(text)”]、数据和栈区(stack)。当内核调度各个进程使之执行时,这些进程看起来像是同时执行的。而且,可以有几个进程是一个程序的实例。一个进程循着一个严格的指令序列执行,这个指令序列是自包含的,并且不会跳转到别的进程的指令序列上。它读或写自己的数据和栈区,但它不能读或写其他进程的数据和栈区。进程通过系统调用与其他进程及外界进行通信。

    用实际的术语来说,UNIX系统上的进程是被系统调用fork所创建的实体。除了0进程以外,每个进程都是被另一个进程执行系统调用fork时创建的。调用系统调用fork的进程是父进程(parent process),而新创建的进程是子进程(child process)。每个进程都有一个父进程,但一个进程可以有多个子进程。内核用各进程的进程标识号(process ID)来标识每个进程,进程标识号简称为进程ID(或PID,见第6章)。0进程是一个特殊进程,它是在系统引导时被“手工”创建的;当它创建了一个子进程(1进程)之后,0进程就变成对换进程。正如在第7章所解释的那样,1进程被称为init进程,是系统中其他每个进程的祖先,并且享有同它们之间的特殊关系。

    用户对一个程序的源代码进行编译以建立一个可执行文件,可执行文件由以下几部分组成:

    • 描述文件属性的一组“头标(header)”;
    • 程序正文;
    • 数据的机器语言表示,它给出程序开始执行时的初值;一个空间指示,它指出内核应该为被称为bss[2]的未初始化数据分配多大的空间(在运行时内核把bss的初值置为0);
    • 其他段,诸如符号表信息。

    对于图1-3中的程序,可执行文件的正文是函数main与copy所生成的代码,其中,变量version是初始化数据(放在本程序中仅仅是为让它有初始化数据),数组buffer是未初始化的数据。系统Ⅴ的C编译程序版本在缺省时创建一个分离的正文段,但它支持一种选择,该选择允许数据段中包含程序指令,这是在系统的较老的版本中使用的。

    在系统调用exec期间,内核把一个可执行文件装入主存中,被装入的进程至少由被称为正文区、数据区及栈区的三部分组成。正文区和数据区相应于可执行文件中的正文段和数据bss段。但是栈区是自动创建的,而且它的大小在运行时是被内核动态调节的。栈区由逻辑栈帧(stack frame)组成,当调用一个函数时栈帧被压入,当返回时栈帧被弹出。一个称为栈指针(stack pointer)的特殊寄存器指示出当前栈深度。一个栈帧包含着用于函数调用的参数、它的逻辑变量及为恢复先前的栈帧所需要的数据——其中包括函数调用时程序计数器的值及栈指针的值。程序代码包含管理栈增长的指令序列,并且当需要时内核为栈区分配空间。在图1-3所示的程序中,当main被调用时(按惯例,在每个程序中被调用一次),函数main中的参数argc和argv、变量fdold和fdnew就会在栈区上出现。并且,无论何时函数copy被调用,copy中的参数old与new及变量count都在栈区上出现。

    因为UNIX系统中的一个进程能在两种态——核心态(kernel mode)或用户态(user mode)下执行,所以UNIX系统中核心栈(kernel stack)与用户栈(user stack)是分开的。用户栈含有在用户态下执行时函数调用的参数、局部变量及其他数据。图2-4中的左半部表明一个进程在copy程序中做系统调用write时进程的用户栈。进程启动过程(此过程是包含在库中的)用两个参数调用函数main,并将第1帧压入用户栈;第1帧含有main的两个局部变量的空间。然后main用两个参数old与new调用copy,并将第2帧压入用户栈中,第2帧包含局部变量count的空间。最后,进程通过调用库函数write来引用系统调用write,每个系统调用都在系统调用库中有一个入口点;系统调用库按汇编语言编码并包含一个特殊的trap指令,当该指令被执行时,它引起一个“中断”,从而导致硬件转换到核心态。一个进程调用一个特定的系统调用库的入口点,正像它调用任何函数一样。对于库函数也要创建一个栈帧。当进程执行特定的指令时,它将处理机执行态转换到核心态,执行内核代码,并使用核心栈。

    核心栈中含有在核心态下执行的函数的栈帧。核心栈上的函数及数据项涉及的是内核中的而不是用户程序中的函数和数据,但它的构成与用户栈的构成相同。当一个进程在用户态下执行时,它的核心栈为空。图2-4的右半部给出了一个在copy程序中执行系统调用write的进程的核心栈的表项。在以后的章节中对系统调用write进行详细讨论时,再叙述各算法名称。

    ..\18-1394改12.16\0204.tif{70%}

    图2-4 程序copy的用户栈及核心栈

    每个进程在内核进程表(process table)中都有一个表项,并且每个进程都被分配一个u区[3],u区包含仅被内核操纵的私用数据。进程表包含(或指向)一个本进程区表(per process region table),本进程区表的表项指向区表(region table)的表项。一个区是进程地址空间中连续的区域,如正文区、数据区及栈区等。区表登记项描述区的属性,诸如它是否包含正文或数据,它是共享的还是私用的,以及区的“数据”位于主存的何处,等等。从本进程区表到区表的额外伺接级允许彼此独立的进程对区的共享。当一个进程调用系统调用exec时,在释放了进程一直在使用着的老区之后,内核为它的正文、数据和栈分配新区。当一个进程调用系统调用fork时,内核拷贝老进程的地址空间,在可能时允许进程对区共享,否则再建立一个物理拷贝。当一个进程调用系统调用exit时,内核释放进程使用过的区。图2-5展示了一个运行中的进程的有关数据结构:进程表指向本进程区表,本进程区表有指向该进程的正文区、数据区或栈区的区表表项的指针。

    ..\18-1394 图\0205.tif{60%}

    图2-5 进程的数据结构

    进程表表项及u区包含进程的控制信息和状态信息。u区是进程表表项的扩展,第6章将介绍这两个表的区别。在后几章中讨论的进程表中的字段如下。

    • 状态字段。
    • 标识符——表示拥有该进程的用户(用户ID或UID,见第6章)。
    • 当一个进程被挂起(在sleep状态)时的事件描述符集合。

    u 区包含的是用来描述进程的信息,这些信息仅当进程正在执行时才是可存取的。重要的字段如下。

    • 指向当前正在执行的进程的进程表项的指针。
    • 当前系统调用的参数,返回值及错误码。
    • 所有的打开文件的文件描述符。
    • 内部I/O参数。
    • 当前目录(current directory)和当前根(current root)(见第5章)。
    • 进程及文件大小的限制。

    内核能直接存取正在执行的进程的u区的字段,但不能存取其他进程的u区的字段。在其内部,内核引用结构变量u以存取当前正在运行的进程的u区,并且当另一进程执行时,内核重新安排它的虚地址空间,以使结构变量u引用的是新进程的u区。由于这一实现方式给出了从u区到它的进程表表项的指针,所以内核很容易识别出当前进程。

    1.进程上下文

    一个进程的上下文(context)包括被进程正文所定义的进程状态、进程的全局用户变量和数据结构的值、它使用的机器寄存器的值、存储在它的进程表项与u区中的值以及它的用户栈和核心栈的内容。操作系统的正文和它的全局数据结构被所有的进程所共享,因而不是进程上下文的一部分。

    当执行一个进程时,系统被说成在该进程的上下文中执行。当内核决定它应该执行另一个进程时,它做一次上下文切换(context switch),以使系统在另一个进程的上下文中执行。正如将要看到的,内核仅允许在指定条件下进行上下文切换。当进行上下文切换时,内核保留足够信息,为的是以后它能切换回第一个进程,并恢复它的执行。类似地,当从用户态移到核心态时,内核保留足够信息以便它后来能返回到用户态,并从它的断点继续执行。在用户态与核心态之间的移动是态的改变,而不是上下文切换。再看一下图1-5,当它把上下文从进程A变成进程B时,内核做的是上下文切换;当发生从用户态到核心态或从内核态到用户态的改变时,所改变的是执行态,但仍在同一个进程(例如进程A)的上下文中执行。

    内核在被中断了的进程的上下文中对中断服务,即使该中断可能不是由它引起的。被中断的进程可以是正在用户态下执行的,也可以是正在核心态下执行的。内核保留足够的信息以便它在后来能恢复被中断了的进程的执行,并在核心态下对中断进行服务。内核并不产生或调度一个特殊进程来处理中断。

    2.进程状态

    一个进程的生存周期能被划分为一组状态,每个状态都具有一定的用来描述该进程的特点。第6章将描述所有的进程状态,但现在了解如下状态是重要的:

    (1)进程正在用户态下执行。

    (2)进程正在核心态下执行。

    (3)进程未正在执行,但是它已准备好运行——一旦调度程序选中了它,它就可以投入运行。很多进程可以处于这一状态,而调度算法决定哪个进程将成为下一个执行的进程。

    (4)进程正在睡眠。当进程再也不能继续执行下去的时候,如正在等候I/O完成时,进程使自己进入睡眠状态。

    因为任何时刻一个处理机仅能执行一个进程,所以至多有一个进程可以处在第一种状态和第二种状态。这两个状态相应于两种执行态:用户态与核心态。

    3.状态转换

    以上描述的进程状态给出了进程的一种静态观点,但是,实际上,各个进程是按照明确定义的规则连续地在各种状态间移动的。状态转换图是一个有向图,它的节点表示一个进程能进入的状态,而它的边表示引起一个进程从一种状态到另一种状态的事件。如果从第一种状态到第二种状态存在着一条边,则这两种状态之间的状态转换是合法的。可以从一种状态发出多个转换,但是,就处于某种状态的一个进程来说,依赖于所发生的系统事件,完成一个且只完成一个转换。图2-6给出了上述定义的进程状态的状态转换图。

    ..\18-1394 图\0206.tif{60%}

    图2-6 进程状态及转换

    如前所述,在一个分时方式中,几个进程能同时执行,并且它们可能都要在核心态下运行。如果对它们在核心态下的运行不加以限制,则它们会破坏全局核心数据结构中的信息。通过禁止任意的上下文切换和控制中断的发生,内核可保护它们的一致性。

    仅当进程从“核心态运行”状态转移到“在内存中睡眠”状态时,内核才允许上下文切换。在核心态下运行的进程不能被其他进程所抢占,因此内核有时被称为不可抢先(non-preemptive)的,虽然系统并不抢占处于用户态下的进程。因为内核处于不可抢先状态,所以内核可保持它的数据结构的一致性,从而解决了互斥(mutual exclusion)问题——保证在任何时刻至多一个进程执行临界区代码。

    比如,让我们考虑图2-7中的示例代码。该代码段要把其地址在指针变量bp1中的数据结构,插入双向链表中地址在指针变量bp中的数据结构之后。如果当内核执行这一代码段时系统允许上下文切换,则会发生如下情形。假设直到注释出现之前内核执行该代码,然后做一个上下文切换,这时双向链表处于非一致性状态:结构bp1一半被插在该链表上,另一半在该链表外。如果进程沿着向前的指针,则它能在该链表上找到bp1;但如果沿着向后的指针,则它不能找到bp1(图2-8)。如果其他进程在原来的进程再次运行之前操控链表上的这些指针,则双向链表结构会被永久性地毁坏。UNIX系统通过一个进程在核心态下执行时不允许上下文切换来防止这种情况发生。如果一个进程进入睡眠从而允许上下文切换,则必须使内核算法的编码实现能够确保系统数据结构处于安全、一致的状态。

    ..\18-1394改(补画图4个)\0207.tif{45%}

    图2-7 创建双链表的示例代码

    ..\18-1394改(补画图4个)\0208.tif{75%}

    图2-8 由于上下文切换而造成的不正确链表

    能引起内核数据的非一致性的有关问题是中断的处理。中断处理能改变内核状态信息。举例来说,如果内核正在执行图2-7中的代码,当执行到注释行时接收了一个中断,并且中断处理程序是如前所述的那样操纵指针,则中断处理程序就会破坏该链表中的信息。若规定在核心态下执行时系统禁止所有的中断,就可以解决这一问题。但是这可能会使中断的服务推迟,或者可能会损害系统吞吐量,为此,改为当进入代码临界区(critical region)时内核把处理机执行级提高,以禁止中断。如果任意的中断处理程序的执行会导致一致性问题的话,那么代码段是临界的。比如,如果一个磁盘中断处理程序操纵图中的缓冲区队列,则内核操纵缓冲区队列的那个代码段是关于磁盘中断处理程序的代码临界区。临界区应小且不经常出现,以便系统吞吐量不大会被它们的存在所影响。其他操作系统解决这一问题的方法是:规定在系统状态下执行时封锁所有的中断,或者采用完善的加锁方案以保证一致性。第12章将面对多处理机系统再回过头来讨论这一问题。这里所给出的解答在那时就不够了。

    现在让我们回顾一下本节的内容:内核通过仅当一个进程使自己进入睡眠时才允许上下文切换,以及通过禁止一个进程改变另一个进程的状态来保护它的一致性。它还在代码临界区周围提高处理机执行级,以封锁其他能引起非一致性的中断。进程调度程序定期地抢占用户态下的进程执行,以使进程不能独占式地使用CPU。

    4.睡眠与唤醒

    一个在核心态下执行的进程在决定它对系统事件的反应上它打算做什么方面有很大的自主权。进程能互相通信并且“建议”各种可供选择的方法,但由它们自己做出最后的决定。正如我们将要看到的,存在着一组进程在面临各种情况时所应服从的规则,但是每个进程最终都是自主地遵循这些规则的。例如,当一个进程必须暂停它的执行(“进入睡眠”)时,它能自由地按自己的意图去做。然而,一个中断处理程序不能睡眠,因为如果中断处理程序能睡眠,就意味着被中断的进程会被投入睡眠。

    进程会因为它们正在等待某些事件的发生而进入睡眠,例如:等待来自外围设备的I/O完成;等待一个进程退出;等待获得系统资源;等等。当我们说进程在一个事件上睡眠时,这意味着,直到该事件发生时,它们一直处于睡眠状态;当事件发生时它们被唤醒,并且进入“就绪”状态。很多进程能同时睡眠在一个事件上;当一个事件发生时,由于这个事件的条件再也不为真了,所以所有睡眠在这个事件上的进程都被唤醒。当一个进程被唤醒时,它完成一个从“睡眠”状态到“就绪”状态的状态转换,对于随后的调度来说,该进程就是个合格者了,但它并不立即执行。睡眠进程不耗费CPU资源;内核并不是经常去查看一个进程是否仍处于睡眠状态,而是等待事件的发生,那时把进程唤醒。

    举例来说,一个在核心态执行的进程有时必须锁住一个数据结构,如果发生后来它进入睡眠的情况,其他企图操纵该上了锁的数据结构的进程必须检查上锁情况,并且因为别的进程已经占有该锁,则它们去睡眠。内核按如下方式实现这样的锁:

    while(条件为真)
          sleep(事件:条件变为假);
    置条件为真;
    

    它按如下方式解锁并唤醒睡眠在该锁上的所有进程:

    置条件为假;
    wakeup(事件:条件变为假);
    

    图2-9描绘了三个进程A、B、C为一个上了锁的缓冲区进行竞争的情况。睡眠的条件是缓冲区处于上锁状态。在任一时刻只能有一个进程在执行,它发现缓冲区是上了锁的,就在缓冲区变为开锁状态的事件上等待。终于,缓冲区的锁解开了,所有的进程被唤醒并且进入“就绪”状态。内核最终选择一个进程(比如说B)执行。进程B执行“while”循环,发现缓冲区处于开锁状态,于是为缓冲区上锁,并且继续执行。如果后来进程B在为缓冲区解锁之前再次去睡眠(例如等候I/O操作的完成),则内核能调度其他进程去运行。如果它选择了进程A,进程A执行“while”循环,发现缓冲区处于上锁状态,那么它就再次去睡眠。进程C可以做同样的事情。最后,进程B醒来并为缓冲区解锁,允许进程A也允许进程C存取缓冲区。因此,“while-sleep”循环保证至多一个进程能获得对资源的存取。

    第6章将极其详细地介绍睡眠与唤醒的算法。在此期间它们应被考虑成是“原子的”:一个进程瞬时地进入睡眠状态,并停留在那儿直至它被唤醒。在它睡眠之后,内核调度另一个进程去运行,并切换成后者的上下文。

    ..\18-1394改12.16\0209.tif{80%}

    图2-9 在一个锁上睡眠的多个进程

    2.3 内核数据结构

    大多数内核数据结构都占据固定长度的表而不是动态地分配空间,这一方法的优点是内核代码简单。但是它限制了一种数据结构的表项的数目,即为系统生成时原始配置的数目。如果在系统操作期间,内核用完了一种数据结构的表项,则它不能动态地为新的表项分配空间,而是必须向发出请求的用户报告一个错误。此外,如果内核被配置得具有不可能用完的表空间,则因不能用于其他目的而使多余的表空间浪费了。然而,一般都认为内核算法的简单性比挤出主存中每一个仅有的字节的必要性更重要一些。算法通常使用简单的循环来寻找表中的空闲表项,这是一个较易于理解的方法,而且有时比复杂的分配方案更为有效。

    2.4 系统管理

    管理进程可以非严格地归入为用户团体的公共福利提供各种功能的那类进程。这些功能包括磁盘格式化、新文件系统的创建、修复被破坏的文件系统、内核调试及其他。从概念上说,管理进程与用户进程没有区别:它们都使用为一般用户团体可用的相同的一组系统调用。它们仅在被允许的权限与特权上区别于一般用户进程。例如,文件存取权限允许管理进程操纵对一般用户来说禁止进入的文件。在内部,内核把一个称为超级用户(superuser)的特殊用户区别出来,赋予它特权,这一点我们即将看到。通过履行一次注册-口令序列或通过执行特殊程序可使一个用户成为超级用户。超级用户特权的其他用途将在随后的章节中研究。简而言之,内核不识别一个分离的管理进程类。

    2.5 本章小结

    本章描述了内核的体系结构:它的两个主要成分是文件子系统与进程子系统。文件子系统控制用户文件中数据的存储与检索。文件被组织到文件系统中,而文件系统被看作一个逻辑设备。像磁盘这样的一个物理设备能包含几个逻辑设备(文件系统)。每个文件系统都有一个用来描述文件系统的结构和内容的超级块,并且文件系统中的每个文件都由索引节点描述,索引节点给出了文件的属性。操控文件的系统调用通过索引节点来实现其功能。

    进程有各种状态,并且按照明确定义的转换规则在这些状态之间转移。特别之处在于,在核心态下执行的进程能暂停它们的执行而进入睡眠状态,但是没有哪一个进程能把另一进程投入睡眠状态。内核是不可被抢占的,这意味着,一个在核心态下执行的进程将连续执行,直至它进入睡眠状态或直至它返回到用户态下执行时为止。内核通过实施不可抢占策略以及通过在执行代码临界区时封锁中断来维护它的数据结构的一致性。

    本章的其余部分详细描述了图2-1所示的子系统及它们的交互作用。从文件子系统开始,继之以进程子系统。下一章将涉及高速缓冲问题,并描述在第4章、第5章和第7章要介绍的算法中所使用的缓冲区分配算法。第4章考查文件系统的内部算法,包括索引节点的操控、文件的结构及路径名到索引节点的转换。第5章解释若干系统调用,例如,系统调用open、close、read及write,这些系统调用使用了第4章中的算法来访问文件系统。第6章论述进程上下文的基本思想及其地址空间;第7章涉及有关进程管理及使用第6章的算法的系统调用;第8章介绍进程调度;第9章讨论存储管理算法;第10章讲的是设备驱动程序,直到这时终端驱动程序与进程管理之间的相互关系才能被解释;第11章介绍了进程间通信的某些形式;最后两章涉及若干高级专题,包括多处理机系统与分布式系统。

    2.6 习题

    1.考虑如下命令序列:

    grep main a.c b.c c.c > grepout &
    wc −1 < grepout &
    rm grepout &
    

    每一命令行尾部的“&”都通知shell在后台运行这些命令,并且它能并行地执行每个命令。为什么这不等价于如下的命令行?

    grep main a.c b.c c.c| wc −1
    

    2.考虑图2-7中的内核代码示例。假设当代码到达注释处时发生上下文切换,并且假设另一进程通过执行如下代码而从链表中摘掉一个缓冲区:

    remove(qp)
        struct queue *qp;
    {
        qp— >forp — >backp = qp — >backp; 
        qp— >backp— >forp=qp — >forp;
        qp— >forp=qp— >backp = NULL;
    }
    

    考虑三种情况:

    • 进程从链表中摘掉bp结构;
    • 进程从链表中摘掉bp1结构;
    • 进程摘掉链表上当前跟在bp1之后的结构。

    这三种情况中哪种是原来的进程执行完注释以后的代码时链表的状态?

    3.如果内核试图唤醒睡眠在一个事件上的所有进程,但是在唤醒时没有进程睡眠在那个事件上,那么会发生什么情况?


    [1] “core”这一术语指的是机器的原始存储,不是指硬件技术。

    [2] bss这一名字来自IBM 7090机的汇编伪运算符,它代表“block started by symbol”。

    [3] u区中的u代表用户。u区的另一个名称是ublock;本书则总是称它为u区。

    UNIX操作系统设计(各大网店已上架)

    莫里斯·J.,巴赫(Maurice J.Bach) 著,陈葆钰,王旭,柳纯录,冯雪山 译

    在这里插入图片描述

    • Linux之父Linux Torvalds曾捧读的经典著作
    • UNIX操作系统经典著作,畅销多年
    • 深度剖析UNIX操作系统内核的内部数据结构、算法和UNIX系统的问题

    本书以UNIX系统为背景,全面、系统地介绍了UNIX操作系统内核的内部数据结构和算法。本书首先对系统内核结构做了简要介绍,然后分章节描述了文件系统、进程调度和存储管理,并在此基础上讨论了UNIX系统的问题,如驱动程序接口、进程间通信与网络等。在每章之后,还给出了大量富有启发性和实际意义的题目。

    展开全文
  • Unix操作系统简单命令大全

    万次阅读 2011-01-16 22:19:00
    UNIX系统操作命令第一章登录和退出 <br /> <br />用户在登录前,首先要向系统管理员申请一个用户注册名,不论用户从哪台计 <br />算机登录到ITPNET上都将访问相同的文件系统。 <br /> ...

    UNIX系统操作命令大全


    UNIX
    系统操作命令 第一章 登录和退出



    用户在登录前,首先要向系统管理员申请一个用户注册名,不论用户从哪台计

    算机登录到ITPNET上都将访问相同的文件系统。


    1.1
    登录

    当屏幕上出现Login提示符时,用户可以输入自己的用户注册名,并按回车键。

    若有口令,系统将提示用户输入密码,并按回车键,口令输入正确后,用户登录成

    功。这时,屏幕上会显示出一些信息和命令提示符。如:

    Login: guest [Enter]

    passwd: ****** [Enter]

    sun%

    : 用户名要用小写字母输入,UNIX系统区分大小写字母

    [hide]

    1.2
    退出

    当用户准备退出自己的计算机帐号时,可在系统示符下输入logoutexit或按

    [Ctrl-D]
    。当屏幕出现Login时,用户可以安全地离开计算机了。如:

    sun% logout [Enter]

    Login




    1.3
    修改口令

    为了防止他人使用自己的帐号,在你首次登录后,请用passwd命令修改只有本

    人知道的保密口令,口令通常由此可68个字母数字组成。如:

    sun% passwd[Enter]

    Old Passwd: ******

    New Passwd: ******

    update
    更新磁盘 val SCCS实用程序 vc SCCS实用程序 vi 全屏幕编辑器 volcopy 文件系统的文字拷贝 wait 等待所有字进程结束 while 循环语句 who 显示谁在使用系统 whodo 显示哪些用户在做什么 write 和另一用户直接对话 xargs 建立参数表并执行命令 yacc 语法分析程序生成器;)cl

    注:当你退出系统再次登录时,就要使用新的口令。



    第二章 目录操作命令



    2.1
    显示目录

    命令:pwdprint working directory

    格式:pwd

    功能:显示出用户当前工作目录的全路径名。

    例如:% pwd



    2.2
    建立目录

    命令:mkdirmake directory

    格式:mkdir directory_name

    功能:建立新目录

    例如:% mkdir directory



    2.3
    改变目录

    命令:cdchange directory

    格式:cd directory_name

    功能:改变当前工作目录

    注释:目录名选项有:

      (1)
    目录名,转到当前目录下的子目录。

      (2) ..
    表示转到当前目录的父目录。

      (3) /
    表示转到根目录。

      (4)
    没有选项时,转到用户的主目录。

    例如:% cd directory



    2.4
    删除目录

    命令:rmdir (remove directory)

    格式:rmdir directory_name

    功能:删除不存在文件的子目录名。

    注释:

      (1)
    删除子目录时,要求被删除的目录中不存在文件或子目录,否则无法删除。

      (2)
    若被删除的目录中有文件或子目录,请参考命令rm -r directory_name

    例如:% rmdir directory



    第三章 文件操作命令



    3.1
    列出文件目录

    命令:ls (list)

    格式:ls [option] directory_name

    功能:列出指定目录中的文件名和子目录名。当无子目录名时,列出当前目录

       
    中的文件名和子目录名。

    选项:-a列出所有文件,包括以点开头的隐含文件。

        -l
    按长格式列出文件名,包括文件类型标识,权限,链接数,文件主名,

         
    文件组名,字节数,日期。

        -r
    列出包括子目录下所有文件

        -g
    在长格式中给出用户组的标识。

        -t
    安文件生成日期排序。

    例如:% ls -la

    3.2
    显示文件内容

    命令:cat (catenae)  全屏滚动显示

    格式:cat filename

    功能:显示出文件的内容。

    注释:当文件内容在屏幕上滚动显示时,可按Ctrl+S键屏幕滚暂停,按Ctrl+Q

       
    键继续显示。

    例如:% cat filename

    3.3
    按屏幕显示文件内容

    命令:more

    格式:more filename

    功能:按屏幕一屏一屏显示出文件内容

    选项:

    注释:在屏幕显示过程中有功能键。空格键 继续下一屏的输出;回车键 看下

       
    一行的输出;q 跳出more状态;/字符串 查旬字符串所在处;a

       
    回到上一屏。

    例如:% more filename



    3.4
    分页显示文件内容

    命令:pg (page)

    格式:pg [option] filename

    功能:分页显示指定文件的内容。在显示一页文件时,最后一行将显示等待用

       
    户输入指令。可输入的指令有如下选项。

    选项:h      显示pg命令中可使用的帮助(help)命令。

        q     
    退出pg命令。

        [return] 
    显示下一页正文。

        1     
    显示正文的下一行

        [Space] 
    显示下一页

        d/[Ctrl-D]
    将屏幕滚动半屏。

        n     
    显示pg命令行中说明的下一个文件。

        p     
    显示pg命令行中说明的前一个文件。

        %     
    显示正文当前页的前面一页。

        /pattern 
    在文件中向前搜索指定的字符模式。

        ?pattern 
    在文件中向后搜索指定的字符模式。

    注释:当pg命令显示到文件的末尾时,显示一个文件结束信息EOF(end of file)

    例如:% pg filename



    3.5
    读文件

    命令:view

    格式:view filename

    功能:只能读出文件内容。

    注释:此命令不能对读出的原文件进行写操作。若对原文件进行了修改,可利

       
    用命令w newfilename”将修改后的文件写到新文件中。

    例如:% view filename



    3.6
    显示文件头部

    命令:head

    格式:head [option] filename

    功能:显示文件的头部

    选项:缺省 显示文件的头10行。

        -i 
    显示文件的开始 i行。

    例如:% head filename



    3.7
    显示文件尾部

    命令:tail

    格式:tail [option] filename

    功能:显示文件的尾部

    选项:缺省 显示文件的末10行。

        -i 
    显示文件最后 i行。

        +i 
    从文件的第i行开始显示。

    例如:% tail filename



    3.8
    显示格式化的文件内容

    命令:pr (print)

    格式:pr filename

    功能:在屏幕上显示格式化的文件内容,即印出每页66行的文本文件,包括5

       
    行页头和5行页尾。页头包括两行空行,一行含有文件的时间、文件名

       
    和页号,另外两行为空行。页尾为5行空行。

    例如:% pr filename



    3.9
    拷贝文件

    命令:cp (copy)

    格式:cp [option] filename1 filename2

        cp [option] filename... directory

        cp -r directory1 directon2

    功能:把一个文件的全部内容拷贝到另一个文件,也可将一个或多个文件拷贝

       
    到另一个目录中。

    选项:-i 按提示进行拷贝文件。

        -p
    按原文件日期进行拷贝。

        -r
    对子目录下所有文件进行拷贝。

    注释:当filename1拷贝到filename2时,若filename2已经存在,则filename2

       
    的内容将被filename1覆盖。

    例如:% cp filename1 filename2



    3.10
    移动文件或文件改名

    命令:mv (move)

    格式:mv filename1 filename2

        mv filename... direction

        mv direction1 direction2

    功能:改变文件或目录的名子,或把一些文件移到另一目录下。

    注释:当filename1更名为filename2时,若filename2已经存在,则filename2

       
    的内容将被filename1覆盖

    例如:% mv filename1 filename2



    3.11
    删除文件

    命令:rm (remove)

    格式:rm filename

        rm -r direction

    功能:删除指定的文件或一个目录中的文件。

    注释:-r选项时,将删除指定目录的所用文件,包括目录名。

    例如:% rm filename



    3.12
    链接文件

    命令:ln (link)

    格式:ln [option] filename linkname

        ln [option] directory pathname

    功能:为文件或目录建立一个链。其中,filenamedirectory是源文件名和

       
    源目录名;linknamepathname分别表示与源文件或源目录名相链接的

       
    文件或目录。

    选项:-s 为文件或目录建立符号链接。

    注释:链接的目地在于,对一个文件或目录赋予两个以上的名字,使其可以出

       
    现在不同的目录中,既可以使文件或目录共享,又可以节省磁盘空间。

    例如:% ln -s filename linkname



    3.13
    改变文件读取权限

    命令:chmod (change mode)

    格式:chmod {u|g|o|a}{+|-|=}{r|w|x} filename

        chmod [who][op][mode] directory

    功能:改变文件的读写和执行权限。有符号法和八进制数字法。

    选项:(1)符号法:

        u (user) 
    表示用户本人。

        g (group)
    表示同组用户。

        o (oher) 
    表示其他用户。

        a (all) 
    表示所有用户。

        +     
    用于给予指定用户的许可权限。

        -     
    用于取消指定用户的许可权限。

        =     
    将所许可的权限赋给文件。

        r (read) 
    读许可,表示可以拷贝该文件或目录的内容。

        w (write)
    写许可,表示可以修改该文件或目录的内容。

        x (execute)
    执行许可,表示可以执行该文件或进入目录。

        (2)
    八进制数字法:

       
    此方法用三位八进制数作任选项,每位数字分别表示用户本人、同组用

       
    户、其他用户的权限,其中:

        4 (100) 
    表示可读。

        2 (010) 
    表示可写。

        1 (001) 
    表示可执行。

    注释:

    例如:% chmod a+rx filename

         
    让所有用户可以读和执行文件filename

        % chmod go-rx filename

         
    取消同组和其他用户的读和执行文件filename的权限。

        % chmod 741 filename

         
    让本人可读写执行、同组用户可读、其他用户可执行文件filename



    3.14
    改变文件所有权

    命令:chown (change owner)

    格式:chown username filename

        chown -R username directory

    功能:改变文件或目录的所有权。

    选项:-R 将改变目录中所有文件及目录的拥有者。

    注释:只有文件的主人和超级用户才能改变文件的所有权。

    例如:% chown username filename



    3.15
    寻找文件

    命令:find

    格式:find pathname [option] expression

    功能:在所给的路经名下寻找符合表达式相匹配的文件。

    选项:-name  表示文件名

        -user 
    用户名,选取该用户所属的文件

        -group 
    组名,选取该用户组属的文件

        -mtime n
    选取n天内被修改的文件

        -newer fn
    选取比文件名为fn更晚修改的文件

    注释:

    例如:% find . -name '*abc*' -print



    3.16
    搜索文件中匹配符

    命令:grep

    格式:grep [option] pattern filenames

    功能:逐行搜索所指定的文件或标准输入,并显示匹配模式的每一行。

    选项:-v找出模式失配的行

        -c
    统计匹配行的数量

        -n
    显示匹配模式的每一行

    注释:

    例如:% ps -aux | grep R



    3.17
    比较文件不同

    命令:diff (difference)

    格式:diff filename1 filename2

    功能:显示两文件的不同之处。

    选项:

    注释:

    例如:% diff file1 file2



    3.18
    比较文件

    命令:cmp (compare)

    格式:cmp [-l] [-s] filename1 filename2

    功能:显示比较两文件不同处的信息

    选项:-l 给出两文件不同的字节数

        -s
    不显示两文件的不同处,给出比较结果

    注释:

    例如:% cmp file1 file2



    3.19
    比较文件共同处

    命令:comm (common)

    格式:comm [-123] filename1 filename2

    功能:选择或拒绝比较两文件出现的共同行

    选项:-1 不显示第1

        -2
    不显示第2

        -3
    不显示第3

    注释:输出三列,第一列表示在file1中出现的行,第二列表示在file2中出现

       
    的行,第三列表示在file1file2中共同出现的行。

    例如:% comm file1 file2



    3.20
    排序文件

    命令:sort

    格式:sort [option] filename

    功能:将制定的文件按要求排序

    选项:-r 按字母倒排序

        -n
    按数字的值从笑到大排序

        -r
    按当前排序规则逆序排序      -f 不区分大小写排序

        -d
    按典型顺序排序

    注释:选项缺省时按ascii码顺序排序

    例如:% sort -nr file



    3.21
    压缩文件

    命令:compress

    格式:compress [option] filename  功能:压缩文件。

    选项:-f 强制压缩      -v 压缩时显示压缩百分比

    注释:

    例如:% comproess files



    3.22
    解缩文件

    命令:uncompress

        zcat

    格式:compress [option] filename      zcat filename

    功能:展开或显示压缩文件。

    选项:-c 不改变文件写到标准输出

    注释:zcat命令相当于uncompress -c

    例如:% uncomproess files.Z



    3.23
    显示文件类型

    命令:file

    格式:file filename ...

    功能:按文件内容来推测文件类型,如textasciiCexecutablecore

    选项:

    注释:

    例如:% file *



    3.24
    建立档案文件

    命令:tar (tape archive)

    格式:tar [option] tarfile filename

    功能:建立文件的存档或读存档文件。

    选项:-c 建立一个新的档案文件

        -x
    从档案文件中读取文件

        -v
    显示处理文件的信息

        -f
    指定档案文件名,缺省时为磁带机即/dev/rmt/0

        -t
    列出存档文件的信息

    注释:

    例如:% tar cvf tarfile .

        % tar xvf tarfile

        % tar tvf tarfile



    3.25
    磁带拷贝文件

    命令:dd

    格式:dd [option=value]  功能:用磁带机转换或拷贝文件。

    选项:if=name 指定输入文件名

        of=name
    指定输出文件名

        ibs=n 
    指定输入文件块大小为n字节(缺省为512字节)

        obs=n 
    指定输出文件块大小为n字节(缺省为512字节)

    注释:

    例如:% dd if=filename of=/dev/rmt/0

        % dd if=/dev/rmt/0 of=filename ibs=1024



    3.26
    修改文件日期

    命令:touch

    格式:touch filenae

    功能:改变文件的日期,不对文件的内容做改动,若文件不存在则建立新文件。

    选项:

    注释:

    例如:% touch file



    3.27
    统计文件字数

    命令:wc (word characters)

    格式:wc [option] filename

    功能:统计文件中的文件行数、字数和字符数。

    选项:-l 统计文件的行数

    -w
    统计文件的字数

    -c
    统计文件的字符数

    注释:若缺省文件名则指标准输入

    例如:% wc file



    3.28
    检查拼写

    命令:spell (spelling)

    格式:spell [option] filename ...

    功能:检查文件中的拼写错误

    选项:-b 按英国拼法检查

        -v
    显示字面上不在拼法字典上的词

        -x
    显示每一个可能合理的词根

    注释:

    例如:% spell file



    第四章 有关状态信息命令



    4.1
    显示当前注册的用户

    命令:w

    格式:w [option] [username]

    功能:显示当前正在使用系统的用户名、注册时间和当前执行的命令。

    选项:-h 不显示起始行

        -s
    按短格式显示

        -l
    按长格式显示(缺省设置)

    注释:

    例如:% w



    4.2
    显示都谁登录到机器上

    命令:who

    格式:who

    功能:显示当前正在系统中的所有用户名字,使用终端设备号,注册时间。

    例如:% who



    4.3
    显示当前终端上的用户名

    命令:whoami

    格式:whoami

    功能:显示出当前终端上使用的用户。

    例如:% whoami



    4.4
    确定命令位置

    命令:whereis

    格式:whereis command

    功能:确定一个命令的二进制行码、源码及联机手册所在的位置。

    选项:

    注释:

    例如:% whereis ls



    4.5
    查找非标准命令

    命令:which

    格式:which command

    功能:查找非标准命令,即使用别名或系统中标准命令集之外的命令。

    选项:

    注释:

    例如:% which ls



    4.6
    显示日期

    命令:date

    格式:date

    功能:显示或设置日期和时间。

    选项:

    注释:只有超级用户有权设置日期。

    例如:% date


     
    4.7
    显示日历

    命令:cal (calendar)

    格式:cal [month] year

    功能:显示某年内指定的日历

    选项:

    注释:

    例如:% cal 1998



    4.8
    计算命令执行时间

    命令:time

    格式:time [command]

    功能:计算程序或命令在执行其间所用的时间。

    选项:

    注释:计算出的时间为:real是命令在系统驻留的总时间,user是命令消耗CPU

       
    的时间,sys是命令I/O所开销的时间。

    例如:% time myprog



    4.9
    查询帐目

    命令:acseek (account seek)

    格式:acseek [-d n] [-m usersname]

    功能:查询本月的用户帐目。

    选项:-d n

        -m username

    注释:若没有选项,则显示本人当月的帐单。

    例如:% acseek



    4.10
    显示用户标识

    命令:id  格式:id [option] [user]

    功能:显示用户标识及用户所属的所有组。

    选项:-a 显示用户名、用户标识及用户所属的所有组

    注释:

    例如:% id username



    4.11
    显示主机标识

    命令:hostid

    格式:hostid

    功能:显示主机的唯一标识,是被用来限时软件的使用权限,不可改变。

    选项:

    注释:

    例如:% hostid



    4.12
    显示主机名

    命令:hostname

    格式:hostname

    功能:显示或设置主机名。

    选项:

    注释:只有超级用户才能设置主机名。

    例如:% hostname



    4.13
    显示进程

    命令:ps  格式:ps [option]

    功能:显示系统中进程的信息。包括进程ID、控制进程终端、执行时间和命令。

    选项:-a 列出当前系统中所有进程的信息

        -l
    显示一个长列表

        -e
    显示当前运行的每一个进程信息

        -f
    显示一个完整的列表

    注释:

    例如:% ps -ef



    4.14
    显示磁盘空间

    命令:df (disk free)

    格式:df [option]

    功能:显示磁盘空间的使用情况,包括文件系统安装的目录名、块设备名、总

       
    字节数、已用字节数、剩余字节数占用百分比。

    选项:-i 显示已用和未用的字节数

        -k
    显示磁盘空间的使用信息

    注释:

    例如:% df -k



    4.15
    显示文件盘空间

    命令:du (disk usage)

    格式:du [option] [filename]

    功能:显示目录或文件所占磁盘空间大小

    选项:-a 显示所有文件的大小

        -s
    显示制定目录所占磁盘大小

    注释:

    例如:% du



    4.16
    显示盘空间限制

    命令:quota

    格式:quota -v [username]

    功能:显示用户的磁盘空间限制和使用情况。包扩盘空间的限额和已使用数,

       
    允许建立的节点数限额和使用节点数。

    选项:-v 查看用户在系统中的盘空间

    注释:只有超级用户可以显示任何用户的使用情况,用edquota命令可修改。

    例如:% quota -v



    4.17
    显示终端选项

    命令:stty

    格式:stty [option]

    功能:显示或设置终端的任选项。

    选项:-a 显示所有设置情况

        -g
    显示当前设置

    注释:

    例如:% stty -a



    4.18
    显示终端名

    命令:tty

    格式:tty

    功能:显示终端名

    选项:

    注释:

    例如:% tty



    4.19
    回忆命令

    命令:history

    格式:history

    功能:帮助用户回忆执行过的命令。

    选项:

    注释:

    例如:% history



    4.20
    联机帮助手册

    命令:man (manual)

    格式:man command_name

    功能:显示参考手册,提供联机帮助信息。

    选项:

    注释:-k 按制定关键字查询有关命令

    例如:% man tar



    4.21
    建立别名

    命令:alias

    格式:alias newname name

    功能:用户可以将常用的命令用自己习惯的名称来重新命名。

    选项:

    注释:

    例如:% alias dir 'ls -F'



    第五章 网络命令



    5.1
    显示网络地址

    命令:arp

    格式:arp hostname

    功能:显示系统当前访问的远程住机名、IP地址和硬件地址。

    选项:-a

    注释:

    例如:% arp -a



    5.2
    显示用户信息

    命令:finger

    格式:finger username

    功能:显示网上用户使用机器的情况,包括用户何时登录和最后一次注册记录。

    选项:

    注释:

    例如:% finger username



    5.3
    网上对话

    命令:talk

    格式:talk username

    功能:在网上与另一用户进行对话。

    选项:

    注释:对话时系统把终端分为上下两部分,上半部显示自己键入信息,下半部

       
    显示对方用户键入的信息。键入deleteCtrl+C则结束对话。

    例如:% talk username



    5.4
    允许或拒绝接受信息

    命令:mesg (message)

    格式:mesg [n/y]

    功能:允许或拒绝其它用户向自己所用的终端发送信息。

    选项:n 拒绝其它用户向自己所用的终端写信息

        y
    允许其它用户向自己所用的终端写信息(缺省值)

    注释:

    例如:% mesg n



    5.5
    给其他用户写信息

    命令:write

    格式:write username [ttyname]

    功能:给其他用户的终端写信息。

    选项:

    注释:若对方没有拒绝,两用户可进行交谈,键入EOFCtrl+C则结束对话。

    例如:write username



    5.6
    测试网路

    命令:ping

    格式:ping hostname

    功能:向网络上的主机发送ICMP ECHO REQUEST信息包,检测网络是否畅通。

    选项:

    注释:被测试的主机名可用IP地址。当丢包率为(100% packet loss)则说明

       
    当前网络不通。

    例如:% ping hostsname



    5.7
    远程shell命令

    命令:rsh (remote shell)

    格式:rsh hostsname command

    功能:在本地机执行远程主机的shell命令。

    选项:

    注释:

    例如:% rsh hostname who



    5.8
    远程拷贝文件

    命令:rcp (remote copy)

    格式:rcp [-r] file newfile

    功能:拷贝远程主机上的文件。

    选项:-r 拷贝目录

    注释:

    例如:% rcp hostname:/tmp/file . 5.9 远程注册

    命令:rlogin (remote login)

    格式:rlogin hostname [-l username]

    功能:注册到远程主机上。

    选项:-l username 注册到另一用户

    注释:要有用户口令才能注册。

    例如:% rlogin hostname



    5.10
    远程登录

    命令:telnet

    格式:telnet hostname

    功能:远程登录到网上其它主机。

    选项:

    注释:支持不同的操作系统。

    例如:% telnet bbs.tsinghua.edu.cn



    5.11
    文件传输

    命令:ftp (file transfer program)

    格式:ftp hostname

    功能:网络文件传输及远程操作。

    选项:ftp命令:

          ?/help    ftp
    的联机帮助

          open hostname
    打开制定的远程机

          cd [dirname]
    进入远程机的目录

          lcd [dirname]
    设置本地机的目录      dir/ls    显示远程的目录文件

          binary   
    以二进制方式进行传输

          get/mget   
    从远程机取一个或多个文件

          put/mput   
    向远程机送一个或多个文件

          prompt   
    打开或关闭多个文件传送时的交互提示

          close     
    关闭与远程机的连接

          quit     
    退出ftp

    注释:

    例如:% ftp hostname



    5.12
    显示到网络主机的路径

    命令:traceroute

    格式:traceroute hostname

    功能:显示本机到达某一网络主机所经的路经和使用的时间。

    选项:

    注释:

    例如:% traceroute hostname



    第六章 Mail命令



    6.1
    发送或接受电子邮件

    命令:mail/Mail/mailx

    格式:mail username (发送)

        mail [option]
    (接受)

    功能:向网上用户发送或接受电子邮件。

    选项:-r 邮件按先进先出顺序排序。缺省时为后进先出顺序排序

        -q
    中断mail后不改变信箱内容

        -p
    显示mail每份邮件,不显示提示信息

        -f
    从邮件格式文件中读邮件

    注释:mail命令:

        ?   
    显示mail帮助命令

        h   
    邮件标题列表

        p   
    显示当前邮件

        n   
    显示下一邮件

        r [uers]
    给发信人或用户回信

        s [file]
    将邮件保存到文件中,保存标题信息

        w [file]
    将邮件写到文件中,不保存标题信息

        d [n] 
    删除当前邮件或第n封邮件        q    将未删除的邮件存入mbox文件,并退出mail

        x   
    所有邮件不作修改,退出mail

    例如:% mail -s "Subjet ..." username < messages



    6.2
    显示邮件队列

    命令:mailq

    格式:mailq

    功能:查看正在发送或接收邮件的排队情况。

    选项:

    注释:此命令一般在系统或网络不同时使用。

    例如:% mailq



    6.3
    邮件操作命令

    命令:pine

    格式:pine

    功能:对自己邮件操作的程序。

    选项:

    注释:此操作是在菜单提示下进行。

    例如:% pine



    第七章 运行程序命令



    7.1
    按时间执行命令

    命令:at/batch

    格式:at [option] [time] [data] [file]

    功能:在制定的时间执行命令或命令文件。

    选项:-r 取消以前用at命令提交的作业

        -l
    显示用at命令提交的所有作业状态和作业号

    注释:

    例如:at 0030 Jan 20 myfile



    7.2
    参数回至标准输出

    命令:echo

    格式:echo [-n] [arguments]

    功能:将参数即字符串至标准输出即显示器

    选项:-n 不向标准输出回送换行符

    注释:

    例如:echo *



    7.3
    复制至文件

    命令:tee

    格式:tee [option] filename

    功能:至标准输出的同时复制至文件

    选项:-a 输出时附加到文件中

        -i
    不理采中断

    注释:

    例如:% who | tee file



    7.4
    给程序优先级

    命令:nice

    格式:nice [-n] command

    功能:以低的优先级运行程序或命令。

    选项:-n 为优先级0-20从高到低

    注释:

    例如:nice -5 progame



    7.5
    终止进程

    命令:kill

    格式:kill [option] pid

    功能:向指定的进程送信号或终止进程。

    选项:-9 强行终止进程

        -17
    将进程挂起

        -19
    将挂起的进程激活

    注释:pid标示进程号,可由ps命令得到。

    例如:% kill -9 pid



    7.6
    进程睡眠

    命令:sleep

    格式:sleep time

    功能:使当前正在执行的进程在规定的时间内处于睡眠。

    选项:

    注释:time为进程将睡眠的时间,以秒为单位。

    例如:% sleep time



    7.7
    显示作业状态

    命令:jobs

    格式:jobs [-l]

    功能:显示当前作业的状态

    选项:-l 长列表显示作业状态,包括所有者、作业号、终端和状态。

    注释:作业状态为 +表示最近被停止的作业,-表示先前的作业,exit 1表示

       
    退出的作业,job# done表示已完成的作业。

    例如:% jobs



    7.8
    前台作业

    命令:fg

    格式:fg job#

    功能:将指定作业号的作业转入前台运行。job#表示作业号。

    选项:

    注释:

    例如:% fg job#



    7.9
    后台作业

    命令:bg/&

    格式:bg job#

        command &

    功能:将指定作业号的作业或命令推到后台运行。

    选项:

    注释:

    例如:% bg job#



    7.10
    挂起作业

    命令:stop

    格式:stop job#

    功能:将指定作业号的后台作业挂起.

    选项:

    注释:

    例如:% stop job#



    第八章 程序编译执行命令



    8.1 C
    程序编译

    命令:cc

    格式:cc [option] filename

    功能:编译或链接指定的C文件。

    选项:-o 指定输出文件名,缺省时为a.out

        -c
    只编译,产生.o的目标文件

        -g
    产生用于符号测试的执行文件

        -lm
    进行连接cc数学库

        -O
    进行代码的一般优化

        -O2
    二级优化

    注释:C编译器参考手册可用命令man cc查看。

    例如:% cc -o test test.c



    8.2 C++
    程序编译

    命令:CC

    格式:CC [option] filename

    功能:编译或链接指定的C++文件。

    选项:同C编译选项

    注释:C++编译器参考手册可用命令man CC查看。

    例如:% CC -O2 test.cc



    8.3 FORTRAN77
    程序编译

    命令:f77

    格式:f77 [option] filename

    功能:编译或链接指定的Fortran文件

    选项:-o 指定输出文件名,缺省时为a.out

        -c
    只编译,产生.o的目标文件

        -g
    产生用于符号测试的执行文件

        -O0
    不进行代码优化

        -O1
    尽快进行代码优化

        -O2
    二级优化

        -O3
    三级优化

    注释:FORTRAN77编译器参考手册可用命令man f77查看

    例如:% f77 -c test.f



    8.4 FORTRAN90
    程序编译

    命令:f90

    格式:f90 [option] filename

    功能:编译或链接指定的Fortran90文件

    选项:同FORTRAN77编译选项

    注释:FORTRAN90编译器参考手册可用命令man f90查看

    例如:% f90 -O -o test test.f



    8.5 GNU
    程序编译

    命令:gcc    (GNU C)

        g++/c++ (GNU C++)

        g77    (GNU FORTRAN77)

    格式:gcc [option] filename

        g++ [option] filename

        g77 [option] filename

    功能:编译或链接指定的编译文件。

    选项:-o 指定输出文件名,缺省时为a.out

        -c
    只编译,产生.o的目标文件

        -O
    进行代码的一般优化

        -O2
    二级优化

    注释:GNU编译器参考手册可进入emacsinfo菜单下查看。

    例如:% gcc -o test test.c



    8.6
    运行文件

    格式:a.out

        filename

    功能:源程序经编译后产生目标代码文件,放在a.out文件或指定输出文件名。



    补充常用配置文件

      1/etc/hosts     主机名字解析文件,提供主机名和IP地址的对应。

      2/etc/passwd

        口令文件,内容为:

      登录用户名:加密口令:用户ID:组ID:保留:初始工作目录:shell路径

      3 /etc/group

        内容为:

      组名:加密密码:组ID:所有属于该组的用户。

      4 /etc/profile

        如果该文件存在,则每个用户登录时将执行该文件。该文件一般用于设置一些通用环境变量,如果用户的home目录中存在.profile文件,则在执行/etc/profile之后,再执行用户的.profile文件。

      5 /etc/inittab

        内部初始化之后,系统将启动/etc/init这个deamon进程,使/etc/init进程取得引导序列的控制权。而init进程从文件 /etc/inittab(init table,初始化表)取得指示,该文件 的内容控制所有init状态,同时也控制那些已消亡进程的再生。

      6 /etc/fstab

        系统中可以mount的文件系统的信息。

      7 /etc/lvmtab

        使用命令:

      # strings /etc/lvmtab;查看系统VG和磁盘信息。

      8 /etc/rc.config.d/netconf

        包含系统名称和网络配置信息,如IP地址、子网掩码和路由信息等。

    9
    /stand/system

        包含系统的驱动程序和子系统信息,内核设备信息和一些系统可调参数信息。



    附录 UNIX 常用命令简单说明

    UNIX
    命令大多数可用联机帮助手册 man 获得帮助,下面是常用命令及简单说明,可供用户快速查找使用。 命令 功能简述

    cctcom
    等于进程记帐文件 accton 启动或中止记帐进程

    adb
    汇编语言调试工具

    admin
    创建和管理SCCS文件 ar 档案文件和库文件管理程序 as 汇编器 asa 回车控制 at 在指定时间执行程序 awk 模式搜索和处理语言 banner 制作标题 basename 生成文件基本名(无前。后缀) batch 命令的延迟执行

    bc
    计算器 bdiff 大型文件比较 bfs 大文件搜索 break 退出循环

    cal
    打印日历表

    calendar
    打印日历表 cancel 取消打印任务 case 分支语句 cb C语言整理程序 cd 改变当前目录 cc C语言编译器 cdc SCCS实用程序 cflow 生成C语言流程图 checkeq 数学公式排版命令 chgrp 改变文件组 chmod 改变文件存取模式 chown 改变文件主 chroot 改变根目录 cksum 显示校验和 clri 清除指定的I节点 cmp 文件比较 col 过滤反向换行 comb SCCS实用程序 comm 显示两个排序文件的公共行

    command
    执行简单命令 continue 进入下一循环 cp 复制文件 cpio  复制文件档案 cpp  C语言预处理程序 crash  检查系统内存映象 create  建立临时文件 cref  生成交叉引用表

    cron 
    在指定时间执行一组命令 crontab 为命令cron 准备crontab文件 crypt 加密/解密 csplit  将一个文件分解 ct    远程终端注册

    ctags 
    创建供vi使用的标识符 cu  呼叫另一UNIX系统 cut  断开一文件中所选择的字段 cxref  生成C程序交叉访问表 date  打印和设置时间

    dc
    桌面计算器 dd 转换和复制文件 delta SCCS实用程序

    deroff
    去掉排版格式 devnm 标识设备名 df 显示可用磁盘空间 diff 显示两个文件的差异 diff3 显示三个文件的差异 dircmp 目录比较 dis 反汇编程序 du 显示对磁盘的占用情况 dump 对指定文件备份 echo 回显指定参数 ed 行编辑器 edit 文本编辑器 egrep 在文件中查找指定模式 env 设置命令执行环境 eqn 数学公式排版命令 eval 执行指定命令 ex 行编辑器 exec 执行指定命令 exit 进程中止 expand 使表格占满行宽 export 将变量传递给子程序 expr 计算表达式值 factor 因式分解 false 返回FALSE fgrep 在文件中查找指定模式 file 确定文件类型 find 查找符号条件的文件 fmt 安排简单的文本格式 fold 折行 for 循环语句

    fsck
    文件系统检查和修复 fsdb 文件系统调试程序

    fumount
    强制性拆协指定资源 function 函数说明 fuser 列出使用文件的进程 fwtmp 产生记帐记录 get SCCS实用程序 getconf 查找配置参数

    getopt
    获得命令中的选择项

    getopts
    获得命令中的选择项

    getty
    设置终端类型、模式、行律等 grep 在文件中查找指定模式 head 打印文件的头若干行

    hexdump
    按十六进制转储文件 id 显示用户号 if 条件语句 init UNIX 初启进程 install 安装一个文件到文件系统

    ipcrm
    删除IPC队列 ipcs 显示IPC状态 join 连接两个文件(关系操作〕

    kill
    中止指定进程

    killall
    中止所有活动进程 labelit 给文件系统提供标号 ld 目标文件链接编辑器 lex 词法分析程序 line 读一行 link 连接文件 lint C程序检查程序 ln 链接文件 local 建立局部变量 logger 显示注册信息

    login
    注册

    logname
    获取注册名 look 在排序文件中查找某行

    lorder
    查找目标库的次序关系

    lp 
    打印文件

    lpr
    打印文件

    lpstat
    显示打印队列状态

    ls 
    目录列表 mail 发送或接收电子邮件

    mailx 
    发送、接收或处理电子邮件

    make 
    执行有选择的编译

    makekey
    生成加密码 man  显示命令用法

    mesg
    接收或取消对话方式

    mkdir
    建立目录 mkfifo 建立FIFO文件

    mkfs
    建立文件系统 mknod 建立文件系统的I节点 mount 安装文件系统 mv 移动文件 mvdir 移动目录 ncheck 按节点号生成节点名清单

    neqn
    数学公式排版命令

    newgrp
    把用户加入到新组 news 打印消息 nice 改变命令执行优先级 nl 给文件加行号 nm 显示目标文件符号表

    nohup
    忽略挂起或退出执行命令 nroff 文本文件排版 od 按八进制转储文件 pack 压缩文件 passwd 改变口令

    paste
    文件合并 pax 可移植档案管理程序

    pcat
    显示压缩格式文件 pg 分屏显示 pr 按打印格式显示文件

    pstat
    报告系统信息 pwck 口令文件校验程序

    pwd
    显示当前工作目录

    quot
    检查文件系统所有权 ratfor 转换成标准FORTRANC程序

    read
    从标准输入读一行 readonly 标记变量为只读 red    文本编辑器 regcmp 正规表达式编辑 restor 文件系统恢复程序 restore 文件系统恢复程序 return 返回语句 rev 颠倒文件中每行字符次序 rm 删除文件

    rmdel SCCS
    使用程序 rmdir 删除目录 rsh(net) 远程SHELL rsh(sec) 受限SHELL runacct 运行日常记帐程序 sact SCCS实用程序 sag 打印系统活动图

    sar
    报告系统活动 sccsdiff SCCS实用程序 sdb 符号调试器 sdiff 并列显示两个文件的差别 sed 流编辑器 sendto 发送邮件

    set 
    设置选项或参数

    setmnt
    建立文件系统安装表

    sh  SHELL
    解释器 shift  命令行参数移位

    shl  SHELL
    层(layer)管理程序 shutdown 关机 size  显示目标文件长度 sleep  挂起进程一段时间

    sort 
    文件排序和合并 spell  拼写错误检查程序 spellin 拼写错误检查 spellout 拼写错误检查 spline 按平滑曲线输出数据 split  分解一个文件 strings 在目标文件中寻找可打印字符

    strip 
    删除符号表 stty  设置终端模式 su  改变用户 sum  显示文件校验和及块数 sync  更新磁盘 tabs  设置制表符

    tbl 
    表格排版 tee  在管道上建立多通路 tic  终端数据库编译程序 time  打印执行命令所花时间 tiemx 报告命令所花时间及活动

    touch
    更新文件时间 tput 恢复终端或查询数据库 tr 转换字符 trap 捕获信号

    troff
    文本文件排版

    true
    返回TRUE tsort 拓扑排序 tty 显示终端设备名 umask 设置文件掩码 umount 拆卸文件系统 uname 显示系统名 unget SCCS实用程序 uniq 删除文件中重复行 units 度量单位转换 unlink 删除文件 unpack 将压缩文件还原

    until
    循环语句

    update
    更新磁盘 val SCCS实用程序 vc SCCS实用程序 vi 全屏幕编辑器 volcopy 文件系统的文字拷贝 wait 等待所有字进程结束 while 循环语句 who 显示谁在使用系统 whodo 显示哪些用户在做什么 write 和另一用户直接对话 xargs 建立参数表并执行命令 yacc 语法分析程序生成器;

     

    展开全文
  • 计算机操作系统第四版第一章知识点归纳总结

    千次阅读 多人点赞 2018-06-27 09:59:36
    第一章操作系统引论一、操作系统基础1、操作系统的定义:操作系统(Operating System, OS)是指控制和管理整个计算机系统的硬件和软件资源,并合理的组织调度计算机的工作和资源的分配,以提供给用户和其他软件...

    第一章、操作系统引论

    一、操作系统基础

    1、操作系统的定义:操作系统(Operating System, OS)是指控制和管理整个计算机系统的硬件和软件资源,并合理的组织调度计算机的工作和资源的分配,以提供给用户和其他软件方便的接口和环境的程序集合。
    2、操作系统的目标: 方便有效(提高系统资源的利用率,提高系统的吞吐量)、可扩充(模块化,层次化,微内核)、开放

    3、操作系统的作用:做用户和计算机硬件系统之间的接口(命令,系统调用,图标-窗口),管理资源(处理机,存储器,I/O设备,文件),资源的抽象
    4、操作系统发展动力:提高利用率更加方便应用需求/体系结构/硬件不断发展

    二 计算机发展史

    1、无操作系统:人工操作(用户独占全机、CPU等待人工操作、内存长期空闲),脱机输入/输出(Off-Line I/O)(装好纸带再上机,节约CPU空间时间,提高I/O速度)
    2、单道批处理系统:有个监督程序将磁带上的作业调入计算机,缺点是I/O太慢了,CPU空闲
    3、多批道处理系统:
    描述:作业放入外存,形成队列,间隔执行
    优点:资源利用率高,系统吞吐量大
    缺点:平均周期长、无交互能力
    存在问题:处理机,内存,I/O,文件,作业,接口
    4、分时系统
    描述:提供多个终端,多个用户使用,命令-反馈-命令第一章
    优点:人机交互,多用户共享主机,
    实际实现:终端有缓冲区暂存用户命令,作业直接进入内存,时间片轮转方式(每个作业执行一个时间片,换下一个)
    特征:多路性,独立性,及时性,交互性,
    5、实时系统
    描述: 及时响应,规定时间内完成,控制所以实时任务协调一致的运行
    类型:工业(武器)控制系统、信息查询系统、多媒体系统、嵌入式系统
    实时任务的类型:周期性实时(指定周期)和非周期实时(开始截至和完成截止),硬实时(工业和武器,必须按时)和软实时(偶尔错,信息查询和多媒体)
    和分时系统比较:多路性、独立性、及时性、交互性、可靠性

    6、微机时代
    a、单用户单任务:一个用户,执行一个任务8位机。CP/M,16位机MS-DOS
    b、单用户多任务:一个用户,并发执行多个任务。Windows
    c、多用户多任务:多个用户共享主机,并发执行多个任务。Unix、Solaris、Linux

    三、操作系统的基本特征

    1、并发

    a、并发和并行宏观上一样
    并发:两个或多个事件在同一时间间隔内发生。单处理机系统,微观上交替运行
    并行:两个或多个事件在同一时刻发生。          多处理机系统,微观上同时运行
    b、进入进程
    进程:在系统中能独立运行并作为资源分配的基本单位,由机器指令、数据和堆栈组成,是独立运行的活动实体。
    多个进程之间可以并发执行和交换信息

    2、共享

    概念:系统中资源可供内存中多个并发执行的进程共同使用
    a.互斥共享方式
    描述:提出申请,资源空闲使用,不然等待
    例子:打印机、磁带机等临界资源(同一时间只允许一个进程访问)
    b.同时访问方式
    描述:允许多个进程“同时”访问,微观还是交替进行
    例子:磁盘设备

    共享以进程的并发为条件,系统不能对共享有效管理,影响进程的并发

    3、虚拟

    概念:通过某种技术让一个物理实体变成若干逻辑上的对应物的功能。(虚拟处理机,虚拟内存,虚拟外部设备,虚拟信道)(多重影分身之术)

    a.时分复用技术

    描述:利用某设备为一用户服务的空闲时间,为其他用户服务,使设备得到最充分的利用

    虚拟处理机技术:利用多道程序设计,每个程序至少一个进程,让多道程序并发

    虚拟设备技术:将I/O设备虚拟为多台逻辑上的I/O设备

    平均速度<=1/N
    b.空分复用技术

    描述:利用存储器的空闲空间分区域存放和运行其他的多道程序,以此提高内存的利用率
    虚拟存储技术:通过分时复用内存,100M的程序运行在30M内存中,各部分分时进入内存运行

    空间占用<=1/N
    4、异步

    描述:就是为了让进程更好的并发,系统会分配进程的执行顺序(走走停停)

    四、操作系统的主要功能

    处理机管理,存储器管理,I/O设备管理,文件管理,提供接口

    1、处理机管理

    a.进程控制:为作业创建进程、撤销已结束的进程,控制进程在运行中的状态转换

    b.进程同步:为多个进程(含线程)的运行进行协调(进程互斥方式,进程同步方式)

    c.进程通信:实现相互合作进程之间的信息交换

    d.调度:作业调度(从后备队列选出作业,创建进程,插入就绪队列)和进程调度(从进程的就绪队列选出进程分配处理机,投入执行)

    2、存储器管理

    内存分配和回收、内存保护、地址映射、内存扩充

    a.内存分配

    任务:分配空间,减少碎片内存,追加内存空间

    实现:静态分配,装入内存时确定,不允许追加,不允许移动;动态分配,装入内存时确定,可以追加和移动

    b.内存保护

    任务:在自己空间运行,互不干扰;不允许用户程序访问操作系统的程序和数据,也不允许用户程序转移到非共享的其他用户程序中执行

    内存保护机制:设置两个界限寄存器(上界和下界),对每条指令要访问的地址进行检查,如果越界就停止该程序

    c.地址映射

    任务:将地址空间中的逻辑地址转为内存空间的物理地址。在硬件的支持下完成
    d.内存扩充

    任务:用虚拟存储技术,从逻辑上扩充内存容量

    内存扩充机制:

    请求调入(装入部分用户程序和数据就能启动程序,后续再将其他部分调入内存),
    置换(若内存不够,将暂时不用的程序和数据调至硬盘

    3、设备管理

    任务1:完成用户进程提出的I/O请求,为用户进程分配所需的I/O设备,并完成指定的I/O操作

    任务2:提高CPU和I/O设备的利用率,提高I/O速度,方便用户使用I/O设备

    缓冲管理,设备分配,设备处理,虚拟设备

    a.缓冲管理

    作用:有效地缓和CPU和I/O设备速度不匹配的矛盾提高了CPU的利用率,进而提高系统吞吐量

    手段:在内存中设置缓冲区,增加缓冲区容量

    缓冲区机制:单缓冲双缓冲(能实现双向同时传送数据),公用缓冲池(能供多个设备同时使用)

    b.设备分配

    任务:根据用户进程的I/O请求。系统现有资源情况以及按照某种设备分配策略,为之分配所需的设备

    手段:系统中设置设备控制表控制器控制表等数据结构,用以记录设备及控制器等标识符和状态。根据这些表就能知道指定设备是否可用,是否忙碌。针对不同的设备类型采用不同的设备分配方式。对独占设备的分配还应考虑分配出去后系统是否安全

    c.设备处理

    任务:用于实现CPU和设备控制器之间的通信(CPU向设备控制器发出I/O命令,要求他完成指定的I/O操作;CPU接收从控制器发来的中断请求,并给予迅速的响应和处理)

    处理过程:检查I/O请求的合法性、设备状态是否空闲,读取有关参数、设置设备的工作方式,然后向设备控制器发出I/O命令,启动I/O设备完成指定的I/O操作。

    4、文件管理

    任务:对用户文件和系统文件进行管理以便用户使用,并保证文件的安全性

    文件存储空间的管理,目录管理,文件的读写管理,文件的共享和保护

    a.文件存储空间的管理

    背景:多用户环境,用户自己管理文件存储,困难且低效

    任务1:为每个文件分配额外的外存空间提高外存利用率,进而提高存取速度

    任务2:设置相应的数据结构,记录文件存储空间使用情况,以供分配时参考

    任务3:分配和回收存储空间

    b.目录管理

    为了使用户能方便地在外存上找到自己所需的文件,通常由系统为每个文件建立一个目录项。目录项包括文件名文件属性、文件在磁盘上的物理位置等。由若干个目录项又可构成一个目录文件

    任务1:为每个文件建立一个目录项,并对众多的目录项加以有效的组织,以实现方便的按名存取(即用户只需提供文件名,就能对该文件进行存取)

    任务2:实现文件共享,只需在外存保留一份该共享文件的副本

    任务3:提供快速的目录查询手段,以提高对文件的检索速度

    c.文件读写管理

    任务:根据用户的请求,从外存读取数据或将数据写入外存

    过程:根据文件名检索文件目录获得外存地址,利用读写指针对文件进行读写,然后修改读写指针,等待下一次读写。读写不会同时进行,所以共用一个指针

    d.文件保护

    1.防止未经核准的用户存取文件

    2.防止冒名顶替存取文件
    3.防止以不正确的方式使用文件


    5、操作系统与用户间的接口
    a.用户接口

    描述:方便用户直接或间接地控制自己的作业

    1、联机用户接口:由一组键盘操作命令及命令解释程序组成。用户通过先后键入不同的命令来实现对作业的控制
    2、脱机用户接口:为批处理作业的用户提供,由作业控制语言JCL组成。用户把对作业进行控制和干预的命令写在作业说明书中,和作业一起提供给系统。调用命令解释程序按照说明书执行,遇到作业结束语句停止

    3、图形用户接口:把各项功能、应用等封装成图标,选种图标即可执行相应操作。

    b.程序接口:

    描述:为用户程序在执行中访问系统资源而设置,是用户取得操作系统服务的唯一途径。它是由一组系统调用组成,每一个系统调用都是一个能完成特定功能的子程序,每当应用程序要求OS提供某种功能时,便调用具有相应功能的系统调用

    第二章 进程的描述和控制

    一、进程的基本概念
    程序有顺序执行和并发执行
    顺序执行:单道批处理系统,用户独占资源
    并发执行:多道程序系统,多道程序并发执行,共享资源,引入进程的概念

    1、程序的顺序执行及其特征

     仅当前一操作(程序段)执行完后,才能执行后继操作。S1:     a∶=x+y; S2:     b∶=a-5; S3:     c∶=b+1;

    在进行计算时,总须先输入用户的程序和数据,然后进行计算,最后才能打印计算结果。



    展开全文
  • LINUX和UNIX操作系统讲座视频大全[37集],LINUX操作系统讲座视频[共9集],Linux...内容如下3册:LINUX视频教程(共9集) , Linux实战工程师网校课程-8CD ,UNIX操作系统基础视频[20集]1 Linux概况及安装2 L
  • 操作系统——内核与设计原理 四版 中文PDF

    千次下载 热门讨论 2020-07-30 23:33:36
    详细描述了操作系统内核结构的设计原理,结合SOLARIS、WINDOWS、LINUX、UNIX操作系统的特点与设计原理理论相结合 讨论了许多操作系统重要的概念 结合了许多实例,并推荐了一些其他的操作系统书籍,提供了很多丰富...
  • unix 与 linux 操作系统 介绍

    千次阅读 2013-05-26 12:49:52
    将对银行计算机中常用的操作系统UNIX和Linux作简要的介绍,着重说明两者的特点和应用场合,而对另个常用的操作系统Windows不作介绍。   4.1 操作系统的基本概念   计算机系统是由硬件和软件两部分构成...
  • 该程序为《UNIX网络编程》第一卷中第一章出现的程序, 该程序经过本人测试通过。 操作系统:CentOS 7 编译器:GCC 时间获取的服务器程序如下:   #include #include #include #include #include #...
  • 1.为应用程序提供个资源集的清晰抽象(另种说法:操作系统给用户提供了个可扩展的机器。个人理解是通过对底层的抽象,对外提供各种接口支持扩展); 2.管理各种软硬件资源。 2、在1.4节中描述了9中不同...
  • 中英对照UNIX操作系统

    千次阅读 2008-01-16 15:51:00
    什么是UNIX操作系统An operating system originally developed by Dennis Ritchie and Ken Thompson at AT&T Bell Laboratories that allows a computer to handle multiple users and programs simul
  • UNIX操作系统设计》……  操作系统是控制其他程序运行,管理系统资源并为用户提供操作界面的系统软件的集合。操作系统(英语;Operating System,简称OS)是管理电脑硬件与软件资源的程序,同时也是计算机系统...
  • 2018软考设计五版同以往对比

    千次阅读 2018-04-07 19:56:37
    第4版第5版对比变化第一章计算机系统知识第一章计算机系统知识无变化第二章程序设计语言基础第二章程序设计语言基础无变化第三章操作系统知识第四章操作系统知识第5版删减小节:网络与嵌入式操作系统、UNIX操作系统...
  • UNIX/Linux 系统管理技术手册(四版)

    千次下载 热门讨论 2020-07-30 23:32:39
    三部分包括了多种不容忽视的重要主题:x窗口系统、打印系统、系统维护与环境、性能分析、与windows系统的协作、串行设备、操作系统驱动程序和内核、系统守护进程以及政策与行政管理方面的知识等。《unix/linux系统...
  • 计算机操作系统(四版)课后习题答案(完整版)

    万次阅读 多人点赞 2015-09-21 10:47:08
    第一章 1.设计现代OS的主要目标是什么? 答:(1)有效性 (2)方便性 (3)可扩充性 (4)开放性 2.OS的作用可表现在哪几个方面? 答:(1)OS作为用户与计算机硬件系统之间的接口 (2)OS作为计算机系统...
  • 第一章 绪论 1、什么是多道程序设计? 答:多道程序设计技术是指在内存同时放若干道程序,使它们在系统中并发执行,共享系统中的各种资源。当一道程序暂停执行时,CPU立即转去执行另一道程序。   2、什么是SPOOLing...
  • 、什么是操作系统1. 没有公认的精确的定义2. 操作系统个控制程序 个系统软件 控制程序的执行过程,防止错误和计算机的不当使用 执行用户程序,给用户提供各种服务 方便用户使用操作系统 3. 操作系统个...
  • 现代操作系统 第一章 引论 习题

    千次阅读 2018-11-26 20:54:28
    1 引论 习题 注:非引用部分,为自己思考后答案,非标准答案。 Q1:操作系统的主要两大作用是什么? A:考察操作系统有两种观点:资源管理观点和扩展的机器观点,对应着两种功能:为用户程序提供抽象和管理...
  • 计算机操作系统课后习题答案

    千次阅读 2019-04-14 17:16:19
    第一章 1.设计现代OS的主要目标是什么? 答:(1)有效性 (2)方便性 (3)可扩充性 (4)开放性 2.OS的作用可表现在哪几个方面? 答:(1)OS作为用户与计算机硬件系统之间的接口 (2)OS作为计算机系统...
  • 操作系统四版)期末复习总结(上)

    万次阅读 多人点赞 2018-07-03 10:06:39
    马上要考操作系统了,第一章 操作系统引论1、操作系统是什么?操作系统为用户完成所有“硬件相关,应用无关“的工作,以给用户方便、高效、安全的使用环境1.1、定义: 操作系统是一个大型的程序系统,它负责计算机...
  • 文件系统 在多程序多用户的系统上,读取数据有以下问题: 如何找到信息? 如何防止个用户读取另个用户的数据 如何知道哪些块是空闲的? 通过前面的学习, 我们知道 操作系统对处理器进行...
1 2 3 4 5 ... 20
收藏数 46,733
精华内容 18,693
关键字:

unix操作系统设计第一章