zoukankan      html  css  js  c++  java
  • Mac Technology Overview(一)

    参考地址: https://developer.apple.com/library/archive/documentation/MacOSX/Conceptual/OSX_Technology_Overview/About/About.html#//apple_ref/doc/uid/TP40001067
    基于稳定强大的OSX内核以及便利的Cocoa框架,让苹果开发者们能站在巨人的肩膀上高效编程,然而如果仅仅只是局限于API的调用,不了解底层实现和原理,在面对一些问题时候难免会力不从新,当学习的知识达到一定的阶段一定要注重积累,了OSX操作系统,及其运作原理,有助于我们更好的理解iOS开发生态,更快速的学习新的姿势.

    OS X整体上苹果分成了四个大的层级

    • 如下图所示,从上至下依次分为了5个层级,越面向底层,越能提供一些定制话的服务,上层框架基本都是基于底层框架封装而来,如UIKit框架部分就将一些常用的CoreAnimation动画进行了封装.

    • 基本层级介绍:

      • Cocoa(Application):从名字上也能看出,它是一个应用层,可以快速的构建应用程序界面,响应用户交互事件,管理App的行为事件。
      • Media: 包含播放、录制和编辑视听媒体以及渲染和动画二维和三维图形的专门技术。
      • Core Services: 包含了很多基础的技术服务,从自动引用技术,底层的网络通信,字符处理,数据格式化封装

      • Core OS: 定义了硬件和网络相关的编程接口,以及CPU和GPU高性能运算任务,核心操作系统层实现与应用程序安全相关的功能。如App Sandbox,Code Signing

      • Kernel and Device Drivers: 由Mach内核环境,设备驱动程序,BSD库函数(libSystem)和其他低级组件组成,包括了对文件系统,网络,安全,进程通信,编程语言,设备驱动程序,内核驱动程序,内核扩展的支持

    • 可以创建不同种类的应用

      • Apps: App应用
      • Frameworks and libraries: 动态或者静态库,共享代码
      • Command-line tools and daemons: 命令行工具,和守护进程充当客户端请求服务器的进程
      • App plug-ins and loadable bundles: 开发扩展其他应用的插件,以及包含应用程序的Bundle,并可以在运行时加载代码和资源。
      • System plug-ins: 系统插件,如音频单元、内核扩展、I/O工具包设备驱动程序、首选项窗格、聚光灯导入程序和屏幕保护程序,扩展了系统的功能。
    • 在移植Cocoa-Touch应用程序时,需注意API的相似性和差异性

      • Cocoa和Cocoa-Touch应用所基于的技术栈有很多相似之处,有些系统框架在每个平台中是相同的,如CoreData,AV Foundation,使得一些基本的数据和底层的API功能容易移植
      • 有些变化太大的API则移植起来不太方便,如AppKitUIKit框架所编写的界面.
    • 苹果上层框架基本大都不开源,但底层框架是开源的,可以在Open Source Development Resources找到源代码

    创建Mac平台的应用

    Mac OS X和Device Driver的主要功能

    • XPC Interprocess Communication and Service: XPC是一种进程通信技术,通过权限分离的机制来补充应用的沙盒机制,根据每个应用程序所需要的系统访问资源将应用程序分成多个部分,这种机制叫做XPC服务.

      • XPC是通过GCD的调度来实现,当创建XPC连接时,其消息将通过与GCD调度队列关联来实现通信。
      • 当应用程序启动时,系统会自动找到它的每个XPC服务注册到应用程序可见的命令空间中,如Location服务,应用程序与它的一个XPC服务建立连接,并向他们发送消息,其中包含服务处理的事件.Creating XPC Services, Daemons and Services Programming Guide.
    • Caching API:

      • libcache API是一个低级的可清除的缓存API。主动缓存是最大化应用程序性能的一项重要技术。但是,当缓存需求超过可用内存时,系统必须根据需要释放内存以处理新的请求
      • 应用程序还可以通过创建缓存来帮助你,操作系统可以根据内存压力的需要优先清除这些缓存。libcache库和foundationframework的NSCache类可以帮助您创建这些可清除的缓存
    • In-Kernel Video Capture: I/O视频提供了一个内核级C++编程接口,用于编写视频捕获设备驱动程序。I/O视频取代了QuickTime序列抓取器API,作为将视频导入OS X的一种方式。

    • Mach: 它是操作系统的核心,提供了系统操作的关键功能,CPU使用率和内存,处理机调度,内存保护,并为本地和远程进程通信提供了以消息为中心的通信基础,它具有以下特点

      • Protected memory: 内存保护,用户空间和系统内核空间区分,通过两种不同的状态(用户态和核心态)保护系统资源
      • Preemptive multitasking: 抢占式多任务处理,合理调度任务,确保系统,应用程序有序高效的运行
      • Advanced virtual memory: 维护虚拟内存的地址映射表,控制任务的虚拟地址到物理地址之间的转换,如应用程序的装入内存后的page管理
      • Real-time support: 保证对时间敏感的媒体应用程序的处理器资源进行低延迟访问
    • Device-Driver Support: Darwin为开发设备驱动程序提供了一个面向对象的框架,称为I/okit框架。这个框架促进了OSX驱动程序的创建,并提供了他们需要的大部分基础设施。写在一个受限的C++子集,并被设计成支持一系列设备系列,I/O套件既模块化又可扩展

    • Network Kernel Extensions: Darwin允许开发者通过创建网络内核扩展(NKEs)向操作系统添加网络功能。NKEs工具允许您创建网络模块甚至整个协议栈,这些模块可以动态加载到内核中并从中卸载。NKEs还可以自动配置协议栈。

    • BSD: 包含了很多POSIX API,高级应用程序也可以使用这些API来实现基本的应用程序功能,BSDOS X文件系统和网络设施的基础,同时也提供了多种编程接口和服务,包括

      • 进程模型: 进程ID,PCB
      • 基本的安全策略: 如文件权限,用户和组ID
      • 线程支持: POSIX线程,TCB
      • 网络支持: BSD Socket
    • IPC and Notification Mechanisms:

      • File System Events: 当系统文件改变后会触发FSEvents
      • Kernel queues and kernel events: 这些机制允许截获内核级事件,以接收有关套接字、进程、文件系统和系统其他方面的更改的通知。内核队列和事件是操作系统FreeBSD层的一部分,在kqueue和kevent手册页中有描述。
      • BSD notifications: 程序可以通过包括Mach端口、信号和文件描述符的机制接收BSD通知。此外,该技术轻量级、高效,并且能够合并通知。
      • Sockets and ports: 套接字的端口通信,套接字表示本地或跨网络的两个进程之间通信通道的一端
      • Streams: 进程之间的数据流,配合Runloop循环去检测进程之间的数据流,并分发给对应的线程进行处理
      • Pipes: 通过一个管道连接父子进程,维持一个固定的缓冲区大小用于发送数据
      • Shared memory: 实现进程的内存共享,所有操作系统都具备的功能,实际开发中跨平台数据访问也常用到这一点,比如Flutter中图片资源的访问和传递.如果能通过共享空间则会大大提高图片解码效率,而不用反复的从磁盘读取
      • Apple Event:

    内核的基本架构

    • 下面Kernel environment就是系统内核部分的组成,这里细分为如下几个部分
    • Mach:

      • 非类型的进程间通信(IPC)
      • 远程过程调用(RPC)
      • 对称多道处理的调度程序支持(SMP)
      • 支持实时服务,如流媒体
      • 虚拟内存支持,物理内存到虚拟内存的映射管理
      • 支持寻呼机
      • 模块化体系结构

      • BSD:

        • 文件系统: 文件管理,目录索引
        • 网络: 不包括底层的硬件部分处理,基于套接字的通信
        • UNIX security model:安全策略管理,如用户组权限
        • syscall support: 支持系统调用,提供应用程序接口,它暴露了很多POXIS API
        • 提供BSD进程模型,用于管理进程资源,信号量控制进程访问
        • FreeBSD kernel APIs
        • kernel support for pthreads (POSIX threads)
    • Networking

      • TCP/IP堆栈和套接字API
      • 支持IP和DDP(AppleTalk传输)
      • 报文复用和分用
      • 多播支持
      • 拥塞调整
      • 包过滤
      • Mac OS Classic支持(通过过滤器)

      • I/O Kit

        • 真正的即插即用
        • 动态设备管理
        • 驾驶员动态(“按需”)装载
        • 桌面系统和便携式设备的电源管理
        • 多处理器功能
  • 相关阅读:
    mysql max_allowed_packet过小导致的prepare失败
    linux tcp/ip编程和windows tcp/ip编程差别以及windows socket编程详解
    mysql metadata lock锁
    velocity merge作为工具类从web上下文和jar加载模板的两种常见情形
    mysql 5.7.15发布
    mysql 5.6.33发布
    2016年09月编程语言排行榜
    postgresql 9.6 rc1发布
    www.97top10.com--做最好的技术交流网站
    nginx/ajax跨子域请求的两种现代方法以及403解决
  • 原文地址:https://www.cnblogs.com/wwoo/p/mac-technology-overview-yi.html
Copyright © 2011-2022 走看看