MIT6.S081 Lec01

OS第一弹---6.s081 lab1 为什么要开始写lab,最近虽然到了复习周,但是复习是真的烦,所以干脆摆烂,直接冲去学OS,MIT开源的6s081,属于一整个爱住了。只能说很难不爱这种实验,虽然一做就是一整天,刚开始的艰难的阅读也好,后面的对于每个函数的专门理解也好,可能会有点麻烦吧,可是收获到知识的那种快乐也是真的快乐。所以没有人能束缚得住我们,除了我们自己。 阅读详情

简介

MIT6.S081这门课程的标题是Operating System Engineering。主要讲的就是操作系统。

课程是基于一个类似于Unix但是简单的多的教学操作系统XV6来讲解,虽然不是原汁原味的Linux,但是对于理解Linux的工作方式和结构是足够了。

操作系统的共同目标

  • 抽象硬件。
  • 在多个应用程序之间共用硬件资源
  • 隔离性。
  • 实现共享
  • security
  • 帮助应用程序获得高性能
  • 支持大量不同类型的应用程序

操作系统的结构

用户空间。区别于用户空间程序,有一个特殊的程序总是会在运行,它称为Kernel。Kernel是计算机资源的守护者。当你打开计算机时,Kernel总是第一个被启动。Kernel程序只有一个,它维护数据来管理每一个用户空间进程。Kernel同时还维护了大量的数据结构来帮助它管理各种各样的硬件资源,以供用户空间的程序使用。Kernel同时还有大量内置的服务。
关注点:Kernel、连接Kernal和用户空间程序的接口、Kernel内软件的架构。

  • 文件系统
    文件系统的作用是管理文件内容并找出文件具体在磁盘中的哪个位置。文件系统还维护了一个独立的命名空间,其中每个文件都有文件名,并且命名空间中有一个层级的目录,每个目录包含了一些文件。所有这些都被文件系统所管理。
  • 进程管理系统
    每一个用户空间程序都被称为一个进程,它们有自己的内存和共享的CPU时间。
  • Kernel的API
    它决定了应用程序如何访问Kernel。通常来说,这里是通过所谓的系统调用(System Call)来完成。系统调用与程序中的函数调用看起来是一样的,但区别是系统调用会实际运行到系统内核中,并执行内核中对于系统调用的实现。

系统调用在应用程序

open()

如果应用程序需要打开一个文件,它会调用名为open的系统调用,并且把文件名作为参数传给open.

fd = open("fileneam",1);

这里看起来像是个函数调用,但是open是一个系统调用,它会跳到Kernel,Kernel可以获取到open的参数,执行一些实现了open的Kernel代码,或许会与磁盘有一些交互,最后返回一个文件描述符对象。

write()

如果想要向文件写入数据,相应的系统调用是write。你需要向write传递一个由open返回的文件描述符作为参数。

write(fd,"hello\n",6);

第二个参数的指针,实际上是内存中的地址。所以这里实际上告诉内核,将内存中这个地址起始的6个字节数据写入到fd对应的文件中。

fork()

fork创建了一个与调用进程一模一样的新的进程,并返回新进程的process ID/pid。

