问题标签 [mach]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
255 浏览

c++ - Mach 线程在 x86_64 上不起作用

我正在尝试写一个简单的“你好,世界!” 在 x86_64 上使用马赫线程的程序。不幸的是,程序在我的机器上因分段错误而崩溃,我似乎无法解决这个问题。我在网上找不到太多关于 Mach 线程的文档,但我参考了以下C 文件,该文件也使用了 Mach 线程。

据我所知,我做的一切都是正确的。我怀疑分段错误是因为我没有正确设置线程的堆栈,但我采取了与参考文件相同的方法,其中包含以下代码。

你知道我做错了什么吗?

参考文件使用C++11;如果使用 GCC 或 Clang 编译,则需要提供std=c++11标志。

0 投票
2 回答
475 浏览

input - 将 LED 引脚配置为 MACHxo2 板上的输入

我正在尝试将连接到板载 LED 的引脚配置为输入引脚。文档说明它们是免费的 i/o,但是当我用示波器探测它们时,它说它们正在输出“高”信号。这是在 MACHXO2 7000he cpld 上,但我认为任何 MACH 板的答案都是相同的。提前感谢您的帮助。

0 投票
1 回答
115 浏览

ios - 默认冰柜 (iOS)

Levin 在他的书Mac OS X and iOS internals: To the Apple's Core 中有一章。与可用于虚拟内存管理的默认冻结器相关。据说它是在osfmk/vm/default_freezer.c

在撰写本文时,这仍然不完整。有谁知道这是否在较新版本的 iOS 中实现?我没有找到很多有关此的文档。

0 投票
1 回答
285 浏览

objective-c - NSWorkspace runningApplications 不返回我的 XPC mach 服务

返回正在运行的应用程序和代理,但我看不到我正在运行的 XPC mach 服务(尽管它正在运行并且在活动监视器进程中可见)

即使我在活动监视器中查找 PID

我得到 res nil,虽然在其他进程中这很好用

0 投票
1 回答
81 浏览

xcode - 在 MacOSX 上构建结构化 mh_bundle 所需的最低命令行参数是什么?

当我使用 Xcode 构建包库时,输出是一个结构化目录,其格式为 bundlename.bundle,其中内部是 Contents 目录、Info.plist 和 MacOS 目录,其中包含包文件。

我想知道在不需要 Xcode 的情况下构建相同的输出。我想了解实现它的必要步骤,以便使用 .pro 文件在 QtCreator 上复制此行为。

有任何想法吗?

0 投票
1 回答
506 浏览

process - 在 Mac OS 中的进程之间共享未命名的信号量

我正在尝试在两个进程之间共享一个未命名的马赫信号量。我可以创建一个并在同一过程中等待它。

但我想将它发送到另一个进程(其中我只有 mach_port_t),然后让它 semaphore_signal 我自己的进程。

我已经尝试过类似的事情:

这将产生一个错误,因为端口名称已经存在于目标进程中,或者如果我没有在目标进程中分配它,则会产生“未知故障”。

乃至:

但是我什至无法从一个进程中获得一个端口来发送任何东西。

我做错了什么,甚至有可能吗?

0 投票
6 回答
6709 浏览

swift - MACH_TASK_BASIC_INFO 的 Swift 指针问题

我正在尝试将 ObjC stackoverflow 答案转换为 Swift 并失败。看起来我正在通过 a UnsafeMutablePointer<mach_msg_type_number_t>,而我应该通过 an inout mach_msg_type_number_t,但我似乎无法解决我的问题。根据我对 Swift 指针文档的理解(不多),这些应该是可以互换的..?

更多信息如下。

这是目标C:

就我在 Swift 中得到的信息而言(多行以便于类型检查)

task_info签名是:

最后一行的错误是:

0 投票
0 回答
109 浏览

ios - 马赫内存映射文件

苹果:

应用程序可用的 VM 调用包括 vm_map 和 vm_allocate,它们可用于将文件数据或匿名内存映射到地址空间

尝试通过下拉到马赫级别来对 iOS 中的某些文件进行内存映射 - 查找文档时遇到问题。

