MIT6.S081 Operating System Engineering介绍
实验相关链接哔哩哔哩网课链接 实验要求翻译链接 课程翻译文字版本 课程阅读材料 课表安排 其他人的总结链接 David-Dong 解析Ta 林夕丶 星见遥 Doraemonzzz 课程个人理解本课程使用RISC-V架构的XV6操作系统,该操作系统是类Unix类型,虽然简单,但是包含了Unix的重要概念,完成所有lab后对操作系统会拥有更加深入的了解。 实验的每一个lab都有专门的代码可供打分,便于直观判断自己的代码实际效果。 并且每个lab之间互不干扰,lab3的代码不会影响lab4,这种相互隔离做法让实验的进行更加方便。 环境 使用ubuntu-20.04版本 环境配置链接 Tmux(screen类似应用)相关教程 Tmux可以在一个窗口中使用多个终端,Linux类的操作系统在关闭终端后,正在终端中运行的程序便会终止,Tmux可以在退出窗口时保存窗口内容,后续可以通过指令快速恢复环境。*(如图:一个窗口分出来了三个终端)* Tmux常用操作会话管理1.新建会话 tmux new -s <**session-name**> 2.分离会话 tmux det ...
校园网环境下设置IPV6地址
校园网环境下设置IPV6地址 最近换了一个WR30U路由器,并刷入了OPENWRT系统,之前苦于没有公网IPV4地址,无法将群晖放在外网进行远程访问。本次打算为主机设置一个IPV6地址。 本篇文章主要是为了记录设置IPV6的过程中出现的实际情况与网络教程不同的解决方法 一、路由器获取IPV6地址 通过简单的设置获取IPV6地址,没有什么好讲的。 分析我们获得的IPV6地址发现学校下发的IPV6地址没有ipv6-pd的存在,说明无法在路由器下方划分子网,只能使用中继方式 二、设置IPV6下发模式网上教程 根据网上的教程,在我们设置IPV6的时候,需要我们: 1.将WAN6口->DHCP服务器->IPv6设置中的路由通告服务(RA服务)、DHCPv6服务、NDP代理改为中继模式,并指定其为主接口。 2.LAN口同样也是将三项目改为中继模式(LAN口不需要设置为IPV6 DHCP指定的主接口)。 实际情况 实际上由于OPENWRT版本的不同,我只能找到LAN口设置DHCP->IPV6设置下,路由通告服务(RA服务)、DHCPv6服务 ...
群晖NAS的qbittorrent套件版本切换至docker版本
群晖NAS的qbittorrent套件版本切换至docker版本问题来源1.之前使用套件版本的qbittorrent进行种子的下载,发现qbittorrent经常性的卡死,遂决定转至docker版本的qbittorrent 2.希望能够迁移的过程中保留之前正在下载的进程以及已经下载好的种子 一.进行dockers版本的安装1.搜索注册表进行安装 2.设置好端口映射关系 容器默认设置的8080端口为webui的默认端口,我们需要将其固定为指定的端口,这里我们设置为8086. 3.设置文件映射关系 我们需要自己创建config文件,与downloads文件。 如果想要数据保留,downloads文件最好处于套件版本的qbittorrent的downloads文件的上层,即前者包含或等同于后者 4.设置环境变量 在环境变量中新增以下环境变量 1234- PUID=1000- PGID=1000- TZ=Asia/Shanghai- WEBUI_PORT=8080 注意此时的WEBUI_PORT依然设置为8080,我们之前设置的端口映射是将WEBUI_PORT映射 ...
哈希表相关算法
242.有效的字母异位词题目链接 给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词。 注意:若 s 和 t 中每个字符出现的次数都相同,则称 s 和 t 互为字母异位词。 示例 1: 输入: s = “anagram”, t = “nagaram”输出: true示例 2: 输入: s = “rat”, t = “car”输出: false 数组哈希字母的范围从a到b只有26个,可以使用数组来实现哈希表,扫描s并记录每一个字母的出现频率,扫描t进行比较 注意:统计字母出现频率的数组需要进行初始化,否则在进行判断时会出错 123456789101112131415161718bool isAnagram(string s, string t){ if (s.length() != t.length())//长度不等必然不符合条件 return false; int a[26] = {0}; for (auto i : s) { ...
群晖的基础玩法
1.利用cloud sync进行数据备份数据安全是NAS用户应该给予重视的问题,我们可以使用套件Cloud sync将重要数据加密上传到百度网盘上,即使数据损坏,也可以从网盘上恢复 注意:cloud sync中百度网盘的上传文件大小有限制,稍微大一些的文件需要分卷压缩进行上传。 双向备份可以使NAS和百度网盘的文件保持一致,并且可以将百度网盘的文件移动到NAS文件夹实现下载的目的,但是本人体验时发现对文件进行短时间的频繁变动(例如从NAS向百度网盘上传12集番剧,上传途中改变了本地动漫的名称,可能导致某一集存在两个版本),可能导致备份混乱,重复上传。 在进行备份时,百度网盘的设置最好不要设置为根目录,否则之后无法添加其他文件夹进行备份。 2.利用Driver实现NAS与个人PC文件夹的同步本人的NAS运行于校园网环境,晚上宿舍断电之后经常会面临连接不上NAS的情况,倘若将常用的数据存在于NAS当中,经常会在需要的时候无法使用。而我们可以是使用Drive套件,将PC上某一文件夹指定为同步目录,在NAS可以连接的时候,PC的文件会自动同步至NAS,断电后即使我们对共享文件夹进行了变动, ...
链表相关算法
注意 链表的使用中可以设置一个虚拟头结点,这样原链表的所有节点就都可以按照统一的方式进行移除了 链表的使用要注意使用p=p->next;因为p为nullptr时,p->next会造成内存溢出 注意移除链表元素后删除元素,回收空间 203.移除链表元素题目链接 给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所有满足 Node.val == val 的节点,并返回 新的头节点 。 示例 1:输入:head = [1,2,6,3,4,5,6], val = 6输出:[1,2,3,4,5]示例 2:输入:head = [], val = 1输出:[]示例 3:输入:head = [7,7,7,7], val = 7输出:[] 1234567891011121314151617181920212223242526272829303132/** * Definition for singly-linked list. * struct ListNode { ...
数组相关算法
704.二分查找题目链接 给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1。示例 1: 输入: nums = [-1,0,3,5,9,12], target = 9输出: 4解释: 9 出现在 nums 中并且下标为 4示例 2: 输入: nums = [-1,0,3,5,9,12], target = 2输出: -1解释: 2 不存在 nums 中因此返回 -1 12345678910111213141516int search(vector<int> &nums, int target){ int l=0; int r=nums.size()-1; int m=(l+r)/2; while(l<=r){ m=(l+r)/2; if(nums[m]==target) return m; e ...
校园网环境下访问群晖NAS
遇到的困难 连接网络;群晖本身是不能够连接显示屏进行使用的,需要我们知道IP地址,在同一个局域网的电脑上登陆操作, 但本人所在的校园网需要使用web进行网页认证(深澜校园网),所以我们需要一个路由器,通过路由器认证校园网,然后连接群晖的方式将其接入网络。 外部访问;由于我们使用路由器连接群晖,导致群晖本身处于校园网更下层的一个局域网中,同在一个校园网中的设备无法直接访问群晖,我准备了两种方式来解决这个问题:DMZ端口转发与Tailscale连接。 宿舍晚上断电,无解,或者去把厕所灯偷偷接到宿舍里,实现宿舍不断电 需要准备的东西电脑一台,路由器一个(本人用的E2633),网线两根(一根连接校园网,一根连接群晖) 连接群晖 在路由器连接校园网的时候,要先查资料再行动,如果路由器配置不当,可能导致整个宿舍楼断网 路由器E2633本身支持的网络认证方式有PPPOE拨号连接,DHCP连接,桥接模式,Mesh组网 经过尝试,我选择使用了DHCP连接的方式。 E2633的DHCP连接方式本身存在BUG,如果我们在重置路由器后,在引导向导里面选择DHCP连接方式后,随后WI ...
Docker中的Ubuntu无法正常使用systemctl操作
问题描述 在docker中安装Ubuntu,试图用systemctl命令来实现Ubuntu开机后自动打开ssh,发现无法实现想要的效果。 产生原因 Loaded显示enabled说明ssh开机应该会自动启动,但是实际上开机之后却是inactive(没有成功运行) 经过查阅资料,发现Docker只是提供了进程隔离,不是操作系统的虚拟,它并不是我想象中的虚拟机,不会模拟硬件,只是会为每一个应用提供隔离的运行环境。 正常的Ubuntu系统的1号进程(PID=1)是init,可以系统的初始化脚本,创建一系列的子进程,如图 Docker版本的Ubuntu的1号进程不是init,导致systemctl功能异常。 解决办法代码12docker run -tid --name ubuntu01 --privileged=true ubuntu /sbin/initdocker exec -it ubuntu01 /bin/bash 代码解释docker run -tid --name ubuntu01 --privileged=true ubunt ...
使用Vmware虚拟机无法ping通开发板
问题详细描述 嵌入式课程中,本人使用Vmware虚拟机运行Ubuntu22.04操作系统,无法与开发版ping通,导致后续实验无法进行。本人的使用的轻薄本没有直接的网线接口,使用的usb转接口连接网线。 一、确保win10电脑与VMware有关的服务处于开启状态 在win10系统中使用【win+r】快捷键,输入services.msc,进入管理win10服务的平台 在列表中找到以VMware为开头的服务,查看状态,如果处于关闭状态则将其启动。 二、插入网线,将WLAN与网线共享网络,使电脑可以识别网线为网卡 一般外设接入电脑后,如果Vmware虚拟机处于开启状态,会弹出窗口询问接入主机还是接入虚拟机,插入网线后,我们选择接入主机而不是虚拟机,(连接开发板的数据线需要接入虚拟机) 找到win10状态栏中的网络图标(平常连接WiFi的地方),鼠标右键选择打开”网络和Internet”设置,在高级网络设置中,选择更改设配器选项, 进入到网络连接界面,本人的笔记本使用WLAN连接WiFi,以太网3()是开发板与笔记本连接的网线(如果不确定是哪个,可以反复插拔观察确认), ...








