精华内容
下载资源
问答
  • 怎样理解Linux的文件系统

    千次阅读 2015-08-19 15:19:47
    怎样理解Linux的文件系统  Linux所有文件都从root开始,用'/'代表, 并且延伸到子目录。DOS/Windows有不同的分区同时目录都存于分区上。Linux则通过'加载'的方式把所有分区都放置在root下制定的目录里。...
    
    
     怎样理解Linux的文件系统
     Linux所有文件都从root开始,用'/'代表, 并且延伸到子目录。DOS/Windows有不同的分区同时目录都存于分区上。Linux则通过'加载'的方式把所有分区都放置在root下制定的目录里。windows下最接近于root的是c:。

    一句话总结:Windows下,目录结构属于分区;Linux下,分区属于目录结构。

    在windows下, 启动时检测不同的分区并被赋予一个分区字母。在Linux下除非你加载一个分区或设备,否则系统不会知道那个分区的存在。这看上去也许不是访问分区或设备的最方便的方式,但他提供了伟大的机动性。

    这种构建的方式被称为统一的文件系统,超越了windows所使用的方式。举个使用/usr的例子。这个目录包含了大多数的系统可执行文件。在Linux文件系统下,你可以选择把它加载为其他分区甚至网络上的其他计算机。系统不会感知其中的不同,因为它表现出的只是本地目录结构下众多的目录中的一个而已。有多少次你希望在windows下移动可执行文件和数据,而得到的是不得不去修改注册表或干脆蓝屏?你可曾奢望过移动c:到其他分区上?

    新手容易困惑的另一点是斜杠'/'的使用,在DOS/Windows下使用的是反斜杠''.

    在Linux中,windows的c是用类似/c/windows/system来表示的。Linux是免费的系统。在windows之前,Unix已经存在了很久。从DOS开始使用'/'选项而''作为目录分隔符。

    更加麻烦的是Linux同样选择了大小写敏感。这意味着字母的大小写变得非常重要。所以在这种情况下THIS和ThIs是不同的。这个规定会使dos用户遇到很多麻烦。

    现在我们来看一看Linux文件系统目录结构的规划。下面是在root下'ls -p'的结果:

    代码:

    bin/ dev/ home/ lost+found/ proc/ sbin/ usr/ boot/ etc/ lib/ mnt/ root/ tmp/ var/

    /sbin

    这个目录包含了所有使系统运行的关键二进制可执行文件。包含了系统管理和维护硬件配置的程序。你可以在这里找到lilo, fdisk, init, ifconfig等等。

    这里有所有用户都需要的关键程序。

    /usr/sbin

    另一个包含系统可执行文件的目录。这个目录包含了系统管理员使用的一些其他程序。这里你可以找网络守护程序以及一些不需要维护和修理系统的管理员所使用的程序。

    /bin

    相对于/sbin, bin目录包含一些系统管理员和普通用户都可以使用的命令。这个目录通常包含诸如bash, csh等shell,以及诸如cp, mv, rm, cat, ls等非常有用的命令。这些命令对于用户来说是不可缺少的。

    /usr/bin

    包含一些其它的用户命令。从另一方面看,这些命令本质上并不是为用户准备的。

    /boot

    这个目录包含system.map文件以及Linux kernel。Lilo将启动扇区的备份放在这里。

    /dev

    这是一个非常有趣的目录,是Linux文件系统的一个闪亮的特性 - 所有对象都是文件或目录。仔细观察这个目录你会发现hda1, hda2等, 它们代表系统主硬盘的不同分区。/dev/cdrom和/dev/fd0代表你的CDROM驱动器和floppy驱动器。看上去可能有些奇怪,但比较文件和硬件的特性这却是十分合理的。它们都可以读出和写入。例如/dev/dsp,这个文件代笔你的扬声器。那么写入这个文件的数据都回传送到喇叭。试一试 'cat /etc/lilo.conf > /dev/dsp' 你会听到一些声音。这是你的 lilo.conf 文件的声音!同样,向 /dev/ttyS0 ( COM 1 ) 读出或写入数据你可以和接到上面的设备进行通讯。

    /home

    Linux 是多用户环境,所以每一个用户都有一个只有自己可以访问的目录(当然管理员也可以访问)。它们以 /home/username 的方式存在。这个目录也保存一些应用对于这个用户的配置,比如 IRC, X 等。

    /lib

    这里包含了系统程序所需要的所有共享库文件,类似于 Windows 的共享库 DLL 文件。

    /lost+found

    Linux 应该正确的关机。但有时你的系统也可能崩溃掉或突然断电使系统意外关机。那么启动的时候 fsch 将会进行长时间的文件系统检查。Fsck 会检测并试图恢复所发现的不正确的文件。被恢复的文件会放置在这个目录中。所恢复的文件也许并不完整或并不合理,但毕竟提供了一些恢复数据的机会。

    /mnt

    这是一个普通的加载目录,在这里你可以加载你的文件系统或设备。

    加载是使一个文件系统对于系统可用的过程。

    在加载后你的文件可以在加载目录下访问。

    这个目录通常包含加载目录或用于加载软驱和光驱的子目录。

    如果需要,你也可以在这里建立其它的加载目录。

    对于加载目录的位置并没有强制性的要求,你可以在系统的任意位置建立加载目录。

    建立 /mnt 只是为了使系统更工整的惯例。

    /opt

    这个目录包含所有默认系统安装之外的软件和添加的包。一般来说你可以在这里找到 KDE 和 StarOffice 。这个目录一般并不会经常被启用,这是Unix系统安装的标准。

    /proc

    这是系统中极为特殊的一个目录,实际上任何分区上都不存在这个目录。它实际是个实时的、驻留在内存中的文件系统。详细信息请参阅 /root

    这是root的用户用户目录。

    /tmp

    这里包含大多数要用到的临时文件。

    许多程序在这里建立lock文件和存储临时数据。有些系统会在启动或关机时清空此目录。

    /usr

    这是系统中很重要的一个目录,这里包含所有用户的二进制文件。

    X,及其库文件,用户程序比如 telnet, ftp 等等都在这里。

    /usr/doc包含系统文档。/usr/src/Linux包含 Linux kernel 的源码。

    /var

    这里存储假脱机(spooling)数据,比如 mail 以及打印机守护的输出。

    系统日志也存放在这里。你还可以在/var/named下找到BIND的数据库,在/var/yp下找到NIS的数据库。

    以上就是Linux文件系统的一些基本命令和存储目录,一句话总结:Windows下,目录结构属于分区;Linux下,分区属于目录结构。

    展开全文
  • 操作系统理解

    千次阅读 2013-12-18 10:54:31
    操作系统理解操作系统理解操作系统理解操作系统理解操作系统理解操作系统理解

    1、在单核计算机里,有一个资源是无法被多个程序并行使用的:cpu。

    没有操作系统的情况下,一个程序一直独占着全都cpu。

    如果要有两个任务来共享同一个CPU,程序员就需要仔细地为程序安排好运行计划--某时刻cpu和由程序A来独享,下一时刻cpu由程序B来独享

    而这种安排计划后来成为OS的核心组件,被单独名命为“scheduler”,即“调度器”,它关心的只是怎样把单个cpu的运行拆分成一段一段的“运行片”,轮流分给不同的程序去使用,而在宏观上,因为分配切换的速度极快,就制造出多程序并行在一个cpu上的假象。

    2、在单核计算机里,有一个资源可以被多个程序共用,然而会引出麻烦:内存。

    在一个只有调度器,没有内存管理组件的操作系统上,程序员需要手工为每个程序安排运行的空间 -- 程序A使用物理地址0x00-0xff,程序B使用物理地址0x100-0x1ff,等等。

    然而这样做有个很大的问题:每个程序都要协调商量好怎样使用同一个内存上的不同空间,软件系统和硬件系统千差万别,使这种定制的方案没有可行性。
    为了解决这个麻烦,计算机系统引入了“虚拟地址”的概念,从三方面入手来做:

    2.1、硬件上,CPU增加了一个专门的模块叫MMU,负责转换虚拟地址和物理地址。
    2.2、操作系统上,操作系统增加了另一个核心组件:memory management,即内存管理模块,它管理物理内存、虚拟内存相关的一系列事务。
    2.3、应用程序上,发明了一个叫做【进程】的模型,(注意)每个进程都用【完全一样的】虚拟地址空间,然而经由操作系统和硬件MMU协作,映射到不同的物理地址空间上。不同的【进程】,都有各自独立的物理内存空间,不用一些特殊手段,是无法访问别的进程的物理内存的。

    3、现在,不同的应用程序,可以不关心底层的物理内存分配,也不关心CPU的协调共享了。然而还有一个问题存在:有一些程序,想要共享CPU,【并且还要共享同样的物理内存】,这时候,一个叫【线程】的模型就出现了,它们被包裹在进程里面,在调度器的管理下共享CPu,拥有同样的虚拟地址空间,同时也共享同一个物理地址空间,然而,它们无法越过包裹自己的进程,去访问别一个进程的物理地址空间。

    4、进程之间怎样共享同一个物理地址空间呢?不同的系统方法各异,符合posix规范的操作系统都提供了一个接口,叫mmap,可以把一个物理地址空间映射到不同的进程中,由不同的进程来共享。

    5、PS:在有的操作系统里,进程不是调度单位(即不能被调度器使用),线程是最基本的调度单位,调度器只调度线程,不调度进程,比如VxWorks

    传统进程相当于一个线程的任务。通常一个进程都拥有若干个线程,至少有一个线程。

    调度:传统中:进程是拥有资源的基本单位和独立调度分配的基本单位。引入线程后:线程作为调度和分派的基本单位,进程作为资源拥有的基本单位。线程基本上不再拥有资源,提高系统的并发程度。通过一个进程中的线程切换不会引起进程的切换,但是一个进程中的线程切换到另一个进程中的线程时将会引起进程的切换。

    并发性:在引入线程的操作系统中,不仅进程之间可以并发执行,而且在一个进程中的多个线程之间也可以并发执行,从而提高系统资源的利用率和吞吐量。

    拥有资源:进程都可以拥有资源,是系统中拥有资源的基本单位,线程自己不拥有系统资源,但是可以访问隶属进程的资源,即一个进程的代码段,数据段及拥有的系统资源

    系统开销:创建和撤销进程时,系统都要为之创建和回收进程控制块,分配或回收资源,如内存空间和I/O设备等,操作系统所付出的开销明显大于线程创建和撤销时的开销。进程的切换 涉及进程CPU环境的保存及新被调度运行进程的CPU环境设置,现成的切换仅需保存和设置少量寄存器内容,不涉及存储器管理方面的操作。同时同一个进程中的多个线程具有相同的地址空间,在同步和通信的实现方面线程也比进程容易。

     

    线程属性:轻型实体,不拥有系统资源,但是有必不可少的,保证其独立运行的资源(控制线程运行的线程控制块TCB,用于指示被执行指令序列的程序计数器,保留局部变量,少数状态参数和返回地址等的一组寄存器和堆栈);独立调度和分派的基本单位:在多线程OS中,线程是独立运行的基本单位也是独立调度和分派的基本单位;可并发执行:在一个进程中的多个线程之间可并发,不同进程中的线程也能并发;共享进程资源:可以访问进程的每个地址,以及进程所拥有的已打开的文件,定时器,信号量机构等。

    线程的状态:执行,就绪,阻塞

     

    大多数的线程在中止后并不立即释放所占用资源,只有当进程的其他线程执行了分离函数后被终止的线程才与资源分离,此时的资源才能与资源分离。此时的资源才能被其它线程利用。虽已中止但尚未释放资源的线程,仍可以被需要它额线程所调用,以使被终止线程重新恢复运行。调用者须调用条“等待线程终止”的连接命令,来与线程进行连接。

     

    内核支持线程:内核能够同时调用同一个进程中的多个线程并行执行;如果进程中的一个线程被阻塞了,内核可以调度进程中的其他线程战友处理器运行,也可以运行其他进程中的线程;支持具有很小的数据结构和堆栈,现成的切换和开销小;内核本身为多线程技术,提高系统的执行效率和速度。缺点:模式切换开销大,同一个进程中一个线程切换到另一个进程需要从用户态转换到内核态执行,线程调度和管理是内核实现的系统开销较大。

    用户级线程:系统的调度仍是以进程为单位进行,线程切换不需要转换到内核空间,对已个进程而言,所有线程管理数据结构均在该进程的用户空间中。节省内核宝贵资源;调度算法可以是进程专用的,不干扰系统调度;用户级线程的实现与操作系统平台无关。缺点:系统调用的阻塞问题,当一个线程阻塞时,该进程的所有其他线程也阻塞,而内核支持线程则进程中的其他线程仍然可以运行;单纯的用户级线程实现方式中,多线程应用不能利用多处理机进行多重处理的优点,内核每次分给一个进程仅一个CPU,进程中仅一个线程能够执行。

    组合方式:有些操作系统把用户级线程和内核支持线程进行组合。ULT/KST


    展开全文
  • 分布式系统理解

    万次阅读 多人点赞 2017-07-14 16:22:52
    1. 如何理解“分布式”?  经常听到”分布式系统“,”分布式计算“,”分布式算法“。分布式的具体含义是什么?狭义的分布是指,指多台PC在地理位置上分布在不同的地方。 2. 分布式系统  分布式系统:...
    1. 如何理解“分布式”?

         经常听到”分布式系统“,”分布式计算“,”分布式算法“。分布式的具体含义是什么?狭义的分布是指,指多台PC在地理位置上分布在不同的地方。

    2. 分布式系统

        分布式系统:多个能独立运行的计算机(称为结点)组成。各个结点利用计算机网络进行信息传递,从而实现共同的“目标或者任务”。

        分布式程序: 运行在分布式系统上的计算机程序。

        分布式计算:利用分布式系统解决来计算问题。在分布式计算里,一个问题被细化成多个任务,每个任务可以被一个或者多个计算机来完成。

        区分分布式计算和并行计算:共同点都是大任务划分为小任务。不同点: 分布式计算:基于多台PC,每台PC完成同一任务中的不同部分。分布式的计算被分解后的小任务互相之间有独立性,节点之间的结果几乎不互相影响,实时性要求不高。并行计算:基于同一个台PC,利用CPU的多核共同完成一个任务。

    1)分布式操作系统

          分布式操作系统:负责管理分布式处理系统资源和控制分布式程序运行。它和集中式操作系统的区别在于资源管理进程通信系统结构等方面。

    2)分布式文件系统

           分布式文件系统具有执行远程文件存取的能力,并以透明方式对分布在网络上的文件进行管理和存取。

    3)分布式程序设计和编译解释系统

          分布式程序设计语言用于编写运行于分布式计算机系统上的分布式程序。一个分布式程序由若干个可以独立执行的程序模块组成,它们分布于一个分布式处理系统的多台计算机上被同时执行。它与集中式的程序设计语言相比有三个特点:分布性、通信性和稳健性

         分层应用程序可以按层数进行划分,信息可以从数据层(通常存储在数据库)传送到表现层(显示在客户端上)。通常每层相对于其他层来说都运行在不同的系统中,或者在同一系统中的不同进程空间里。分层好处:减小整个应用程序的复杂性;使应用程序能够更好的扩展,跟得上企业发展的需要。 

    •        两层应用程序: 典型的结构,一个客户端的用户PC(前端);一个包含数据库的网络服务器(后端)。逻辑上根据两者的物理位置划分。通常客户端包含大部分业务逻辑,随着数据库及存储过程的发展,SQL语言允许业务逻辑在数据库服务器中存储并执行。 
    •        三层应用程序:目前最常用的是三层应用程序结构,包含一个用户服务层(表现层),一个业务服务层和一个数据服务层。业务逻辑层从用户界面和数据源中分离出来。 由于两层应用程序即客户端/服务器端结构的功能限制,分布式应用程序通常分为三层或者更多层。每层的组件都执行一个特定类型的处理。
    3)分布式数据库

    之我见:分布式数据库,由分布在不同地方(地理位置上的分布)的多个数据库(称为站点)连接(基于计算机网络来连接)而成。利用分布式DBMS对各个站点统一管理,各个站点逻辑上统一起来。基于数据分布的透明性,仿佛在管理单个站点上的数据。其优点在于:容错,提高访问速度。

    wiki官方解释: 分布式数据库是用计算机网络将物理上分散的多个数据库单元连接起来组成的一个逻辑上统一的数据库。每个被连接起来的数据库单元称为站点或结点。分布式数据库有一个统一的数据库管理系统来进行管理,称为分布式数据库管理系统。

     分布式数据库的基本特点包括:物理分布性、逻辑整体性和站点自治性。从这三个基本特点还可以导出的其它特点有:数据分布透明性、集中与自治相结合的控制机制、适当的数据冗余度和事务管理的分布性。分布式数据库按照各站点中数据库管理系统的数据模型的异同分为异构型分布式数据库和同构型分布式数据库,按照控制系统的类型分为全局控制集中性、全局控制分散型和全局控制可变型

    3. Hadoop , HDFS, HBase, Hive

    之我见:  

         Hadoop是一个分布式系统基础框架,基于这个框架开发分布式应用程序,利用集群的高速运算和存储的威力。类似于,基于NVIDIA 的 CUDA并行架构开发并行程序,发挥GPU的并行计算能力。

         HDFS是hadoop的文件系统。基于HDFS,你可以对文件进行操作,例如新建,删除,编辑,重命名等。

         Hbase: 基于Hadoop架构的数据库系统。不是关系型数据库,基于列的模式。

         Hive: 基于hbase的高层语言。类似于SQL --- 访问和处理关系型数据库的计算机语言。


    官方解释:

          Hadoop是一个分布式系统基础架构,由Apache基金会开发。用户可以在不了解分布式底层细节的情况下,开发分布式程序。充分利用集群的威力高速运算和存储。

           HDFS(Hadoop Distributed File System)是Hadoop实现的一个分布式文件系统。它存储 Hadoop 集群中所有存储节点上的文件。对外部客户机而言,HDFS 就像一个传统的分级文件系统。可以创建、删除、移动或重命名文件,等等。但是 HDFS 的架构是基于一组特定的节点构建的,存储在 HDFS 中的文件被分成块,然后将这些块复制到多个计算机中(DataNode)。这与传统的 RAID 架构大不相同。块的大小(通常为 64MB)和复制的块数量在创建文件时由客户机决定。NameNode 可以控制所有文件操作。HDFS 内部的所有通信都基于标准的 TCP/IP 协议。

            HBase – Hadoop Database,是一个高可靠性、高性能、面向列、可伸缩的分布式存储系统,利用HBase技术可在廉价PC Server上搭建起大规模结构化存储集群HBase是Apache的Hadoop项目的子项目。HBase不同于一般的关系数据库,它是一个适合于非结构化数据存储的数据库。另一个不同的是HBase基于列的而不是基于行的模式。Hadoop HDFS为HBase提供了高可靠性的底层存储支持,Hadoop MapReduce为HBase提供了高性能的计算能力,Zookeeper为HBase提供了稳定服务和failover机制。此外,Pig和hive还为HBase提供了高层语言支持,使得在HBase上进行数据统计处理变的非常简单。 Sqoop则为HBase提供了方便的RDBMS数据导入功能,使得传统数据库数据向HBase中迁移变的非常方便。HBase的数据模型和存储结构,参考 http://www.searchtb.com/2011/01/understanding-hbase.html

            Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件(例如xml)映射为一张数据库表并提供完整的sql查询功能,可以将sql语句转换为MapReduce任务进行运行。 其优点是学习成本低,可以通过类SQL语句快速实现简单的MapReduce统计,不必开发专门的MapReduce应用,十分适合数据仓库的统计分析。


    分布式计算、并行计算及集群、网格、云计算的区别

    并行计算:并行计算是相对于串行计算来说的。可分为时间上的并行和空间上的并行。 时间上的并行就是指流水线技术,而空间上的并行则是指用多个处理器并发的执行计算。例如基于CUDA编程。并行计算的目的就是提供单处理器无法提供的性能(处理器能力或存储器),使用多处理器求解单个问题

    总结:并行的主体 -- 处理器;进程/线程级并行。



    分布式计算:分布式计算研究如何把一个需要非常巨大的计算能力才能解决的问题分成许多小的部分,然后把这些部分分配给许多计算机进行处理,最后把这些计算结果综合起来得到最终的结果。最近的分布式计算项目已经被用于使用世界各地成千上万位志愿者的计算机的闲置计算能力,通过因特网,可以分析来自外太空的电讯号,寻找隐蔽的黑洞,并探索可能存在的外星智慧生命等。

    总结:并行的主体 -- 计算机;各个计算机并行


    并行计算与分布式计算的区别:(1)简单的理解,并行计算借助并行算法和并行编程语言能够实现进程级并行(如MPI)和线程级并行(如openMP)。而分布式计算只是将任务分成小块到各个计算机分别计算各自执行。(2)粒度方面,并行计算中,处理器间的交互一般很频繁,往往具有细粒度和低开销的特征,并且被认为是可靠的。而在分布式计算中,处理器间的交互不频繁,交互特征是粗粒度,并且被认为是不可靠的。并行计算注重短的执行时间,分布式计算则注重长的正常运行时间。(3)联系,并行计算和分布式计算两者是密切相关的。某些特征与程度(处理器间交互频率)有关,而我们还未对这种交叉点(crossover point)进行解释。另一些特征则与侧重点有关(速度与可靠性),而且我们知道这两个特性对并行和分布两类系统都很重要。(4)总之,这两种不同类型的计算在一个多维空间中代表不同但又相邻的点。


    集群计算:计算机集群使将一组松散集成的计算机软件和/或硬件连接起来高度紧密地协作完成计算工作。在某种意义上,他们可以被看作是一台计算机集群系统中的单个计算机通常称为节点,通常通过局域网连接,但也有其它的可能连接方式。集群计算机通常用来改进单个计算机的计算速度和/或可靠性。一般情况下集群计算机比单个计算机,比如工作站或超级计算机性价比要高得多。根据组成集群系统的计算机之间体系结构是否相同,集群可分为同构与异构两种。集群计算机按功能和结构可以分为,高可用性集群(High-availability (HA) clusters)、负载均衡集群(Loadbalancing clusters)、高性能计算集群(High-performance (HPC)clusters)、网格计算(Grid computing)。
    • 高可用性集群:一般是指当集群中有某个节点失效的情况下,其上的任务会自动转移到其他正常的节点上。还指可以将集群中的某节点进行离线维护再上线,该过程并不影响整个集群的运行。
    • 负载均衡集群:负载均衡集群运行时,一般通过一个或者多个前端负载均衡器将工作负载分发到后端的一组服务器上,从而达到整个系统的高性能和高可用性。这样的计算机集群有时也被称为服务器群(Server Farm)。 一般高可用性集群和负载均衡集群会使用类似的技术,或同时具有高可用性与负载均衡的特点。Linux虚拟服务器(LVS)项目在Linux操作系统上提供了最常用的负载均衡软件。
    • 高性能计算集群: 高性能计算集群采用将计算任务分配到集群的不同计算节点儿提高计算能力,因而主要应用在科学计算领域。比较流行的HPC采用Linux操作系统和其它一些免费软件来完成并行运算。这一集群配置通常被称为Beowulf集群。这类集群通常运行特定的程序以发挥HPC cluster的并行能力。这类程序一般应用特定的运行库, 比如专为科学计算设计的MPI库。HPC集群特别适合于在计算中各计算节点之间发生大量数据通讯的计算作业,比如一个节点的中间结果或影响到其它节点计算结果的情况。

    网格计算:网格计算是分布式计算的一种,也是一种与集群计算非常相关的技术。如果我们说某项工作是分布式的,那么,参与这项工作的一定不只是一台计算机,而是一个计算机网络,显然这种“蚂蚁搬山”的方式将具有很强的数据处理能力。网格计算的实质就是组合与共享资源并确保系统安全。网格计算通过利用大量异构计算机的未用资源(CPU周 期和磁盘存储),将其作为嵌入在分布式电信基础设施中的一个虚拟的计算机集群,为解决大规模的计算问题提供一个模型。网格计算的焦点放在支持跨管理域计算 的能力,这使它与传统的计算机集群或传统的分布式计算相区别。网格计算的目标是解决对于任何单一的超级计算机来说仍然大得难以解决的问题,并同时保持解决 多个较小的问题的灵活性。这样,网格计算就提供了一个多用户环境。


    集群计算与网格计算的区别:(1)简单地,网格与传统集群的主要差别是网格是连接一组相关并不信任的计算机,它的运作更像一个计算公共设施而不是一个独立的计算机。网格通常比集群支持更多不同类型的计算机集合。(2)网格本质上就是动态的,集群包含的处理器和资源的数量通常都是静态的。在网格上,资源则可以动态出现,资源可以根据需要添加到网格中或从网格中删除。(3) 网格天生就是在本地网、城域网或广域网上进行分布的。网格可以分布在任何地方。而集群物理上都包含在一个位置的相同地方,通常只是局域网互连。集群互连技 术可以产生非常低的网络延时,如果集群距离很远,这可能会导致产生很多问题。物理临近和网络延时限制了集群地域分布的能力,而网格由于动态特性,可以提供 很好的高可扩展性。(4)集群仅仅通过增加服务器满足增长的需求。然而,集群的服务器数量、以及由此导致的集群性能是有限的:互连网络容量。也就是说如果一味地想通过扩大规模来提高集群计算机的性能,它的性价比会相应下降,这意味着我们不可能无限制地扩大集群的规模。 而网格虚拟出空前的超级计算机,不受规模的限制,成为下一代Internet的发展方向。(5)集群和网格计算是相互补充的。很多网格都在自己管理的资源中采用了集群。实际上,网格用户可能并不清楚他的工作负载是在一个远程的集群上执行的。尽管网格与集群之间存在很多区别,但是这些区别使它们构成了一个非常重要的关系,因为集群在网格中总有一席之地—— 特定的问题通常都需要一些紧耦合的处理器来解决。然而,随着网络功能和带宽的发展,以前采用集群计算很难解决的问题现在可以使用网格计算技术解决了。理解网格固有的可扩展性和集群提供的紧耦合互连机制所带来的性能优势之间的平衡是非常重要的。


    云计算:云计算是最新开始的新概念,它不只是计算等计算机概念,还有运营服务等概念了。它是分布式计算、并行计算和网格计算的发展,或者说是这些概念的商业实现。云计算不但包括分布式计算还包括分布式存储和分布式缓存。分布式存储又包括分布式文件存储和分布式数据存储。


    云计算与并行、分布式、网格和集群计算的区别:云计算是从集群技术发展而来,区别在于集群虽然把多台机器联了起来,但其某项具体任务执行的时候还是会被转发到某台服务器上,而云可以简单的认为是任务可以被分割成多个进程在多台服务器上并行计算,然后得到结果,好处在于大数据量的操作性能非常好。云可以使用廉价的PC服务器 ,可以管理大数据量与大集群,关键技术在于能够对云内的基础设施进行动态按需分配与管理。云计算与并行计算、分布式计算的区别,以计算机用户来说,并行计算是由单个用户完成的,分布式计算是由多个用户合作完成的,云计算是没有用户参与,而是交给网络另一端的服务器完成的。

    展开全文
  • 深入理解 Android 系统升级

    万次阅读 2017-08-28 18:39:10
    前言2013年7月至2015年6月在长虹担任Android系统研发工程师,主要负责长虹智能电视升级(OTA升级),研发平台是MST 628 和 MTK 5327等。摘要随着Android系统的快速发展,越来越多的智能终端设备搭载Android平台。...

    前言

    2013年7月至2015年6月在长虹担任Android系统研发工程师,主要负责长虹智能电视升级(OTA升级),研发平台是MST 628 和 MTK 5327等。

    摘要

    随着Android系统的快速发展,越来越多的智能终端设备搭载Android平台。Android系统升级的可以优化智能电视系统性能、更新系统内容。因此,Android系统升级在Android系统开发领域极其重要。如何保证Android系统升级的安全性、可靠性与可操作性。本文详细介绍了Android系统升级包的制作、Recovery模式的工作原理,TV终端升级包的下载、升级包的具体升级过程等。

    一、 Android系统升级概述

    Android系统升级的本质是对system、perm、data分区下的文件进行升级,按照升级包的差异来分可以分为整包升级与查分升级。整包升级首先将分区格式化,然后将升级包中的文件拷贝进去。差分升级则只升级文件的差异部分。如图(1.1)所示,系统升级主要包括升级包的制作与发布、终端升级包的下载以及Recovery模式下的具体升级几个过程。本文分九个部分讲述Android系统的系统升级。

    第一部分是系统概述;
    第二部分讲述Recovery模式,包括如何进入Recovery模式,进入Recovery模式后的操作以及Recovery模式的通信接口;
    第三部分主要讲述升级包的制作;
    第四部分讲述TV终端升级包的获取及升级策略;
    第五部分讲述Android系统的三种启动模式;
    第六部分讲述Android系统的模式服务;
    第七部分讲述从reboot到Recovery;
    第八部分讲述 Recovery服务的核心install_package函数;
    第九部分讲述升级程序update_binary的执行过程。

    图1-1 图1-1

    二、Recovery模式

    2.1 Recovery模式中的三个部分
    Recovery的工作需要整个软件平台的配合,从通信架构上来看,主要有三个部分。
    1) MainSystem:即正常启动模式(BCB中无命令),是用boot.img启动的系统,Android的正常工作模式。更新时,在这种模式中我们的上层操作就是使用OTA或则从SD卡中升级升级包。在重启进入Recovery模式之前,会向BCB中写入命令,以便在重启后告诉bootloader进入Recovery模式。
    2) Recovery:系统进入Recovery模式后会装载Recovery分区,该分区包含recovery.img(同boot.img相同,包含了标准的内核和根文件系统)。进入该模式后主要是运行 Recovery服务(/sbin/recovery)来做相应的操作(重启、升级升级、擦除cache分区、擦除data分区等)。
    3) Bootloader:除了正常的加载启动系统之外,还会通过读取MISC分区(BCB)获得来至Main system和Recovery的消息。
    2.2 Recovery模式中的两个通信接口
    在Recovery服务中上述的三个实体之间的通信是必不可少的,他们相互之间又有以下
    两个通信接口。
    通过CACHE分区中的三个文件:
    1) Recovery通过/cache/recovery/目录下文件与Mainsystem进行通信,过程如下 :
    /cache/recovery/command:这个文件保存着Main system传给Recovery的命令行。 –update_package=root:path: Main system将这条命令写入时,代表系统需要升级,进入Recovery模式后,将该文件中的命令读取并写入BCB中,然后进行相应的更新升级包的操作。
    –wipe_data:擦除用户数据。擦除data分区时必须要擦除cache分区。
    –wipe_cache: 擦除cache分区。
    2)通过BCB(Bootloader Control Block):
    BCB是bootloader与Recovery的通信接口,也是Bootloader与Main system之间的通信接口。存储在flash中的MISC分区,占用三个page,其本身就是一个结构体,具体成员 以及各成员含义如下:
    struct bootloader_message{
    char command[32];
    char status[32];
    char recovery[1024];
    };
    command成员:即当我们想要在重启进入Recovery模式时,会更新这个成员的值。另外在成功更新后结束Recovery时,会清除这个成员的值,防止重启时再次进入Recovery模式。
    status:在完成相应的更新后,Bootloader会将执行结果写入到这个字段。
    recovery:可被Main System写入,也可被Recovery服务程序写入。该文件内容格式为:
    “recovery\n
    \n

    该文件存储的就是一个字符串,必须以recovery\n开头,否则这个字段的所有内容域会被忽略。“recovery\n”之后的部分,是/cache/recovery/command支持的命令。可以将其理解为Recovery操作过程中对命令操作的备份。Recovery对其操作的过程为:先读取BCB然后读取/cache/recovery/command,然后将二者重新写回BCB,这样在进入Main system之前,确保操作被执行。在操作之后进入Main system之前,Recovery又会清空BCB的command域和recovery域,这样确保重启后不再进入Recovery模式。
    2.3 从Main System重启并进入Recovery模式
    如图(2.1)所示为以上三个部分的通信过程

    图(2.1)这里写图片描述

    首先从Main System开始,在Main System使用升级包进行升级时,系统会重启并进入Recovery模式。在系统重启之前,Main System定会向BCB中的command域写入boot-recovery(粉红色线),用来告知Bootloader重启后进入recovery模式。这一步是必须的。至于Main System是否向recovery域写入值我们在源码中不能肯定这一点。即便如此,重启进入Recovery模式后Bootloader会从/cache/recovery/command中读取值并放入到BCB的recovery域。而Main System在重启之前肯定会向/cache/recovery/command中写入Recovery将要进行的操作命令。

    3、升级包的制作

    3.1 升级包的目录结构

    |—-boot.img
    |—-system/
    |—-recovery/
    |----recovery-from-boot.p
    |—-etc/
    |----install-recovery.sh
    |---META-INF/
    |CERT.RSA
    |CERT.SF
    |MANIFEST.MF
    |----com/
    |—-google/
    |----android/
    |—-update-binary
    |----updater-script
    |—-android/
    `|—-metadata

    以上是用命令make otapackage 制作的升级包的标准目录结构。

    1)boot.img是更新boot分区所需要的文件。这个boot.img主要包括kernel+ramdisk。
    2)system/目录的内容在升级后会放在系统的system分区。主要用来更新系统的一些应用或则应用会用到的一些库等等。
    3)recovery/目录中的recovery-from-boot.p是boot.img和recovery.img的补丁(patch),主要用来更新recovery分区,其中etc/目录下的install-recovery.sh是更新脚本。
    4)update-binary是一个二进制文件,相当于一个脚本解释器,能够识别updater-script描述的操作。
    5)updater-script:此文件是一个脚本文件,具体描述了更新过程。我们可以根据具体情况编写该脚本来适应我们的具体需求。
    6) metadata文件是描述设备信息及环境变量的元数据。主要包括一些编译选项,签名公钥,时间戳以及设备型号等。
    7)我们还可以在包中添加userdata目录,来更新系统中的用户数据部分。这部分内容更新后会存放在系统的/data目录下。
    8)升级包的签名:升级更新包在制作完成后需要对其签名,否则在升级时会出现认证失败的错误提示。而且签名要使用和目标板一致的加密公钥。加密公钥及加密需要的三个文件在Android源码编译后生成的具体路径为:
    out/host/linux-x86/framework/signapk.jar
    build/target/product/security/testkey.x509.pem
    build/target/product/security/testkey.pk8 。
    命令make otapackage制作生成的升级包是已签过名的,如果自己做升级包时必须手动对其签名。 以上命令在升级包所在的路径下执行,其中signapk.jar testkey.x509.pem以及testkey.pk8文件的引用使用绝对路径。升级 是我们已经打好的包,update_signed.zip包是命令执行完生成的已经签过名的包。
    9)MANIFEST.MF:这个manifest文件定义了与包的组成结构相关的数据。类似Android应用的mainfest.xml文件。
    10)CERT.RSA:与签名文件相关联的签名程序块文件,它存储了用于签名JAR文件的公共签名。
    11)CERT.SF:这是JAR文件的签名文件,其中前缀CERT代表签名者。

    四、TV终端的升级包获取及升级策略

    4.1 功能
    TV终端升级包是由终端升级程序upgradesystem.apk控制的,如图(4.1)所示,该程序完成一下主要功能:
    1) 后台下载策略文件,依据策略文件判断是否需要升级,采用差分还是整包级;
    2) 断点续传下载需要的系统升级包,并进行checksum校验确保其下载的正确性;
    3) 文件校验功能,对下载的升级包进行校验,确保下载文件的正确性。
    4) Recovery升级功能,需要recovery升级时,写入recovery升级标识。
    5) 写入cache/recovery/command命令,便于下次重启时升级;

    这里写图片描述

    五、Android系统中三种启动模式

    5.1 Android系统启动后可能进入的模式有以下几种
    1) MAGIC KEY(组合键):即用户在启动后通过按下组合键,进入不同的工作模式,具体有两种:
    Vol+ + Power :若用户在启动刚开始按了Vol+ + Power组合键,系统会直接进入Recovery模式。以这种方式进入Recovery模式时系统会进入一个简单的UI(使用了minui)界面,用来提示用户进一步操作。有如下几种操作选项:
    “reboot system now”
    “apply update from sdcard”
    “wipe update from cache”
    “wipe cache”
    “wipe data”
    2) 正常启动:若启动过程中用户没有按下任何组合键,bootloader会读取位于MISC分区的启动控制信息块BCB(Bootloader Control Block)。它是一个结构体,存放着启动命令command。根据不同的命令,系统又 可以进入三种不同的启动模式。这个结构体的定义。
    struct bootloader_message{
    char command[32]; //存放不同的启动命令
    char status[32]; //update-radio或update-hboot完成存放执行结果
    char recovery[1024]; //存放/cache/recovery/command中的命令
    };

    command可能的值有两种, command==”boot-recovery”时,系统会进入Recovery模式。Recovery服务会具体根据/cache/recovery/command中的命令执行相应的操作(例如,升级升级或擦除cache,data等)。command为空时,即没有任何命令,系统会进入正常的启动,最后进入主系统(main system)。这种是最通常的启动流程。
    Android系统不同的启动模式的进入是在不同的情形下触发的,从SD卡中升级升级时会进入Recovery模式是其中一种,其他的比如:系统崩溃,或则在命令行输入启动命令式也会进入Recovery或其他的启动模式。

    六、Recovery模式服务

    升级包来源有两种,一个是OTA在线下载,一个是手动拷贝到SD卡或者U盘中。不论是哪种方式获得升级包,在进入Recovery模式前,都未对这个zip包做处理。只是在重启之前将zip包的路径告诉了Recovery服务下面具体分析这种升级方式下, 升级是怎样从上层一步步进入到Recovery模式的。
    6.1、从updatesystem应用到Reboot
    当我们依次选择工具箱–>支持–>系统升级–>在线升级后会弹出一个对话框,提示已有升级包是否现在更新
    1) 如果用户选择立即更新,后台下载升级包升级,将升级包保存到/cache目录下。
    2) 升级文件下载完成后,在Android下对升级包进行sha1正确行校验。校验通过后,调用了pm.reboot(“recovery”)函数,这个函数只将“recovery”参数传递过去了,之后将“boot-recovery”写入到了MISC分区的BCB数据块的command域中。这样在重启之后Bootloader才知道要进入Recovery模式。
    至此,Main System就开始重启并进入Recovery模式。在这之前Main System做的最实质的就是两件事,一是将“boot-recovery”写入BCB的command域,二是将–update_package=/cache/升级”写入/cache/recovery/command文件中。下面的部分就开始重启并进入Recovery服务了。

    6.2从reboot到Recovery服务
    从Bootloader开始如果没有组合键按下,就从MISC分区读取BCB块的command域(在主系统时已经将“boot-recovery”写入)。然后就以Recovery模式开始启动。与正常启动不同的是Recovery模式下加载的镜像是recovery.img。这个镜像同boot.img类似,也包含了标准的内核和根文件系统。其后就与正常的启动系统类似,也是启动内核,然后启动文件系统。在进入文件系统后会执行/init,init的配置文件就是/init.rc。这个配置文件来自bootable/recovery/etc/init.rc。这个文件做了如下几件事情。
    1)设置环境变量。
    2)建立etc连接。
    3)新建目录,备用。
    4)挂载/tmp为内存文件系统tmpfs
    5)启动recovery(/sbin/recovery)服务。
    6)启动adbd服务(用于调试)。

    七、从reboot到Recovery服务

    7.1 Recovery服务的通用流程
    从recovery.c的main函数开始:
    1) ui_init():Recovery服务使用了一个基于framebuffer的简单ui(miniui)系统。这个函数对其进行了简单的初始化。在Recovery服务的过程中主要用于显示一个背景图片和一个进度条。另外还启动了两个线程,一个用于处理进度条的显示,另一个用于响应用户的按键。
    2) get_arg():这个函数主要做了上图中get_arg()往右往下直到parse arg/v的工作。
    get_bootloader_message():主要工作是根据分区的文件格式类型(mtd或emmc)从MISC分区中读取BCB数据块到一个临时的变量中。然后开始判断Recovery服务是否有带命令行的参数(/sbin/recovery,根据现有的逻辑是没有的),若没有就从BCB中读取recovery域。如果读取失败则从/cache/recovery/command中读取然后。这样这个BCB的临时变量中的recovery域就被更新了。在将这个BCB的临时变量写回真实的BCB之前,又更新的这个BCB临时变量的command域为“boot-recovery”。这样做的目的是如果在升级失败(比如升级还未结束就断电了)时,系统在重启之后还会进入Recovery模式,直到升级完成。在这个BCB临时变量的各个域都更新完成后使用set_bootloader_message()写回到真正的BCB块中。
    3) parserargc/argv:解析我们获得参数。注册所解析的命令(,在下面的操作中会根据这一步解析的值进行一步步的判断,然后进行相应的操作。
    4) if(update_package):判断update_package是否有值,若有就表示需要升级更新包,此时就会调用install_package()。在这一步中将要完成安装实际的升级包。这是最为复杂,也是升级升级包最为核心的部分。
    5) if(wipe_data/wipe_cache):这一步判断实际是两步,在源码中是先判断是否擦除data分区(用户数据部分)的,然后再判断是否擦除cache分区。
    6) maybe_install_firmware_update():如果升级包中包含/radio/hboot firmware的更新,则会调用这个函数。
    7) prompt_and_wait():这个函数是在一个判断中被调用的。其意义是如果安装失败,则等待用户的输入处理。
    8) finish_recovery():这是Recovery关闭并进入Main System的必经之路。其大体流程如下:

    这里写图片描述

    将intent(字符串)的内容作为参数传进finish_recovery中。如果有intent需要告知Main System,则将其写入/cache/recovery/intent中。将内存文件系统中的Recovery服务的日志(/tmp/recovery.log)拷贝到cache(/cache/recovery/log)分区中,以便告知重启后的Main System发生过什么。擦除MISC分区中的BCB数据块的内容,以便系统重启后不在进入Recovery模式而是进入更新后的主系统。删除/cache/recovery/command文件。这一步也是很重要的,因为重启后Bootloader会自动检索这个文件,如果未删除的话又会进入Recovery模式。原理在上面已经讲的很清楚了。
    9) reboot():这是一个系统调用。在这一步Recovery完成其服务重启并进入Main System。这次重启和在主系统中重启进入Recovery模式调用的函数是一样的,但是其方向是不一样的。所以参数也就不一样。

    八、 Recovery服务的核心install_package函数

      install_package()是升级升级特有的一部分,也是最核心的部分。在这一步才真正开始对升级包进行处理。下面就开始分析这一部分。如图(8.1)所示:
    

    这里写图片描述

    下面顺着上面的流程图和源码来分析这一流程:
    1)ensure_path_mount():先判断所传的升级包路径所在的分区是否已经挂载。如果没有则先挂载。
    2)load_keys():加载公钥源文件,路径位于/res/keys。这个文件在Recovery镜像的根文件系统中。
    3)verify_file():对升级包升级包进行签名验证。
    4)mzOpenZipArchive():打开升级包,并将相关的信息拷贝到一个临时的ZipArchinve变量中。这一步并未对我们的升级包解压。
    5)try_update_binary():在这个函数中才是对我们的升级升级的地方。这个函数一开始先根据我们上一步获得的zip包信息,以及升级包的绝对路径将update_binary文件拷贝到内存文件系统的/tmp/update_binary中。以便后面使用。
    6)pipe():创建管道,用于下面的子进程和父进程之间的通信。
    7)fork():创建子进程。其中的子进程主要负责执行binary(execv(binary,args),即执行我们的安装命令脚本),父进程负责接受子进程发送的命令去更新ui显示(显示当前的进度)。子父进程间通信依靠管道。
    8)其中,在创建子进程后,父进程有两个作用。一是通过管道接受子进程发送的命令来更新UI显示。二是等待子进程退出并返回INSTALL SUCCESS。其中子进程在解析执行安装脚本的同时所发送的命令有以下几种:
    execv(binary,args)的作用就是去执行binary程序,这个程序的实质就是去解析升级包中的updater-script脚本中的命令并执行。由此,Recovery服务就进入了实际安装升级包的过程。

    九、升级程序update_binary的执行过程

    子进程所执行的程序binary为升级包中的update-binary。Recovery服务在做这一部分工作的时候是先将包中update-binary拷贝到内存文件系统中的/tmp/update_binary,然后再执行的。
    分析下这个程序的执行过程:
    1)函数参数以及版本的检查。
    2)获取管道并打开:在执行此程序的过程中向该管道写入命令,用于通知其父进程根据命令去更新UI显示。
    3)读取updater-script脚本:从升级包中将updater-script脚本读到一块动态内存中,供后面执行。
    4)Configure edify’s functions:注册脚本中的语句处理函数,即识别脚本中命令的函数。主要有以下几类
    RegisterBuiltins():注册程序中控制流程的语句,如ifelse、assert、abort、stdout等。
    RegisterInstallFunctions():实际安装过程中安装所需的功能函数,比如mount、format、set_progress、set_perm等。
    RegisterDeviceExtensions():与设备相关的额外添加項,在源码中并没有任何实现。
    FinishRegistration():结束注册。
    5)Parsethe script:调用yy*库函数解析脚本,并将解析后的内容存放到一个Expr类型的python类中。主要函数是yy_scan_string()和yyparse()。
    6)执行脚本:核心函数是Evaluate(),它会调用其他的callback函数,而这些callback函数又会去调用Evaluate去解析不同的脚本片段,从而实现一个简单的脚本解释器。
    7)错误信息提示:最后就是根据Evaluate()执行后的返回值,给出一些打印信息。

    展开全文
  • 文件系统的层次结构的理解总结

    千次阅读 2016-10-18 14:21:05
    文件系统的层次结构的理解总结通过前面的文章对文件系统的逻辑结构总结,到这里再来看文件系统的层次结构就非常自然。 首先还是注意辨明一些基础的名词概念: + 用户接口 + 文件目录系统 + 存取控制模块 + 逻辑...
  • 实时系统与分时系统简单理解

    千次阅读 2012-12-08 15:22:52
    第一次写博客,以记录我的技术之路。 首先了解下系统的个子特点: 分时操作系统特点:多路性、交互性 ...实时控制系统的多路性则主要表现在系统周期性地对多路现场信息进行采集,以及对多个对象或多个执行机构
  • 尽管操作系统发展史不是研究操作系统的重点,但是在这一发展过程中,衍生出了许许多多与操作系统相关的重要概念,如果知道这些概念出现在怎样的背景下,以及产生的原因,在后期学习中就不会觉得一些概念出现的比较...
  • 个人对系统拆分的理解

    千次阅读 2018-07-18 14:25:41
    首先我们需要想想,到底什么系统需要进行拆分?并不是所有的系统都需要进行拆分,拆分系统是一件耗时并且有风险的操作,所以再拆分前需要再三考虑是否真的需要拆分,拆分的好处是否大于风险。个人认为进行系统...
  • 理解Android系统(一)

    千次阅读 2015-01-06 18:16:49
    理解Android系统 Android 是业界流行的开源移动平台,受到广泛关注并为多个手机制造商作为手机的操作系统平台。由于它的开放性,市面上又出现了它的很多改良定制版本。且广泛的应用在手机、汽车、电脑等领域。因此...
  • 简直不要太硬了!一文带你彻底理解文件系统

    万次阅读 多人点赞 2020-03-25 13:19:06
    对于一些应用程序来说,存储空间的大小是充足的,但是对于其他一些应用程序,比如航空订票系统、银行系统、企业记账系统来说,这些容量又显得太小了。 第二个问题是,当进程终止时信息会丢失。对于一些应用程序...
  • 如何理解Linux系统

    千次阅读 2018-06-26 15:42:39
    首先来了解一下Linux系统启动过程! 第一步:内核引导 当计算机打开电源后,首先是BIOS开机自检,按照BIOS中设置的启动设备(通常是硬盘)来启动。朱:BIOS是英文”Basic Input Output System”的缩略词,直译过来...
  • 对操作系统理解

    千次阅读 2011-07-28 14:41:36
    前几天读了《走出软件作坊》中“技术沙尘暴”一章,作者对于技术的深刻理解和掌握,让我收获颇丰。... 在大学学习《操作系统原理》后,对操作系统理解是一个提供屏蔽硬件细节的软件层面,让其他软件可以在
  • 虽然在这里我们主要关注的...因此在深入理解操作系统之前还是有必要来聊一聊程序是怎么一回事。 那究竟是什么是程序呢? 我们引用Wikipedia对计算机程序的定义: A computer program is a collection of instructio...
  • 对操作系统的一般理解

    千次阅读 2016-09-10 20:32:44
    一、操作系统OS(Operation System) 1.定义:操作系统是管理和控制计算机硬件与软件资源的计算机程序,是裸机上的第一层软件。 2.主要功能 a.资源管理:操作系统根据用户需求对计算机资源按一定的策略来进行分配...
  • 《深入理解计算机系统》-第1章 计算机系统漫游

    千次阅读 多人点赞 2019-03-16 22:19:20
    处理器读并解释存储在内存中的指令3.1 系统的硬件组成4. 运行hello程序4.1. 从磁盘读取hello命令4.2. 从磁盘加载可执行文件到主存4.3. 将输出字符串从存储器写到显示器 序 最近重启了写博客,都说念念不忘必有回响...
  • 对操作系统的一点理解

    千次阅读 2018-05-27 01:29:57
    最近在mooc平台上学习操作系统,是由清华大学的向勇老师和陈瑜老师授课,...向勇老师讲的理论的部分和本科所讲的顺序和方式不尽相同,可能是学过的原因,总感觉这种理论内容的讲法更好理解。 我目前对操作系统的理...
  • 操作系统的很多核心组件都是相互关联的,比如虚拟内存管理,物理内存管理,文件系统,缓存系统,IO,设备管理等等,都要放在一起来看才能从整体上理解各个模块到底是如何交互和工作的。这个系列的目的也就是从整体...
  • 对闭环控制系统的一些理解

    千次阅读 2019-04-17 21:48:21
    由上篇博客的分析控制系统中"带宽"的理解,我们知道,只要系统的截止频率足够高,就会有足够多频率的分量通过,输出就能很好的跟随输入。然而,不幸的是,有很多系统,其截止频率没有足够高,那怎么办呢?举个例子:...
  • 自考《操作系统概论》之宏观理解

    千次阅读 热门讨论 2015-01-24 17:15:41
    操作系统(Operating System,简称OS)是管理和控制计算机硬件与软件资源的计算机程序,是直接运行在“裸机”上的最基本的系统软件,任何其他软件都必须在操作系统的支持下才能运行。 操作系统是用户和计算机的...
  • 深入理解计算机系统(1)

    千次阅读 2018-09-03 22:50:25
    (2)优化性能一定要理解系统:程序是怎么编译和执行的、怎样测量系统性能和定位瓶颈、在不破坏代码模块化与整体性下,怎么改进性能 *例:内存系统 void copyij(int src[2048][2048], int dst[2048][2048]) ...
  • 控制系统中"带宽"的理解

    万次阅读 多人点赞 2019-04-17 20:34:40
    首先来看几个概念: 带宽频率也称为闭环截止频率,是...开环截止频率与闭环截止频率具有同向性:开环截止频率与闭环截止频率是两个完成不同的物理量,分别用于描述开环系统和闭环系统的幅频特性,但它们之间又存在一...
  • 深入理解计算机系统|期末整理与复习

    千次阅读 多人点赞 2020-09-06 02:37:59
    文章目录前言第一章:概述知识点 前言 不过是一个软工的秃头学生的临死挣扎...在Unix系统上,从源文件到目标文件的转化是由 编译器驱动程序 完成的。 系统硬件组成 系统之间的网络通信 示 List item ...
  • 系统监控之SNMP协议理解

    万次阅读 2016-10-24 22:53:52
    使用Mycat分布式数据库中间件时需要对各个性能指标进行监控,官方已经提供了一个监控软件,于是讨论起来监控是怎么具体可能有哪些实现,虽然知道已经有很多的监控软件可以使用,比如zabbix,但是今天听同事说有一个...
  • 在计算机储存系统里面,算术类型可以分为两类:整型(intergral type,包括字符和...在看简单地看了深入理解计算机系统的第二章后,有了稍微深刻但是有非常浅显的理解,然后又看了阮师兄的一篇博文,所以做了一点笔记。
  • 而对于程序员来说,在程序的运行环境中也会有一只看不见的手,这只看不见的手无时无刻不在影响着程序的运行,但你可能对此却浑然不知,对于程序员来说这只看不见的手就是操作系统,这只看不见的手就是本书的主题。...
  • 2019-6-15更新 要期末考试啦,翻了下书,发现第8个函数divpwr2中的偏置值为2^n-1的证明就在教材中,教材是华章教育的《深入理解计算机系统》(原书第2版),证明部分在P64-P66。
  • 数据库系统概论—除运算的理解

    千次阅读 2019-09-28 15:06:45
    众所周知,除运算是整个代数运算中最难理解的运算,没有之一。小编也是在学习这块内容的时候绞尽脑汁,在学习除运算之前,先引出象集的概念 通俗来说:象集就是有两个不相交的属性集A,B;属性集A取特定的属性...
  • 点亮技能 I 人机对话系统全面理解

    千次阅读 2019-09-02 22:36:57
    最近针对NLP的人机对话系统方向作了学习,首先从底层技术NLP理解其工作原理,再了解基本的智能搜索、对话交互、问答匹配技术,最后体验了chatbot的一些开放平台进而抽象其框架和功能等,从而整理出此篇学习笔记。...
  • 关于android 签名系统理解

    千次阅读 2013-11-12 13:53:43
    这几天通过查资料、看源码和做试验,对android签名系统有了大概的理解,现总结一下,供参考: 关于签名的作用 APK签名的作用: 1 发送者的身份认证,由于开发商可能通过使用相同的Package Name来混淆替换...
  • 进程系统调用——fork函数深入理解

    千次阅读 2015-04-12 11:53:38
    原创作品 转载请注明出处http://blog.csdn.net/always2015/article/details/45008785当我们在一个现代系统上运行一个程序的时候,我们会得到一个假象,就好像我们的程序是系统中当前运行的唯一程序。我们的程序好像...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 443,184
精华内容 177,273
关键字:

怎样理解系统