1628_MIT 6.828 xv6_chapter0操作系统接口

news2024/12/27 1:56:01

         全部学习汇总: GreyZhang/g_unix: some basic learning about unix operating system. (github.com)

         这本书最初看名字以为是对早期unix的一个解读,但是看了开篇发现 不完全是,只是针对JOS教学OS系统来做的一些讲解。

         Xv6是对UNIX v6的重新实现,但是在Intel的x86平台上而且考虑了多核的设计。这样看起来的确是很不错,因为现在x86的电脑到处都是而了解一下多核的使用也是很有意思的一个尝试。

1. 操作系统的几个典型作用:对底层的硬件进行抽象复用、让进程之间有一定的隔离且能够交互。

2. 目前Linux、BSD以及MAC OS X等操作系统都还沿用了很多UNIX最初的设计理念。

1. shell利用了OS的接口来实现的,而这个教学系统中也在一定程度上实现了bash。

2. fork对于父进程来说返回PID,对于子进程来说返回0。Exit能够让当前的进程停止并且释放资源。而wait返回当前进程退出子进程的PID,如果当前进程的子进程没有退出的那么wait会等待到有退出的之后返回退出子进程的PID。

1. 这里给出来了一组OS的常用接口,其实这些类似的功能在学习perl或者python脚本语言的时候就接触过一些类似的功能,也有一个类似的组合。

2. 父子进程之间会有一定的隔离手段,可以做到让两个进程之间不会互相影响。

3. exec执行的文件是ELF类型的文件。

1. 程序传递的参数中,首参数一般会被忽略,这个参数一般是程序文件名。这个我其实在之前使用脚本文件的时候测试到过类似的问题,但是这还是第一次看到明确的说明。

2. xv6中没有提供用户之间的隔离,从UNIX的角度来讲就是:所有的进程都是以root权限来执行的。

3. 文件、管道、设备文件等全都是字节流的形式。

4. 标准的输入、标准的输出以及错误输出都是特殊文件,其文件描述符分别是0、1、2。

1. 读文件操作一般有一个偏移的概念,类似C语言中的指针操作。

2. 如果一个文件的内容读不到了的时候返回0,代表读取结束。

3. 中间简单说明了一下cat功能的实现,这里借用了1个巧妙的约定,那就是0、1、2三个文件描述符的作用是特殊的,并且在进程之间也是可以遵循相同标准的。Cat仅仅是从标准输入读取,然后在标准输出输出。

1. 上面用代码描述的方式简述了cat < input.txt的实现,也用到了一些设计的技巧。比如说,先关闭标准输入再打开,确保数据流一定走这个文件描述符。

2. 中间的代码利用了wait来等待子进程先结束,保证了输出的顺序。而后面的设计,则是说明了文件描述符的复制功能。

1. pip提供了进程间通信的功能。

2. 在使用pip的时候,通过父子进程来实现一个通道的链接。而pip创建的文件描述符在父子进程间相同,如果就可以实现数据流的转换。在父子进程之间额外的关闭不用的文件描述符,可以理解为一种安全性考虑。而把数据流转入到标准输入输出,则是一个比较巧妙运用文件描述符规则的玩法。另外,子进程的写入描述符必须关也考虑到了另一点:不关的话,文件读不到结尾。

         在不会用管道的时候,我经常用临时文件的方式来实现类似的功能。但是相比之下,管道有自己的优点:1,不像临时文件需要人工清除,管道是自动的;2,没有数据流大小的限制,但是临时文件受限于磁盘大小;3,允许并行;4,在阻塞设计上更有优势。

1. mknod可以创建设备文件,fstat可以提取文件的属性。

2. 文件属性中的inode是文件在底层的唯一识别身份,而nlink可以理解为这个文件有几个名字。

3. 一个文件可以有多个名字,感觉类似windows的快捷方式。但是,两者在删除的时候行为不同。删除掉所有的文件名在unix下会触发文件磁盘回收,但是在Widnows下,很显然的是快捷方式可以单独存在,只是文件无效了而已。

4. 可以借助于文件名全都没了之后文件自动回收的特性,创建完文件之后接着ulink,以此完成临时文件的自动删除。

