操作系统入门系列-MIT6.828(操作系统工程)学习笔记(五)---- 操作系统的组织结构(OS design)

系列文章目录

操作系统入门系列-MIT6.S081(操作系统)学习笔记(一)---- 操作系统介绍与接口示例
操作系统入门系列-MIT6.828(操作系统工程)学习笔记(二)----课程实验环境搭建(wsl2+ubuntu+quem+xv6)
操作系统入门系列-MIT6.828(操作系统工程)学习笔记(三)---- xv6初探与实验一(Lab: Xv6 and Unix utilities)
操作系统入门系列-MIT6.828(操作系统工程)学习笔记(四)---- C语言与计算机架构(Programming xv6 in C)
操作系统入门系列-MIT6.828(操作系统工程)学习笔记(五)---- 操作系统的组织结构(OS design)


文章目录

  • 系列文章目录
  • 前言
  • 一、操作系统的目的
    • 1.如果没有操作系统?
    • 2.操作系统的目的
    • 3.操作系统的隔离性
    • 4.操作系统的防御性
    • 5.操作系统的硬件资源抽象
    • 6.操作系统的交互性
  • 二、宏内核与微内核
    • 1.宏内核(monolithic kernel)
    • 2.微内核(microkernel)
    • 3.宏内核与微内核的应用
  • 总结


前言

本节对应的是MIT 6.828课程第三节:OS design
有大佬讲视频课程的内容进行了中文记录,链接如下:MIT6.828 简介
按照课程官方的进度安排:课程进度计划表
一、课前预习:
1.读xv6实验指导手册第二章
2.精读xv6源码: kernel/proc.h, kernel/defs.h, kernel/entry.S, kernel/main.c, user/initcode.S, user/init.c
3.略读xv6源码: kernel/proc.c and kernel/exec.c
二、课后任务:
1.完成Lab: system calls

本文主要讲解课程的视频内容以及xv6实验指导手册的第二章,理论内容。下一篇文章将讲解xv6启动与源码阅读。课程视频与实验指导手册的内容有诸多相似点,笔者按照自己的思路进行整理总结。该篇文章是在操作系统入门系列-MIT6.S081(操作系统)学习笔记(一)---- 操作系统介绍与接口示例基础上对操作系统的宏观层面(high level)进一步深入探讨。


一、操作系统的目的

1.如果没有操作系统?

要理解操作系统的目的,我们可以先假设一下:如果没有操作,会是什么样的情境。

如果有单片机(裸机)开发经验的读者,很容易能想到该情景:众多应用程序,按照事先约定好的规则,分时去直接使用硬件资源(分时复用),各种硬件资源的访问会被抽象会库函数被应用程序直接调用。

根据这个情景,我们再具象化一点:现在只有一个硬件开发板,有众多不相识的人想使用它。那么很可能会有如下隐患:
1.有个人很强壮,他仗着无人可敌故意一直占用硬件开发板,不给别人使用
2.在使用硬件开发板的时候,可能有人的项目没做完,想下次续上继续做,就会存一些数据在硬件开发板里面。那么有人在使用硬件开发板的时候,无意或者有意的会访问甚至破坏别人保存的私人数据。
3.有人不小心把硬件开发板弄坏了

那么我们基于隐患再回到最之前的情景,很容易得到:
1.有恶意程序,故意写死循环,一直占用硬件资源。
2.各个程序直接访问内存,可能导致各个应用程序之间的内存重叠,甚至有恶意程序篡改其他程序的私有内存。
3.有程序存在BUG,使得CPU直接宕机

那么,该如何解决“众人使用硬件开发板”的隐患或者风险呢?很显然,可以选一个有公信力和权力的机构或者个人,来管理这个仅有的硬件开发板:(1)安排协调时间分配和资源的分配(2)防止恶意个体破坏共有资源(3)保证每个人有各自独立的私人空间来记录项目进度,实现个体间的隔离(4)在隔离的基础上实现有监管的个体之间信息交流,以提供个体之间合作的需求

