资讯详情

熟悉而陌生——那些个系统抽象

【介绍】周末早上,稀有的好天气冲走了日常生活中的许多忙碌和阴霾。石兄弟给我发了一篇文章system abstraction”(https://cacm.acm.org/magazines/2022/4/259395-systems-abstractions/fulltext),颇有感触,不敢私藏,加入自己的观点,编译成文本。

抽象的软件系统概念是组织思维,加快设计和构建可靠的计算思维结构,是计算思维的基本原则。2021年图灵奖是对编程语言和编译器抽象的认可,揭示了更先进的抽象进展, 这些高级的“系统抽象”来处理大型系统。

然而, 硬币是两面的,抽象的好处是显而易见的,但抽象的原因很少被提及,抽象的泄漏和缺失也更少被关注。也许,只有全面了解系统抽象,我们才能真正理解整个系统。从日常文件到过程和操作系统,再到其他系统抽象,抛砖引玉。

f820fd7c2cdc60d5020332a334add222.png

文件的抽象

文件是最常见的数字对象,是一个有名称和大小的字符串容器。文件本身是一组存储在磁盘内存中的固定大小的抽象记录。它们是基于索引表的树形结构,用户看不到记录、树木和索引表。

文件管理器是管理文件的软件子系统,提供六种基本操作。CREATE 创建新文件,DELETE 删除文件。OPEN 在主内存缓冲区的线性文件图像中收集所有文件组件记录的副本。CLOSE 将缓冲区复制回其组件记录,并删除缓冲区。缓冲区已成为文件管理器管理的另一种对象。READ 操作将打开的缓冲区中的内容复制到从地址 s 开始长度为 l 调用方内存区可以表示为(s,l)。WRITE 从调用方的内存区域操作数据(s,l)将以前的内容复制到缓冲区,替换缓冲区。

在这里,类型 f 意味着文件能力和类型 b 缓冲区能力。CREATE 命令创建一个命令创建文件 DELETE 和 OPEN 命令参数。OPEN 命令创建了一个可能的 CLOSE、 READ 和 WRITE 缓冲区功能命令使用。隐藏在文件管理器中的表用于文件句柄(fh)映射到磁盘和缓冲区句柄(bh)映射到主内存缓冲区。

这当然是文件系统接口的简化视图。真正的文件系统可能有更复杂的树结构,并允许增量读写缓冲区。

进程的抽象

也许,操作系统中最基本的抽象是过程从1960年到1965年,操作系统设计师开始构建功能强大的计算机系统,可以在大型用户网络中廉价分配计算能力。该系统旨在整合一系列功能,如分时、虚拟内存、输入输出流、共享文件系统、目录系统和编程接口。这些功能将最大化信息共享,最小化开发时间CPU 与许多用户分享内存资源。

当时,大型程序的主要抽象是模块和接口例如,可以使用操作系统CPU 模块调度、内存管理、输入输出、文件、目录和编程界面。然而,无论设计师如何仔细制定模块功能和接口,当模块连接在一起并受到用户的工作负载时,系统总是会崩溃,调试极其困难。

问题是模块是指导的控制结构 CPU 执行任务一次。然而,操作系统必须为许多用户管理许多计算。很难通过模块及其界面同时可视化许多用户的工作。大系统不仅仅是一个拥有更多用户的小系统,更多的用户在实现私有内存、共享文件和竞争有限 CPU、设备和内存资源将涉及数据循环、文件访问、用户创建新的自主服务扩展系统、预测吞吐量和响应时间,包括竞争条件、死、繁忙等待、内存级别之间的响应时间。一种新的思维方式,即并发控制。

抽象的过程已经成为一个优雅的解决方案。这个过程不仅是一个执行过程,而且是一个根据要求服务于其他过程的自治代理。这个过程需要 CPU 实体的时间和内存空间与其他过程同步,创建和访问文件,搜索目录,响应事件,并结合其他过程形成所谓的动态计算结构。

抽象结果产生了另一个重要的抽象概念ーー服务流程设计为无尽循环(while true)。服务流程后,服务流程将返回原点,并等待下一个请求。隐藏在后台的保护过程执行有益的管理功能,如回收内存或将修改后的内存内容写回磁盘。从连续运行计算系统的角度来看,操作系统被认为是一个合作社会,主要是非终止过程,而不是堆积如山的模块。

相比之下,大多数编程应用程序已经成为独立启动和终止的程序, 从输入到输出结束的程序。在这种情况下,非终止程序的过程看起来像一个程序 无限循环的bug。

抽象操作系统

操作系统可以描述为抽象机器,其指令集是在接口中提供的操作,隐藏内部数据结构来跟踪所有对象。文件管理器就是一个例子。在操作系统或网络中,功能可以抽象成一系列层次。每个层次都可以由定义在较低层次的抽象组成,但不能使用任何较高层次的抽象信息。

第一个操作系统的分层实例是 Edsger Dijkstra 设计于1965年左右,抽象为以下逻辑层次:

  1. Interrupts and stacks:中断和堆栈

  2. Processes and semaphores:过程和信号量

  3. Virtual memory:虚拟内存

  4. Message exchange:信息交换

  5. Internet naming:网络命名

  6. I/o 流:文件、管道、设备

  7. Directories :目录

  8. Virtual machines :虚拟机

  9. user interface :Shell (用户界面)

  10. Services:服务

1-5是微内核,程序以内核模式运行,可以访问所有内存。6-10级是用户内核,程序在用户模式下运行,只能访问自己流程的私有内存。每个级别都是用来管理这个级别对象的抽象机器。第10层是核心外部用户服务的集合,如核心图形用户界面、应用程序和性能分析工具。每个用户服务都有自己的系统抽象。

对象和操作由较低级别的对象和操作组成。事实上,一级抽象机被嵌套在上一级。抽象机的用户界面由所有嵌套机组成。这种嵌套隐藏了较低级别的细节,让很多人感到困惑。

在这个抽象分层中,程序必须设计成只调用以下层次而不向上调用,避免循环等待和引用代码的循环,使系统能够在一个分层中得到证明和测试。例如,假设文件管理器将文件用作目录的容器,这似乎需要从文件管理器开始(Level 6)向上调用目录管理器(Level 7) ,请创建可以填写文件管理器的目录。为避免向上调用,我们将创建目录并用文件填写其职责转移到 shell (Level 9)。Shell 可以调用 Level 7创建目录,然后调用 Level 将文件加载到目录中。这种思维方向的重新定位简化了代码,消除了循环带来的任何问题。

由于简化和过度约束,分层系统的抽象力并不强,但这些约束确实引入了更多的复杂性。毫无疑问,分层系统会产生更小的核心。较小的核心更快,更容易测试和验证。如今,唯一能证明安全的操作系统是通过抽象分层结构的。

系统抽象

该系统的抽象对于建立一个具有大量流程、用户、设备和网络连接的大型复杂系统至关重要。每个主要的计算系统领域都有自己的抽象特征。例如,互联网 IP 该协议用于寻址主机,TCP 该协议用于克服嘈杂的传输、域名、url,网页,标记语言等等。

云服务拥有通用的无限名称空间、存储文件的不可伪造指针、数据中心、防止数据丢失的冗余等。数据库系统有记录、字段、表、投影、连接、查询、原子事务、持久存储、文件对存储的永久承诺等,不胜枚举。

计算系统的一个主要复杂性来源是大量的数字对象。系统抽象通过两种方式简化了这种复杂性。首先,将所有相同类型的对象组合到一个类中,并为所有这些对象设计一个管理器。管理器为允许进程在这些对象上执行的操作提供了一个接口。其次,类管理器为对象分配唯一的名称,并验证每个访问权限,必须保护包含这些名称和访问代码的指针不被更改。

在操作系统和云存储中,通过一种称为“capability”的较低级别的抽象,由类型、访问、句柄等字段组成,Type 字段指示指向的对象类型,访问字段是一个多位代码,它指定可以在该对象上执行类操作的哪个子集,句柄字段是对象的唯一代码,它将对象与同类型的所有其他对象区分开来。只要“capability”保持在内核空间中,它们就是受保护的,因为没有任何用户进程能够改变内核空间中的任何内容。当它们被传递到外部时,它们被加密校验和所增强,使收件人能够确认它们自创建以来没有被更改。事实上,“capability”已经成为了实现面向对象编程语言的原则。

小结

系统抽象是用来设计和研究大规模、复杂的信息系统的工具之一。软件的惊人进步一般都是通过系统抽象实现的,然而,很少有大型程序抽象的解析说明,也缺少系统抽象的缘由介绍。如果没有这些高级的抽象概念,不了解这些抽象的得失,很可能是一种缺憾。

【关联阅读】

  • web系统中的结构化数据标记

  • 一种系统性能定位的简单策略

  • 数据系统读写权衡的一知半解

  • 分布式系统的一致性再思考

  • CAP理论与分布式系统设计

  • 软件系统的多维性能模型

  • 面向AI 的数据生态系统

  • AI系统中的偏差与偏见

  • 性能,10点系统性思考

  • 分布式系统的时间问题

  • 感知人工智能操作系统

标签: 连接器fh52

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台