22、Mac OS X 应用安装与多线程编程全解析

Mac OS X 应用安装与多线程编程全解析

1. 应用安装基础

在 Mac OS X 系统中,应用安装方式多样。简单的应用安装可通过拖放完成,用户仅需将应用程序包从磁盘映像文件拖动到“应用程序”文件夹即可。卸载时,只需从磁盘中移除应用程序包。同时,Finder 支持“应用程序打包”键,开发者构建应用时可在应用的信息属性列表(Info.plist)中指定这些键及其对应值。用户选择应用并打开 Finder 的“信息”窗口时,“应用程序文件”面板会列出组件,用户能选择安装或卸载哪些组件。

2. 安装程序的使用

并非所有应用都适合简单的拖放安装。有些应用准备执行的要求复杂,或者使用安装程序有显著优势,如:
- 压缩功能,减小安装包体积。
- 安装过程中显示 Read Me 文件,提供必要信息。
- 要求用户在安装前同意许可协议。
- 要求用户以管理员身份进行身份验证。
- 呈现更专业的安装界面。

不过,建议尽可能采用简单的拖放手动安装方式,仅在应用需要在其程序包外部安装项目时使用安装程序。

若决定使用安装程序,不同类型的应用有不同选择:
- Cocoa 或 Java 应用,以及仅在 Mac OS X 上安装的 Carbon 应用,可使用 Mac OS X 的原生安装技术。
- 若 Carbon 应用要同时安装在 Mac OS 9 和 Mac OS X 上,有两种方法:
- 两个平台都使用已移植到 Mac OS X 的第三方安装程序。
- Mac OS X 使用原生安装技术,Mac OS 9 使用第三方安装程序。

Mac OS X 的原生安装程序是 Installer,位于 /Applications/Utilities 中。用户双击安装包时,Installer 会启动,通过一系列面板引导用户完成安装,如身份验证、指定安装位置和自定义安装等,还能显示材料清单和安装日志。

3. 安装包的结构与创建

Mac OS X 上准备好安装的软件原生形式是包,扩展名为 .pkg。它本质是文件夹,但对用户呈现为文件,包含以下组件:
| 文件类型 | 描述 |
| ---- | ---- |
| 材料清单(.bom) | 二进制格式文件,描述包的内容。 |
| 信息文件(.info) | 文本文件,包含创建包时在 Package Maker 应用中输入的信息。 |
| 存档文件(.pax) | 要安装的完整文件集的存档,若压缩则有 .gz 后缀。 |
| 大小计算文件(.sizes) | 文本文件,包含未存档软件的压缩和未压缩大小,便于安装程序计算安装所需空间。 |
| 其他可选资源 | 如图标、Read Me 文件、许可信息、安装前后脚本等,安装时使用但不随软件安装。 |

创建安装包的一般步骤如下:
1. 创建分发目录,将待安装软件复制到其中。例如,构建的框架要安装在 /Library/Frameworks,可创建 ~/dstroot/Library/Frameworks 目录并复制框架。
2. 可选步骤,创建安装资源目录,放入 Read Me 文件、许可协议和安装脚本等。这些文件可以是 .txt、.html 或 .rtf 格式,使用能保存为 Unicode 编码的文本编辑器创建。若 Read Me 文件名为 ReadMe.ext,许可文件名为 License.ext,Installer 会自动识别并处理。
3. 启动 Package Maker 应用,填写其提供的表单。表单的前两个字段“包根目录”和“包资源目录”应指向之前创建的分发目录和资源目录的根路径。

graph LR
    A[开始] --> B[创建分发目录]
    B --> C[复制软件到分发目录]
    C --> D{是否创建资源目录}
    D -- 是 --> E[创建资源目录]
    D -- 否 --> F[启动 Package Maker]
    E --> F
    F --> G[填写 Package Maker 表单]
    G --> H[完成安装包创建]
4. 系统级资源安装