这不就是政府机构的作用吗?机构和政策就是一个“国家操作系统”!国家的资源与人民之间存在一个人民政府,作为操作系统使得国家得以有效率的稳定的运转。

2.操作系统的目的

基于上述假设和推理,操作系统的目的就显而易见了:

1.隔离性(课程视频+xv6指导书  提到)
2.硬件复用(xv6指导书  提到)
3.防御性(课程视频  提到)
4.交互性(xv6指导书  提到)

可以看到,四个目的中,隔离性是很重的一个目的,视频和实验指导书中都反复提及。笔者认为的原因是:(1)硬件复用的基础依赖于CPU芯片内部机制、各种总线等硬件级实现,从操作系统设计的角度来说便是将提供的硬件功能抽象成函数;(2)防御性在一般运行情况下的占比很小,同时隔离也有助于防御性的实现(应用A蓄意破坏应用B的内存空间)(3)交互性是两个应用程序之间传递信息,但是必须基于隔离性实现的基础上。

所以隔离性在操作系统设计中显得尤为重要。实现的机制有:

1.虚拟内存与页表(pagetable),第四节课会着重介绍
2.user模式与kernel模式,不同权限
3.“进程”概念的提出与设计
4.……

3.操作系统的隔离性

(1)虚拟内存与页表(pagetable)
该内容的具体细节很复杂,课程的第四讲会通过一整讲来探讨改内容
该设计有两个点:

1.通过page table以及一些硬件支持实现虚拟内存到物理内存的映射
2.每个进程被分配有自己独有的虚拟内存,进程有“独立内存视图”

每一个进程都会有自己独立的page table,这样的话,每一个进程只能访问出现在自己page table中的物理内存。操作系统会设置page table,使得每一个进程都有不重合的物理内存,这样一个进程就不能访问其他进程的物理内存,因为其他进程的物理内存都不在它的page table中。一个进程甚至都不能随意编造一个内存地址,然后通过这个内存地址来访问其他进程的物理内存。这样就给了内存的强隔离性。

每一个用户进程都有自己对于内存的独立视图:(ls程序与echo程序的虚拟内存视图)
在这里插入图片描述
(2)user/kernel模式
简单来讲:

1.user模式下,程序不可以执行权限指令,只能执行普通指令
2.kernel模式下,程序可以执行权限指令,也可以执行普通指令

user/kernel mode是分隔用户空间和内核空间的边界,用户空间运行的程序运行在user mode,内核空间的程序运行在kernel mode。操作系统位于内核空间。如下图:
在这里插入图片描述

例如当ls程序运行的时候,会调用read/write系统调用;Shell程序会调用fork或者exec系统调用,所以必须要有一种方式可以使得用户的应用程序能够将控制权以一种协同工作的方式转移到内核,这样内核才能提供相应的服务。

在RISC-V中,有一个专门的权限指令用来实现这个功能,叫做ECALL。ECALL接收一个数字参数,当一个用户程序想要将程序执行的控制权转移到内核,它只需要执行ECALL指令,并传入一个数字。这里的数字参数代表了应用程序想要调用的System Call。

(3)进程概念的抽象
个人认为进程概念的抽象也是隔离性实现的重要手段。可能有读者认为,进程和程序不就是一个东西吗?个人认为,程序是一段可以执行的代码,而进程是操作系统对CPU、内存等硬件资源的抽象。程序代码,想要使用CPU资源,得先向操作系统申请(fork函数)一个“进程”,也就是CPU上的一个坑位。操作系统在初始化阶段,就会合理的讲硬件资源拆分成多个进程坑位,之后程序通过申请来使用这些坑位。

而通过“坑位”这个抽象,不同程序仅能使用自己独有的进程,那么只要实现进程之间的隔离,就可以实现程序之间的隔离。

4.操作系统的防御性

(1)操作系统的设计者需要保持“程序都是恶意”的心态

