Linux主机Headless与Headed无缝热插拔切换
Linux主机物理屏与虚拟屏切换指南书接上文,虽然我们已经实现了Linux主机的虚拟屏设置,可以很好的使用该“无头”服务器,但是如果我们希望给他外接物理显示屏则必须删除虚拟驱动设置,然后再重启。主包觉得这样太过麻烦了,是不是可以让系统自动检测当前是否有显示屏接入,如果接入显示屏那我们采用真实显卡设置,否则采用DUMMY虚拟驱动?
如何启动虚拟屏参见“无头”Linux主机远程桌面使用指南中“使用X11桌面协议”与“配置X.org服务器”
启动虚拟屏进阶对于上篇博文中提到的开机服务,可以设置为用户层面的服务,此时无需指定DISPLAY,这意味着鲁棒性更强vim ~/.config/systemd/user/x11vnc.service
[Unit]Description=x11vnc server for the current graphical sessionAfter=graphical-session.target[Service]ExecStart=/usr/bin/x11vnc \ -remap /home/chi/.x11vnc_remap \ -xkb \ -fore ...
“无头”Linux主机远程桌面使用指南
无显示器使用Linux主机(Ubuntu 24.04.2 LTS)实录前言五一的时候,主包拥有了自己第一台主机(mini版)。因为觉得有ssh控制就已经很满足了,所以并没有察觉到显示屏的重要性。直到卸载Win10安装Ubuntu后,由于联发科网卡反复出现网络问题(吐槽一嘴,Linux的联发科的驱动真的不太行,建议直接换Intel原生态的网卡),导致不得不需要显示屏才能控制主机(故琢磨一天,总结了几种方案)
视频采集卡 + OBS studio(推荐)懒人版,需要有一台可以使用HDMI或者DB线的笔记本电脑(?),总之就是一台宿主机
宿主机安装OBS studio软件,充当主机视频信号载体
主机接HDMI线连接视频采集卡,视频采集卡接入宿主机
OBS studio新增一个视频窗口,初始化部分应该是可以检测到视频采集卡的,然后就大功告成了
大致方案为,找到源,添加视频采集设备,然后按照识别到的视频采集卡设备进行设置,例如我是UGREEN HDMI Capture,其他配置一律默认即可
远程控制软件 + Xorg服务器(不推荐!!!)可能需要借用一个显示屏配置一下ToDesk()
安 ...
机器学习复习
ML 期末突击方差与偏差靶心与飞镖:一个绝佳的比喻想象一下你正在玩射飞镖,目标是靶心(Bullseye)。靶心就是我们想要预测的真实值。你射出的每一支飞镖,都是一次模型的预测。
我们用不同的训练数据子集训练出的不同模型,就像你一次次地投掷飞镖。
低偏差,低方差 (Low Bias, Low Variance) - 理想情况
表现:所有的飞镖都紧密地集中在靶心周围。
解读:模型既准确(低偏差)又稳定(低方差)。每次训练出的模型都能准确预测。这是我们的终极目标。
高偏差,低方差 (High Bias, Low Variance) - 欠拟合
表现:所有的飞镖都紧密地聚集在一起,但离靶心很远。
解读:模型很稳定,每次预测的结果都差不多(低方差),但它系统性地出错了,离真实值很远(高偏差)。模型太简单了,比如用一条直线去拟合一个二次曲线的数据。
低偏差,高方差 (Low Bias, High Variance) - 过拟合
表现:飞镖围绕着靶心散布得很开,没有聚集在一起。
解读:平均来看,预测是围绕真实值的(低偏差),但每次预测的结果都非常不稳定(高方差)。模型学到了太多训练数 ...
OS挑战性任务
lab6-challenge shell要求总览
相对路径支持
环境变量管理
指令输入优化
无后缀指令支持
终端输入输出优化
历史指令支持
实现更多功能
追加重定向功能
注释功能
变量替换
反引号执行功能
指令条件执行功能
实现更多指令
内建指令篇
history
cd
pwd
exit
declare
unset
正常指令篇
ls
rm
touch
mkdir
1.相对路径支持首先需要实现工作目录,为每个进程加入属性env_cwd,并在env_alloc/sys_exofork时使得子进程继承父进程的工作目录struct Env { //... char env_cwd[MAXPATHLEN]; //...}// env_allocstrcpy(e->env_cwd, "/");// sys_exoforkstrcpy(e->env_cwd, curenv->env_cwd);
实现辅助函数normalize_path,协助转换为绝对路径,该函数支持传入路径相对或绝对
对于相对路径,将 ...
OS理论复习
OS_RElec1 Introductionlec2 Bootlec3 Memory Managementlec4 Process/Thread进程与线程并发
若干个程序同时在系统中运行,这些程序在执行的时间上是重叠的
并行
多个程序,它们在同一时间度量下同时运行在不同的处理机上,则称两个程序是并行执行的
并行则一定并发,而并发不一定并行。因为并发只是在宏观维度下两个程序在执行时间上是重叠的,在这期间,它们可能是运行在同一处理机的不同时间段,,也可能运行在完全不同的处理机上。并行则要求两个程序运行在完全不同的处理机上。
竞争
多个程序读写同一个共享数据的结果依赖于它们的执行顺序
进程进程的定义
进程是对CPU资源的一种抽象
进程与程序不同。进程可以简单理解为程序运行的过程。同时其是系统进行资源分配与调度(线程发明前)的基本单位
进程包含程序、数据、进程控制块
进程的控制
就绪状态:进程获取除处理机外所有所需资源,等待分配处理机资源
执行状态:占用处理机资源。处于此状态下的进程数小于等于CPU数目
阻塞状态:正在执行的进程,由于发生某种事件而暂时无法执行,便放弃了处理机 ...
面向对象u2
oo_u2总结第二单元终于结束力,电梯月结束了!!!
第一次作业
薛定谔的电梯
第一次的电梯总是轻松愉快的,乘客指定了需要某部电梯来接送,这意味着我们不需要调度电梯,只需要关注电梯的运行。当然,今年较往年增加了乘客优先级的概念,最后性能分的计算中平均等待时间进化为加权平均等待时间。
整体思路
架构设计整体电梯系统依然采用生产者-消费者模型。主输入线程InputThread作为生产者,负责“生成”乘客请求,这里更准确地来说是“接收”我们输入的乘客请求,但是从电梯系统来看,乘客都是主输入线程产生的;电梯线程ElevatorThread作为消费者,负责“清理”乘客请求,也就是将乘客送到目的地;分配器线程DispatchThread作为盘子,接收主输入线程的乘客,同时可供电梯线程获取。不过与传统的生产者-消费者模型相比,我们需要分配器主动分配乘客请求给电梯线程,而不是等待电梯线程来获取。
这是考虑到电梯线程的逻辑复杂。一般的消费者线程只需要简单处理即可继续获取,但对于电梯线程而言,什么时候意味着处理完毕可以继续获取乘客请求?难道是等电梯运送完目前得到的所有乘客请求吗?这无疑会导致电梯错过携 ...
面向对象u2-pre
OO_u2 pre现在刚好在U1与U2衔接的空档期,笔者正好写完了作业没事干,所以决定看看U2的内容。说实话虽然老早就知道多线程、多进程这样概念,平常写代码需要多线程最多就是直接使用进程池(GPT把关版),这样深入地学习多线程还是第一次。学习资料
B老师
C老师
D老师
王老师
java多线程
1.多线程是什么在古早时代,面对多个需要执行的程序/作业,计算机无法做到同时运行他们。于是程序只能一个一个地运行,像一个糖葫芦串一样一个接一个(好饿),这是程序的串行。后来科学家们发现某些程序在运行时总是频繁地等待交互响应(一会需要打印机啊、一会需要输入机啊…),占用CPU资源。俗话说占着**不拉*,聪明的科学家想出了一个好办法,趁程序拉*(交互)的时候,剥夺其对CPU的使用权,交由其他程序使用,等到它拉完了又可以继续使用CPU了。由于它们交换CPU使用权又快又频繁,看起来像多个程序在同时运行。这是程序的并发。后来随着资源越来越丰富,科学家想到给一个电脑多装几个CPU,这样程序不就能真正地一起运行了吗。所以发展出了多核CPU,两个/多个程序可以同时占用CPU资源,有不同的核(CPU)为它们提 ...
面向对象u1
北航2025面向对象第一单元[toc]
第一次作业1.代码架构分析在阅读往届学长的博客(以及尝试使用正则表达式解析嵌套括号)后,最后决定了使用递归下降算法。最最主要的是今年oop中也出现了递归下降方法,课程写的文档挺不错的,通俗易懂。找了一下,发现居然也是一位学长的博客
虽然只学了一年多编程,但是苯人对递归式的函数还是有较深的体会的,主要针对一下两点来写递归函数即可
函数的职责:即明确一个函数返回值或者是函数调用的时机,实际上就是牢记函数初衷(parseExpr就返回表达式,在解析表达式时调用),当描述一个递归函数的递归调用过程中卡壳了,不妨回到这个函数被设计之初的职责,跳出细节才能看到全局。
函数终止的条件:尤其是自调用的递归函数,常常会陷入无限调用的套娃中。使用一个具体的例子往往能够更加好地理解什么时候函数递归到达终点了。
2.流程分析我将整个流程分为四个模块,预处理 -> 解析 -> 合并项 -> 生成字符串
虽然在本次作业中,生成和优化字符串同隶属于最后一个模块,随着基项复杂度的增加,二者的分开也是在所难免
i.预处理由于题目给出的原字符串无用信息过 ...
Shell脚本(2)
Shell(2)传递参数运行脚本时后续可以用空格传递若干参数
变量
说明
$0
当前文件名
$1~$n
第1~n个参数
$#
参数数量
$*
所有参数,不可迭代
$@
所有参数,可迭代
流程控制for
对于可迭代对象使用for var in iterable; do commanddonefor var in item1 item2 item3 itemN; do commanddone
while
满足循环条件时执行语句while condition; do commanddoneint=1while ((int <= 5)); do echo $int ((int++))done
until
不满足条件时执行语句int=1until [ ! $a -lt 10 ]; do echo $a a=`expr $a + 1`done
if-else
分支控制语句if condition; then commandelif condition; then commandelse commandfi
c ...