当前位置: 首页 > news >正文

1628_MIT 6.828 xv6_chapter0操作系统接口

         全部学习汇总: 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章节就看完了,还是很有收获的。

相关文章:

1628_MIT 6.828 xv6_chapter0操作系统接口

全部学习汇总&#xff1a; GreyZhang/g_unix: some basic learning about unix operating system. (github.com) 这本书最初看名字以为是对早期unix的一个解读&#xff0c;但是看了开篇发现 不完全是&#xff0c;只是针对JOS教学OS系统来做的一些讲解。 Xv6是对UNIX v6的重新实…...

使用 Sahi 实现 Web 自动化测试

Sahi 是 Tyto Software 旗下的一个基于业务的开源 Web 应用自动化测试工具。Sahi 运行为一个代理服务器&#xff0c;并通过注入 JavaScript 来访问 Web 页面中的元素。Sahi 支持 HTTPS 并且独立于 Web 站点&#xff0c;简单小巧却功能强大。它相对于 Selenium 等自动化测试工具…...

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

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

Java 网络编程详解

1、什么是网络编程 在网络通信协议下&#xff0c;不同计算机上运行的程序&#xff0c;可以进行数据传输。 应用场景&#xff1a;     1、即时通信 2、网游对战 3、邮件等等 Java中可以使用java.net包下的技术轻松开发出常见的网络应用程序 2、网络编程三要素 2.1 IP地址 要…...

Scratch少儿编程案例-几何形式贪吃蛇

专栏分享 点击跳转=>Unity3D特效百例点击跳转=>案例项目实战源码点击跳转=>游戏脚本-辅助自动化点击跳转=>Android控件全解手册点击跳转=>Scratch编程案例👉关于作者...

一定要收藏的面试思维导图,粉丝分享面试经验

一位粉丝分享面试经验&#xff1a;1.常见面试题有哪些&#xff1f;主要从以下一些知识点做了准备&#xff1a; 常用的分析方法、Excel、SQL、 A/B测试、产品分析。然后每份面试针对职位要求&#xff0c;还有前期和HR聊天一点点了解这个职位之后&#xff0c;定向准备。 Excel、S…...

【博客615】通过systemd设置cgroup来限制服务资源争抢

通过systemd设置cgroup来限制服务资源争抢 1、场景 我们的宿主机上通常会用systemctl来管理一些agent服务&#xff0c;此时我们需要限制服务的cpu&#xff0c;memory等资源用量&#xff0c;以防止服务之前互相争抢资源&#xff0c;导致某些核心agent运行异常 2、systemd与cgro…...

C语言经典编程题100例(21-40)

21、练习3-2 计算符号函数的值对于任一整数n&#xff0c;符号函数sign(n)的定义如下&#xff1a;请编写程序计算该函数对任一输入整数的值。输入格式:输入在一行中给出整数n。输出格式:在一行中按照格式“sign(n) 函数值”输出该整数n对应的函数值。输入样例1:10输出样例1:sig…...

Rabbitmq业务难点

Rabbitmq业务难点1.消息生产者发送的消息无法路由到任何一个队列怎么处理?2.聊聊Rabbitmq的七种工作模式3.Rabbitmq的消息确认机制4.Rabbitmq的消息持久化5.发布确认模式如何确保生产者能够成功将消息投递到消息队列6. Rabbitmq基于队列设置消息过期时间和单独针对消息设置过期…...

服务器如何下载百度网盘文件?Linux服务器如何在百度网盘中连接、上传下载;在Linux服务器上下载百度云盘中的资料

前言 百度云提供Python包bypy进行远程服务器的对接然后下载&#xff1a; https://github.com/houtianze/bypy 可以通过pip直接下载&#xff0c;授权本人的百度云账号后&#xff0c;就可以直接使Linux电脑本地文件与百度网盘的apps&#xff08;我的应用数据&#xff09;/bypy目…...

Cesium-数字仿真-你总要了解

Cesium&#xff08;专注于时空数据的实时可视化) cesium是一款三维地球开源框架&#xff08;可以多平台、跨平台使用&#xff09;cesium隶属于美国AGI公司&#xff08;Analytical Graphics Incorporation&#xff09;&#xff0c;美国通用公司宇航部的工程师创始开源 周边产…...