1.用户程序可能主动地破坏隔离性
2.用户程序可能主动地使用一些诡计去使系统调用函数干坏事
3.用户程序可能主动地干扰其他程序

(2)我们需要保证操作系统的代码完全正确,值得信赖
一个没有BUG的程序是不现实的,Linux过一段时间就会修复一些BUG。但是我们仍然得以保证操作系统的代码完全正确,值得信赖为目标,才能实现操作系统的良好的防御性。

5.操作系统的硬件资源抽象

操作系统对硬件资源的抽象和复用,最终表现为系统调用函数。
在这里插入图片描述
这里举fork和exec两个例子,来大致展现系统调用函数的巧妙设计:

(1)操作系统通过fork()函数,透明地在进程之间切换硬件cpu,根据需要保存和恢复寄存器状态,因此应用程序不必意识到时间共享。这种透明性允许操作系统共享cpu,即使某些应用程序处于无限循环中。
(2)操作系统使用exec来构建它们的内存映像,而不是直接与物理内存交互。这允许操作系统决定在内存中放置进程的位置;如果内存紧张,操作系统甚至可能将进程的一些数据存储在磁盘上。Exec还为用户提供了方便的文件系统来存储可执行程序映像。

6.操作系统的交互性

Unix进程之间的许多交互形式都是通过文件描述符实现的。文件描述符不仅抽象了许多细节(例如,管道或文件中的数据存储在哪里),而且还以简化交互的方式定义了它们。

二、宏内核与微内核

搞清楚操作系统设计的目的之后,对于宏观层面(high level)操作系统的设计方法理解起来将会很简单。

宏内核和微内核是操作系统设计的两个思路:操作系统的哪个部分应该在kernel模式下运行。(1)一种是整个操作系统驻留在内核中,因此所有系统调用的实现都以管理器模式运行。这种组织称为宏内核(monolithic kernel)。(2)另一种是,操作系统设计者最小化在kernel模式下运行的操作系统代码的数量,并在用户模式下执行大部分操作系统。这种内核组织称为微内核(microkernel)

1.宏内核(monolithic kernel)

(1)优点
a.整个操作系统以完全硬件特权运行。这种组织很方便,因为操作系统设计者不必决定操作系统的哪一部分不需要完全的硬件特权。
b.操作系统的不同部分更容易协作。例如,一个操作系统可能有一个缓冲cache,它可以被文件系统和虚拟内存系统共享。
(2)缺点
a.操作系统的不同部分之间的接口通常是复杂的
b.操作系统开发人员很容易犯错误。在宏内核中,错误是致命的,因为在管理器模式下的错误通常会导致内核崩溃。如果内核崩溃,计算机将停止工作,因此所有应用程序也将崩溃。计算机必须重新启动才能重新启动。

2.微内核(microkernel)

在这里插入图片描述
在图中,文件系统作为用户级进程运行。作为进程运行的操作系统服务称为服务器。为了允许应用程序与文件服务器交互,内核提供了一个进程间通信机制,将消息从一个用户模式进程发送到另一个用户模式进程。例如,如果像shell这样的应用程序想要读取或写入文件,它会向文件服务器发送消息并等待响应。

在微内核中,内核接口由几个低级函数组成,用于启动应用程序、发送消息、访问设备硬件等。这种组织允许内核相对简单,因为大多数操作系统驻留在用户级服务器中。

微内核的挑战在于性能更差,这里有两个方面需要考虑:

(1)在user/kernel mode反复跳转带来的性能损耗。
(2)在一个类似宏内核的紧耦合系统,各个组成部分,例如文件系统和虚拟内存系统,可以很容易的共享page cache。而在微内核中,每个部分之间都很好的隔离开了,这种共享更难实现。进而导致更难在微内核中得到更高的性能。

3.宏内核与微内核的应用

