BSD概述
OS X内核的BSD部分主要起源于FreeBSD(4.4BSD的一个版本),提供高级网络、性能、安全性、兼容性的功能。BSD变体起源于4.4BSD-Lite Release 2(加利福尼亚大学伯克利分校计算机系统研究小组)BSD提供了许多高级功能,其中包括:
-
具有动态优先级调整的抢占式多任务处理,即使是在高负载的情况下,也可以确保app之间,用户之间流畅公平的共享计算机资源。
-
多用户访问。多人可以同时使用OS X系统进行各种操作。例如,系统外设(打印机和磁盘驱动器)在系统或者网络上的所有用户之间正确的共享。并且可以对用户或者用户组设置单独的资源限制。从而保护关键系统资源免于过度使用。
-
强大的TCP/IP网络,支持SLIP,PPP,NFS等行业标准。OS X可以轻松的和其他系统交互,也可以充当企业服务器,提供重要功能,例如NFS(remote file acess)和电子邮件服务,或者internet服务例如HTTP,FTP,路由,防火墙(安全)服务。
-
内存保护,应用程序不可以不可以相互干扰,一个应用程序崩溃不会以任何方式影响其他应用程序。
-
虚拟内存和动态内存分配,满足大内存需求应用程序的同时,也能保持对用户交互的响应。使用OS X中的虚拟内存,每个应用程序都可以访问自己的4G内存地址空间;这可以满足需要大量内存的应用程序。
-
支持基于Mach 线程的内核线程。用户级线程包是使用内核线程实现的。每个内核线程是一个独立调度的实体。当用户进程的一个线程在系统调用中阻塞时,同进程的其他线程可以继续执行。默认情况下,常规意义上的进程有一个线程——主线程。用户进程使用POSIX线程API创建其他用户线程。
-
SMP支持,包含对具有多个CPU的计算机的支持。
-
源代码。开发者可以最大程度的控制BSD编程环境,因为包含源代码。
-
许多POSIX API
BSD功能
用户进程可用的功能在逻辑上分为两个部分:内核功能和服务进程实现的系统功能。
内核实现的功能定义了每个进程运行的虚拟机。和许多真实的机器一样,虚拟机又内存管理,中断功能,定时器,计数器。
虚拟机还允许通过描述符访问文件和其他对象。每个描述符类似设备控制器,支持一组操作。就像真实机器上的设备一样,有些是在机器内部,有些是在外部,描述符机器的一部分是内建在操作系统,一部分是在服务进程中实现。
BSD组建提供以下内核工具:
- 进程和保护
- 主机和进程id
- 进程创建和终止
- 用户和组id
- 进程组 - 内存管理
- text, data,stack,动态共享库
- 映射页
- 页保护控制 - POSIX同步原语
- POSIX共享内存
- 信号
- 信号类型
- 信号处理器
- 发送信号 - 时间和统计
- 真实时间
- 间隔时间 - 描述符
- 文件
- 管道
- socket - 资源控制
- 进程优先级
- 资源使用和资源限制
- 配额 - 系统操作支持
- 引导操作
- 关机操作
- 账户
BSD系统功能(可与用户空间交互的功能)包括
- 通用输入/输出操作,例如读和写,无阻塞,异步操作。
- 文件系统操作
- 进程间通信
- 处理终端和其他设备
- 进程控制
- 网络操作
OS X和BSD之间的不同
尽管OS X中的BSD主要起源于FreeBSD,也做了一些改动:
- 用于内存管理的sbrk()系统调用被弃用,这个函数在OS X中不推荐使用。
- OS X运行时模型runtime对可执行文件和共享库使用不同的对象文件格式,执行一些可执行文件使用不同的机制。主要的原生格式是Mach-O。动态链接器dyld支持此格式。
- CFM(code fragment manager)支持PEF二进制文件格式
- 内核通过Mach-O二进制文件支持execve()。Mach-O动态共享库的映射和管理,和基于PEF的应用程序的启动,由用户空间代码完成。
- OS X不支持通过mmap()函数内存映射的设备(图形设备支持和其他系统提供类似功能,但使用不同的API)。在OS X中,这个接口应该通过用户客户端完成,有关其他信息,参阅Apple I/O Kit 文档。
- 不支持swapon()调用;macx_swapon()是Mach pager的等效调用。
- OS X中The Unified Buffer Cache的实现,与FreeBSD中不同。
- Mach提供许多UNIX中不没有IPC原语。有关Mach IPC更多信息,参见Boundary Crossings。支持某些系统V原语。但不建议使用他们,以支持POSIX等效项。
- 为了支持单用户和多管理员配置,对BSD的安全模型做了几处更改。包括能够逐卷禁用所有权和权限。
- 内核中使用的锁机制,与FreeBSD中使用的有很大不同。
- OS X中使用的内核拓展机制是完全不同的。OS X驱动层,I/O Kit,使用C++编写的面向对象驱动栈。通用的内核编程接口用于编写非驱动程序内核拓展。这些机制在分别在I/O Kit Overview and KPI Reference中进行了介绍。
此外一些新功能添加到OS X(Darwin),这些功能是FreeBSD没有的
- 增强文件系统缓存区和文件I/O集群
- 适应性和推测性的预读
- 用户进程控制的预读
- time aging of 文件系统缓冲区缓存
- 文件系统支持的增强
- ISO-9660文件系统的Apple拓展的实现
- NFS多线程异步I/O
- 添加系统调用以支持Mac OS Extended(HFS+)文件系统
- macOS拓展文件系统中访问多个派生所必需的路径名命名约定的补充
浙公网安备 33010602011771号