立即领取|华润集团、宁德核电、东风岚图等 20+ 标杆企业数字化人才培养实践案例 了解详情
写点什么

三种流行操作系统的内核比较

  • 2009-08-21
  • 本文字数:2626 字

    阅读完需:约 9 分钟

本文的灵感来自于 Max Bruning 对 Solaris、BSD 和 Linux 的看法。准 Unix 系统之间优缺点的比较已经是老生常谈了。不过,本文探讨了三种最新发布的操作系统 ——OpenSolaris、Windows Vista 和 Linux kernel 2.6 的内核子系统。之所以选择它们是因为它们在商业环境和开发社区中使用最广泛、最受欢迎。

评价一种操作系统存在很多标准,但是毫无疑问,操作系统在计算机科学领域的角色始终不变。我们可以从以下三个目标来分析:

  • 效率:支持系统资源(特别是硬件)以有效的方式运转。
  • 演变:唯一不变的事物就是变化本身。操作系统应该恰当地构建以支持在不影响原先系统服务的情况下开发和引入新的系统函数。
  • 用户友好性:每天我们都需要面对操作系统。用户友好的界面是必须的,否则不论上面两个目标做的如何出色你都会被抛弃。

显然,操作系统需要各种功能,如进程 / 线程管理(以特定的调度机制分配和调用线程)、内存管理和文件管理。我们依次比较这些子系统。(用户友好性不在本文讨论之列,我们将关注于内核。)Linux 和 OpenSolaris 之间有些概念类似,但 Windows Vista 则差别很大。

进程和线程管理

OpenSolaris

OpenSolaris 实现了多层次的线程支持,以便灵活地利用处理器资源。下面四种概念来自于 OpenSolaris。

  • 进程:这是正常的 UNIX 进程,包括用户地址空间、栈和进程控制块。
  • 用户级线程:通过进程地址空间的线程库实现,这些线程对操作系统是透明的。用户级线程(ULT)是进程内部用户创建的执行单元。
  • 轻量级进程:轻量级进程(LWP)可以被看做是用户级线程和内核线程的一种映射。每一个轻量级进程支持用户级线程,并映射到一个内核线程上。轻量级线程由内核独立调度,能够在多处理器中并发执行。
  • 内核线程:这些线程是基本的实体,可以在系统处理器上调度和分发运行。

如图 0 所示,ps -Lec 命令显示了系统进程和线程。

图 0 Solaris 10 update 6 输出

图 1 显示了四种实体的关系

图 1 Opensolaris 线程模型 1

OpenSolaris 三种层次的线程结构(ULT、LWP、内核线程)有利于操作系统管理线程,并为应用程序提供了清晰的接口。

用户线程接口是一个标准线程库。ULT 映射到 LWP 上,LWP 由操作系统管理,定义了执行的状态。LWP 被绑定到内核线程上,在执行状态中一一对应。因此,并发和执行在内核线程层面上管理。

此外,应用程序可以通过应用程序接口(API,由系统调用构成)访问硬件。API 支持用户调用内核服务执行特权任务,例如读写文件、对设备发出控制指令、创建新进程或线程、为进程分配内存,等等。

线程模型的变化造成了进程数据结构的修改。OpenSolaris 保留了基本的结构,去掉了进程状态块,取而代之的是包含每一个 LWP 的数据块结构。

LWP 数据结构包含以下元素:

  • LWP 标识符
  • LWP 的优先级和支持它的内核线程
  • 信号掩码,告知内核能够接受哪些信号
  • 用户级寄存器的保存值(LWP 不处于运行状态时)
  • 针对 LWP 的内核栈,包括每一层调用的系统调用参数、结果和错误代码
  • 资源使用和配置数据
  • 对应内核线程的指针
  • 对应进程结构的指针

图 2 Solaris 进程结构和传统 Unix 进程结构的区别

Windows Vista

Vista 进程的设计目标是支持若干操作系统环境。相应的,由 Windows 内核提供的原生进程结构和服务相对简单和通用,支持各个操作系统子系统实现特定的进程结构和功能。以下是 Windows 进程的重要特征:

  • Windows 进程以对象的形式实现。
  • 一个可执行的进程包含一个或多个线程。
  • 进程和线程对象都具有内建的同步机制。

