写点什么

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

  • 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:1315597
用户头像

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

关注

评论

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

测试管理进阶 | 如何打造一份出彩的工作汇报!

测吧(北京)科技有限公司

测试

Web3 游戏开发者的数据分析指南

Footprint Analytics

区块链 区块链游戏 #Web3 web3游戏

每日一题:LeetCode-138. 随机链表的复制

Geek_4z9ami

算法 链表 LeetCode Go 语言 回溯

火山引擎ByteHouse:“专用向量数据库”与“数据库+向量扩展”,怎么选?

字节跳动数据平台

数据库 大数据 云原生 Clickhouse 企业号 1 月 PK 榜

鸿蒙5.0发布时间已定!鸿蒙系统上的App开发新思路

FinFish

鸿蒙 小程序生态 小程序容器 鸿蒙Next 鸿蒙5.0

轻松上手:通过阿里云PAI QuickStart微调部署Qwen-72B-Chat模型

阿里云大数据AI技术

COB封装LED显示屏vs. SMD封装LED屏

Dylan

技术 封装 LED LED display LED显示屏

深度解析SD-WAN和混合WAN的网络方案区别

Ogcloud

SD-WAN SD-WAN组网 SD-WAN服务商

软件测试学习笔记丨抓包工具Charles实战

测试人

软件测试

速看!盘点这一年 OpenTiny 都在做什么?

OpenTiny社区

开源 前端 低代码 组件库

Prometheus最佳实践 Summary和Histogram

华为云开发者联盟

开发 华为云 华为云开发者联盟

Java开发中不要使用受检异常

码界行者

Java 异常

大数据平台红蓝对抗 - 磨利刃,淬精兵!

京东科技开发者

Flask请求与响应-接口路由请求方法(methods=[“”])

测试人

软件测试 测试 自动化测试 测试开发

应用集成(iPaaS)和数据集成(ETL)高效协同的最佳实践

谷云科技RestCloud

ETL 数据集成 应用集成 ipaas

玩转数据处理利器:学会使用 YAML 文件轻松处理数据

测吧(北京)科技有限公司

测试

谷歌 2024 新年目标曝光:一边做地表最强 AI,一边裁更多员工丨 RTE 开发者日报 Vol.132

RTE开发者社区

华为云低代码问答——低代码为什么这么“香”

低代码 华为云

重磅来袭“2024粤港澳电子展”覆盖电子信息完整产业链

AIOTE智博会

电子展 电子信息展 电博会

【教程】混淆Dart 代码

「我在淘天做技术」智能对话新纪元:百万日活对话机器人的LLM落地实践

阿里技术

招聘 对话机器人 LLM 我在淘天做技术 落地实践

2023京东零售技术年度盘点

京东科技开发者

低代码(Low-Code)技术简化开发难度,快速搭建应用

互联网工科生

软件开发 低代码 数字化 JNPF

全国独家线下面授 | 上海 · 大规模敏捷认证LeSS实践者课程3月14-16日火热报名

ShineScrum

大规模敏捷 LeSS认证 CLP认证 LeSS认证实践者

文心一言 VS 讯飞星火 VS chatgpt (185)-- 算法导论14.1 2题

福大大架构师每日一题

福大大架构师每日一题

软件测试/测试管理|如何打造一份出彩的工作汇报!

霍格沃兹测试开发学社

部署SD-WAN需要多长时间?多少钱?

Ogcloud

SD-WAN SD-WAN组网 SD-WAN服务商

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