操作系统结构_操作系统结构图 - CSDN
精华内容
参与话题
  • 第二章 操作系统结构2.1 操作系统的服务 P382.2 用户与操作系统的界面 P40命令解释程序执行命令的方法:图形用户界面(GUI)2.3 系统调用(给程序员用的) P43运行程序向操作系统传递参数通常用三种方法2.4 系统调用...

    2.1 操作系统的服务 P38

    • 操作系统负责提供一个环境以执行程序,向程序和使用程序的用户提供一定的服务。
    • 服务包含许多有用的函数。

    操作系统有一组服务,用于提供用户功能:

    • 程序执行 – 系统能将程序装入内存并运行,结束包括正常或不正常结束。
    • I/O 操作 – 用户通常不能直接控制I/O 设备,操作系统必须提供进行I/O 操作的方法。
    • 文件系统操作 – 程序需要读、写、创建、删除文件。
      通信 – 进程间交换信息一种发生在同一台计算机上运行的两个进程之间,另一种发生在由计算机网络连接起来的不同计算机上的进程之间。通信通过共享内存消息传递来实现。
    • 错误检测 –错误可能发生在CPU和内存中、 I/O 设备中、用户程序中,对于每种错误,操作系统应采取适当行动,以确保正确和一致的计算
    • 资源分配 – 当多个用户登录到系统上或多个作业同时执行时,系统必须为每个进程分配资源
    • 统计– 跟踪记录哪些用户使用了多少和什么类型的计算机资源。这种记录用于记帐或建立使用统计数据
    • 保护 – 确保所有对系统资源的访问都是受控制的,特别是在多用户计算机系统中

    2.2 用户与操作系统的界面 P40

    • 用户与操作系统的界面
      - 命令行界面
      - 图形用户界面

    命令解释程序

    • 在 MS-DOS中称为==命令行解释程序==
    • UNIX中称为外壳(shell) (cf. kernel)
    • 作用:获取并执行用户指定的下一条命令。
      - 文件的创建、删除、列出、打印、复制、执行。

    执行命令的方法:

    1. 命令解释程序本身包含代码
      - 命令的数量决定了命令解释程序的大小
    2. 由系统程序实现命令
      - rm file.txt
      - 搜索名为rm的文件,将文件装入内存,并用参数file.txt来执行。

    图形用户界面(GUI)

    • GUI提供基于鼠标的窗口和菜单系统作为接口。

    2.3 系统调用(给程序员用的) P43

    • 系统调用 提供了进程与操作系统之间的接口
      - 调用通常以汇编语言指令的形式提供。
      - 有些语言 (e.g. C, C++)已经取代了汇编语言而直接用于系统编程,允许直接调用系统调用,这时系统调用通常类似预定义的函数或子程序调用。(Win32 application programming interface (API) for Microsoft Windows。)

    • 例:从一个文件读取数据并复制到另一个文件
      从一个文件读取数据并复制到另一个文件

    • 一般根据应用程序接口(API)设计程序

    • API是一系列适用于程序员的函数,含参数及返回值
      - win32 API
      - POSIX API
      - Java API

    • 例:处理一个调用open( )系统调用的用户应用程序
      处理一个调用open( )系统调用的用户应用程序

    运行程序向操作系统传递参数通常用三种方法

    • 通过 寄存器 来传递参数
    • 将参数存放在内存的块或表中,并将 块的地址 作为参数传递给寄存器
    • 参数也可放在或压到 堆栈 中,并通过操作系统弹出堆栈。

    通过表来传递参数

    2.4 系统调用类型 P46

    • 进程控制
      - 包括分配释放内存
    • 文件管理
    • 设备管理
    • 信息维护
    • 通信

    进程控制

    • 正常中断 (退出)
    • 非正常中断 (终止)
    • 创建进程 (fork, exec),终止进程
    • 等待时间,事件,信号, etc.
    • 分配释放内存 (malloc, free)

    文件管理

    • 创建,删除文件
    • 打开, 关闭
    • 读,写,重定位
    • 获取,设置文件属性

    设备管理

    • 请求,释放设备
    • 读,写,重定位
    • 获取,设置设备属性

    信息维护

    • 获取,设置时间或日期
    • 获取,设置系统数据
      - CPU 等级, 内存大小, 空闲内存
      - 用户数,操作系统版本,当前用户数
    • 获取,设置目标属性
      - 进程
      - 文件
      - 设备

    通信

    • 两种通信模型: 消息传递(左) or 共享内存(右)
      在这里插入图片描述

    2.5 系统程序 P51

    • 系统程序 提供一个方便的环境,以开发和执行程序 (cf. Fig 1.1)
      - 硬件
      - 操作系统
      - 系统程序
      - 应用程序
    • 绝大多数用户所看到的操作系统是由系统程序而不是实际系统调用定义的。

    系统程序划分

    系统程序可分为:

    • 文件管理
    • 状态信息
    • 文件修改 (e.g. text editors)
    • 程序语言支持
      - 编译器, 汇编器, 链接程序,解释程序,调试程序
    • 程序装入和执行
      - 绝对加载程序、重定位加载程序、链接编辑器
    • 通信
      - 邮件,浏览器, etc.

    2.6 操作系统的设计与实现 P52

    • 设计目标
    • 机制和策略
    • 实现

    设计目标

    • 系统设计受到硬件选择和系统类型的影响
    • 用户目标 —— 容易使用、容易学习、可靠、安全、快速
    • 系统目标 —— 容易设计、实现和维护、灵活、可靠、没有错误且高效
    • 不同的要求能形成对不同环境的不同解决方案

    实现

    • 操作系统的传统实现方式是用汇编语言编写,现在大多使用高级语言如C或者C++
    • 使用高级语言的优点:
      - 代码编写更快
      - 更为紧凑
      - 更容易理解和调试
      - 更容易从一个硬件移植到另一个硬件上
    • 反对观点认为:采用高级语言实现的操作系统降低了速度、增加了存储要求。
    • 然而:
      - 现代编译器能对大型程序进行复杂的分析并采用高级优化技术以生成优化代码。
      - 操作系统的重要性能改善很可能是由于更好的数据结构和算法,而不是由于优秀的汇编语言代码。
      - 在系统编写完成并能正常工作之后,可以找出瓶颈子程序,并用相应的汇编语言子程序代替。

    2.7 操作系统结构 P54

    • 现代操作系统庞大而复杂,必须要设计一个 好的结构 以便能正常工作并能容易修改。
    • 通常是将这一任务分成小模块而不只是一个单块系统

    简单结构

    • MS-DOS – 利用最小的空间提供最多的功能
      - 内存大小从256到 640KB, OS 占用 48 到 128 KB
      • 以较小、简单且功能有限的系统形式启动
      • 没有被划分成模块

    MS-DOS 层次结构

    MS-DOS层次结构

    UNIX 系统结构

    • UNIX – 最初受硬件功能的限制
    • 由两个独立部分组成:
      • 系统程序
      • 内核
        - 包括物理硬件之上和系统调用接口之下的所有部分
        - 提供文件系统、CPU调度、内存管理和其它操作系统功能
        - 大多数的功能都结合放在这一层

    UNIX 系统结构

    分层方法

    • 操作系统分成若干层,每层建立在较低层之上。
      • 最底层 (层 0) 是硬件; 最高层 (层 N) 是用户接口
    • 选择了分层后,每层只能利用较低层的功能(或操作)和服务。
      • 简化了调试和系统验证,设计与实现
      • 不必知道如何实现这些操作,只需知道这些操作做什么
    • 与其它方法相比,分层法效率较差
      • 每层为系统调用增加了额外开销 (参数或数据的修改与传递)

    微内核

    • 随着UNIX操作系统的扩充, 内核变得更大且更难管理
    • 将所有非基本部分从内核中移到 用户空间
    • 哪些服务保留在内核内?
      • 最小的进程和内存管理
      • 通信功能
    • 通信以消息传递形式提供

    优点

    • 便于扩充.
    • 方便操作系统从一种硬件平台设计移植到另一种硬件平台设计.
    • 更好的可靠性 (内核运行更少的代码).
    • 更好的安全性.

    举例

    • Mach (mid-1980s, CMU)
      - Tru64 UNIX (formerly Digital UNIX)
      - Apple MacOS X Server
    • QNX (real-time OS)
    • Windows NT (hybrid structure)
    • 华为鸿蒙系统

    模块

    • 用面向对象编程技术来生成模块化的内核
    • 内核有一组核心部件,以及在启动或运行时对附加服务的动态链接。

    可加载的Solaris模块

    虚拟机

    • 虚拟机 : 应用程序将它们的一切下层当成硬件的一部分而看作一个层次整体。
    • 操作系统创建一种幻觉,以至于进程认为有自己的处理器和自己的(虚拟)内存。
    • 物理计算机共享资源以创建虚拟机
      - CPU 调度能共享出CPU以造成一种每个用户都有自己的处理器的感觉。
      - 假脱机(spooling) 和文件系统能提供虚拟读卡机和虚拟行式打印机。
      - 一个普通的用户分时终端提供虚拟机操作员终端的功能。

    虚拟机优缺点

    • 每个虚拟机完全与其他虚拟机相隔离,由于各种系统资源完全被保护,就不存在安全问题.
      - 没有直接资源共享
    • 虚拟机系统是用于研究和开发操作系统的很好工具,虚拟机允许进行系统开发而不必中断正常的系统操作
    • 虚拟机实现困难,因为需提供与底层机器完全一样的拷贝需要大量的工作.

    虚拟机

    • Java 虚拟机
    • VMware 虚拟机

    2.8 系统生成 p63

    • 操作系统通常设计成能运行在某类计算机上,对于某个特定的计算机场所,必须要配置和生成系统,这一过程称为系统生成(system generation,SYSGEN)。
    • SYSGEN程序采用自动或者交互方式获得有关硬件系统的特定配置信息,包括:
      - CPU类型?安装什么选项 (扩展指令集、浮点运算操作等)
      - 内存大小
      - 设备,包括设备号码、设备中断号、设备类型和模型、以及任何特别的设备特点
      - 操作系统选项和参数值 (缓冲区大小、CPU调度算法、支持的进程最大数量等)

    系统生成的三种方式

    • 修改源代码并编译
    • 用系统描述创建表,并从预先编译过的库中选择模块
    • 构造完全由表驱动的系统

    系统启动

    • 引导 —— 开机时,装入内核以启动系统
    • 引导程序 —— 存在ROM中的一小段代码,能定位内核,将它装入内存并开始执行。(ROM:只读存储器)

    小结 P64

    • 操作系统提供什么服务
    • 如何提供服务
      • 系统调用
        - 进程控制、文件管理、设备管理、信息维护、通信
      • 系统程序
    • 设计操作系统的方法
    • 生成
    • 启动

    作业 P65

    2.3 给出三种向操作系统传递参数的常用方法。

    1. 通过寄存器来传递参数
    2. 寄存器传递参数块的首地址
    3. 参数通过程序存放或压进堆栈中,并通过操作系统弹岀堆栈。

    2.7 命令解释器的用途是什么?为什么它经常是与内核分开的?是否可能采用操作系统提供的调用接口为用户开发一个新的命令解释器?

    答案:命令解释器从用户或文件中读取命令并执行,一般而言把他们转化成系统调用。它通常是不属于内核,因为命令解释会有所变动。用户能够利用由操作系统提供的系统调用接口开发新的命令解释器。这命令解释器允许用户创建、管理进程和确定它们通信的方法(例如通过管道和文件)。所有的功能都被用户程序通过系统调用来使用,这个也可能有用户开发一个新的命令行解释。

    展开全文
  • 操作系统结构

    万次阅读 2018-07-13 12:58:45
    操作系统的内部的六种不同的结构设计:单体系统、层次系统、微内核、客户机-服务器系统、虚拟机和exokernels。 一、单体系统 二、层次式系统 三、微内核 四、客户机-服务器模式 五、虚拟机 六、外核...

    操作系统的内部的六种不同的结构设计:单体系统、层次系统、微内核、客户机-服务器系统、虚拟机和exokernels。

    一、单体系统

    在多数常见的组织形式的处理方式中,全部操作系统在内核态中以单一程序的方式运行。整个操作系统以过程集合的方式编写,链接成一个大型可执行二进制程序。
    在单体系统中,也可能有一些结构存在。可以将参数放置在良好定义的位置,通过这种方式,向操作系统请求所能提供的服务(系统调用),然后执行一个陷阱指令,这个指令将机器从用户态切换到内核态并把控制传递给操作系统,然后操作系统取出参数并且确定应该执行哪个系统调用,随后在一个表格中检索,在该表格的k槽中存放着指向执行系统调用k过程的指针。
    对于这类操作系统的基本结构:
    1. 需要一个主程序,用来处理服务过程请求。
    2. 需要一套服务过程,用来执行系统调用。
    3. 需要一套实用过程,用来辅助服务过程。
    在该模型中,每一个系统调用都通过一个服务过程为其工作并运行之。要有一组实用程序来完成一些服务过程所需要用到的功能。
    简单的单体系统结构图示:
    简单的单体系统结构

    二、层次式系统

    单体系统进一步通用化,就变成一个层次式结构的操作系统,它的上层软件都是在下一层软件的基础之上构建的。THE系统是按此模型构造的第一个操作系统。
    THE系统共分为六层。
    0. 处理器分配和多道程序设计
    处理器分配分配在第0层中进行,当中断发生或定时器到期时,由该层进行进程切换。在第0层之上,系统由一些连续的进程所组成,编写这些进程时不用再考虑在单处理器上多进程运行的细节。也就是说,在第0层中提供了基本的CPU多道程序功能。
    1. 存储器和磁鼓管理
    内存管理在第1层中进行,它分配进程的主存空间,当内存用完时则在一个512k字的磁鼓上保留进程的一部分(页面),在第1层上,进程不用考虑它是在磁鼓上还是在内存中进行。第1层软件保证一旦需要访问某一个页面时,该页面必定已在内存中。
    2. 操作员-进程通信
    第2层处理进程与操作员控制台(即用户)之间的通信。在这层的上不,可以认为每个进程都有自己的操作员控制台。
    3. 输入/输出管理
    第3层管理I/O设备和相关的信息流缓冲区。在第3层上,每个进程都与有良好特性的抽象I/O设备打交道,而不必考虑外部设备的物理细节。
    4. 用户程序
    第4层是用户程序层,用户程序不必考虑进程、内存、控制台或I/O设备管理细节。
    5. 操作员
    系统操作员进程位于第5层中。

    MULTICS系统

    该系统由许多的同心环构造而成,而不是采用层次化构造。内层环比外层环有更高的级别。当外环的过程欲调用内环的过程时,它必须执行一条等价于系统调用的TRAP指令。在执行该TRAP指令前,要进行严格的桉树合法性检查。

    三、微内核

    在微内核设计背后的思想是为了实现高可靠性,将操作系统划分成小的、良好定义的模块,只有其中一个模块–微内核–运行在内核态上,其余的模块,由于功能相对弱些,则作为普通用户进程运行。特别地由于把每个设备驱动和文件系统分别作为普通用户,这些模块中的错误虽然会使这些模块崩溃,但是不会使得整系统死机。
    微内核在实时、工业、航空以及军事应用中特别流行。
    MINIX3系统结构图示:
    微内核实例

    再生服务器

    检查其他服务器和驱动器的功能是否正确,一旦检查出一个错误,它自动取代之,无需任何用户的干预。这种方式使得系统具有自修复能力,并且获得了较高的可靠性。
    系统对每个进程的权限有着许多限制。一个与小内核相关联的思想是在内核中的机制与策略分离的原则。一个比较简单的调度算法是,对于每个进程赋予一个优先级,并让内核执行在具有最高优先级进程中可以运行的某个进程。这里机制(在内核中)就是寻找最高优先级的进程并运行之。而策略(赋予进程以优先级)可以由用户态中的进程完成。在这个方式中,机制和策略是分离的,从而使系统内核变得更小。

    四、客户机-服务器模式

    一个微内核思想的略微变体是将进程划分为:
    1. 服务器:每个服务器提供某种服务。
    2. 客户端:使用这些服务。
    这个模式就是所谓的客户机-服务器模式。通常在系统最底层是微内核,这个模式的本质是存在客户端进程和服务器进程。
    在客户端和服务器之间的通信是消息传递。普遍方式是客户端和服务器在不同的计算机上,通过局域网或广域网连接,由于客户端通过发送消息与服务端通信,客户端并不需要知道这些消息是在它们的本地机器上处理,还是通过网络被送到远程机器上处理。
    客户端-服务器模型实例:
    客户端-服务器

    五、虚拟机

    1. VM/370

    最初命名为CP/CMS,后来改名为VM/370,它的目的是为了将多道程序和获取更方便的裸机彻底隔离。它的核心称为虚拟机监控程序,它在裸机上运行并且具备了多道程序功能。该系统向上层提供了若干个虚拟机。它不同于其他操作系统:这些虚拟机不是那种具有文件等优良特征的扩展计算机。它们仅仅是裸机硬件的精确复制品,包含了内核态/用户态、I/O功能、中断及其他真是硬件所具备的全部内容。

    2. 虚拟机的再次发现

    虚拟化的优点:
    1. 一台物理机就可以运行许多虚拟机,每个虚拟机看起来都是一台完全的机器。这样可以节省费用。
    2. 可以同时运行两个或多个操作系统。

    3. Java虚拟机

    它是一种体系结构。Java编译器为JVM生成代码,这些代码以后可以由一个软件JVM解释器质性。这种处理方式的优点在于,JVM代码可以通过Internet传送到任何有JVM解释器的机器上,并在该机器执行。使用JVM的优点就是如果解释器正确地完成,并不意味着结束,还要对所输入的KVM进行安全性检测,然后在一直保护环境下执行,这样,这些程序就不能偷窃数据或进行其他任何有害的操作。

    六、外核

    与虚拟机克隆真实机器不同,另一种策略是对机器进行分区。给每个用户整个资源的一个子集。
    在底层中,一种称为外核的程序在内核态中运行。它的任务是为虚拟机分配资源,并检查试图使用这些资源的企图,以确保没有机器会使用他人资源。每个用户层的虚拟机可以运行自己的操作系统,但限制在只能使用已经申请并且获得分配的那部分资源。
    外核机制的优点是减少了映像层。在其他的设计中,每个虚拟机都认为它有的磁盘,其盘块号从0到最大编号,这样虚拟机监控程序必须维护一张表格用以重映像磁盘地址,有了外核这个重映像处理就不需要了,外核只需要记录已经分配各个虚拟机的有关资源即可。这个方法还有一个优点,它将多道程序(在外核内)与用户操作系统代码(在用户控件内)加以分离,而且相应负载并不重,这是因为外核所做的一切,只是保持多个虚拟机彼此不发生冲突。

    展开全文
  • 3、操作系统的基本结构

    千次阅读 2019-03-08 16:54:41
    传统的操作系统结构无结构操作系统模块化结构OS(模块―接口法) 按其功能精心地划分为若干个具有一定独立性和 大小的模块 (1) 内聚性,指模块内部各部分间联系的紧密程度。内聚性越高,模块的独立性越强。 (2) ...

    传统的操作系统结构

    无结构操作系统

    模块化结构OS(模块―接口法)

    按其功能精心地划分为若干个具有一定独立性和 大小的模块
    (1) 内聚性,指模块内部各部分间联系的紧密程度。内聚性越高,模块的独立性越强。
    (2) 耦合度,指模块间相互联系和相互影响的程度。显然,耦合度越低,模块的独立性
    越好。
    这里写图片描述

    分层式结构OS(自底向上的分层设计)

    为了将模块―接口法中“决定顺序”的***无序性变为有序性***,引入了有序分层法。
    每一层仅能使用其底层所提供的功能和服务
    将一个操作系统分为若干个层次,每层又由若干个模块组成, 各层之间只存在着单向的依赖关系,即高层仅依赖于紧邻它的低层

    客户/服务器模式

    面向对象的程序设计

    微内核OS结构

    能有 效地支持多处理机运行,故非常适用于分布式系统环境。

    展开全文
  • Linux系统结构 详解

    万次阅读 多人点赞 2017-03-23 21:52:29
    内核、shell和文件系统一起形成了基本的操作系统结构,它们使得用户可以运行程序、管理文件并使用系统。部分层次结构如图1-1所示。 1. linux内核  内核是操作系统的核心,具有很多最基本功能,...

    Linux系统一般有4个主要部分:

    内核、shell、文件系统和应用程序。内核、shell和文件系统一起形成了基本的操作系统结构,它们使得用户可以运行程序、管理文件并使用系统。部分层次结构如图1-1所示。

    1. linux内核

            内核是操作系统的核心,具有很多最基本功能,它负责管理系统的进程、内存、设备驱动程序、文件和网络系统,决定着系统的性能和稳定性。

           Linux 内核由如下几部分组成:内存管理、进程管理、设备驱动程序、文件系统和网络管理等。如图:


    系统调用接口:SCI 层提供了某些机制执行从用户空间到内核的函数调用。这个接口依赖于体系结构,甚至在相同的处理器家族内也是如此。SCI 实际上是一个非常有用的函数调用多路复用和多路分解服务。在 ./linux/kernel 中您可以找到 SCI 的实现,并在 ./linux/arch 中找到依赖于体系结构的部分。

       1. 内存管理 

            对任何一台计算机而言,其内存以及其它资源都是有限的。为了让有限的物理内存满足应用程序对内存的大需求量,Linux  采用了称为“虚拟内存”的内存管理方式。Linux  将内存划分为容易处理的“内存页”(对于大部分体系结构来说都是 4KB)。Linux 包括了管理可用内存的方式,以及物理和虚拟映射所使用的硬件机制。

         不过内存管理要管理的可不止 4KB 缓冲区。Linux 提供了对 4KB 缓冲区的抽象,例如 slab 分配器。这种内存管理模式使用 4KB 缓冲区为基数,然后从中分配结构,并跟踪内存页使用情况,比如哪些内存页是满的,哪些页面没有完全使用,哪些页面为空。这样就允许该模式根据系统需要来动态调整内存使用。
       为了支持多个用户使用内存,有时会出现可用内存被消耗光的情况。由于这个原因,页面可以移出内存并放入磁盘中。这个过程称为交换,因为页面会被从内存交换到硬盘上。内存管理的源代码可以在 ./linux/mm 中找到。

        2 .进程管理

           进程实际是某特定应用程序的一个运行实体。在 Linux  系统中,能够同时运行多个进程,Linux  通过在短的时间间隔内轮流运行这些进程而实现“多任务”。这一短的时间间隔称为“时间片”,让进程轮流运行的方法称为“进程调度” ,完成调度的程序称为调度程序。

           进程调度控制进程对CPU的访问。当需要选择下一个进程运行时,由调度程序选择最值得运行的进程。可运行进程实际上是仅等待CPU资源的进程,如果某个进程在等待其它资源,则该进程是不可运行进程。Linux使用了比较简单的基于优先级的进程调度算法选择新的进程。 

            通过多任务机制,每个进程可认为只有自己独占计算机,从而简化程序的编写。每个进程有自己单独的地址空间,并且只能由这一进程访问,这样,操作系统避免了进程之间的互相干扰以及“坏”程序对系统可能造成的危害。 为了完成某特定任务,有时需要综合两个程序的功能,例如一个程序输出文本,而另一个程序对文本进行排序。为此,操作系统还提供进程间的通讯机制来帮助完成这样的任务。Linux 中常见的进程间通讯机制有信号、管道、共享内存、信号量和套接字等。 

           内核通过 SCI 提供了一个应用程序编程接口(API)来创建一个新进程(fork、exec 或 Portable Operating System Interface [POSⅨ] 函数),停止进程(kill、exit),并在它们之间进行通信和同步(signal 或者 POSⅨ 机制)。

        3. 文件系统 

           和 DOS 等操作系统不同,Linux 操作系统中单独的文件系统并不是由驱动器号或驱动器名称(如 A:  或 C:  等)来标识的。相反,和 UNIX  操作系统一样,Linux 操作系统将独立的文件系统组合成了一个层次化的树形结构,并且由一个单独的实体代表这一文件系统。Linux  将新的文件系统通过一个称为“挂装”或“挂上”的操作将其挂装到某个目录上,从而让不同的文件系统结合成为一个整体。Linux  操作系统的一个重要特点是它支持许多不同类型的文件系统。Linux 中最普遍使用的文件系统是 Ext2,它也是 Linux  土生土长的文件系统。但 Linux  也能够支持 FAT、VFAT、FAT32、MINIX 等不同类型的文件系统,从而可以方便地和其它操作系统交换数据。由于 Linux  支持许多不同的文件系统,并且将它们组织成了一个统一的虚拟文件系统.

           虚拟文件系统(VirtualFileSystem,VFS):隐藏了各种硬件的具体细节,把文件系统操作和不同文件系统的具体实现细节分离了开来,为所有的设备提供了统一的接口,VFS提供了多达数十种不同的文件系统。虚拟文件系统可以分为逻辑文件系统和设备驱动程序。逻辑文件系统指Linux所支持的文件系统,如ext2,fat等,设备驱动程序指为每一种硬件控制器所编写的设备驱动程序模块。 

           虚拟文件系统(VFS)是 Linux 内核中非常有用的一个方面,因为它为文件系统提供了一个通用的接口抽象。VFS 在 SCI 和内核所支持的文件系统之间提供了一个交换层。即VFS 在用户和文件系统之间提供了一个交换层。

    VFS         在用户和文件系统之间提供了一个交换层:

    在 VFS 上面,是对诸如 open、close、read 和 write 之类的函数的一个通用 API 抽象。在 VFS 下面是文件系统抽象,它定义了上层函数的实现方式。它们是给定文件系统(超过 50 个)的插件。文件系统的源代码可以在 ./linux/fs 中找到。
      文件系统层之下是缓冲区缓存,它为文件系统层提供了一个通用函数集(与具体文件系统无关)。这个缓存层通过将数据保留一段时间(或者随即预先读取数据以便在需要是就可用)优化了对物理设备的访问。缓冲区缓存之下是设备驱动程序,它实现了特定物理设备的接口。
          因此,用户和进程不需要知道文件所在的文件系统类型,而只需要象使用 Ext2  文件系统中的文件一样使用它们。

         4. 设备驱动程序 

          设备驱动程序是 Linux  内核的主要部分。和操作系统的其它部分类似,设备驱动程序运行在高特权级的处理器环境中,从而可以直接对硬件进行操作,但正因为如此,任何一个设备驱动程序的错误都可能导致操作系统的崩溃。设备驱动程序实际控制操作系统和硬件设备之间的交互。设备驱动程序提供一组操作系统可理解的抽象接口完成和操作系统之间的交互,而与硬件相关的具体操作细节由设备驱动程序完成。一般而言,设备驱动程序和设备
    的控制芯片有关,例如,如果计算机硬盘是 SCSI  硬盘,则需要使用 SCSI  驱动程序,而不是 IDE 驱动程序。 

        5.网络接口(NET)   

           提供了对各种网络标准的存取和各种网络硬件的支持。网络接口可分为网络协议和网络驱动程序。网络协议部分负责实现每一种可能的网络传输协议。众所周知,TCP/IP  协议是 Internet  的标准协议,同时也是事实上的工业标准。Linux  的网络实现支持 BSD 套接字,支持全部的TCP/IP协议。Linux内核的网络部分由BSD套接字、网络协议层和网络设备驱动程序组成。 
        网络设备驱动程序负责与硬件设备通讯,每一种可能的硬件设备都有相应的设备驱动程序。


    1.     2 . linux shell

    shell是系统的用户界面,提供了用户与内核进行交互操作的一种接口。它接收用户输入的命令并把它送入内核去执行,是一个命令解释器。另外,shell编程语言具有普通编程语言的很多特点,用这种编程语言编写的shell程序与其他应用程序具有同样的效果。
    目前主要有下列版本的shell。
    1.Bourne Shell:是贝尔实验室开发的。  
    2.BASH:是GNU的Bourne Again Shell,是GNU操作系统上默认的shell,大部分linux的发行套件使用的都是这种shell。
    3.Korn Shell:是对Bourne SHell的发展,在大部分内容上与Bourne Shell兼容。    

    4.C Shell:是SUN公司Shell的BSD版本。


     3 . linux 文件系统

    文件系统是文件存放在磁盘等存储设备上的组织方法。Linux系统能支持多种目前流行的文件系统,如EXT2、 EXT3、 FAT、 FAT32、 VFAT和ISO9660。

    3.1 文件类型

    Linux下面的文件类型主要有:
    1) 普通文件C语言元代码、SHELL脚本、二进制的可执行文件等。分为纯文本和二进制。
    2) 目录文件:目录,存储文件的唯一地方。
    3) 链接文件:指向同一个文件或目录的的文件。
    4) 设备文件:与系统外设相关的,通常在/dev下面。分为块设备和字符设备。

    5)管道(FIFO)文件 :  提供进程建通信的一种方式
    6)套接字(socket) 文件: 该文件类型与网络通信有关

    可以通过ls –l, file, stat几个命令来查看文件的类型等相关信息。

    3.2  Linux目录 

      文件结构是文件存放在磁盘等存贮设备上的组织方法。主要体现在对文件和目录的组织上。
      目录提供了管理文件的一个方便而有效的途径。

      Linux使用标准的目录结构,在安装的时候,安装程序就已经为用户创建了文件系统和完整而固定的目录组成形式,并指定了每个目录的作用和其中的文件类型。

          完整的目录树可划分为小的部分,这些小部分又可以单独存放在自己的磁盘或分区上。这样,相对稳定的部分和经常变化的部分可单独存放在不同的分区中,从而方便备份或系统管理。目录树的主要部分有 root、/usr、/var、/home  等(图2) 。这样的布局可方便在 Linux 计算机之间共享文件系统的某些部分。 


    Linux采用的是树型结构。最上层是根目录,其他的所有目录都是从根目录出发而生成的。

          微软的DOS和windows也是采用树型结构,但是在DOS和 windows中这样的树型结构的根是磁盘分区的盘符,有几个分区就有几个树型结构,他们之间的关系是并列的。最顶部的是不同的磁盘(分区),如:CDEF等。

          但是在linux中,无论操作系统管理几个磁盘分区,这样的目录树只有一个。从结构上讲,各个磁盘分区上的树型目录不一定是并列的。

    3.3 Linux磁盘分区

       一、主分区,扩展分区和逻辑分区:   

    linux分区不同于windows,硬盘和硬盘分区在Linux都表示为设备.

    硬盘分区一共有三种:主分区,扩展分区和逻辑分区。   

    硬盘的分区主要分为主分区(Primary Partion)和扩展分区(Extension Partion)两种,主分区和扩展分区的数目之和不能大于四个。

    主分区(Primary Partion):可以马上被使用但不能再分区。

    扩展分区(Extension Partion):必须再进行分区后才能使用,也就是说它必须还要进行二次分区。

    逻辑分区((Logical Partion)):由扩展分区建立起来的分区。逻辑分区没有数量上限制。

    扩展分区只不过是逻辑分区的“容器”,实际上只有主分区和逻辑分区进行数据存储。 

       二、Linux下硬盘分区的标识

    硬盘分区的标识一般使用/dev/hd[a-z]X或者/dev/sd[a-z]X来标识,其中[a-z]代表硬盘号,X代表硬盘内的分区号。

    整块硬盘分区的块号标识:Linux下用hda、hdb、sda、sdb 等来标识不同的硬盘;

    其中:

    IDE接口硬盘:表示为/dev/hda1、/dev/hdb ...;

    SCSI 接口的硬盘、SATA接口的硬盘表示为/dev/sda、/dev/sdb ... ... ;

    硬盘内的分区:如果X的值是1到4,表示硬盘的主分区(包含扩展分区);逻辑分区从是从5开始的,比如/dev/hda5肯定是逻辑分区了;

    例如:

    用hda1、hda2、 hda5、hda6 来标识不同的分区。其中,字母a 代表第一块硬盘,b代表第二块硬盘,依次类推。而数字1 代表一块硬盘的第一个分区、2 代表第二个分区,依次类推。1 到4 对应的是主分区(Primary Partition)或扩展分区(Extension Partition)。从5开始,对应的都是硬盘的逻辑分区(Logical Partition)。一块硬盘即使只有一个主分区,逻辑分区也是从5开始编号的,这点应特别注意。

    总结:一个硬盘分区首先要大确认在哪个硬盘,然后再确认它所在硬盘内的哪个分区。

      对于/dev/hda 类似的表示方法,也并不寞生吧;我们在Linux通过fdisk -l 就可以查到硬盘是/dev/hda还是/dev/hdb;

      [root@localhost ~]# fdisk -l

      Disk /dev/hda: 80.0 GB, 80026361856 bytes

      255 heads, 63 sectors/track, 9729 cylinders

      Units = cylinders of 16065 * 512 = 8225280 bytes

       Device Boot Start End Blocks Id System

      /dev/hda1 * 1 970 7791493+ 7 HPFS/NTFS

      /dev/hda2 971 9729 70356667+ 5 Extended

      /dev/hda5 971 2915 15623181 b W95 FAT32

      /dev/hda6 2916 4131 9767488+ 83 linux

      /dev/hda7 4132 5590 11719386 83 linux

      /dev/hda8 5591 6806 9767488+ 83 linux

      /dev/hda9 6807 9657 22900626 83 linux

      /dev/hda10 9658 9729 578308+ 82 linux swap / Solaris

     请注意第一行, Disk /dev/hda: 80.0 GB, 80026361856 bytes ,这个就是表示机器中只有一个硬盘设备/dev/hda ,体积大小为 80.0G;下面的就是硬盘的分区,每个分区都有详细的信息,在这里不详细说了;

    Linux下磁盘分区和目录的关系如下:

    – 任何一个分区都必须挂载到某个目录上。

    – 目录是逻辑上的区分。分区是物理上的区分。

    – 磁盘Linux分区都必须挂载到目录树中的某个具体的目录上才能进行读写操作。

    – 根目录是所有Linux的文件和目录所在的地方,需要挂载上一个磁盘分区。

    3.4 linux主要目录的功用。

      /bin 二进制可执行命令
      /dev 设备特殊文件
      /etc 系统管理和配置文件
      /etc/rc.d 启动的配置文件和脚本
      /home 用户主目录的基点,比如用户user的主目录就是/home/user,可以用~user表示
      /lib 标准程序设计库,又叫动态链接共享库,作用类似windows里的.dll文件
      /sbin 系统管理命令,这里存放的是系统管理员使用的管理程序
      /tmp 公用的临时文件存储点
      /root 系统管理员的主目录(呵呵,特权阶级)
      /mnt 系统提供这个目录是让用户临时挂载其他的文件系统
      /lost+found 这个目录平时是空的,系统非正常关机而留下“无家可归”的文件(windows下叫什么.chk)就在这里
      /proc 虚拟的目录,是系统内存的映射。可直接访问这个目录来获取系统信息
      /var 某些大文件的溢出区,比方说各种服务的日志文件
      /usr 最庞大的目录,要用到的应用程序和文件几乎都在这个目录。其中包含:
            /usr/X11R6 存放X window的目录
            /usr/bin 众多的应用程序
            /usr/sbin 超级用户的一些管理程序
            /usr/doc linux文档
            /usr/include linux下开发和编译应用程序所需要的头文件
            /usr/lib 常用的动态链接库和软件包的配置文件
            /usr/man 帮助文档
            /usr/src 源代码,linux内核的源代码就放在/usr/src/linux里
            /usr/local/bin 本地增加的命令
            /usr/local/lib 本地增加的库

    3.5  linux文件系统

      文件系统指文件存在的物理空间,linux系统中每个分区都是一个文件系统,都有自己的目录层次结构。linux会将这些分属不同分区的、单独的文件系统按一定的方式形成一个系统的总的目录层次结构。一个操作系统的运行离不开对文件的操作,因此必然要拥有并维护自己的文件系统。

    1.文件系统类型:
        ext2 : 早期linux中常用的文件系统
        ext3 : ext2的升级版,带日志功能
        RAMFS : 内存文件系统,速度很快
        NFS : 网络文件系统,由SUN发明,主要用于远程文件共享
        MS-DOS : MS-DOS文件系统
        VFAT : Windows 95/98 操作系统采用的文件系统
        FAT : Windows XP 操作系统采用的文件系统
        NTFS: Windows NT/XP 操作系统采用的文件系统
        HPFS : OS/2 操作系统采用的文件系统
        PROC : 虚拟的进程文件系统
        ISO9660 : 大部分光盘所采用的文件系统
        ufsSun : OS 所采用的文件系统
        NCPFS : Novell 服务器所采用的文件系统
        SMBFS : Samba 的共享文件系统
        XFS : 由SGI开发的先进的日志文件系统,支持超大容量文件
        JFS :IBM的AIX使用的日志文件系统
        ReiserFS : 基于平衡树结构的文件系统
        udf: 可擦写的数据光盘文件系统

    2.文件系统特性:

        磁盘分区完毕后还需要进行格式化(format),之后操作系统才能够使用这个分区。 格式化的目的是能使操作系统可以使用的文件系统格式(即我们上面提到文件系统类型). 

            每种操作系统能够使用的文件系统并不相同. 如windows 98 以前的微软操作系统主要利用的文件系统是 FAT (或 FAT16),windows 2000 以后的版本有所谓的 NTFS 文件系统,至于 Linux 的正统文件系统则为 Ext2 (Linux second extended file system, ext2fs)这一个。此外,在默认的情况下,windows 操作系统是不会认识 Linux 的 Ext2 的。

          传统的磁盘与文件系统之应用中,一个分区就是只能够被格式化成为一个文件系统,所以我们可以说一个 filesystem 就是一个 partition。但是由于新技术的利用,例如我们常听到的LVM与软件磁盘阵列(software raid), 这些技术可以将一个分区格式化为多个文件系统(例如LVM),也能够将多个分区合成一个文件系统(LVM, RAID)! 所以说,目前我们在格式化时已经不再说成针对 partition 来格式化了, 通常我们可以称呼一个可被挂载的数据为一个文件系统而不是一个分区喔!

        那么文件系统是如何运行的呢?这与操作系统的文件数据有关。较新的操作系统的文件数据除了文件实际内容外, 通常含有非常多的属性,例如 Linux 操作系统的文件权限(rwx)与文件属性(拥有者、群组、时间参数等)。 文件系统通常会将这两部份的数据分别存放在不同的区块,权限与属性放置到 inode 中,至于实际数据则放置到 data block 区块中。 另外,还有一个超级区块 (superblock) 会记录整个文件系统的整体信息,包括 inode 与 block 的总量、使用量、剩余量等。

          对于一个磁盘分区来说,在被指定为相应的文件系统后,整个分区被分为 1024,2048 和 4096 字节大小的块。根据块使用的不同,可分为:

    1. 超级块(Superblock): 这是整个文件系统的第一块空间。包括整个文件系统的基本信息,如块大小,inode/block的总量、使用量、剩余量,指向空间 inode 和数据块的指针等相关信息。
    2. inode块(文件索引节点) : 文件系统索引,记录文件的属性它是文件系统的最基本单元,是文件系统连接任何子目录、任何文件的桥梁。每个子目录和文件只有唯一的一个 inode 块。它包含了文件系统中文件的基本属性(文件的长度、创建及修改时间、权限、所属关系)、存放数据的位置等相关信息. 在 Linux 下可以通过 "ls -li" 命令查看文件的 inode 信息。硬连接和源文件具有相同的 inode 。
    3. 数据块(Block) :实际记录文件的内容,若文件太大时,会占用多个 block。为了提高目录访问效率,Linux 还提供了表达路径与 inode 对应关系的 dentry 结构。它描述了路径信息并连接到节点 inode,它包括各种目录信息,还指向了 inode 和超级块。
            就像一本书有封面、目录和正文一样。在文件系统中,超级块就相当于封面,从封面可以得知这本书的基本信息; inode 块相当于目录,从目录可以得知各章节内容的位置;而数据块则相当于书的正文,记录着具体内容。
             Linux正统的文件系统(如ext2、3等)将硬盘分区时会划分出超级块、inode Table区块和data block数据区域。一个文件由一个超级块、inode和数据区域块组成。Inode包含文件的属性(如读写属性、owner等,以及指向数据块的指针),数据区域块则是文件内容。当查看某个文件时,会先从inode table中查出文件属性及数据存放点,再从数据块中读取数据。


      我们将 inode 与 block 区块用图解来说明一下,如下图所示,文件系统先格式化出 inode 与 block 的区块,假设某一个文件的属性与权限数据是放置到 inode 4 号(下图较小方格内),而这个 inode 记录了文件数据的实际放置点为 2, 7, 13, 15 这四个 block 号码,此时我们的操作系统就能够据此来排列磁盘的阅读顺序,可以一口气将四个 block 内容读出来! 那么数据的读取就如同下图中的箭头所指定的模样了。


    这种数据存取的方法我们称为索引式文件系统(indexed allocation)那有没有其他的惯用文件系统可以比较一下啊? 有的,那就是我们惯用的闪盘(闪存),闪盘使用的文件系统一般为 FAT 格式。FAT 这种格式的文件系统并没有 inode 存在,所以 FAT 没有办法将这个文件的所有 block 在一开始就读取出来。每个 block 号码都记录在前一个 block 当中, 其读取方式有点像下图所示:


    上图中我们假设文件的数据依序写入1->7->4->15号这四个 block 号码中, 但这个文件系统没有办法一口气就知道四个 block 的号码,他得要一个一个的将 block 读出后,才会知道下一个 block 在何处。 如果同一个文件数据写入的 block 分散的太过厉害时,则我们的磁盘读取头将无法在磁盘转一圈就读到所有的数据, 因此磁盘就会多转好几圈才能完整的读取到这个文件的内容!

        常常会听到所谓的“碎片整理”吧 需要碎片整理的原因就是文件写入的 block 太过于离散了,此时文件读取的效能将会变的很差所致。 这个时候可以透过碎片整理将同一个文件所属的 blocks 汇整在一起,这样数据的读取会比较容易啊! 想当然尔,FAT 的文件系统需要经常的碎片整理一下,那么 Ext2 是否需要磁盘重整呢?

        由于 Ext2 是索引式文件系统,基本上不太需要常常进行碎片整理的。但是如果文件系统使用太久, 常常删除/编辑/新增文件时,那么还是可能会造成文件数据太过于离散的问题,此时或许会需要进行重整一下的。 不过,老实说,鸟哥倒是没有在 Linux 操作系统上面进行过 Ext2/Ext3 文件系统的碎片整理说!似乎不太需要啦!^_^

      可以用ln命令对一个已经存在的文件再建立一个新的连接,而不复制文件的内容。连接有软连接和硬连接之分,软连接又叫符号连接。它们各自的特点是:
      硬连接:原文件名和连接文件名都指向相同的物理地址。目录不能有硬连接;硬连接不能跨越文件系统(不能跨越不同的分区)文件在磁盘中只有一个拷贝,节省硬盘空间;

      由于删除文件要在同一个索引节点属于唯一的连接时才能成功,因此可以防止不必要的误删除。
      符号连接:用ln -s命令建立文件的符号连接符号连接是linux特殊文件的一种,作为一个文件,它的数据是它所连接的文件的路径名。类似windows下的快捷方式。

      可以删除原有的文件而保存连接文件,没有防止误删除功能。

      这一段的的内容过于抽象,又是节点又是数组的,我已经尽量通俗再通俗了,又不好加例子作演示。大家如果还是云里雾里的话,我也没有什么办法了,只有先记住,日后在实际应用中慢慢体会、理解了。这也是我学习的一个方法吧。 

       

    3.6 文件系统在内核中的表示

    内核数据结构

    Linux内核的VFS子系统可以图示如下


    文件与IO: 每个进程在PCB(Process Control Block)中都保存着一份文件描述符表,文件描述符就是这个表的索引,每个表项都有一个指向已打开文件的指针,现在我们明确一下:已打开的文件在内核中用file结构体表示,文件描述符表中的指针指向file结构体。

     

    在file结构体中维护File Status Flag(file结构体的成员f_flags)和当前读写位置(file结构体的成员f_pos)。在上图中,进程1和进程2都打开同一文件,但是对应不同的file结构体,因此可以有不同的File Status Flag和读写位置。file结构体中比较重要的成员还有f_count,表示引用计数(Reference Count),后面我们会讲到,dup、fork等系统调用会导致多个文件描述符指向同一个file结构体,例如有fd1和fd2都引用同一个file结构体,那么它的引用计数就是2,当close(fd1)时并不会释放file结构体,而只是把引用计数减到1,如果再close(fd2),引用计数就会减到0同时释放file结构体,这才真的关闭了文件。

     

    每个file结构体都指向一个file_operations结构体,这个结构体的成员都是函数指针,指向实现各种文件操作的内核函数。比如在用户程序中read一个文件描述符,read通过系统调用进入内核,然后找到这个文件描述符所指向的file结构体,找到file结构体所指向的file_operations结构体,调用它的read成员所指向的内核函数以完成用户请求。在用户程序中调用lseek、read、write、ioctl、open等函数,最终都由内核调用file_operations的各成员所指向的内核函数完成用户请求。file_operations结构体中的release成员用于完成用户程序的close请求,之所以叫release而不叫close是因为它不一定真的关闭文件,而是减少引用计数,只有引用计数减到0才关闭文件。对于同一个文件系统上打开的常规文件来说,read、write等文件操作的步骤和方法应该是一样的,调用的函数应该是相同的,所以图中的三个打开文件的file结构体指向同一个file_operations结构体。如果打开一个字符设备文件,那么它的read、write操作肯定和常规文件不一样,不是读写磁盘的数据块而是读写硬件设备,所以file结构体应该指向不同的file_operations结构体,其中的各种文件操作函数由该设备的驱动程序实现。

     

    每个file结构体都有一个指向dentry结构体的指针,“dentry”是directory entry(目录项)的缩写。我们传给open、stat等函数的参数的是一个路径,例如/home/akaedu/a,需要根据路径找到文件的inode。为了减少读盘次数,内核缓存了目录的树状结构,称为dentry cache,其中每个节点是一个dentry结构体,只要沿着路径各部分的dentry搜索即可,从根目录/找到home目录,然后找到akaedu目录,然后找到文件a。dentry cache只保存最近访问过的目录项,如果要找的目录项在cache中没有,就要从磁盘读到内存中。

     

    每个dentry结构体都有一个指针指向inode结构体。inode结构体保存着从磁盘inode读上来的信息。在上图的例子中,有两个dentry,分别表示/home/akaedu/a和/home/akaedu/b,它们都指向同一个inode,说明这两个文件互为硬链接。inode结构体中保存着从磁盘分区的inode读上来信息,例如所有者、文件大小、文件类型和权限位等。每个inode结构体都有一个指向inode_operations结构体的指针,后者也是一组函数指针指向一些完成文件目录操作的内核函数。和file_operations不同,inode_operations所指向的不是针对某一个文件进行操作的函数,而是影响文件和目录布局的函数,例如添加删除文件和目录、跟踪符号链接等等,属于同一文件系统的各inode结构体可以指向同一个inode_operations结构体。

     

    inode结构体有一个指向super_block结构体的指针。super_block结构体保存着从磁盘分区的超级块读上来的信息,例如文件系统类型、块大小等。super_block结构体的s_root成员是一个指向dentry的指针,表示这个文件系统的根目录被mount到哪里,在上图的例子中这个分区被mount到/home目录下。

     

    file、dentry、inode、super_block这几个结构体组成了VFS的核心概念。对于ext2文件系统来说,在磁盘存储布局上也有inode和超级块的概念,所以很容易和VFS中的概念建立对应关系。而另外一些文件系统格式来自非UNIX系统(例如Windows的FAT32、NTFS),可能没有inode或超级块这样的概念,但为了能mount到Linux系统,也只好在驱动程序中硬凑一下,在Linux下看FAT32和NTFS分区会发现权限位是错的,所有文件都是rwxrwxrwx,因为它们本来就没有inode和权限位的概念,这是硬凑出来的。


    3.6  挂载文件系统

      linux系统中每个分区都是一个文件系统,都有自己的目录层次结构。linux会将这些分属不同分区的、单独的文件系统按一定的方式形成一个系统的总的目录层次结构。这里所说的“按一定方式”就是指的挂载。

         将一个文件系统的顶层目录挂到另一个文件系统的子目录上,使它们成为一个整体,称为挂载。把该子目录称为挂载点.

       例如要读取硬盘中的一个格式化好的分区、光盘或软件等设备时,必须先把这些设备对应到某个目录上,而这个目录就称为“挂载点(mount point)”,这样才可以读取这些设备。 挂载后将物理分区细节屏蔽掉,用户只有统一的逻辑概念。所有的东西都是文件。

    注意:1、挂载点必须是一个目录。
         2、一个分区挂载在一个已存在的目录上,这个目录可以不为空,但挂载后这个目录下以前的内容将不可用。
           对于其他操作系统建立的文件系统的挂载也是这样。但是需要理解的是:光盘、软盘、其他操作系统使用的文件系统的格式与linux使用的文件系统格式是不一样的。光盘是ISO9660;软盘是fat16或ext2;windows NT是fat16、NTFS;windows98是fat16、fat32;windows2000和windowsXP是fat16、fat32、 NTFS。挂载前要了解linux是否支持所要挂载的文件系统格式。
      挂载时使用mount命令,其格式:mount [-参数] [设备名称] [挂载点]
      其中常用的参数有

      -t 指定设备的文件系统类型(什么提到的文件类型)
      -o 指定挂载文件系统时的选项。有些也可用在/etc/fstab中。常用的有
      codepage=XXX 代码页
      iocharset=XXX 字符集
      ro 以只读方式挂载
      rw 以读写方式挂载
      nouser 使一般用户无法挂载

      user 可以让一般用户挂载设备

    例如:

    1. 挂载windows的文件系统:
    1)首先我们使用sudo fdisk -l查看挂载的设备,例如最下面有:/dev/hda5 
    2)mkdir创建一个目录,这里的目录是作为挂在目录,就是你要把E盘挂到这个目录下:mk /mnt/winc
    3)windows和linux使用的不是一个文件系统,一般情况下linux不挂载windows文件系统,所以要你手动mount:
        # mount -t vfat /dev/hda5 /mnt/winc  ( -t vfat指出这里的文件系统fat32)
        现在就可以进入/mnt/winc等目录读写这些文件了。
     2.挂载光盘:# mk /mnt/cdrom
              # mount -t iso9660 /dev/cdrom /mnt/cdrom (关盘的名字一般都是cdrom,这条命令一般都通用)
    3.虚拟机共享文件夹:例如在VirtualBox下,主机是Windows,Ubuntu是Guest。共分三步:
          1). 首先要安装虚拟电脑工具包:在VirtualBox的菜单里选择"设备"->"安装虚拟电脑工具包",你会发现在Ubuntu桌面上多出一个光盘图标,这张光盘默认被自动加载到了文件夹/media/cdom0,而且/cdrom自动指向这个文件夹。默认设置下文件管理器会自动打开这张光盘,可以看到里面有个"VBoxLinuxAdditions.run"文件。打开一个命令行终端,依次输入"cd /cdrom"和"sudo sh ./VBoxLinuxAdditions.run",不含双引号,开始安装工具包。安装完毕,会用英文提示要重启Ubuntu,建议立刻重启。重启后,比较明显的变化是鼠标是共享模式,并且剪贴板也和Windows共享了。如果有这些变化,说明虚拟电脑工具包已经装成功。
          2). 下一步设置共享文件夹。
         在共享文件夹设置窗口中,单击右侧的"添加一个共享文件夹",路径选择你想要共享的Windows文件夹,共享名任取一个自己喜欢的,比如"myshare",选项read-only是指是否只允许ubuntu读这个文件夹,请根据需要选择这个选项。
          3). 在ubuntu下挂载这个共享文件夹:sudo mount -t vboxsf myshare /media/share
          其中"myshare"是之前取的共享文件夹的名字,"/media/share"是要挂载到的目标文件.

    3.7  自动挂载windows分区

      每次开机访问windows分区都要运行mount命令显然太烦琐,为什么访问其他的linux分区不用使用mount命令呢?
      其实,每次开机时,linux自动将需要挂载的linux分区挂载上了。那么我们是不是可以设定让linux在启动的时候也挂载我们希望挂载的分区,如windows分区,以实现文件系统的自动挂载呢?
      这是完全可以的。在/etc目录下有个fstab文件,它里面列出了linux开机时自动挂载的文件系统的列表。我的/etc/fstab文件如下:
      /dev/hda2 / ext3 defaults 1 1
      /dev/hda1 /boot ext3 defaults 1 2
      none /dev/pts devpts gid=5,mode=620 0 0
      none /proc proc defaults 0 0
      none /dev/shm tmpfs defaults 0 0
      /dev/hda3 swap swap defaults 0 0
      /dev/cdrom /mnt/cdrom iso9660 noauto,codepage=936,iocharset=gb2312 0 0
      /dev/fd0 /mnt/floppy auto noauto,owner,kudzu 0 0
      /dev/hdb1 /mnt/winc vfat defaults,codepage=936,iocharset=cp936 0 0
      /dev/hda5 /mnt/wind vfat defaults,codepage=936,iocharset=cp936 0 0
      在/etc/fstab文件里,第一列是挂载的文件系统的设备名,第二列是挂载点,第三列是挂载的文件系统类型,第四列是挂载的选项,选项间用逗号分隔。第五六列不知道是什么意思,还望高手指点。
      在最后两行是我手工添加的windows下的C;D盘,加了codepage=936和iocharset=cp936参数以支持中文文件名。参数defaults实际上包含了一组默认参数:
      rw 以可读写模式挂载
      suid 开启用户ID和群组ID设置位
      dev 可解读文件系统上的字符或区块设备
      exec 可执行二进制文件
      auto 自动挂载
      nouser 使一般用户无法挂载
      async 以非同步方式执行文件系统的输入输出操作

      大家可以看到在这个列表里,光驱和软驱是不自动挂载的,参数设置为noauto。(如果你非要设成自动挂载,你要确保每次开机时你的光驱和软驱里都要有盘,呵呵。)

    3.8 .软连接、硬链接

        可以用ln命令对一个已经存在的文件再建立一个新的连接,而不复制文件的内容。连接有软连接和硬连接之分,软连接又叫符号连接。它们各自的特点是:
      硬连接:是给文件一个副本,原文件名和连接文件名都指向相同的物理地址。目录不能有硬连接;硬连接不能跨越文件系统(不能跨越不同的分区)文件在磁盘中只有一个拷贝,节省硬盘空间;

              修改其中一个,与其连接的文件同时被修改。如果删除其中任意一个其余的文件将不受影响。
      由于删除文件要在同一个索引节点属于唯一的连接时才能成功,因此可以防止不必要的误删除。
      符号连接(软连接):用ln -s命令建立文件的符号连接符号连接是linux特殊文件的一种,作为一个文件,它的数据是它所连接的文件的路径名。类似windows下的快捷方式。

      当然删除这个连接,也不会影响到源文件,但对连接文件的使用、引用都是直接调用源文件的。

          具体关系可以看下图:



     从图上可以看出硬链接和软链接的区别:

    1:硬链接原文件和新文件的inode编号一致。而软链接不一样。

    2:对原文件删除,会导致软链接不可用,而硬链接不受影响。

    3:对原文件的修改,软、硬链接文件内容也一样的修改,因为都是指向同一个文件内容的。

    3.9.文件目录管理命令

    磁盘和文件空间 :fdisk df du

    文件目录与管理: cd pwd mkdir rmdir ls cp rm mv

    查看文件内容 cat、tac、more、less、head 、tail

    文件目录与权限 :chmod chown chgrp umask

    文件查找:which、whereis、locate、find、find 


     3 . 4. linux 应用

    标准的Linux系统一般都有一套都有称为应用程序的程序集,它包括文本编辑器、编程语言、X Window、办公套件、Internet工具和数据库等。


    . 4. 5. linux内核参数优化

    内核参数是用户和系统内核之间交互的一个接口,通过这个接口,用户可以在系统运行的同时动态更新内核配置,而这些内核参数是通过Linux Proc文件系统存在的。因此,可以通过调整Proc文件系统达到优化Linux性能的目的。




    展开全文
  • 本文摘自知乎。 作者:Raynor ...来源:知乎 著作权归作者所有,转载请联系作者获得授权。计算机组成原理 这门学科告诉你什么是计算机。...首先,我们可以把计算机分解成最原始的部件——晶体管。晶体管是一种半导体...
  • Windows操作系统架构

    千次阅读 2019-07-03 00:30:01
    用户态 用户态有四类组件,这四类组件都是以进程形式存在的,也...这些是固化的进程,也就是说是操作系统结合在一起的进程。 比如logon process(winlogon.exe),Session manager(smss.exe)。 Session Manage...
  • 操作系统的体系结构

    2020-10-18 15:39:51
    大内核和微内核
  • 操作系统结构

    2020-03-20 15:59:50
    1 无结构操作系统 2 模块化操作系统 3层次化操作系统 4 微内核结构
  • 文章目录一:什么是操作系统操作系统的定义:操作系统的...实时处理系统实时处理系统的特点:实时处理系统的缺点:操作系统产品现状:三:操作系统的特征四:操作系统的功能五:操作系统的体系结构六:指令的执行 ...
  • 操作系统结构及其特点

    千次阅读 2010-03-24 10:43:00
  • 操作系统知识结构

    千次阅读 多人点赞 2017-12-28 19:45:32
    本学期学了操作系统,复习之后整理了相关知识结构图,顿时有茅塞顿开的感觉。在此献上我的整理以飨各位,有不足之处还望斧正/共同探讨 1. 概览2. 结构图下载2.1 文件说明:上面的截图只是冰山一角,每个节点都可以...
  • 必看书籍:剑指offer、程序员面试宝典 来自:腾讯、搜狐、网易、烽火、百度、大众点评、美团、风行 1. 死锁是什么?什么情况下产生?怎么解决? 2.&...设计模式(尤其是单例模式,要会写该模式的程序框架...
  • java实现的简单文件管理系统

    万次阅读 热门讨论 2009-09-16 14:51:00
    <!-- @page { size: 21cm 29.7cm; margin: 2cm } P { margin-bottom: 0.21cm }-->.设计一个文件管理方案,模拟一个...通过该实验是学生可以深刻理解文件系统的概念、所涉及的基本操作及实现时的主要数据结构。 
  • 单片机上操作系统的好处

    万次阅读 2019-04-02 09:24:27
    自己在上学的时候,搞过2年的单片机STM32编程,当时还记得一心想在上面跑个操作系统,UCOS操作系统,但是当时自己为什么要上这个操作系统,不是特别的清楚,后来自己在实际工作中,做了应用软件,感觉有了一些深刻的...
  • B/S结构简介

    万次阅读 2007-07-26 20:56:00
    B/S结构,即Browser/Server(浏览器/服务器)结构,是随着Internet技术的兴起,对C/S结构的一种变化或者改进的结构。在这种结构下,用户界面完全通过WWW浏览器实现,一部分事务逻辑在前端实现,但是主要事务逻辑在...
  • iOS学习笔记(三)——iOS系统架构

    万次阅读 多人点赞 2013-07-01 20:36:46
    iOS的系统架构分为四个层次:核心操作系统层(Core OS layer)、核心服务层(Core Services layer)、媒体层(Media layer)和可触摸层(Cocoa Touch layer)。下面是IOS系统结构图。iOS结构图 1、Core OS是位于iOS...
  • linux系统组成及结构

    万次阅读 多人点赞 2018-05-24 22:29:17
    内核、shell和文件系统一起形成了基本的操作系统结构,它们使得用户可以运行程序、管理文件并使用系统。部分层次结构如图1-1所示。 1. linux内核 内核是操作系统的核心,具有很多最基本功能,它负责管理系统的进程...
  • 嵌入式系统是专用计算机应用系统,它具有一般计算机组成的共性,也是由硬件和软件组成。本文完整地描述了嵌入式系统的软硬件各部分的组成结构。 嵌入式系统的硬件基本结构 嵌入式系统的硬件架构,是以嵌入式处理器...
  • 一、文件的物理结构 文件的物理结构又称为文件的存储结构,它是指文件在外存上的存储组织形式,是与存储介质的存储性能有关。常用的物理结构有连续文件结构、串联文件结构、索引文件结构三种。 二、文件的三种...
  • 操作系统概论【五】- - 文件系统

    千次阅读 多人点赞 2020-09-08 16:57:52
    接上一篇:操作系统概论【四】- - 内存管理 文章目录第五章、文件系统一、文件1. 文件命名2. 文件结构3. 文件类型4. 文件存取5. 文件属性6. 文件操作二、目录1. 目录文件的结构2. 目录结构3. 路径名4. 目录操作三、...
1 2 3 4 5 ... 20
收藏数 1,793,287
精华内容 717,314
关键字:

操作系统结构