在实际中,两种内核设计都会出现.
(1)出于历史原因大部分的桌面操作系统是宏内核,如果你运行需要大量内核计算的应用程序,例如在数据中心服务器上的操作系统,通常也是使用的宏内核,主要的原因是Linux提供了很好的性能。
(2)但是很多嵌入式系统,例如Minix,Cell,这些都是微内核设计。这两种设计都很流行,如果你从头开始写一个操作系统,你可能会从一个微内核设计开始。

但是一旦你有了类似于Linux这样的宏内核设计,将它重写到一个微内核设计将会是巨大的工作。并且这样重构的动机也不足,因为人们总是想把时间花在实现新功能上,而不是重构他们的内核。

实验采用的xv6是宏内核设计


总结

本文并没有将课程与指导书的每一个知识点都覆盖,总结一个大致的思路与框架,更多的细节可以看课程的中文记录与实验指导书(前言给链接)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/702928.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

网工内推 | 深信服、中软国际技术支持工程师,最高13k*13薪

01 深信服 🔷招聘岗位:远程技术支持工程师 🔷任职要求: 一、专业能力和行业经验: ①具备友商同岗位工作经验1.5年以上,具备良好的分析和判断能力,有独立问题处理思路,具备常见协…

python中魔术方法__str__与__repr__的区别

在Python中,__str__和__repr__是两个常见的魔法方法(也称为双下方法或dunder方法),它们用于定义对象的字符串表示形式。它们的主要区别在于它们的用途和使用场景。 __str__ 用途:__str__方法用于为用户提供一个易读的…

【嵌入式DIY实例】-Nokia 5110显示DHT11/DHT22传感器数据

Nokia 5110显示DHT11/DHT22传感器数据 文章目录 Nokia 5110显示DHT11/DHT22传感器数据1、硬件准备2、代码实现2.1 显示DHT11数据2.2 显示DHT22数据本文介绍如何将 ESP8266 NodeMCU 开发板 (ESP-12E) 与 DHT11 数字湿度和温度传感器以及诺基亚 5110 LCD 连接。 NodeMCU 从 DHT11…

.NET Core 服务注册步骤总结

总结一下 .NET Core 服务注册的步骤: .NET Core Web Api 项目服务注册步骤: 创建一个接口,和实现类 比如:IMyService, CnService 在 Program.cs 的 var app builder.Build(); 语句之前加上: var builder WebApplic…

【面经总结】 Java基础 - 异常

异常 介绍一下 Java 的异常体系 Java 的异常体系是由 Throwable 类及其子类构成的。 Throwable 包含两个子类:Error(错误)和 Exception(异常) Error 表示错误,通常不需要程序员处理,如内存溢…

python中的turtle

turtle个别指令 初始箭头默认指向为东(右) 往前(右)三个格:turtle.forward(3) 往后(左)三个格:turtle.backward(3) 往左转90度:turtle.left(90) 往右转90度&#xf…

Attention与轻量级ResNet融合,低资源消耗下实现效率和性能完美平衡

注意力机制通过让模型关注图像关键区域提升了识别精度,而轻量级残差网络通过减少参数和计算量,实现了在低资源消耗下的优秀性能。 结合注意力机制与轻量级残差网络,既能让模型能够更高效地关注输入数据中的关键信息,提升模型处理…

vs调试时无法找到文件-chromium源码编译

一直跟着教程走结果报错了,找了半天的教程无法解决,于是乎只好重来,因为这个是属于项目调试,报错了可以重新编译项目就好。在重新做的过程中发现路径写错了

人工智能的等价形式

经典的人工智能,采用“梯度下降法”,运算量很大,约是esp2。其中e是epoch,训练的周期数;s是sample,训练样本的数量;p是parameter,参数的数量。 人工智能有等价形式,它不需…

DPI简析

