• Linux系统——机制策略(一)


     机制策略(一)

    形而上谓之道;
    形而下谓之器; ————易经


    LinuxUnix设计理念提供的一种机制不是策略:
    1、如果说机制是一种框架,那么,策略就是填充框架的一个个具体实施。机制提供的就是一种开放而宽松的环境,
    而策略就是在这个环境下赖以生存的生命个体。


    2、一个系统调用的执行机制:
    (1)库函数以及应用程序怎样使用系统调用,内核不关心,内核只和系统调用打交道,而且是实现系统调用的大场景;
    (2)系统调用抽象出来用于完成某种特点目的的函数,至于这些函数怎样用,不是内核所关心的;所以Linux内核只提
    供机制框架,而不提供具体的解决策略。这就跟C语言类似,使其在编程时可以更加的灵活,但这明显提高了编程要求,
    不但要求程序员自己考虑需要使用哪种系统调用,还有当使用某个API函数实现功能时需要考虑细节上的东西,因为由
    系统提供的API接口函数是抽象出来用于完成某种特点目的的函数只实现了粗框架,针对各种的应用场景需要调用者自
    己考虑;


    3、为了隐藏差异性,使用了VFS虚拟系统机制:总体上说 Linux 下的文件系统主要可分为三大块:
    一是上层的文件系统的系统调用,二是虚拟文件系统 VFS(Virtual Filesystem Switch),三是挂载到 VFS 中的各
    实际文件系统,例如 ext2,jffs 等。
    VFS是一种软件机制,也许称它为 Linux 的文件系统管理者更确切点,与它相关的数据结构只存在于物理内存当中;
    每次系统初始化期间,Linux都首先要在内存当中构造一棵 VFS的目录树(在 Linux的源代码里称之为 namespace),实际
    上便是在内存中建立相应的数据结构。VFS 中的各目录其主要用途是用来提供实际文件系统的挂载点,当然在 VFS 中也
    会涉及到文件级的操作。VFS主要目的是实现各种系统之间的差异,使接口统一;


    4、操作系统执行机制:
    OS本质————首先是管理者(管理硬件资源,提高效率);还是服务者(提供各种服务,方便用户);但归根结底是执行者;

    执行用户程序————进程机制;为用户服务;
    程序的执行机制-进程;

    响应中断————中断机制;为外设服务;Linux把系统调用、异常、和外部中断纳入统一的框架处理;
    中断服务程序的执行机制-中断信号触发;
    中断下半部的执行机制-softirq,tasklet,工作队列;

    执行系统调用————软中断机制;
    系统调用的执行-软中断(int $0x80触发);

    执行内核线程————线程机制;为操作系统自身服务;
    内核函数的执行机制-线程;

    5、android框架:
    android
    dalvik VM
    Linux
    android进程间通信机制:
    从Linux的概念空间中,Android的设计Activity托管在不同的的进程,Service也都是托管在不同的进程,不同进程
    间的Activity,Service之间要交换数据属于IPC。Binder就是为了Activity通讯而设计的一个轻量级的IPC框架。
    从一般的概念来讲,Android设计者在Linux内核中设计了一个叫做Binder的设备文件,专门用来进行Android的数据
    交换。所有从数据流来看Java对象从Java的VM空间进入到C++空间进行了一次转换,并利用C++空间的函数将转换过的对
    象通过driver/binder设备传递到服务进程,从而完成进程间的IPC。这个过程可以用下图来表示。
    这里数据流有几层转换过程:
    (1) 从JVM空间传到c++空间,这个是靠JNI使用ENV来完成对象的映射过程。
    (2) 从c++空间传入内核Binder设备,使用ProcessState类完成工作。
    (3) Service从内核中Binder设备读取数据。
    android设计者需要利用面向对象的技术设计一个框架来屏蔽掉这个过程。


    android核心机制binder:
    Android构建在Linux上面,但在IPC(进程间)机制上,没有利用Linux提供IPC机制,而是自己实现了一套轻量级的
    IPC机制——binder机制。并且Android Binder机制之上,Android框架提供了一套封装,可以实现对象代理(在本地进程
    中代理远程进程的对象)。
    Android系统Binder机制的总管是Service Manager,所有的Server(System Server)都需要向他注册,应用程序需
    要向其查询相应的服务。可见其作用是多么的重要,所以本文首先介绍Service Manager。

    Android为了是Binder机制容易使用,对Binder机制进行了抽象,定义了IBinder接口,该接口在C/C++和Java层都有
    定义。IBinder定义了一套使用Binder机制使用和实现客户程序和服务器的通讯协议。可以理解如下定义:
    1、向Android注册的Service也必须是IBinder(继承扩展IBinder接口)对象。后续文章中我们讨论Service的时候
    我们会介绍到这方面的内容。
    2、客户端得到Service代理对象也必须定义成IBinder(继承扩展IBinder接口)对象。这也是为什么BpBinder就是
    继承自IBinder。
    3、客户端发送请求给服务器端,将Service代理对象IBinder接口的transact方法。
    4、Android系统Binder机制将负责把用户的请求,调用Service对象IBinder接口的onTransact方法。具体实现我们
    将在以后介绍Service的时候讨论。


    典型的Binder应用模式:
    1、客户端通过某种方式(后文会详细介绍)得到服务器端的代理对象。从客户端角度看来代理对象和他的本地对象没有什么差别。它可以像其他本地对象一样调用其方法,访问其变量。
    2、客户端通过调用服务器代理对象的方法向服务器端发送请求。
    3、代理对象把用户请求通过Android内核(Linux内核)的Binder驱动发送到服务器进程。
    4、服务器进程处理用户请求,并通过Android内核(Linux内核)的Binder驱动返回处理结果给客户端的服务器代理对象。
    5、客户端收到服务器端的返回结果。

    Binder机制的组成:
    1、Binder驱动
    binder是内核中的一个字符驱动设备位于:/dev/binder。这个设备是Android系统IPC的核心部分,客户端的服
    务代理用来通过它向服务器(server)发送请求,服务器也是通过它把处理结果返回给客户端的服务代理对象。我们
    只需要知道它的功能就可以了,本文我们的重点不在这里,所以后面不会专门介绍这部分。如果想深入了解的话,请
    研究内核源码中的binder.c。
    2、Service Manager
    负责管理服务。对应于第一步中,客户端需要向Service Manager来查询和获得所需要服务。服务器也需要向
    Service Manager注册自己提供的服务。可以看出Service Manager是服务的大管家。
    3、服务(Server)
    需要强调的是这里服务是指的是System Server,而不是SDK server,请参考《(转)高焕堂——Android框架底层
    结构知多少?》关于两种Server的介绍(其实应该是三种,丢掉了init调用的server,在init.rc中配置)。
    4、客户端
    一般是指Android系统上面的应用程序。它可以请求Server中的服务。
    5、对象代理
    是指在客户端应用程序中生成的Server代理(proxy)。从应用程序角度看代理对象和本地对象没有差别,都可以
    调用其方法,方法都是同步的,并且返回相应的结果。

  • 相关阅读:
    获取请求浏览器信息
    (转)获取页面 鼠标位置
    (转)location.href 用法
    (转)异常的处理
    (转载)提高ASP.NET Web应用性能的技巧
    赶集网二手数据.py
    豆瓣top250.py
    爬取58二手数据.py
    使用类和实例.py
    爬取小猪短租房.py文件
  • 原文地址:https://www.cnblogs.com/sun-frederick/p/4763265.html
Copyright © 2020-2023  润新知