xv6讲解(2) Operating system organization

这一章 讲操作系统是如何实现进程并发、进程隔离和进程交互(multiplexing isolation and interaction)

进程并发: 操作系统需要同时支持多个进程。如一个进程可以使用fork来启动新的进程。对计算机的资源进行时间共享,确保所有进程都有机会执行。

进程隔离: 操作系统需要为进程之间提供隔离,如果一个进程有错误并且出现故障,它不应影响不依赖于有错误进程的其他进程。

进程通信: 进程之间应可以进行交互(通信):如管道....。

操作系统对隔离的实现

隔离是进程和进程之间的隔离,也是进程和内核之间的隔离,操作系统通过对物理资源抽象,通过实现用户态、进程态和系统调用实现隔离。

物理资源的抽象

一些嵌入式操作系统,应用程序可以直接与硬件资源交互,然后使用这些资源,如果有多个应用程序在运行,则这些应用程序必须表现良好。比如每个应用程序必须定期放弃 CPU,以便其他应用程序可以运行。但是应用程序可能存在错误,这需要操作系统提供更强的隔离能力(不会相互影响)。

为了实现应用之间的隔离,就要禁止应用程序直接访问敏感硬件资源,并抽象物理资源然后使用。

文件系统的抽象:

例:Unix 应用程序只通过文件系统的 open、read、write 和 close 系统调用与存储进行交互,而不是直接读写磁盘。(文件系统相关知识:文件描述符、inode节点,file对象,目录项...)

CPU的抽象:

例:Unix 在进程之间切换硬件 CPU的操作是透明的,根据需要保存和恢复寄存器状态,这样应用程序就无需关注其他应用程序的问题。透明性使得操作系统即使某些应用程序处于无限循环中,也可以共享CPU。

物理地址的抽象:

例:Unix 进程使用 exec 后会创建一个虚拟内存,进程不会直接与物理内存交互。操作系统可以决定虚拟地址进程放置在内存的位置。 (内存管理相关的知识:虚拟地址空间,页表,快表,堆的管理,物理块的管理.....)

User mode(用户态),supervisor mode(内核态),system calls(系统调用)

进程隔离要求应用程序和操作系统之间存在严格的边界。如果应用程序出现错误,不影响操作系统或其他应用程序。操作系统应该能够清理失败的应用程序并继续运行其他应用程序。

用户态进程运行在用户空间:应用程序只能执行用户模式指令,无法读取和修改内核的数据结构和指令,并且程序无法访问其他进程的内存

处于内核态的进程可以执行特权指令。操作系统的内核就是运行在内核空间的软件称为内核

应用程序不能直接调用内核函数,调用内核函数的应用程序必须切换到内核;

CPU 提供了一个特殊的指令如syscall,可以将 CPU 从用户态切换到内核态,并进入由内核指定的入口点。

(这个需要根据实验补充)

Kernel organization

操作系统的内核组织可以是单内核或微内核。

单内核

单内核(monolithic kernel)整个操作系统都放在内核中,所有系统调用的实现都在内核态运行。

单内核的组织结构很方便,此外,操作系统的不同部分之间更容易合作。例如操作系统的一个缓冲区高速缓存,可以被文件系统和虚拟内存共享。

单内核的缺点是操作系统中不同部分之间的接口通常非常复杂。在单内核中,一个错误是致命的,因为监管者模式下的错误通常会导致内核失败。如果内核失败,计算机将停止工作。

微内核

为了减少内核中出错的风险,尽可能减少在内核态下的操作系统代码,并在用户模式下执行大部分操作系统,这种内核组织结构被称为微内核(microkernel)。

在图中,文件系统作为一个用户级进程运行。作为进程运行的操作系统服务称为服务器(servers)。

为了允许应用程序与文件服务器交互,内核提供了一个进程间通信机制,用于将消息从一个用户模式进程发送到另一个。

例如: shell 应用程序想要读取或写入文件,它会向文件服务器发送一条消息,并等待响应。

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

Linux 具有单内核。如QNX 等操作系统为微内核,用于嵌入式环境。

关于使用哪一个内核

