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

      • 真正的即插即用
      • 动态设备管理
      • 驾驶员动态(“按需”)装载
      • 桌面系统和便携式设备的电源管理
      • 多处理器功能
posted @ 2020-11-07 01:36  阿甘左  阅读(223)  评论(0编辑  收藏  举报