#include“kernel/types.h”
#include"user/user.h"
int main()
{
	int  pid;
	pid = fork();
	printf("fork() returnd %d\n",pid);
	if(pid==0){
		printf("child\n");
		}
	else{
		printf("parent\n");
		}
	exit(0);

fork会拷贝当前进程的内存,并创建一个新的进程,这里的内存包含了进程的指令和数据。之后,我们就有了两个拥有完全一样内存的进程。fork系统调用在两个进程中都会返回,在原始的进程中,fork系统调用会返回大于0的整数,这个是新创建进程的ID。而在新创建的进程中,fork系统调用会返回0。所以即使两个进程的内存是完全一样的,我们还是可以通过fork的返回值区分旧进程和新进程。
调用进程通常称为父进程,父进程看到的pid必然大于0。所以父进程会打印“parent”,子进程会打印“child”。之后两个进程都会退出。

编写操作系统的难点

  • 内核的编译环境。在编写、修改,扩展内核,或者写一个新的操作系统内核时,你实际上在提供一个基础设施让别人来运行他们的程序。当程序员在写普通的应用程序时,应用程序下面都是操作系统。而当我们在构建操作系统时,在操作系统下面就是硬件,
  • 需要满足一些列矛盾的需求。
  1. 操作系统既高效又易用。高效通常意味着操作系统需要在离硬件近的low-level进行操作,而易用则要求操作系统为应用程序提供抽象的high-level可移植接口。难点提供一个简单可移植,同时又高效的抽象接口。
  2. 强大的操作系统服务于简单接口直接的矛盾。
    不想程序员看到数量巨多,复杂且难以理解的的内核接口。因为,如果他们不理解这些接口,就会很难使用这些接口。所以,要提供一个简单的接口,同时又包含了强大的功能。
  3. 内核具备灵活的接口和安全性的矛盾。
    操作系统应该提供自由的操作给程序员,但是这个自由是有限制的,不能让程序直接访问硬件,这会有很大的风险
一只小菜鸡学MIT公开课6.S081的经验分享(持续更新) 记录一个小菜鸡学习MIT操作系统课6.S081从完全不会到慢慢摸索出来的经验分享与踩坑过程. 如果能穿越回去把这篇文章告诉当时的自己,能节省很多时间. 阅读详情

相关推荐

6.s081 实验1 记录

实验一test_pipe.cprimes.c # 实验一没什么前置知识,配置好环境,会c语言直接就可以做。 Lab util: Unix utilities test_pipe.c #include "kernel/stat.h" #include "user/user.h" int main(int avgc, char* argv[]) { char buf[1]; char abyte[] = "abc"; int p[2]; pipe(p); in

nulofa的博客 422

MIT6.S081简单总结

对MIT6.S081简单总结,有助于理解MIT6.828的lab

weixin_46803360的博客 2685

Mplus—验证性因素分析(Confirmatory Factor Analysis, CFA)

介绍一阶和二阶验证性因素分析概况及在Mplus中的操作方法。

m0_54401011的博客 1万+

MIT6.S081最详解析与归纳——lab1:Utilities

1.几个系统调用的使用如fork,wait,exec2.管道的使用3.多进程编程4.文件操作,FCB,目录项,文件遍历。

qq_45456064的博客 2473

MATLAB实战:5步搞定GNSS单点定位解算(附完整代码)

本文提供了一份基于MATLAB的GNSS单点定位实战指南。通过5个核心步骤,详细讲解了如何从卫星坐标和伪距观测值出发,利用最小二乘迭代算法,构建并实现一个完整的单点定位解算器。文章附有完整代码,并涵盖精度评估与结果分析,适合GNSS初学者和MATLAB用户快速上手实践。

a2b3c4d5e的博客 250

【事件相机实战】噪声识别与智能滤波技术解析

本文深入解析了事件相机应用中关键的噪声识别与智能滤波技术。针对背景活动噪声、阈值波动噪声、热点噪声及运动边缘尾迹等核心噪声类型,文章剖析了其成因与特征,并详细介绍了从经典的时空相关性滤波、热点像素滤除到前沿的深度学习(如EDnCNN)等实战滤波方法,旨在帮助开发者在保证低延迟的前提下,有效提升事件流数据质量。

weixin_29169899的博客 439

MIT6.S081 Lec01笔记 ——Introduction and Examples

6.S081 / Fall 2020 [麻省理工操作系统 - 2020 年秋季] risc-v版本的xv6 跑在 RISC-V微处理器上,没用x86的指令集 理论上,你可以在一个RISC-V计算机上运行XV6,已经有人这么做了。 但是我们会在一个QEMU模拟器上运行XV6。 Lec01 Introduction and Examples 课程的目标 理解操作系统的设计和实现。设计是指整体的结构,实现是指具体的代码长什么样。对于这两者,我们都会花费大量时间讲解。 为了深入了解具体的工作原理,你们可以通

qq_53111905的博客 536

把注释掉的代码删除掉:在 SAP ABAP 团队里打造可回溯、可测试、可演进的代码库

摘要 SAP ABAP项目中常见的"注释掉代码"反模式存在严重隐患:它增加代码噪音,制造虚假安全感,并可能引发安全和合规风险。Clean ABAP指南明确建议删除这类代码,理由包括: 版本控制系统已提供完整历史回溯能力 注释代码会误导开发者,增加理解成本 临时禁用需求应通过Feature Toggle实现 必须保留的参考代码应放入$TMP等隔离区域 团队应建立自动化检查机制,将"删除注释代码"纳入工程规范,确保代码库只表达当前有效的行为逻辑。在AI时代,可以利用工具辅

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 2450

MIT 6. S081 LEC1

课程目标:理解操作系统的设计(整体的结构)和实现(代码长什么样)操作系统能干嘛?:第一个就是抽象硬件(进程,文件系统)multiplex:在多个应用程序之间共用硬件资源Isolation:不同的活动之间不能相互干扰Sharing:数据能共享Security:所以在共享的同时,我们也希望在没有必要的时候不共享:帮助应用程序获得高性能Kernel是什么。

memorycx的博客 879

OceanBase备租户创建(二):通过BACKUP DATABASE PLUS ARCHIVELOG

OceanBase数据库备租户创建方法二:通过BACKUP DATABASE PLUS ARCHIVELOG功能实现,特别适用于社区版和单机版部署模式。

Sebastien23的博客 541

YOLOv11改进策略【损失函数篇】| 通过辅助边界框计算IoU提升检测效果(Inner_GIoU、Inner_DIoU、Inner_CIoU、Inner_EIoU、Inner_SIoU)

为了弥补现有 IoU 损失在不同检测任务中泛化性弱和收敛速度慢的问题,·Inner-IoU·通过引入比例因子 “ratio” 来控制辅助边界框的尺度大小,利用不同尺度的辅助边界框来计算损失,从而加速边界框回归过程。

Limiiiing的博客 3892

MIT6.S081 Lec09翻译

MIT6.S081 Lec09笔记 Lec09 Interrupts (Frans) 9.1 真实操作系统内存使用情况 今天课程的内容是中断。但是在具体介绍中断之前,我想先回顾一下上周一些有趣的内容。因为上周的课程主要是讲内存,我们收到了很多内存相关的问题。我想先讨论一下内存是如何被真实的操作系统(而不是像XV6这样的教学操作系统)所使用。 下图是一台Athena计算机(注,MIT内部共享使用的计算机)的top指令输出。如果你查看Mem这一行, 首先是计算机中总共有多少内存(33048332),如果你再往

qq_53111905的博客 332

YOLO26涨点改进 | 全网独家,注意力创新改进篇 | Arxiv2025 | YOLO26引入MSLA多尺度线性注意力模块,高效提取多尺度特征和建模长程依赖,含多种创新改进,助力有效涨点

本文提出了一种多尺度线性注意力模块(MSLA)来优化YOLO26模型。MSLA通过并行使用不同尺寸的深度可分离卷积(3×3至9×9)提取多尺度特征,并结合线性注意力机制高效建模全局依赖关系。该模块显著提升了模型对多尺度目标的检测能力,同时保持了轻量化特性。实验表明,MSLA能有效增强小目标检测和复杂场景下的分割精度。文章详细介绍了MSLA的网络结构、核心优势及实现代码,并提供了两种集成MSLA的YOLO26改进方案,为实时目标检测任务提供了高效解决方案。

Ai缝合怪、助力小伙伴高效发论文 294

mit 6.S081 2020 Lec2 pointer.c

mit6.828 Lec1 pointer.c #include <stdio.h> #include <stdlib.h> void f(void) { // 对于一个数组,我们只能够做两件事: // 1.确定该数组大小[sizeof(数组名)], // 2.以及获得指向该数组下标为0的元素的指针 /* 数组名:指向该数组下标为0的元素的指针。 数组下标: 任何一个数组下标运算都等同于一个对应的指针运算。 即a[i]=*(

weixin_41365236的博客 228

【服务器电源架构与关键技术发展趋势】深度解析架构、方案、玩家与未来趋势

技术维度:台达 / 光宝在高功率密度(97%+ 效率)和垂直整合上领先,大陆厂商(麦格米特 / 欧陆通)在成本控制和快速响应上更优,国际厂商(英飞凌)聚焦核心器件突破。 客户维度:台达绑定英伟达核心供应链,麦格米特 / 欧陆通兼顾国内外客户,光宝 / 中恒电气侧重云端与互联网厂商。 趋势适配:所有厂商均加速布局 800V 高压架构、液冷技术和高功率 Power Shelf,以应对 AI 服务器单柜功率从 10kW→200kW 的升级需求。

昔时扬尘处 723

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

[MIT 6.S081] Lec 1: Introduction and examples 笔记

Lecture 1 - Introduction and Examples 笔记 课程目标 OS Design 操作系统设计 Hands-on Exe 操作系统实践 OS PURPOSE Abstract Hardware 硬件抽象 Mutiplex 在许多应用程序中复用硬件资源 Isolation 隔离性, 不同活动互不干涉 Sharing 共享 Security 安全系统和权限 Performance 性能 Range of uses 多种用途 OS ORGANIZATION API-KERN

LostUnravel的博客 369

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

2020 MIT6.s081 Operating System Engineering XV6 Lab概览

MIT6.s081 Operating System Engineering XV6 Lab概览

sun%moon 1269

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

MIT6.S081操作系统实验——环境搭建与项目简介

在做过各种语言的项目,对网站架构和职业要求有一个基础认知后,我认为要在卷翻天的职场立足,在了解并能使用前沿技术的同时还得打好计算机基础,所以痛下决心重拾大二摸鱼过去的OS实验。 2018年及以前MIT6.828是MIT的本科生OS课程,2019开始这门课被拆成了6.S081和6.828,分别成为本科生和研究生的OS课程。6.S081的实验由原来的5个拆成了10个,总体难度降低,更加易于基础并不牢固的学生学习。我将记录2021年课程的实验全过程,下文是运行环境以及调试环境搭建的记录,着重记录如何使用Clion

qq_23924713的博客 7774

Mit6.s081环境配置踩坑之旅WSL2+VScode

久闻6.s081大名,于是寒假尝试完成几个lab。在折腾了几天的环境配置后,依然是不得要领,遂作罢。近日尝试了另一种环境,终有所得,欣然献于诸君。

John_Snowww的博客 5165

MIT 6.S081 教材第五章内容 -- 中断与设备驱动--下

MIT 6.S081 教材第五章内容 -- 中断与设备驱动--下

m0_53157173的博客 1327

MIT公开课6.S081 macos详细配置

点击。

weixin_46521047的博客 212

MIT 6.S081 前言

介绍6.S081是什么

bottleofcancer的博客 503

Mit6.S081-实验7-Multithreading

Mit6.S081-实验7-Multithreading一、实验准备二、Uthread:switching between threads1,实验要求2,一些提示3,具体实现4,执行效果 一、实验准备 本实验将带你熟悉多线程。 你将实现线程(用户级线程包)切换,使用多线程加速程序,实现一个barrier。 在写代码前,你应该确定你已经读过xv6 book的章节7:scheduling,并且读过相关代码。 开始本lab前,先切换到cow分支 git fetch、git checkout cow、mak

code a better life~ 33万+

6.S081 Locks

看到这一段代码,多核会出现这样一种情况:两个进程同时运行到r = kmem[i].freelist,其中一个获得锁进入了if( r ) ,而另外一个再获得锁时,也可以进入if( r ) 里面,但此时该页已经被引用过了,所以出现了我们上面看到的bug。但是就像实验所说,kalloc()的实现更复杂了,因为它需要在内存不够的时候(freelist为空),去别的核心的freelist中去“偷”内存块,放入自己的freelist里为己所用。所以在这里是会出现自旋的,我们的锁也是在这里应用。

qq_45668408的博客 1106

6.S081——补充材料——RISC-V架构中的异常与中断详解

在RISC-V标准中,将异常(exception)定义为当前CPU运行时遇到的与指令有关的不寻常情况,而使用中断(interrupt)定义为因为外部异步信号而引起的让控制流脱离当前CPU的事件。而陷阱(trap)表示的则是,由异常或者中断引起的控制权转移到陷阱处理程序的过程。其实Xv6的定义和RISC-V的定义是相互兼容的,我们说在Xv6中有三种方式会触发陷阱:系统调用、中断和程序异常,其实系统调用中的ecall指令和程序执行中的异常都属于RISC-V标准中定义的异常情况,而。

zheyuan的博客 1万+

6.s081学习笔记-入门篇

6.s081学习笔记-入门篇,是个人学习记录,也是给零基础(只有语言基础)的同学学习这门课程的一些参考。

wuye37的博客 282
上一篇: 刷题记录|Day10 ● 232.用栈实现队列 ● 225. 用队列实现栈 ● 141. 环形链表
下一篇: 刷题记录|Day11 ● 20. 有效的括号 ● 1047. 删除字符串中的所有相邻重复项 ● 150. 逆波兰表达式求值
null_one
博客等级 码龄8年 847粉丝 87原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值