阅读 309

System Performance 读书笔记 - 操作系统(1)

内核(Kernel)

经典模型中,内核在操作系统结构中的位置如图所示:

image

从里到外分别是:

  • 硬件(Hardware):操作系统运行在的硬件设备。

  • 内核(Kernel):操作系统的核心软件,内核管理着 CPU 调度、内存、文件系统、网络协议以及各种系统设备(磁盘 IO、网络 IO 等等)。通过系统调用提供服务。

  • 系统调用(System Calls):提供访问硬件设备或者内核服务的程序接口。例如 open, close, read, write, ioctl等,需包含头文件unistd.h

  • 系统库(System Libraries):直接用系统调用可能不太方便,我们可以使用封装好的库函数进行编程使用。从图上可以看出,这里其实有个缺口,因为应用也可以不使用系统库而是直接使用系统调用。例如像是 Go 语言运行环境,他就使用了自己封装的系统调用层而不是标准库 libc

目前很多操作系统都在这个模型的基础上做了变种,之后我们会详细分析。

内核执行

经过不断地迭代,内核目前已经非常庞大,有上百万的代码。内核的执行是按需的,例如当用户级别的应用程序发起了系统调用,或者设备发送了一个中断(interrupt)的时候。另外,某些内核线程回异步执行一些维护性的工作,可能包含内核时钟程序以及内存管理任务,但是这些任务都会尽量保持轻量级并只占用很少的 CPU 资源。

像 Web 服务器这种 I/O 密集型的应用(不断的接受请求返回响应),会经常在内核上下文中执行。计算密集型的应用则会尽量不打扰内核,可以不中断地在 CPU 上执行。内核调度器会决定那个线程会运行,哪个会等待,以及调度到哪个 CPU 上。内核会选择硬件缓存更热或者对于这个进程本地性更好的 CPU,来提高性能。

内核态以及用户态

内核态(kernel mode):运行内核程序的时候,CPU 处于的模式即内核态,在这一状态下,设备的一切访问以及各种特权命令执行都是被允许的。内核控制对于设备的访问来实现多进程处理。除非明确指定,否则进程之间或者用户之间的数据是无法互相访问的

用户态(user mode):运行用户程序的时候,CPU 处于的模式。通过系统调用,会从用户态切换到内核态用更高的权限级别执行:

image

用户态切换到内核态是一种模式切换(mode switch),所有的系统调用都会模式切换,某些系统调用还会上下文切换:遇到硬盘 IO 或者网络 IO 的线程会上下文切换到可以运行的线程。这种切换都是有性能损耗的,一般通过如下几种优化来避免:


作者:干货满满张哈希
链接:https://juejin.cn/post/7031349903150284814


文章分类
代码人生
版权声明:本站是系统测试站点,无实际运营。本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 XXXXXXo@163.com 举报,一经查实,本站将立刻删除。
相关推荐