Low-Level Programming:Kernel

Low-Level Programming:Kernel_第1张图片

Kernel

什么是内核呢?内核协作着硬件和软件之间的输入和输出。它是操作系统最关键的一部分,正是因为它,程序开发者可以不需要考虑底层硬件设备,自由地编写代码。

Apple 操作系统有很多有趣的故事!

Apple , Next, &Be

乔布斯因为一些原因,离开了Apple公司,并加入一家新的公司-NEXT,这家公司专门生产基于NEXTSTEP操作系统的硬件。

NeXTSTEP是一个面向对象的多任务操作系统,以MachBSD为基础,以Objective-C作为本地语言,具有先进的GUI接口。

后期,苹果公司收购了NEXT公司,以NeXTSTEP为基础,开发出了以Darwin(达尔文)为核心的Mac OS X操作系统。

Darwin

OS X是操作系统的一个集体名称,操作系统有很多组件,Darwin 就是其中一个。

Darwin是操作系统的类UNIX核心,本身由XNU内核、runtime以及I / O设备驱动的框架组成。

XNU 是Darwin的内核,它是“X is not UNIX”的缩写,它是一个混合内核,由Mach微内核和BSD组成。

Mach 内核是轻量级的平台,只能完成操作系统最基本的职责,比如:进程和线程、虚拟内存管理、任务调度、进程通信和消息传递机制。所以其他工作无法完成,任何额外的功能,例如文件操作和设备访问,都由 BSD 层实现。

BSD

BSD 层建立在 Mach 层之上,这一层提供更现代化的 API,具有更高层次的抽象,。其中包括:POSIX线程模型、网络协议栈、文件系统、设备访问等

我们经常谈到的沙盒机制、GCD,就是在BSD基础上实现的。

Mach-O

Mach-O 是Mach object文件格式的缩写,是一种可执行文件、目标代码、共享程序库。iOS 、OS X 、NEXTSTEP 正是使用了这种独有的二进制格式。

Darwin Additions

从内核和操作系统的角度来看,iOS 可以看成 OS X精简之后的版本,但是有一些区别

  • iOS 的架构是基于ARM 而不是Intel x86 或 x86_64。
  • XNU 虽然是开源的,但是iOS 的内核源码保持闭源

Basic Security Module

Darwin 加入了 Sun 公司的BSM(basic security module,一个审计系统,最早源于 Sun Solaris),可以对用户和进程的行为进行追踪,这个系统对OS X的价值最大,而对iOS 这样的移动系统不是很有意义,因此在后者上并没有启用审计。

Mandatory Access Control

强制访问限制(MAC):限制特定进程对具体文件或资源(例如:套接字和 IPC)的访问权限。这个特性最早属于 TrtstedBSD,并在 OS X 10.5的时候被加入到 OS X系统中。

MACOS X沙盒机制和 iOS Entitlements机制(这个阶段可以先看成更严格的沙盒机制)的基础机制

JetSam

OS X 和 iOS 实现了一个低内存情形的处理机制,称为Jetsam,或者称为memorystatus,这个机制类似与linux上的 “out of memory”jetsam会监控内存的使用情况,会杀掉消耗太多内存的进程。

launchd 进程是内核直接启动的第一个用户态进程,它负责管理系统中的其他进程。那么launchd就采用了Jetsam机制。这种机制会维护两个表,一个是快照列表,保存系统中所有进程的状态以及消耗的内存页面数;还有一个是优先级列表,保存要杀掉的备选进程。这种机制在 iOS 中是非常有用的,可以保证在前台和后台没有过度使用内存的进程。

如果一个程序被标记为被杀掉的备选进程,应用程序可以通过以下方法来做一些处理

UIApplicationDelegate - applicationDidReceiveMemoryWarning:  
              
UIViewController -didReceiveMemoryWarning 
      
UIApplicationDidReceiveMemoryWarningNotification

Kernel Address Space Layout Randomization

地址空间布局随机化:进程每一次启动,地址空间都会简单地随机化。

对于大多数应用程序来说,地址空间随机化是一个和他们完全不相关的实现细节,但是对于黑客来说,它具有重大的意义。

如果采用传统的方式,程序的每一次启动的虚拟内存镜像都是一致的,黑客很容易采取重写内存的方式来破解程序。采用ASLR可以有效的避免黑客攻击。

I/O Kit

I/O Kit的源码开源了,你可以在这里下载

I/O Kit既不属于mach也不属于BSD,它是由NEXTSTEPDriverKit改进而来,DriverKitObjective-C编写,但是I/O Kit使用C++。同时I/O Kit是一个自包含的运行时环境,就是说编写的依赖于I/O Kit API的代码,可以不用考虑Mach层和BSD层的存在。

I/O Kit 由很多不同的族(Family)组成,每个族都定义了抽象的类和具体的类

  • ADB(Apple Desktop Bus)
  • AGP(Accelerated graphics port)
  • ATA & ATAPI(ATA packet interface)
  • Audio
  • Fire Wire
  • Graphics
  • HID(Human interface devices)
  • Network
  • PCI
  • SBP
  • SCSI
  • Serical
  • Storage
  • USB(Universal Serial Bus)

这应该是概述,后面有更深入的分析,期待ing!

这是关于 Low-Level Programming 的读书笔记, 如果有理解错误,望留言告知

你可能感兴趣的:(Low-Level Programming:Kernel)