图 3 2 展示了一个进程如何与它控制或者使用的资源关联。每一个进程被赋予一个安全访问令牌,称为进程的主令牌。

图 3 Windows 进程和它的线程

当用户首次登陆时,Vista 创建一个访问令牌,包含用户的安全 ID。该用户创建或者运行的每一个进程都有该访问令牌的拷贝。Windows 使用该令牌验证用户访问安全对象或者在系统和安全对象上执行受限函数的合法性。该访问令牌控制着进程能否改变自己的属性。在本例中,进程没有指向访问令牌的句柄。如果进程尝试打开这样一个句柄,安全系统将决定这是否合法和进程是否可以改变自己的属性。

同时,与进程关联的还有一系列定义虚拟地址空间的数据块。进程不能直接修改这些结构,只能依赖于虚拟内存管理器,它提供了进程的内存分配服务。

最后,进程包含了一个对象表格,记录了进程所知的其他对象的句柄。每一个对象包含的每一个线程都有一个句柄。

此外,进程可以访问一个文件对象和定义共享内存的节对象。

Windows 面向对象的结构有利于通用进程函数的发展。Windows Vista 利用两种进程相关的对象:进程和线程。在 OpenSolaris 中,进程是对应用户任务或者应用的实体,拥有内存、文件等资源。线程是工作任务的一个可分发单元,可中断,因此处理器能够切换到另一线程。

Windows Vista 支持进程之间的并发,因为不同进程里的线程可以并发执行。而且,同一进程里的多线程可以被并发的分配给各个处理器执行。多线程进程无需使用多进程即可实现并发。同一进程内的线程可以通过它们的通用地址空间交换信息和访问进程的共享资源。不同进程内的线程可以通过两个进程搭建好的共享内存交换信息。

面向对象的多线程进程可以有效的实现服务器应用。例如,一个服务器进程可以伺候多个客户端请求。

Linux Kernel 2.6

在 Linux 中,进程或者说任务由 task_struct 数据结构表示。 task_struct 包含了一系列信息:

  1. Linux 的进程不像 Vista 和 Opensolaris,它们是容器和可调度的实体,进程可以分享地址空间和系统资源,使进程像线程那样有效使用。
  2. 同样不像 Vista 和 Opensolaris 的还有,大多数服务都是在内核中实现的,除了很多网络功能。因此 Linux 内核比之前的两种系统更大。

Linux 并不区分线程和进程,使用了类似 OpenSolaris 的轻量级进程的机制,用户级线程被映射到内核级进程上。单个用户级进程里的多个用户级线程被映射到共享组 ID 的内核进程上。这确保了这些进程可以共享资源,如文件、内存,避免了同一组内部进程之间调度切换时的环境切换。

结论

Solaris 和 Windows 都已经存在了几十年,Linux 却很年轻,还有很长的路要走。很明显,三种操作系统实现了流行的操作系统理论。对我们来说最大的障碍是访问内存实现和调试。由于知识的局限,我没有办法调试或者跟踪 Windows Vista 的线程和进程,不过 OpenSolaris 提供了足够的工具来查看内核线程。

在下一篇中,我们将探讨内存管理和文件系统。


给 InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家加入到 InfoQ 中文站用户讨论组中与我们的编辑和其他读者朋友交流。

2009-08-21 00:1314958
用户头像

发布了 501 篇内容, 共 255.4 次阅读, 收获喜欢 60 次。

关注

评论

发布
暂无评论
发现更多内容

软件测试/测试开发丨Pytest结合数据驱动-CSV

测试人

程序员 软件测试 自动化测试 csv pytest

vivo 游戏黑产反作弊实践

vivo互联网技术

游戏黑产 游戏礼券

如何评估大型语言模型(LLM)?

Baihai IDP

人工智能 深度学习 大模型 白海科技 大模型评估

蚂蚁集团自动化混沌工程 ChaosMeta 正式开源

ChaosMeta

高可用 混沌工程 故障演练 kubernetes 运维 混沌测试

