OS X与iOS内核编程[试读]
第一章:操作系统原理
操作系统的作用是为用户提供应用软件的运行环境。用户运行应用程序时所执行的任务依赖于操作系统提供的服务,然而,操作系统执行任务时,许多情况下都无需用户甚至程序员的干预。例如,应用程序从硬盘读取文件时,程序员只需调用操作系统提供的函数即可,执行读取的特定步骤完全交由操作系统处理。程序员不用了解从计算机硬盘中读取文件与从外部USB闪存中读取文件有什么不同,这是操作系统关心的事情。 绝大多数程序员都开发过很多用户使用的代码,他们可能还会使用框架(如Cocoa)提供图形化用户界面与用户进行交互。Mac或iPhone应用商店提供的所有应用程序都属于这一类。本书讲述的不是应用软件开发,而是内核扩展开发,... 查看全部[ 第一章:操作系统原理 ]
1.1 操作系统的作用
作为启动序列的一部分,操作系统决定系统的硬件配置,搜索连接到USB接口或插入PCI扩展槽的外部设备,对它们进行初始化,如有必要,在初始化时加载驱动程序。 操作系统完成加载后,用户便能运行应用软件。应用软件可能需要分配内存或向磁盘写入文件,这些请求均由操作系统处理。对用户而言,操作系统的参与基本上是透明的。 操作系统在运行的应用程序和物理硬件之间提供了一个抽象层。应用程序一般通过向操作系统发出高层请求与硬件通信。因为这些请求由操作系统处理,所以应用程序可能完全不知道其运行环境的硬件配置(如RAM的数量、磁盘存储器是内部SSD还是外部USB驱动器)。 这个抽象层可以使应用软件在多种不同的硬件... 查看全部[ 1.1 操作系统的作用 ]
1.2 进程管理
通常,用户在计算机上安装了许多应用程序,而且这些应用程序都是纯被动实体。磁盘上的程序所包含的数据仅在程序运行时需要,这些数据由可执行代码和应用程序数据组成。当用户启动应用程序时,操作系统会将程序的代码和数据从磁盘加载到内存中,并开始执行代码。一个正在执行的程序称为“进程”。与程序不同,进程是主动实体,由程序执行期间单个实例的状态快照组成。其中包括程序代码、程序分配的内存以及当前的执行状态,如程序当前正在执行的函数的CPU指令、变量内容和内存分配情况。 通常,系统会同时运行许多进程。其中包括用户启动的应用程序(如iTunes或Safari)、操作系统自动启动的进程和不提示用户而运行的进程。例如... 查看全部[ 1.2 进程管理 ]
1.3 进程地址空间
尽管任意时刻会有许多进程同时运行,但每个进程都觉察不到系统有其他进程在运行。实际上,在没有显式代码的情况下,一个进程无法与另一个进程交互,也不能对其行为产生影响。 操作系统为每个进程提供了一段可操作的内存,我们称之为进程的地址空间。地址空间是动态的,它在进程执行期间随其内存分配而发生变化。如果一个进程试图读/写其地址空间外的内存地址,操作系统通常会将其终止,并通知用户该应用程序已经崩溃。 尽管受保护的内存并非新生事物,但也是近十年才出现在用户的桌面系统中。在Mac OS X之前,Mac OS 9上运行的进程可以读/写任何内存地址,即使该地址是由另一个进程分配的缓冲区或属于操作系统本身。 ... 查看全部[ 1.3 进程地址空间 ]
1.4 操作系统服务
在现代操作系统中,操作系统和应用程序执行的函数之间具有明确的界限。每当进程希望执行一个任务(如分配内存,从磁盘中读取数据,或通过网络发送数据)时,必须使用一组系统定义好的编程接口访问操作系统。malloc()、read()等系统函数,都是提供操作系统服务的系统调用。我们可以直接通过应用程序,或间接通过高级开发框架(如Mac OS X上的Cocoa框架)执行这些系统调用。Cocoa框架内部也是基于相同的系统调用实现的,它们访问操作系统服务时也要调用底层函数(如read())。 但因为用户进程无法直接访问硬件或操作系统结构,所以它们需要调用read()等函数打破进程地址空间的限制。利用函数调用操... 查看全部[ 1.4 操作系统服务 ]
1.5 虚拟内存
计算机系统中的RAM资源有限,由系统上所有运行的进程竞争共享。当系统运行多个应用程序时,所有进程分配的内存总量会超过系统上RAM的数量,这很正常。 操作系统支持虚拟内存,这样进程就可以分配和使用比系统上安装的RAM数量还要多的内存。也就是说,进程的地址空间不受物理RAM数量的限制。有了虚拟内存,操作系统便可以使用次级存储器(如硬盘)上的后备存储空间,保存无法放到RAM中的进程的地址空间。然而,CPU仍然只能访问RAM中的地址,因此,操作系统必须在磁盘后备存储空间和RAM之间交换数据,以便能在进程运行时访问内存。 在特定时刻,进程可能只需要使用分配的总内存的一小部分,我们称之为进程的工作集。... 查看全部[ 1.5 虚拟内存 ]
1.6 调度
在计算机系统中,另一种争用激烈的资源是CPU。执行每个进程都需要访问CPU,但通常一些想要访问CPU的进程比系统上的CPU内核更活跃。因此操作系统必须在运行的进程之间共享CPU内核,保证每个进程都可以正常访问CPU,从而顺利执行。 我们已经知道,进程彼此独立运行,都有各自的地址空间,以防止一个进程影响其他进程的行为。但在许多应用程序中,让两个独立执行的路径同时运行,而且不受每个路径必须在各自地址空间中运行的限制,这样做非常有用。这一执行单元被称为“线程”。多个线程都执行同一程序的代码,并在同一进程中运行(从而共享相同的地址空间),但却彼此独立。 对于操作系统来说,线程是调度的基本单位;当操... 查看全部[ 1.6 调度 ]
1.7 硬件和驱动程序
除了管理基本的硬件资源(如CPU和内存),操作系统还负责管理系统上添加的硬件外设,包括键盘和鼠标、USB闪存驱动器、显卡等。尽管操作系统负责管理这些设备,但需要借助驱动程序才能实现。可将驱动程序看做运行在操作系统内核中的插件,它可以使系统与硬件设备进行交互。 支持硬件设备的代码位于设备自身(称为固件)和计算机(称为驱动程序)这两个位置。驱动程序的作用是代表操作系统控制硬件设备。驱动程序代码载入操作系统内核之后,会与内核的其他部分享有相同的权限,如直接访问硬件。 驱动程序在设备插入计算机(或计算机启动)时负责对硬件进行初始化,将操作系统的请求转换为一系列硬件特有的操作,然后由硬件执行这些操作... 查看全部[ 1.7 硬件和驱动程序 ]
1.8 小结
操作系统负责管理计算机的硬件资源。它为用户程序提供了计算机系统的抽象模型,使每个程序好像都能完全访问CPU和整个内存。用户运行的程序若不向操作系统提供的服务发出请求,就无法访问硬件。在处理与外围硬件设备相关的服务时,操作系统可能需要调用该设备的驱动程序所提供的函数。 接下来几章将把本章阐述的概念付诸于实践,介绍Mac OS X提供的各种接口,功能涉及允许驱动程序使用虚拟内存地址和物理内存地址、响应来自用户应用程序的请求,以及与PCI和USB设备通信。... 查看全部[ 1.8 小结 ]
书名: OS X与iOS内核编程
作者:
出版社: 人民邮电出版社
原作名: OS X and iOS kernel programming
译者: 贾 伟 | Douglas Clarke
出版年: 2013-6
页数: 400
定价: 89.00
装帧: 平装
ISBN: 9787115318244