1. cd命令的设计比较特殊,其实远离了用户代码一点,直接实现在了bash中。一定程度上来说,cd更加贴近于内核。

2. xv6并不完全兼容POSIX。

         这样,第0章节就看完了,还是很有收获的。

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

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

相关文章

【Java 面试合集】Java中修饰符有哪些,有什么应用场景

Java中修饰符有哪些&#xff0c;有什么应用场景 1. 概述 首先我们要知道Java的三大特性&#xff1a;封装&#xff0c;继承&#xff0c;多态。 而我们今天要分析的修饰符就跟封装有着密切的联系。因为权限修饰符可以控制变量以及方法的作用范围。 废话不多说&#xff0c;上图…

Python推导式

列表&#xff08;list&#xff09;推导式 [remove for source in xx_list]或者[remove for source in xx_list if condition] 实例&#xff1a; names[Bob,Mark,Mausk,Johndan,Wendy] new_names[name.upper() for name in names if len(name)<5] print(new_names)即迭代列…

PC端开发GUI

PC端开发GUI PC端环境搭建1、Python2、PycharmPC端环境搭建 1、Python 注意Python版本不能超过3.9,因为pyqt-tools只维护到python对应的该版本 1.1、查找是否安装python:win+R,输入cmd回车,输入python或python -V或python --version 1.2、若1.1没有,则下载安装下载链接…

天津菲图尼克科技携洁净及无菌防护服解决方案与您相约2023生物发酵展

BIO CHINA 生物发酵产业一年一度行业盛会&#xff0c;由中国生物发酵产业协会主办&#xff0c;上海信世展览服务有限公司承办&#xff0c;2023第10届国际生物发酵产品与技术装备展览会&#xff08;济南&#xff09;于2023年3月30-4月1日在山东国际会展中心&#xff08;济南市槐…

