【ArchSummit】如何通过AIOps推动可量化的业务价值增长和效率提升?>>> 了解详情
写点什么

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

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

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

关注

评论

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

CUDA优化之PReLU性能调优

OneFlow

性能优化 cuda PReLU 朴素实现

Kubernetes下web服务的性能测试三部曲之三:横向扩容

程序员欣宸

Java Kubernetes 5月月更

银行RPA趋向主动触发流程,补足营销场景执行末端的渠道协同能力

易观分析

银行 市场营销

有数BI大规模报告稳定性保障实践

网易数帆

大数据 BI 网易 稳定性保障

RocketMQ—Producer(五)路由队列选择

IT巅峰技术

架构 RocketMQ java

FFmpeg介绍

Loken

音视频 5月月更

网站开发进阶(六十八)CSS3媒体查询@media

No Silver Bullet

5月月更 媒体查询 设备自适应 hsl

Dockerfile 的最佳实践 | Dockerfile 你写的都对么?

xcbeyond

最佳实践 镜像 Dockerfile

学Python运维,这知识点你肯定会遇到,【必收藏之】nginx 域名跳转相关配置

梦想橡皮擦

5月月更

战“码”先锋直播预告丨如何成为一名优秀的OpenHamrony贡献者?

OpenHarmony开发者

OpenHarmony 贡献代码

javascript 中搜索数组的四种方法

CRMEB

Qt软件开发_解决中文路径无法识别问题

DS小龙哥

5月月更

Druid 连接池源码阅读 06

石小天

druid源码学习六

Nick

jdk JMX Druid

Magento 和 WordPress 的区别

海拥(haiyong.site)

WordPress 5月月更

层层剖析一次 HTTP POST 请求事故

vivo互联网技术

HTTP CORS XSS 跨域 waf

推荐几个机器学习的好资源

AIWeker

人工智能 深度学习 5月月更

总结

Geek_36cc7c

Linux下玩转nginx系列(五)---nginx实现负载均衡

anyRTC开发者

nginx Linux 负载均衡 音视频

马斯克推崇的柏拉图式元宇宙,PlatoFarm早已验证出答案

股市老人

FinClip小程序里如何安全使用SVG

Speedoooo

rust SVG 前端框架 小程序容器

2022年5月中国数据库排行榜:openGauss 黑马首登顶,AntDB 冲进20强

墨天轮

数据库 opengauss TiDB oceanbase 神通

Nebula Graph|如何打造多版本文档中心

NebulaGraph

数据库 图数据库 NebulaGraph

OpenHarmony 3.1 Release版本关键特性解析——Enhanced SWAP内存管理

OpenHarmony开发者

内存管理 OpenHarmony

熊磊:成功移植OpenHarmony到多套开发板,是最开心的事

OpenHarmony开发者

开发板 OpenHarmony

AIRIOT物联网低代码平台如何配置三菱PLC驱动?

AIRIOT

物联网 PLC 驱动配置

稳扎稳打步步为营 英特尔GPU将在消费市场和数据中心全面开花

科技新消息

前端常用的站点导航

刘帅强

百问百答第38期:关于nginx监控,我们这样做

博睿数据

博睿数据 nginx监控

金融任务实例实时、离线跑批Apache DolphinScheduler在新网银行的三大场景与五大优化

Apache DolphinScheduler

Apache 大数据 开源 DolphinScheduler workflow

一种经典的客户关系管理系统(CRM)订单模型的设计与实现

Jerry Wang

CRM SAP 客户关系管理系统 5月月更 订单模型

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