美文网首页
OS X and iOS Kernel Programming

OS X and iOS Kernel Programming

作者: BassetHoud | 来源:发表于2019-08-22 10:57 被阅读0次

    PAE:Physical Address Extension 物理地址扩展

    PCM:Pulse Code Modulation 脉冲编码调制

    HAL:hardware abstraction layer 硬件抽象层

    GUID:Globally Unique Identifier 全局唯一标识符

    1.为了提高系统的安全性和稳定性,现代操作系统将操作系统核心代码(内核)与应用程序、用户运行的服务程序分离。任何作为内核的一部分运行的代码(如驱动代码),都要在“内核空间”中运行。运行在内核空间中的代码被授予特权,如可以直接读写连接到计算机上的硬件设备,但标准的用户应用程序不享有该特权。

    2.用户空间中运行的软件无法直接访问硬件。用户代码必须向内核发送请求,让内核代表应用程序执行任务。应用程序只能通过调用操作系统发布给用户空间代码的函数访问内核。

    3.操作系统为每个进程提供了一段可操作的内存,我们称之为进程的地址空间。地址空间是动态的,它在进程执行期间随其内存分配而发生变化。

    4.在现代操作系统中,内核都拥有自己的地址空间。它可以独立操作所有运行的进程。

    5.内核是一个享有特权的进程,能够执行一些用户无权执行的操作,这些操作是配置系统时必不可少的。

    6.有了虚拟内存,操作系统便可以使用次级存储器(如硬盘)上的后备存储空间,保存无法放到RAM中的进程的地址空间。

    7.作为启动进程的一部分,操作系统会创建一个表,保存进程的虚拟地址空间及其对应的物理地址之间的映射关系,这个表称为“分页表”。

    8.尽管内核代表用户进程处理请求,但它还有自己的地址空间,因此常常需要复制参数或将其从进程的地址空间映射到内核的地址空间。

    9.调度器有两个作用:防止CPU闲置,否则会浪费宝贵的硬件资源;让所有线程公平的访问CPU,防止因单个线程独占CPU而导致其他线程无法运行。在Mac OS X上,默认的时间量子(线程超时)是10毫秒。

    10.线程在等待操作(如从磁盘读取数据或另一个线程返回结果)完成时,将不能执行。调度器会让另一个线程在CPU上运行,从而阻塞原来的线程。线程还可以调用sleep()函数,自动放弃CPU时间。

    11.地址空间切换(上下文切换)这一操作的代价很高。

    12.除了硬件抽象,Mach层还负责线程调度。Mach支持对称多处理(SMP),可以在多个CPU或CPU核心之间调度进程。

    13.Mach中定义了3个主要的时钟:实时时钟、日历时钟和高分辨率时钟。

    实时时钟记录上一次启动的时间,实时时钟的时间通常来自于计算机主板上的晶振电路,并被连接到CPU的中断引脚。

    日历时钟通常使用电池。

    秒分辨率,顾名思义,它用于记录当前时间。

    14.IOKit对系统硬件进行抽象。苹果用C++实现了IOKit。OSObject是IOKit中所有对象的基类。

    15.物理地址是指CPU为访问物理内存而使用的寻址系统。通常物理地址隐藏在CPU的MMU(内存管理单元)之后。

    16.内存映射提供了一个快捷方式,使任务无须复制内存便可以共享资源,因为映射使相同的内存可以在任务之间使用。内存映射可以在多个任务之间、从内核到用户空间任务或从用户空间任务到内核之间以各种不同的方式进行。

    17.goto经常用在内核代码中,是集中清理错误的便捷方式,代替内核中不可以使用异常机制。

    18.unmap()函数并不是简单的减少引用计数并在计数为0时移除映射,而是销毁映射,无论它被引用了多少次。

    19.可以使用一个指令序列,其行为看起来就像单个指令。这称为“原子”操作,因为操作结果就像该指令序列作为单独、不可分割的组执行一样。原子操作的实现需要CPU的支持。

    20.获得独占访问的行为称为“获得一个锁”。

    21.线程试图获得已经被使用的互斥锁时,将被挂起,直至锁可用。

    22.条件变量提供了一种机制,其中线程可以暂停其执行,直至特定的条件(或事件)发生,从而实现在多个线程之间同步。

    23.仅当一个线程希望写入共享资源或对其进行修改时,才需要独占访问。该问题可以通过指定的互斥类型来解决,这种互斥类型称为读写互斥(读写锁)。调用者必须确定读写互斥是用于读取共享资源(在此种情况下,可以与其他的读者共享互斥)还是用于写入共享资源(在此种情况下,需要独占访问互斥)。

    Mach读写锁可以从共享的读访问升级为独占的写访问。

    24.工作环:某个事件发生后,对应的事件源将会通知工作环。工作线程将被唤醒,处理该事件,然后再返回至睡眠状态。

    25.内核中的网络支持主要位于BSD层。

    26.从用户空间的应用程序角度来看,网络服务通过BSD/POSIX套接字API,使用connect(),listen()和bind()等函数进行访问。

    27.Mac OS X预装了一些可以调试网络问题的工具,最值得注意的就是命令行工具tcpdump和netcat

    链接:https://pan.baidu.com/s/1DLIWQAnOxhRknPfgk-pocw

    密码:e1pt

    WechatIMG17.png

    相关文章

      网友评论

          本文标题:OS X and iOS Kernel Programming

          本文链接:https://www.haomeiwen.com/subject/lsagsctx.html