亿级高并发电商项目-- 实战篇 --万达商城项目 二(Zookeeper、Docker、Dubbo-Admin等搭建工作

&#x1f44f;作者简介&#xff1a;大家好&#xff0c;我是小童&#xff0c;Java开发工程师&#xff0c;CSDN博客博主&#xff0c;Java领域新星创作者 &#x1f4d5;系列专栏&#xff1a;前端、Java、Java中间件大全、微信小程序、微信支付、若依框架、Spring全家桶 &#x1f4…

第二章-进程(2)

进程一、进程的引入二、进程的状态及组成三、进程控制一、进程的引入 &#xff08;1&#xff09;程序的顺序执行: P1:axy P2:ba-5 P3:cb1 程序总是按照P1→P2→P3的顺序执行。 特点&#xff1a; 顺序性&#xff1a;处理机的操作严格按规定顺序执行。封闭性&#xff1a;程序执…

python(8):使用conda update更新conda后,anaconda所有环境崩溃----问题没有解决,不要轻易更新conda

文章目录0. 教训1. 问题:使用conda update更新conda后&#xff0c;anaconda所有环境崩溃1.1 问题描述1.2 我搜索到的全网最相关的问题----也没有解决3 尝试流程记录3.1 重新安装pip3.2 解决anaconda编译问题----没成功0. 教训 (1) 不要轻易使用conda update更新conda----我遇到…

[OpenMMLab]AI实战营第六节课

语义分割算法基础 任务&#xff1a;图像按照物体的类别分隔成不同区域&#xff0c;即将每个像素进行分类 应用&#xff1a;无人驾驶、医疗、人像、智能遥感 思路 基本思路&#xff1a;按照颜色区分 --> 逐像素分类&#xff08;滑动窗口&#xff0c;用CNN分类&#xff0c…

微搭低代码从入门到精通11-数据模型

学习微搭低代码&#xff0c;先学习基本操作&#xff0c;然后学习组件的基本使用。解决了前端的问题&#xff0c;我们就需要深入学习后端的功能。后端一般包括两部分&#xff0c;第一部分是常规的数据库的操作&#xff0c;包括增删改查。第二部分是业务逻辑的编写&#xff0c;在…

QT基础入门

学习视频&#xff1a;QT开发概述_哔哩哔哩_bilibili 1.QT开发概述 1.什么是QT QT是一个1991年由Qt Company开发的跨平台C图形用户界面应用程序开发框架。它既可以开发GUI程序&#xff0c;也可用于开发非GUI程序&#xff0c;比如控制台工具和服务器。Qt是面向对象的框架&#…

STC15单片机软串口的使用

STC15软串口的使用&#x1f4d6;在没有使用定时器资源的情况下&#xff0c;根据波特率位传输时间&#xff0c;利用STC-ISP工具自动计算出位延时函数。 ✨在官方所提供的库函数中位传输时间函数,仅适用于使用波特率为&#xff1a;9600的串口数据传输&#xff1a; void BitTime(…

Grafana 系列文章(十四):Helm 安装Loki

前言 写或者翻译这么多篇 Loki 相关的文章了, 发现还没写怎么安装 &#x1f613; 现在开始介绍如何使用 Helm 安装 Loki. 前提 有 Helm, 并且添加 Grafana 的官方源: helm repo add grafana https://grafana.github.io/helm-charts helm repo update &#x1f43e;Warning…

nacos的单机模式和集群模式

文章目录 目录 文章目录 前言 一、nacos数据库配置 二、单机模式 三、集群模式 四、使用nginx集群模式的负载均衡 总结 前言 一、nacos数据库配置 在数据库中创建nacos_config 编码格式utf8-mb4的数据库 把上面的数据库文件导入数据库 在 配置文件中添加如下 spring.datasour…

LINUX之链接命令

链接命令学习目标能够说出软链接的创建方式能够说出硬链接的创建方式1. 链接命令的介绍链接命令是创建链接文件&#xff0c;链接文件分为:软链接硬链接命令说明ln -s创建软链接ln创建硬链接2. 软链接类似于Windows下的快捷方式&#xff0c;当一个源文件的目录层级比较深&#x…

Apache Shiro 1.2.4反序列化漏洞(CVE-2016-4437)

目录 1、Apache Shiro简介 2、漏洞原理 关键因素&#xff1a; 漏洞分析&#xff1a; 漏洞特征&#xff1a; 3、影响版本 4、漏洞复现 任意命令执行 GETSHELL 防御措施 1、Apache Shiro简介 Apache Shiro是一个Java安全框架&#xff0c;执行身份验证、授权、密码和会话…

深入解读.NET MAUI音乐播放器项目(一):概述与架构

系列文章将分步解读音乐播放器核心业务及代码&#xff1a; 深入解读.NET MAUI音乐播放器项目&#xff08;一&#xff09;&#xff1a;概述与架构深入解读.NET MAUI音乐播放器项目&#xff08;二&#xff09;&#xff1a;播放内核深入解读.NET MAUI音乐播放器项目&#xff08;三…

部门新来了个软件测试工程师,一副毛头小子的样儿,哪想到是新一代卷王...

内卷&#xff0c;是现在热度非常高的一个词汇&#xff0c;随着热度不断攀升&#xff0c;隐隐到了“万物皆可卷”的程度。 在程序员职场上&#xff0c;什么样的人最让人反感呢? 是技术不好的人吗?并不是。技术不好的同事&#xff0c;我们可以帮他。 是技术太强的人吗?也不…

真正的云原生大数据平台,让Kubernetes又牛了一把

作为一款开源的容器编排引擎&#xff0c;始于2014年的 Kubernetes 一经推出就受到了开发者的喜爱&#xff0c;谁也不曾想到它会取得如此大的成功。如今&#xff0c;在云原生技术发展的浪潮中&#xff0c;Kubernetes 作为容器编排领域的事实标准和云原生领域的关键项目&#xff…

LeetCode-111. 二叉树的最小深度

目录题目分析递归法题目来源111. 二叉树的最小深度题目分析 这道题目容易联想到104题的最大深度&#xff0c;把代码搬过来 class Solution {public int minDepth(TreeNode root) {return dfs(root);}public static int dfs(TreeNode root){if(root null){return 0;}int left…

C++笔记之单例模式

C笔记之单例模式 前言 当一个类在程序的整个生命周期中&#xff0c;只需要一个实例的时候&#xff0c;就可以考虑把这个类设计成单例的方式&#xff0c;提供出去&#xff0c;让全局访问。一般来说比较 “重” 的一些类会设计成单例&#xff0c;比如像“引擎”&#xff0c; “x…