Linux kernel space & user space
kernel space & user space
kernel space
kernel(内核),是基于硬件的第一层软件扩充,是操作系统的核心,提供操作系统最基础的功能,是操作系统的基础。它为众多应用软件提供计算机硬件的安全访问的一部分软件,这种访问资源是有限的,并且内核决定一个程序对某部分硬件资源分配和占用多久进行管理。直接去硬件操作是非常复杂的,所以内核通过提供硬件抽象的方法来完成操作,硬件的抽象隐藏了复杂性,对软件提供和硬件交互的一个简洁的接口,使程序设计更为简单。
内核是计算机硬件与进程之间的核心接口,负责二者间通信,并尽可能得高效管理资源。
通俗理解:个人助理(内核)负责安排高管(硬件)与公众/员工(进程)间的会晤,并记录会晤的地点、时间。
为什么要区分 kernel space & user space
意义:可以提高操作系统的稳定性与可用性
~在CPU的所有指令中,有些指令(清空内存指令、时钟指令)是非常危险的,一旦错用,将会导致操作系统的崩溃。如果允许所有的程序都可以使用这些指令,那么操作系统崩溃的概率将会大大增加。
~进程在内核空间运行时处于内核态;进程在用户空间内运行时处于用户态。
~在内核态下,程序可以使用CPU中的任何指令,调用系统一切资源,运行的代码不受任何限制,可自由访问任何有效地址,可直接进行端口访问;在用户态下,程序仅可以使用CPU中的部分指令,且受到CPU的诸多检查,不能直接调用系统资源,必须通过系统接口向内核发出指令,运行的代码受到限制,仅可访问授权地址,仅可访问授权端口。
~对于linux而言,通过区分 kernel space 和 user spcae 的设计,隔离了操作系统代码和应用程序代码。即使单个的应用程序代码出现错误,也不会影响到整个操作系统的稳定性,而其他的程序仍可正常运行。
kernel space 的主要作用
- 进程管理
内核负责创建和销毁进程,并处理它们与外部世界的联系(输入和输出)。不同进程间通讯(通过信号、管道、或者进程间通信原语)对整个系统功能而言是基本的,也由内核处理。另外,调度器,控制进程如何共享CPU,是进程管理的一部分。更通常的,内核的进程管理活动实现了多个进程在一个或几个CPU上的抽象。 - 内存管理
计算机的内存是最主要的资源,处理它所用的策略对系统性能是至关重要的。内核为所有进程的每一个都在有限的可用资源上建立了一个虚拟地址空间。 - 文件系统
linux在很大程度上基于文件系统的概念。几乎linux中的任何东西都可看作一个文件。内核在非结构化的硬件之上建立了一个结构化的文件系统,结果是文件的抽象非常多地在整个系统中应用. 另外, Linux 支持多个文件系统类型, 就是说, 物理介质上不同的数据组织方式. 例如, 磁盘可被格式化成标准 Linux 的 ext4文件系统, 普遍使用的 FAT 文件系统, 或者其他几个文件系统。 - 设备管理(硬件驱动)
几乎每个操作系统最终都映射到一个物理设备上。除了处理器、内存和非常少的实体之外,全部中的任何设备控制操作都由特定于要寻址的设备相关代码来实现,这些代码称为设备驱动。内核中必须嵌入系统中出现的每个外设的驱动,从硬盘驱动到键盘和磁带驱动器.。 - 网络管理
网络必须由操作系统来管理, 因为大部分网络操作不是特定于某一个进程: 进入系统的报文是异步事件. 报文在某一个进程接手之前必须被收集, 识别, 分发. 系统负责在程序和网络接口之间递送数据报文, 它必须根据程序的网络活动来控制程序的执行. 另外, 所有的路由和地址解析问题都在内核中实现。