若捆绑的可执行文件有必须安装在程序包外部的资源,安装程序需处理。例如字体,Apple Type Solution(ATS)系统通过在系统、本地、网络和用户文件系统域的 Library/Fonts 中查找字体来管理。同时,资源可能有使用限制,如许可证限制的字体若仅供单个用户使用,应安装在用户的 ~/Library/Fonts 文件夹,而非 /Library/Fonts 文件夹。

安装程序应了解系统级资源的推荐域位置,将资源安装在适当位置或用户可选择的位置。若位置需要系统管理员权限,安装程序应验证用户身份。Mac OS X 安装技术允许安装可选子包或安装在应用程序包外部位置的子包,使用元包(扩展名为 .mpkg)管理这些子包集合,安装程序会为基于元包的可安装包提供“自定义”按钮。

Mac OS X 应用安装与多线程编程全解析

5. 多环境下的任务与进程

Mac OS X 是高度分层的系统,不同层有等效机制,这可能导致不同技术、API 甚至术语的差异。“任务”和“进程”的概念就是典型例子,不同组件有不同的术语,如 Mach 任务、BSD 进程、Carbon 进程管理器(CPM)进程和多处理服务任务等。

实际上,存在这样的关系:Mach 任务 = BSD 进程 = Carbon 进程管理器进程。Mach 任务是“包含一组线程的容器”,负责管理内存、地址空间和其他与线程执行相关的资源,每个 Mach 任务有 4GB 的虚拟地址空间且受保护。

一个 Carbon 进程管理器(CPM)进程基于一个 BSD 进程,这种分层使 CPM API 得以实现。每个 Carbon、Cocoa 和 Java 应用进程同时也是 Mach 任务、BSD 进程(有自己的进程 ID)和 CPM 进程(有自己的进程序列号)。不过,经典进程是一对一进程模型的例外,在经典环境中运行的应用每个都有自己的 CPM 进程,但这些多个进程基于一个 BSD 进程。

Cocoa 和 Carbon 在其 API 中也使用“任务”这个术语。Cocoa 中的“任务”和“进程”遵循 Mach 和 BSD 的概念,Foundation 框架的 NSTask 类创建的对象与从父进程派生的子进程相关联,是有自己的线程和地址空间的独立可执行实体。多处理服务将其用户级抢占式线程称为“任务”,主要是为了避免与线程管理器的协作线程冲突。

类型 说明
Mach 任务 包含一组线程,管理内存、地址空间等资源,有 4GB 虚拟地址空间且受保护
BSD 进程 与 Mach 任务等同,有自己的进程 ID
Carbon 进程管理器(CPM)进程 基于 BSD 进程,有自己的进程序列号
多处理服务任务 用户级抢占式线程
graph LR
    A[Mac OS X 系统] --> B[Mach 任务]
    A --> C[BSD 进程]
    A --> D[Carbon 进程管理器进程]
    A --> E[多处理服务任务]
    B <--> C
    C <--> D
    E -.-> D
6. 线程包

线程是进程内的执行上下文,与调用栈和处理器状态相关,与进程的其他线程共享虚拟地址空间和其他任务级资源。线程可以被抢占式调度,在对称多处理环境中可以并发运行,基于内核的线程模型可以使用各种同步机制实现协作式线程行为。

多线程编程能提高程序效率并简化某些任务的编程,但也会使一些事情变得复杂。Mac OS X 为开发者提供了多种多线程编程模型和接口,这些包之间存在依赖关系,部分包基于其他包构建。

