Shell Tools of Missing Semester(二) Shell toolsshell 脚本Bash中的字符串通过 ' 和 " 分隔符来定义,但是它们的含义并不相同。以 ' 定义的字符串为原义字符串,其中的变量不会被转义,而 " 定义的字符串会将变量值进行替换。 12345foo=barecho "$foo"# 打印 barecho '$foo'# 打印 $foo ba 2023-12-23 Missing Semester #学习 #笔记 #bash #脚本
Course Shell of Missing Semester(一) 〇、前言本文是 The Missing Semester of Your CS Education 课程的课后题答案,课程网站点击这里,以后系列文章不再描述前言。 本文实验环境:阿里云Ubuntu 22.04 Course shell1、本课程需要使用类Unix shell,例如 Bash 或 ZSH。如果您在 Linux 或者 MacOS 上面完成本课程的练习,则不需要做任何特殊的操作。如果 2023-12-22 Missing Semester #Shell #学习 #笔记
MIT 6.S081学习笔记(第八章) 〇、前言本文主要完成MIT 6.S081 实验八:file system开始之前,切换分支: 123$ git fetch$ git checkout fs$ make clean Large files (moderate) The format of an on-disk inode is defined by struct dinode in fs.h. You’re particul 2023-12-21 OS #学习 #笔记 #操作系统 #MIT 6.S081 #文件系统
xv6 文件系统面临的问题 〇、前言本文将讨论 xv6 文件系统面临的挑战。 一、xv6 文件系统面临的挑战1、cache eviction在这个情景中,假设正在进行的事务(transaction)导致了对第 45 块(block 45)的更新。但在这个过程中,缓冲池已经被填满了,所以需要撤回第 45 块。这个撤回操作意味着将第 45 块写回磁盘。然而,这里存在的问题是:如果写回磁盘后发生了系统崩溃,会破坏被称为”wri 2023-12-20 OS #笔记 #操作系统 #xv6 #OS
实现个人日志命令行工具(C语言) 〇、前言中午上课的时候,打开 github 看了一下个人主页,虽然最近很忙,但是这个活动记录有点过于冷清:于是我就想着写一个日志命令行工具,输入以下命令就能将我的日志立即同步到 github 上: 1mylog today is really a long day! 之后 today is really a long day! 这句话就会被同步到 github 上的今天的文件中了。 一、思路 2023-12-19 系统编程 > C语言 #开发语言 #c语言 #命令行工具 #个人记录
xv6 文件系统(下) 〇、前言计算机崩溃后如何恢复,是一个很重要的话题。对于内存中的数据无关痛痒,开机后重新载入就能解决问题;但是对于持久化存储设备,当你尝试修改一个文件,突然断电当你重新打开文件后,这个文件的状态是否正确,是一个问题。 我们讨论文件的状态是否正确,是指文件系统对于这个文件是否运行正常,比如 entry 中的 inode 信息是否与用户期望的一致,比如 size 字段是否正确等。 因此,如何从崩溃中 2023-12-18 OS #笔记 #操作系统 #xv6 #OS
xv6 文件系统(上) 〇、前言本文将会结合 xv6 源码讨论文件系统的工作原理。 一、文件系统实现概述 xv6 文件系统可以用下面的图来表示: 按照分层的方式进行理解: 在最底层是磁盘,也就是一些实际保存数据的存储设备,正是这些设备提供了持久化存储。 在这之上是buffer cache或者说 block cache,这些cache可以避免频繁的读写磁盘。这里我们将磁盘中的数据保存在了内存中。 为了保证持久性,再往 2023-12-18 OS #笔记 #操作系统 #xv6 #OS
MIT 6.S081学习笔记(第七章) 〇、前言本文主要完成MIT 6.S081 实验七:locks。开始之前,切换分支: 123$ git fetch$ git checkout lock$ make clean 一、Memory allocator (moderate)Question requirements The program user/kalloctest stresses xv6’s memory all 2023-12-13 OS #学习 #笔记 #操作系统 #MIT 6.S081
xv6 中的一些系统调用(下) 〇、前言本文将会结合源代码谈论 sleep、wakeup 这两个系统调用。 一、sleep()系统调用以下是sleep()函数源码: 123456789101112131415161718192021222324252627282930// Atomically release lock and sleep on chan.// Reacquires lock when awakened.vo 2023-12-11 OS #笔记 #操作系统 #xv6 #OS
xv6 中的一些系统调用(上) 〇、前言本文将会结合源代码谈论 exit、wait、kill 这三个系统调用。 一、exit 系统调用以下是 exit()的源码: 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647// Exit the current process. Does not return./ 2023-12-10 OS #笔记 #操作系统 #xv6 #OS