关于哪种组织方式更好,没有一个定论。此外,这在很大程度上取决于“更好”的含义:更快的性能、更小的代码大小、内核的可靠性、完整操作系统的可靠性(包括用户级别服务)等等。微内核和单内核操作系统共享许多关键思想。它们实现系统调用,使用页表,处理中断,支持进程,使用锁来进行并发控制,实现文件系统等。

Xv6 被实现为一个单内核、因此,xv6 在内核态实现了系统调用并提供系统调用接口。

xv6内核源代码位于kernel/子目录中。源代码按照模块化的大致概念划分为多个文件。模块间的接口定义在defs.h文件中。

xv6提供进程的切换,页表,进程的虚拟地址空间,进程的状态(kernel/proc.h)

The xv6 kernel maintains many pieces of state for each process, which it gathers into a struct proc.

xv6启动过程: 以后补充

练习:以后做。

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

AI大模型日报#0923:李飞飞创业之后首个专访、华为云+腾讯音乐发布昇腾适配方案

导读:AI大模型日报,爬虫LLM自动生成,一文览尽每日AI大模型要点资讯!目前采用“文心一言”(ERNIE-4.0-8K-latest)、“智谱AI”(glm-4-0520)生成了今日要点以及每条资讯的摘要。欢迎阅…

计算机毕业设计 | SSM 凌云招聘平台 求职问答审批系统(附源码)

1,绪论 人力资源是企业产生效益、创造利润的必不可少的、最重要的资源。人作为人力资源的个体可看作是一个承载着有效知识、能力的信息单元。这样的信息单元可看作是一个为企业产生价值和利润的个体。从而使得这样的信息单元所具有的信息就是一个有价值的信息。 校…

【Java】JVM基本组成

一、JDK、JRE、JVM JDK:全称 “Java Development Kit” Java 开发工具包,提供 javac编译器、jheap、jconsole 等监控工具; JRE:全称 “Java Runtime Environment” Java 运行环境,提供 class Library 核心类库JVM; …

java项目之基于springboot的医院资源管理系统源码

风定落花生,歌声逐流水,大家好我是风歌,混迹在java圈的辛苦码农。今天要和大家聊的是一款基于springboot的医院资源管理系统。项目源码以及部署相关请联系风歌,文末附上联系信息 。 💕💕作者:风…

JavaEE: 深入探索TCP网络编程的奇妙世界(六)

文章目录 TCP核心机制TCP核心机制九: 面向字节流TCP核心机制十: 异常处理 小小的补充(URG 和 PSH)~TCP小结TCP/UDP 对比用UDP实现可靠传输(经典面试题) 结尾 TCP核心机制 上一篇文章JavaEE: 深入探索TCP网络编程的奇妙世界(五) 书接上文~ TCP核心机制九: 面向字节流 TCP是面…

GUI编程之MATLAB入门详解(01)

⛄前言 图形用户界面的设计是MATLAB的核心应用之一。当用户与计算机之间或用户与计算机程序之间进行交互操作时,舒服高效的用户接口功能则会对用户产生极大的吸引力。图形用户界面(GUI)则通过窗口、图标、按钮、菜单、文本等图形对象构成用户…

瑞璟湾居安居房附近的工地免费停车位探寻

从前海卓越骑行30分钟就可以达到瑞璟湾居安居房,顺着前海的繁华沿途过来就越发觉得瑞璟湾居的地段真的是王炸哈。虽然安居房均价45745.43元/平方米,但是对比附近商品房和宝安现代化的城市规划,感觉这个楼盘应该可以快速去化。虽然我也是安居房…

如何使用cmd命令查看本机电脑的主机名?

1、按键盘win R 键,输入cmd,然后按一下【回车】 2、输入ping -a localhost , 然后按下【回车】 3、如下Ping 后面的DESKTOP-ALB9JF7即是本机电脑的【主机名】

面向对象程序设计——mapの简析

1.map的定义 Key就是map底层关键字的类型,T是map底层value的类型,set默认要求Key⽀持⼩于⽐较,如果不⽀持或者需要的话可以⾃⾏实现仿函数传给第⼆个模版参数,map底层存储数据的 内存是从空间配置器申请的。⼀般情况下&#xff0c…

