基本概念(Fundamental concepts)
内核 (The Kernel)
操作系统 (operating system) 通常有 2 种 不同含义:
1. 指 完整的软件包 。 这 包括 管理计算机资源的核心软件 和 所有 附带的 标准 软件工具 , 如。。。。
//consisting of ... and ..... 翻译为 “ ,这包括 .... 以及/和 ......
2. 狭义地(More narrowly) 指 核心软件,它(that) 管理和分配 计算机资源 (如: CPU, RAM, devices)
Kernel 通常 指 第二种含义。本书中的 operating system 也是 这种含义。
//A of B 翻译为 “ B的 A"
内核的职责 (Tasks performed by the kernel)
process scheduling (进程调度)
Linux 是一个 preemptive multitasking operating sysytem (抢占式多任务操作系统)。 Preemptive 抢占 意味着 一组管理规则,
哪些进程能获得cpu 及 能使用多长时间 这些都由 kernel 进程调度来决定 (而不是进程本身)。
内存管理(Memory management)
Linux 采用 虚拟内存管理。这个技术有2个主要的优势
进程被隔离 与另一个进程 ,与内核。所以一个进程不能 读 或修改 另一个进程 的 或 内核的 内存。
A are ..ed . from B . and from .. c ->
只需要进程的一部分被保存在内存中, 这使 降低了 进程对每个内存的 需求量,并且允许(allowing) RAM 可以同时拥有 更多的进程
by the standards of a decade or two gage 以 一二十年前的标准来看
提供了文件系统(Provision of a file system)
创建 终止 进程 (Creation and termination of processes)
内核可以将 一个 新程序 加载到内存 ,并 为它分配资源 (如 CPU ,内存, 访问文件);一旦 一个进程 结束了执行,kernel 会确保它使用的资源被释放,为了之后的程序 可以重新使用。
访问设备(Access to devices)
计算机外接设备(如 鼠标,键盘,硬盘 等)
网络(Networking)
提供系统调用API (Provision of system call application programming interface(API)
内核态和 用户态 (Kernel mode and User mode)
现在处理架构 一般都允许 以 至少 两种 模式 去运行 CPU : 用户模式 和 内核模式(Kernel mode ,也是supervisor mode)。
相应地,虚拟内存 也被 标记为 user space 和 kernel space 。当 CPU 运行在user mode , CPU 仅仅可以访问被标记为user space 的内存;尝试去访问 kernel space ,将会导致硬件异常。当CPU运行在kernel mode,CPU 可访问 内存的 user space 和memory space。
当处理器在 kernel mode 下运行,才能执行特定的操作。这样的例子包括: 执行(hat instruction)去 停止系统,访问 内存管理 硬件,初始化 I/O 操作的初始化。这确保了 user proccess 不能访问内核执行 和内核数据结构,也无法执行 操作系统不建议的操作。
系统的 进程视角 vs 系统的 内核视角(Process versus kernel views of the system)
在许多的日常编程任务中,我们习惯于 以 面向进程(process-oriented) 的方式来编程。然而 转变我们的观点 “以kernel的角度“来考虑 是很有用和必要的。为了凸显两者的差异,我们从 进程的角度 和 内核的角度 来 看看系统。
从进程角度看:一个运行着的系统通常有许多的进程。对于一个进程来说,许多 事情 异步地发生。一个执行中的进程,它不知道:退出占有cpu是何时,哪一个其它的进程 将会被CPU 调度、并且也不知道以何种顺序被调度,它下次什么时候被调度。信号的传递 和 进程间通信事件的触发 都有内核协调, 对进程而言在任何时候都可能发生。许多事情 的发生对进程来说 都是透明的,进程一无所知。进程不知道它 在 RAM中的位置,更通用的说法是,进程空间的某块特定部分是 驻留在内存中 还是被保存在交换空间李,进程本身不知道。类似地 ,进程也不知道 它访问的文件在硬盘的何处,它只是通过名称来访问。进程操作 处于 隔绝状态,与另一个进程的交流不是直接地。进程不能够创建进程,哪怕自我 结束 也不能。最后,进程不能够 直接地 和外部的 输入输出设备交流。
从内核角度看:内核控制着每一件事。内核决定哪个进程下次将获得CPU的访问权,及何时他将执行,及使用多长时间。内核维护了数据结构,这个数据结构的信息包含了所有运行着的进程 ,这个数据结构 随着进程被创建,更新,结束 而被更新。内核维护者底层数据结构,它使 文件名 转换为 硬盘上实际的存储的位置。内核也维护者这样的数据结构,它维护着 每个进程的虚拟内存 和 计算机物理内存及交换区 的映射关系。内核 会响应 进程的请求,创建进程,终止进程。内核负责 和 输入 、输出设备的通信。
在本书后续,我们常说 如“ 进程 可以创建另一个进程, 一个进程可以创建管道(pipe),一个进程可以写数据到 文件,一个进程可以通过调用 exit() 来终止。记住,以上,都是内核 来协调 如此这些 动作, 这些描述语句 都是 “一个进程可以请求内核创建另一个进程”,以此类推。
Shell