一种实现Spring动态数据源切换的方法 | 京东云技术团队

京东科技开发者

spring aop 企业号 6 月 PK 榜 数据源切换

强化学习从基础到进阶-常见问题和面试必知必答[1]:强化学习概述、序列决策、动作空间定义、策略价值函数、探索与利用、Gym强化学习实验

汀丶人工智能

人工智能 深度学习 强化学习 深度强化学习 6 月 优质更文活动

观点碰撞燃爆会场|2023开放原子全球开源峰会区块链分论坛圆满落幕

开放原子开源基金会

区块链 开源 开放原子全球开源峰会 开放原子

在人工智能冲击下,IT部门的生存价值在哪里?

FN0

AIGC

浅谈API安全

权说安全

API 安全

模型当道 开源聚力|2023开放原子全球开源峰会开源大模型分论坛圆满收官

开放原子开源基金会

开源 大模型 开放原子全球开源峰会 开放原子

细说敏捷测试-敏捷实战中的探索 | 京东云技术团队

京东科技开发者

敏捷开发 测试 敏捷测试 企业号 6 月 PK 榜

Java 内存与缓存管理:应对大数据场景的优雅高效策略

xfgg

Java 6 月 优质更文活动

基础设施SIG月度动态:ABS新增ISO、VHD镜像构建,自动热补丁制作流程正式上线

OpenAnolis小助手

镜像 基础设施 龙蜥社区 sig abs

海外交友源码平台搭建:基础功能的实现(一)

山东布谷科技

软件开发、 源码搭建 海外市场 语音交友源码

TBB 开源库及并发 Hashmap 的使用

KaiwuDB

KaiwuDB TBB开源库 Hashmap使用

详解4种模型压缩技术、模型蒸馏算法

华为云开发者联盟

人工智能 华为云 华为云开发者联盟 企业号 6 月 PK 榜

可观测性最佳实践 | 警惕!未知的风险正在摧毁你的系统

观测云

可观测性 运维监控 观测云 云原生可观测 可观测性用观测云

使用华为云AstroZero,不用一行代码,制作端午节加班申请模板

华为云PaaS服务小智

云计算 零代码 华为云

高性能网络 SIG 月度动态:联合 IBM 就 SMC v2.1 协议升级达成一致,ANCK 率先完成支持

OpenAnolis小助手

开源 ibm 高性能网络 anck 龙蜥sig

IT自动化运维工具用哪款?需要考虑哪些因素?

行云管家

IT运维 自动化运维 IT自动化运维

强化学习从基础到进阶-案例与实践[1]:强化学习概述、序列决策、动作空间定义、策略价值函数、探索与利用、Gym强化学习实验

汀丶人工智能

人工智能 深度学习 强化学习 深度强化学习 6 月 优质更文活动

Airtest图像识别测试工具原理解读&最佳实践 | 京东云技术团队

京东科技开发者

图像识别 移动开发 UI自动化测试 企业号 6 月 PK 榜 Airtest

AI+电力、大模型主题人工智能师资培训班重磅招募中

飞桨PaddlePaddle

人工智能 百度 paddle

海南正规等级保护测评单位有哪些?叫什么名字?

行云管家

等保 等级保护 海南 等保测评单位

300行代码模拟cdn访问过程

蓝胖子的编程梦

CDN DNS CDN加速 CDN技术 #DNS

一文读懂ChatGPT的工作原理:大语言模型是个啥?它到底咋工作的?

禅道项目管理

#人工智能 ChatGPT AI 2022

手牵手带你实现mini-vue | 京东云技术团队

京东科技开发者

Vue 数据绑定 vue2 企业号 6 月 PK 榜 双向数据绑定

随机2D形状周围层流预测!基于飞桨实现图形神经网络

飞桨PaddlePaddle

人工智能 百度 飞桨

Java 中优雅的 RESTful API 设计:实现高效且易维护的接口

xfgg

Java RESTful API 6 月 优质更文活动

Vue3中常用的Composition(组合)API-watch(监视)函数

不觉心动

6 月 优质更文活动

三种流行操作系统的内核比较_Linux_Dingze Zhu_InfoQ精选文章