DPI简析 一、DPI与PPI二、硬件设备的DPI2.1打印机DPI2.2显示器DPI2.2.1显示器DPI计算2.2.2显示器分辨率与系统分辨率2.2.3常见分辨率 2.3鼠标DPI 三、图片DPI3.1图片DPI与打印尺寸3.1.1图片打印尺寸计算3.1.2常用的照片尺寸及DPI 3.2图片DPI与屏幕显示3.3修改图片DPI 参考文档 …

Windos10上Podman安装运行mysql8

记录以下在windows10系统上Podman v5.1.1安装MySQL8全过程。 目录 一、拉取mysql8镜像二、创建宿主目录三、创建 my.cnf文件四、创建Mysql8容器五、windows上Podman安装运行mysql8失败问题描述 解决办法① 通过PowerShell进入wsl② 修改wsl系统配置③ 重启wsl,Podma…

3个月搞定计算机二级C语言!高效刷题系列进行中

文章目录 前言备考计算机二级C语言为什么考二级C语言?刷题总结后发布系列文章后记免责声明 前言 大家好,我是梁国庆。 计算机二级应该是每一位大学生的必修课,相信很多同学的大学flag中都会有它的身影。 我在大学里也不止一次的想要考计算…

【运维知识大神篇】运维界的超神器Kubernetes教程14(RBAC三种认证方式详解:基于用户+基于用户组+基于服务账号)

本篇文章继续给大家介绍Kubernetes,内容依旧烧脑,不过内容也已经过了一大半了,如果你把我Kubernetes前面的教程都看懂了的话,那么你已经很厉害了,坚持下去!本篇文章主要介绍RBAC的三种认证方式,…

Python使用tkinter库设置背景图片、label显示位置和label设置显示图片

tkinter 设置背景图片 label显示位置 label设置显示图片 from tkinter import * import tkinter as tk from PIL import ImageTk from PIL import Imagedef get_img(filename, width, height):im Image.open(filename).resize((width, height))im ImageTk.PhotoImage(im)…

Java的集合框架总结

Map接口和Collection接口是所有集合框架的父接口: Collection接口的子接口包括:Set接口和List接口 Map接口的实现类主要有:HashMap、TreeMap、Hashtable、ConcurrentHashMap以及Properties等 Set接口的实现类主要有:HashSet、Tr…

【CH32V305FBP6】USBD HS 描述符修改

文章目录 前言设备描述符完整描述符配置描述符CDC 描述符接口关联描述符接口描述符功能描述符端点描述符接口描述符端点描述符 HID 描述符接口描述符 新增一个 HID 设备 前言 USB HS 复合设备,CDCHID 功能:串口、DAP、CAN-HID、RS485 设备描述符 htt…

远程抄表系统方案

一、远程抄表系统简述 远程抄表系统,是一种智能化的自动化数据收集技术性,主要运用于电力工程、供水公司、天然气等公共服务行业,完成对消费者表计数据的远程、即时、智能采集。这类系统不但降低了成本,降低了人力抄表错误&#…

手部出现这4种症状,可能是糖尿病先兆!务必及时监测血糖

糖尿病来袭,手部或先知!出现这 4 种症状,务必尽快监测血糖 第一,手指麻木感明显,当持续性的高血糖损害手部血管与神经末梢时,便会导致手指产生麻木以及刺痛之感。而且随着血糖不断升高,受损的血…

Soildworks学习笔记(一)

1.如何添加M3,M4等螺丝孔: 有时候异形孔向导显示灰色是因为没有退出草图选项卡,选择异形孔向导就可以进行异形孔的设定和放置: solidwork放置螺丝孔以及显示螺纹的问题_.16-m3 solidwork-CSDN博客 2.如何修剪线条: 如何倒圆角或…

Hack The Box-Blurry

总体思路 CVE-2024-24590->修改脚本/劫持python库 信息收集&端口利用 nmap -sSVC blurry.htbStarting Nmap 7.94SVN ( https://nmap.org ) at 2024-06-10 21:40 EDT Nmap scan report for app.blurry.htb (10.10.11.19) Host is up (0.20s latency).PORT STATE S…