MIT 操作系统课程摘要草稿

本文探讨了操作系统中内核如何通过文件描述符管理进程间的资源,以及shell如何利用fork和重定向进行I/O操作。还介绍了XV6操作系统从M-mode到kernelmode的切换过程,以及如何通过地址空间转换实现应用程序的内存隔离。
摘要由CSDN通过智能技术生成

因为内核为每个进程都维护了一个独立的文件描述符空间,这里相同数字的文件描述符可能会对应到不同的文件。

open是一个C函数,但是这个函数内的指令实际上是机器指令,也就是说我们调用的open函数并不是一个C语言函数,它是由汇编语言实现,组成这个系统调用的汇编语言实际上在RISC-V中被称为ecall。这个特殊的指令将控制权转给内核。之后内核检查进程的内存和寄存器,并确定相应的参数。

shell之所以能重定向输入输出如 echo hello output ),是因为shell会先调用fork建立子进程,然后改变文件描述符1(代表console的输出)为output,然后执行你的指令,这样父进程的文件描述符1并没有改变,不会被影响。

使用操作系统的一个原因,甚至可以说是主要原因就是为了实现multiplexing和内存隔离

内核被加载的起始位置是0x80000000

XV6从entry.s开始启动,这个时候没有内存分页,没有隔离性,并且运行在M-mode(machine mode)。XV6会尽可能快的跳转到kernel mode或者说是supervisor mode。我们在main函数设置一个断点,main函数已经运行在supervisor mode了。最后当所有的设置都完成了,操作系统也运行起来了,会通过userinit运行第一个进程

这里的基本想法是每个应用程序都有自己独立的表单,并且这个表单定义了应用程序的地址空间。所以当操作系统将CPU从一个应用程序切换到另一个应用程序时,同时也需要切换SATP寄存器中的内容,从而指向新的进程保存在物理内存中的地址对应表单。这样的话,cat程序和Shell程序中相同的虚拟内存地址,就可以翻译到不同的物理内存地址,因为每个应用程序都有属于自己的不同的地址对应表单。

如果为每个虚拟地址对应物理地址创建一个条目,所有的内存都会被表单耗尽,所以这一点也不合理。实际上是为每个page创建条目,

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值