OpenBayes 教程上新|让虚拟偶像活起来!LivePortrait 实现超逼真表情迁移

过去,使用单一图像生成动态视频效果需要复杂的动画技术和大量的手工操作。特别是在控制眼睛和嘴唇等细节上,耗时且难以实现逼真的同步效果。 LivePortrait 在最新版本中通过精确的画像编辑和视频编辑等功能,极大地简化了这一过程。创作者可以…

调度_命令行_环境变量

linux的进程调度算法 饥饿问题 新建进程/时间片结束进程,若放回active,很可能该进程优先级太高,下一个还是执行该进程,导致不断执行同一进程,各进程调度不均衡。 饥饿问题解决 新建进程不能到active,要到…

论文大杀器!分享4款ai论文写作工具软件

在当今学术研究和论文写作领域,AI技术的应用已经变得越来越普遍。这些工具不仅能够提高写作效率,还能帮助研究人员生成高质量的论文内容。本文将重点介绍四款优秀的AI论文写作工具,并特别推荐千笔-AIPassPaper。 一、千笔-AIPassPaper 传送门…

RTR_Chapter_6 上

第六章 纹理 表面纹理(texture)是指其外观和给人的视觉感受,就像是一幅油画的图案一样。而在计算机图形学中,纹理化则指的是一个过程,即通过使用一些图像、函数或者其他数据,来对每个表面位置的外观表现进行…

看Threejs好玩示例,学习创新与技术(React-three-fiber)

什么,竟有人把ThreeJS和React绑定在一起,混着用? 1、VUE劫持问题 暂先把今天的问题先放一边,先简单回顾下vue劫持的情况。vue会把data里面的数据自动转换为属性,方便界面与数据交互。这本身是没有任何问题&#xff0…

内网穿透(当使用支付宝沙箱的时候需要内网穿透进行回调)

内网穿透 一、为什么要使用内网穿透: 内网穿透也称内网映射,简单来说就是让外网可以访问你的内网:把自己的内网(主机)当做服务器,让外网访问 二、安装路由侠 路由侠-局域网变公网 (luyouxia.com) 安装成功如下: 三…

全栈开发(一):springBoot3+mysql初始化

1.开发环境准备 1.开发工具 2.jdk下载 官网下载java17 3.java环境变量配置 用户变量: ①.JAVA_HOME ②.path 4.mysql下载 b站随便搜 5.新建项目 6.maven配置 可以下载zip放到目录里 这里是配置好的 repository文件夹:为maven提供下载的文件存放…

Face++API调用

人脸检测API调用 import requests import json #将自己的KEY和Secret进行替换 API_KEYyour_API_KET API_SECRETyour_API_Secret# 人脸识别的URL URL https://api-cn.faceplusplus.com/facepp/v3/detect# 请求参数,需要什么参数传入什么参数 data {"api_key":API…

【LVIO-SLAM】SVD分解,最小二乘与EKF

【LVIO-SLAM】SVD分解与应用推导 1.1 线性最小而二乘1.2 SVD分解算法流程问题描述算法流程算法复杂度总结 1.3 非线性最小二乘1.4 EKF融合 KF/ EKF推导过程 1.1 线性最小而二乘 针对A是任意矩阵的话使用SVD分解求解,其中U是AA转置的特征值,V是AA转置A的特…

Python3 爬虫教程 - Web 网页基础

Web网页基础 1,网页的组成HTMLcssJavaScript2,网页的结构 3,节点树及节点间的关系4,选择器开头代表选择 id,其后紧跟 id 的名称。如:div 节点的 id 为 container,那么就可以表示为 #container 1…

828华为云征文 | 云服务器Flexus X实例,Docker集成搭建Jenkins CI/CD平台

828华为云征文 | 云服务器Flexus X实例,Docker集成搭建Jenkins CI/CD平台 Jenkins 是一个开源的自动化服务器,用于持续集成(CI)和持续交付(CD)软件项目。它允许开发人员在软件开发过程中自动化各种任务&…