当前位置: 首页 > 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章节就看完了,还是很有收获的。

http://www.lryc.cn/news/2588.html

相关文章:

  • 使用 Sahi 实现 Web 自动化测试
  • 天津菲图尼克科技携洁净及无菌防护服解决方案与您相约2023生物发酵展
  • Java 网络编程详解
  • Scratch少儿编程案例-几何形式贪吃蛇
  • 一定要收藏的面试思维导图,粉丝分享面试经验
  • 【博客615】通过systemd设置cgroup来限制服务资源争抢
  • C语言经典编程题100例(21-40)
  • Rabbitmq业务难点
  • 服务器如何下载百度网盘文件?Linux服务器如何在百度网盘中连接、上传下载;在Linux服务器上下载百度云盘中的资料
  • Cesium-数字仿真-你总要了解
  • 原型、原型链、__proto__与prototype的区别、继承
  • 前端 面经
  • [oeasy]python0080_设置RGB颜色_24bit_24位真彩色_颜色设置
  • 实战项目-用户评论数据情绪分析
  • day02 DOS(续)文本编辑快捷键 发展史
  • arm64与aarch64
  • QString详解
  • SpringCloud微服务
  • Hive 连接及使用
  • android libavb深入解读
  • 【面试题】对闭包的理解?什么是闭包?
  • 笔试题-2023-乐鑫-数字IC设计【纯净题目版】
  • antd日期组件时间范围动态跟随
  • mysql一条sql语句的执行过程
  • SaaS是什么,和多租户有什么关系?
  • C语言---字符串函数总结
  • MySQL-表的基本操作
  • 开篇之作—闲聊几句AUTOSAR
  • 02- 天池工业蒸汽量项目实战 (项目二)
  • LeetCode-111. 二叉树的最小深度