线程包 描述
POSIX 线程 内核环境中用于实现抢占式调度线程的包,是行业标准线程模型之一,包含在 System 框架中
多处理服务 用于 Carbon 的抢占式调度线程包,基于 POSIX 线程,是 Core Services 层的一部分
线程管理器 用于 Carbon 的协作式调度线程包,基于 POSIX 线程,是 Core Services 层的一部分
NSThread Cocoa 应用中用于包装抢占式调度线程的类,基于 POSIX 线程,由 Foundation 框架提供
java.lang.Thread Java 应用中用于包装抢占式调度线程的类,基于 POSIX 线程
graph LR
    A[Mach 线程] --> B[POSIX 线程]
    B --> C[多处理服务]
    B --> D[线程管理器]
    B --> E[NSThread]
    B --> F[java.lang.Thread]
7. 线程包的使用建议

在可能的情况下,应始终使用客户端 API 而非 Mach API。BSD POSIX 线程包(Pthreads)在 Mach 线程之上构建自己的多线程环境,对线程进行抢占式调度,并保持 Mach 线程和 POSIX 线程的一对一映射。

应用环境的线程包基于 POSIX 线程构建,多处理服务和 NSThread 类提供的线程是抢占式调度的,与底层 POSIX 线程一对一映射;而线程管理器的线程则“多路复用”到单个 POSIX 线程上,只能进行协作式调度。

使用线程包的建议如下:
1. 应用进程启动时会自动获得一个线程。若要实现多线程应用,大多数情况下应使用适合应用环境的线程包,对于 Carbon 应用,还需根据所需线程类型(抢占式或协作式)选择。
2. 若希望源代码与其他操作系统有最大兼容性,应使用 POSIX 线程。例如,许多 BSD 代码使用 POSIX 线程,与 Mac OS X 中的实现兼容。
3. 除特殊情况(如调试器)外,项目应避免创建和管理 Mach 线程。因为 Mach 线程缺乏 POSIX 线程提供的许多基础设施,使用 Mach 线程可能导致后续兼容性问题。

综上所述,Mac OS X 提供了丰富的应用安装和多线程编程机制,开发者需要根据具体需求和场景选择合适的方法和工具,以确保应用的顺利安装和高效运行。

潮汐研究作为海洋科学的关键分支,融合了物理海洋学、地理信息系统及水利工程等多领域知识。TMD2.05.zip是一套基于MATLAB环境开发的潮汐专用分析工具集,为科研人员工程实践者提供系统化的潮汐建模计算支持。该工具箱通过模块化设计实现了两大核心功能: 在交互界面设计方面,工具箱构建了图形化操作环境,有效降低了非专业用户的操作门槛。通过预设参数输入模块(涵盖地理坐标、时间序列、测站数据等),用户可自主配置模型运行条件。界面集成数据加载、参数调整、可视化呈现及流程控制等标准化组件,将复杂的数值运算过程转化为可交互的操作流程。 在潮汐预测模块中,工具箱整合了谐波分解法潮流要素解析法等数学模型。这些算法能够解构潮汐观测数据,识别关键影响要素(包括K1、O1、M2等核心分潮),并生成不同时间尺度的潮汐预报。基于这些模型,研究者可精准推算特定海域的潮位变化周期振幅特征,为海洋工程建设、港湾规划设计及海洋生态研究提供定量依据。 该工具集在实践中的应用方向包括: - **潮汐动力解析**:通过多站点观测数据比对,揭示区域主导潮汐成分的时空分布规律 - **数值模型构建**:基于历史观测序列建立潮汐动力学模型,实现潮汐现象的数字化重构预测 - **工程影响量化**:在海岸开发项目中评估人工构筑物对自然潮汐节律的扰动效应 - **极端事件模拟**:建立风暴潮天文潮耦合模型,提升海洋灾害预警的时空精度 工具箱以"TMD"为主程序包,内含完整的函数库示例脚本。用户部署后可通过MATLAB平台调用相关模块,参照技术文档完成流程操作。这套工具集将专业计算能力人性化操作界面有机结合,形成了从数据输入到成果输出的完整研究链条,显著提升了潮汐研究的工程适用性科研效率。 资源来源于网络分享,仅用于学习交流使用,请勿用于商业,如有侵权请联系我删除!
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值