原型、原型链、__proto__与prototype的区别、继承

一.什么是原型与原型链 根据MDN官方解释: JavaScript 常被描述为一种基于原型的语言——每个对象拥有一个原型对象[[Prototype]] &#xff0c;对象以其原型为模板、从原型继承方法和属性。原型对象也可能拥有原型&#xff0c;并从中继承方法和属性&#xff0c;一层一层、以此类…...

前端 面经

1说一说cookie sessionStorage localStorage 区别&#xff1f;解题思路得分点 数据存储位置、生命周期、存储大小、写入方式、数据共享、发送请求时是否携带、应用场景 标准回答 Cookie、SessionStorage、 LocalStorage都是浏览器的本地存储。 它们的共同点&#xff1a;都是存储…...

[oeasy]python0080_设置RGB颜色_24bit_24位真彩色_颜色设置

RGB颜色 回忆上次内容 上次 首先了解了 索引颜色 \33[38;5;XXXm 设置 前景为索引色\33[48;5;XXXm 设置 背景为索引色 RGB每种颜色 可选0-5总共 6 级 想用 精确RGB值 真实地 大红色画个 大红桃心 ♥️ 有可能吗&#xff1f;&#xff1f;&#x1f914; rgb 模式 关于 RGB 模式…...

实战项目-用户评论数据情绪分析

目录1、基于词典的方法2、基于词袋或 Word2Vec 的方法2.1 词袋模型2.2 Word2Vec3、案例&#xff1a;用户评论情绪分析3.1 数据读取3.2 语料库分词处理3.3 Word2Vec 处理3.4 训练情绪分类模型3.5 对评论数据进行情绪判断目的&#xff1a;去判断一段文本、评论的情绪偏向在这里&a…...

day02 DOS(续)文本编辑快捷键 发展史

day02课堂笔记 1、常用的DOS命令&#xff08;续&#xff09; 1.1、del命令&#xff0c;删除一个或者多个文件 删除T1.class文件 C:\Users\Administrator>del T1.class 删除所有.class结尾的文件&#xff0c;支持模糊匹配 C:\Users\Administrator>del *.class T1.classT1…...

arm64与aarch64

结论&#xff1a; 目前arm64和aarch64概念已合并&#xff0c;新版64位arm程序统称aarch64. 问题引入&#xff1a; 存在部分机器&#xff0c;安装arm版本ss&#xff0c;会报错&#xff0c;提示 rootlocalhost ~]# rpm -ivh senseshiel50 59130arm64.rpm Verifying... ########…...

QString详解

QString存储16位Qchar(Unicode)字符串 QString使用隐式共享&#xff08;copy-on-write&#xff09;来提高性能。 什么是Unicode? unicode是一种国际标准&#xff0c;支持当今使用的大多数操作系统&#xff0c;他是US-ASCII和Latin-1的超集&#xff08;与子集相同字符编码相同…...

SpringCloud微服务

一、微服务架构 1.1、单体应用架构 将项目所有模块(功能)打成jar或者war&#xff0c;然后部署一个进程 优点: 1:部署简单:由于是完整的结构体&#xff0c;可以直接部署在一个服务器上即可。 2:技术单一:项目不需要复杂的技术栈&#xff0c;往往一套熟悉的技术栈就可以完成开…...

Hive 连接及使用

1. 连接 有三种方式连接 hive&#xff1a; cli&#xff1a;直接输入 bin/hive 就可以进入 clihiveserver2、beelinewebui 1.1 hiveserver2/beeline 1、开启 hiveserver2 服务 // 前台运行&#xff0c;当 beeline 输入命令时&#xff0c;服务端会返回 OK [roothadoop1 bin]…...

Android WMS实战:一个取巧的closeSystemDialogs,解决透明Activity横屏导致桌面布局错乱

Android WMS实战&#xff1a;巧用closeSystemDialogs解决透明Activity横屏导致的桌面布局错乱 在Android系统开发中&#xff0c;窗口管理服务&#xff08;WindowManagerService&#xff0c;简称WMS&#xff09;一直是开发者需要深入理解的核心模块。今天我们要探讨的是一个非常…...

Visual Studio Code 在 MacOS 在 Linux 上的完整安装与高效开发指南:从部署到远程开发实战

VVisual Studio Code 在 MacOS 在 Linux 上的完整安装与高效开发指南&#xff1a;从部署到远程开发实战 摘要一、VS Code 简介二、下载与安装1. 下载 VS Code2. 安装步骤方法 1&#xff1a;通过包管理器安装&#xff08;以 Ubuntu/Debian 为例&#xff09;方法 2&#xff1a;通…...

ETS2LA:欧洲卡车模拟2自动驾驶插件的完整指南

ETS2LA&#xff1a;欧洲卡车模拟2自动驾驶插件的完整指南 【免费下载链接】Euro-Truck-Simulator-2-Lane-Assist Plugin based interface program for ETS2/ATS. 项目地址: https://gitcode.com/gh_mirrors/eur/Euro-Truck-Simulator-2-Lane-Assist 你是否曾经在长途运输…...

嘉兴看牙哪家靠谱?2026年本地6家口腔机构实测排行榜(纯生活体验版)

问这个问题的人&#xff0c;多半是被坑过、排过队、或者被推销烦过。作为一个在嘉兴生活了快十年的普通市民&#xff0c;补牙、洗牙、带孩子看牙都经历过&#xff0c;我也踩过不少坑。这次花了两周时间&#xff0c;跑了南湖、秀洲、平湖几家口碑还行的口腔机构&#xff0c;纯从…...

如何快速构建企业级拼多多数据采集系统:3大核心优势助力电商决策

如何快速构建企业级拼多多数据采集系统&#xff1a;3大核心优势助力电商决策 【免费下载链接】scrapy-pinduoduo 拼多多爬虫&#xff0c;抓取拼多多热销商品信息和评论 项目地址: https://gitcode.com/gh_mirrors/sc/scrapy-pinduoduo 在竞争激烈的电商市场中&#xff0…...

AI圈内两大热词 Agent 和 Skill,一文彻底搞懂它们之间的区别与联系!

本文以餐厅经理和厨师的类比&#xff0c;解释了 Agent 和 Skill 的核心区别&#xff1a;Agent 拥有决策权&#xff0c;决定下一步做什么&#xff1b;Skill 则负责执行具体任务。文章指出&#xff0c;尽管在实际应用中两者界限逐渐模糊&#xff0c;但在构建 AI 系统时&#xff0…...

工资到账前,先把个税摸个底

工资到账前&#xff0c;先把个税摸个底 什么是个税 「个税」通常指个人所得税。对大多数上班族来说&#xff0c;最常见的是工资薪金所得&#xff1a;公司发你税前工资&#xff0c;按规定预扣预缴一部分税款交给税务&#xff1b;你到手的「实发」已经扣过税了。除此之外&#…...

别再被Excel文件‘炸’了!手把手教你用ZipSecureFile.setMinInflateRatio解决Apache POI的Zip Bomb报错

深度解析Apache POI的Zip Bomb防护机制与安全实践 当Java开发者使用Apache POI处理用户上传的Excel文件时&#xff0c;可能会突然遭遇"Zip bomb detected!"的报错。这个看似简单的错误背后&#xff0c;实际上涉及文件安全检测、内存防护和系统稳定性等多重考量。本文…...

Flipper Zero红外遥控革新:XRemote应用实现物理按键直控与智能学习

1. 项目概述&#xff1a;Flipper Zero上的高级红外遥控应用如果你和我一样&#xff0c;是个喜欢折腾各种智能硬件和复古设备的玩家&#xff0c;那你大概率听说过或者已经拥有了一台Flipper Zero。这个小巧的设备因其强大的射频和红外功能&#xff0c;被大家戏称为“赛博海豚”。…...

AI代理如何通过MCP协议实现DeFi自动化操作与策略执行

1. 项目概述&#xff1a;当DeFi遇上AI代理&#xff0c;Robocular/defi-mcp的诞生最近在捣鼓链上自动化策略和AI代理&#xff0c;发现了一个挺有意思的项目——Robocular/defi-mcp。简单来说&#xff0c;这是一个专门为AI代理&#xff08;特别是那些基于MCP&#xff0c;也就是Mo…...