具体来说,试图找出如何memory_object_t使用给定文件创建一个,然后我可以将其与vm_map().

0 投票
1 回答
268 浏览

ios - thread_info 返回 MACH_SEND_INVALID_DEST 而不是 KERN_SUCCESS

对 now的调用thread_info返回MACH_SEND_INVALID_DEST而不是,KERN_SUCCESS我还不明白是什么导致了这种新情况。

这个返回值的原因可能是什么。我传递了一个在asmach_thread_self()内部调用时获得的有效值(即第一个参数)。在进行调用时,操作可能已完成,但仍保留。它是否可能在调用时不再存在的线程上执行?NSOperationthread_act_tthread_info()NSOperationQueueNSOperation

基本上,我想了解操作在线程的用户和系统时间方面花费了多长时间。该操作在其尾部调用异步服务,thread_info()从该服务的完成处理程序中调用。

0 投票
1 回答
471 浏览

grand-central-dispatch - 在 OSX 10.10 上延迟代码执行

我遇到了一个非常奇怪的问题,它影响了仅在 OSX 10.10 系统上运行的代码。我已经在运行我的代码的超过 25 个 OSX 10.10 系统上看到了这种异常情况,而完全相同的代码在升级 (10.7) 之前没有表现出这种行为。此外,这个问题不是 100% 可重现的,因为它随机发生 ~0-5% 的时间。在测试代​​码时,机器上没有发生任何其他关键或 CPU 耗尽的情况。即使发生了其他事情,我所经历的延误实在是太可笑了,这一事实让这个结论看起来很可疑。无论如何,事不宜迟,看看下面的 NSLog 打印:

时间以纳秒为单位。根据 NSLog 时间戳,我们实际上最终等待了 20.68 秒,而不是期望的 0.679 秒。现在,让我们看一下代码:

如果您想知道 mach_wait 是什么,它是一个高分辨率计时器可用的默认值。只包括

但这并不重要,因为如果我将mach_wait_until替换为:

  • sleep()
  • usleep()
  • [NSThread sleepForTimeInterval:]
  • GCD's dispatch_after(,^{});
  • mach_wait_until()

不管我尝试使用哪种延迟方法,我NSLog都会将我的“延迟”值打印到控制台作为健全性检查,以确保它是正确的毫秒数,然后触发上述方法之一。约 95% 的时间它的行为符合规范。但偶尔会随机出现 10-20 秒的延迟。是什么赋予了?这是一些优胜美地内核问题吗?同样,我从来没有经历过在 10.7 上运行相同代码的情况。而且我已经测试了上述所有延迟代码执行的方法。


更新:

根据评论建议,我继续前进sudo dtruss -f -e sudo -u USER MyApp 2> ~/myapps.log。像往常一样,大多数 mach_wait 和 sleep 都按照他们应该的方式行事。所以为了让事情更容易识别,我添加了一个检查,如果实际睡眠持续时间 > 3x 它应该是什么,它会打印出 DELAY ISSUE。运行我的程序并搜索延迟问题。下面列出了在 mach_wait 语句之前和之后的日志打印之间发生的最频繁的系统调用(dtruss 输出):

  • 99613/0xcf33b9: 30250 __semwait_signal(0xD07, 0x0, 0x1) = -1 Err#60
  • 99613/0xcf33b9: 16 workq_kernreturn(0x20, 0x0, 0x1) = 0 0

上述两个电话中大约有 250 多个。可能比 __semwait 多一些 workq。semwait 通常需要大约 30000 个“单位”的时间才能完成,不管是什么。不知道如何 dtruss 时代。这些构成了呼叫的大部分。

  • 752/0xcf3320: 2787191 kevent64(0x3, 0x0, 0x0) = 1 0
  • 752/0xcf335d:189948 选择(0x40、0x7FC080E18220、0x7FC080E13B40、0x0、0x0)= 1 0
  • 752/0xcf335d:1648403 选择(0x40、0x7FC080E18220、0x7FC080E13B40、0x0、0x0)= 1 0

这三个系统调用花费了最长的 # 个时间单位。在我们约 20 秒的等待间隙中,它们每个都出现在输出中一次。

不知道如何处理上面的=X