User Kernel Mode

内核态

内核态是计算机系统中的一种特权模式,用于执行操作系统内核的代码和功能。与用户态相比,内核态具有更高的权限和更广泛的访问能力,可以执行一些用户态无法执行的关键任务和操作。下面是从用户态的角度上介绍内核态的功能:

  1. 系统调用(System Calls):内核态允许用户程序通过系统调用接口请求操作系统提供的服务和功能。用户程序可以通过系统调用请求文件操作、网络通信、内存管理等操作。当用户程序执行系统调用时,会触发从用户态切换到内核态的转换,以便内核在高权限下执行相应的操作。
  2. 资源管理:内核态负责管理计算机系统的各种资源,包括处理器、内存、磁盘、网络等。在内核态下,操作系统可以对这些资源进行分配、调度和释放,确保资源的有效利用和合理分配。
  3. 中断处理:当发生硬件中断或异常时,内核态负责处理中断并提供相应的服务。例如,当用户程序需要与设备进行交互时,内核可以响应设备的中断信号,进行数据传输、状态检查等操作。
  4. 进程管理:内核态负责创建、销毁和管理进程。它可以调度进程,分配和回收进程所需的资源,并在必要时进行进程间的通信和同步。
  5. 内存管理:内核态控制着计算机系统的内存分配和管理。它负责将物理内存分配给进程,并维护虚拟内存和物理内存之间的映射关系。内核还处理内存保护、页面置换、内存回收等任务。
  6. 设备驱动程序:内核态包含设备驱动程序,用于与硬件设备进行交互。它允许操作系统通过设备驱动程序来控制和管理硬件设备,如磁盘驱动程序、网络驱动程序等。
  7. 安全和权限管理:内核态能够执行与系统安全和权限相关的任务。它可以控制对系统资源的访问权限,并确保用户程序不能越权访问或修改关键数据和系统配置。

总的来说,内核态提供了操作系统核心功能的执行环境,拥有更高的权限和更广泛的访问能力,使得操作系统能够管理和控制计算机系统的各个方面,同时为用户程序提供必要的服务和保护。

代码位置

在Linux系统中,每个进程的虚拟地址空间中的高位部分通常被映射为内核空间,其中包含了内核态的代码和数据。这个区域通常被称为内核空间或内核页表。内核空间中的内容包括以下两类:

  1. 内核代码:内核代码是操作系统内核的实现,包括各种系统调用、设备驱动程序和核心功能的代码。这些代码用于提供操作系统的各种服务和功能,如文件系统操作、进程管理、内存管理、网络通信等。内核代码是所有进程共享的,因为它们代表了操作系统的核心部分,为所有进程提供服务。
  2. 共享内核数据结构:内核空间中还包含一些共享的内核数据结构,用于维护系统状态和资源管理。例如,进程调度器、内存管理数据结构、文件描述符表等。这些数据结构被多个进程共享,以便内核能够管理和控制系统资源的分配和使用。

除了以上共享的内容,内核空间还包含一些每个进程独有的部分,例如:

  1. 进程描述符(Process Descriptor):每个进程都有一个唯一的进程描述符,其中包含了进程的状态信息、上下文和其他与进程相关的数据。进程描述符存储在内核空间,每个进程都有自己独立的进程描述符。
  2. 用户栈和内核栈:每个进程都有自己的用户栈和内核栈。用户栈用于保存进程在用户态执行时的局部变量和函数调用信息,而内核栈用于保存进程在内核态执行时的上下文信息和函数调用。(内核函数也要嵌套调用)

总结起来,Linux进程的高位部分映射了内核空间,其中包含了内核代码、共享的内核数据结构以及每个进程独有的部分,如进程描述符和栈空间。这种映射允许进程与内核进行交互和访问操作系统的功能和服务。

如何共享

在内核中,代码共享并不是通过动态链接库(.so)的模式来实现的。内核态的代码通常被编译成内核模块或者直接编译进内核映像中,而不是作为独立的可加载库。因此,内核中的代码共享机制与用户空间中的动态链接库不同。

在内核中,代码共享是通过代码复用和内核模块的概念来实现的。内核模块是一种可以动态加载和卸载的代码和数据集合,它可以扩展内核的功能。内核模块可以包含新的设备驱动程序、文件系统、网络协议等,以便在需要时被加载到内核中运行。

内核模块的加载过程可以在运行时根据需要进行,而不需要重新编译整个内核。这样,多个进程可以共享同一个内核模块,从而实现内核代码的共享。当多个进程需要使用某个内核模块时,模块只需要加载一次,然后被多个进程共享调用。

值得注意的是,内核中的代码共享是在内核空间内部进行的,与用户空间的动态链接库不同,它不涉及用户进程的地址空间和加载机制。内核模块的共享是在内核内部完成的,不同进程间可以通过系统调用接口访问共享的内核模块提供的功能和服务。

总结起来,内核中的代码共享是通过内核模块的加载和运行机制来实现的,而不是像用户空间中的动态链接库那样。内核模块可以被多个进程共享调用,从而提供共享的内核功能和服务。

内核态与用户态切换

切换时机

内核态与用户态的切换通常由以下几种情况触发:

  • 系统调用(System Call):当用户程序通过系统调用请求操作系统提供的服务时,会触发从用户态到内核态的切换。这是最常见的切换方式。
  • 异常(Exception)和中断(Interrupt):当发生硬件中断、软件中断(如除零错误)、内存访问错误等异常情况时,CPU会切换到内核态来处理异常。这些异常可以是由程序错误、设备请求或其他条件引起的。
  • 外部事件:例如时钟中断、I/O 完成中断等,这些事件可能需要内核处理,因此会导致从用户态切换到内核态。

切换的细节

当进程从用户态切换到内核态,或者从内核态切换回用户态时,涉及到特权级的切换和上下文的保存与恢复。下面是内核态与用户态切换的一般细节:

  1. 特权级切换:内核态拥有更高的特权级别,因此从用户态切换到内核态时,CPU会从当前运行的用户模式切换到内核模式。这种切换会改变CPU的状态,包括特权级、堆栈和指令指针。

  2. 上下文保存与恢复:在切换到内核态之前,CPU会保存当前用户态下的进程上下文信息,包括程序计数器(PC)、寄存器的值、堆栈指针等。这些上下文信息保存在进程的内核栈中。

  3. 内核态执行:当切换到内核态后,CPU开始执行相应的内核代码,处理请求或异常。在内核态下,操作系统可以访问和操作系统的所有资源和功能,执行必要的操作。

  4. 上下文恢复与切换回用户态:当内核态的任务完成后,CPU会从内核栈中恢复之前保存的进程上下文信息。然后,CPU会将特权级切换回用户态,并从保存的程序计数器继续执行用户程序。

需要注意的是,内核态与用户态的切换涉及到CPU和操作系统的底层机制,具体细节可能会因操作系统的设计和架构而有所不同。上述描述是一般情况下的概述,不同的操作系统和处理器架构可能会有特定的实现细节。

开销来源

  1. 特权级切换
  2. 上下文保存与恢复
  3. 由于PTI的存在,内核维护了两套页表。切换到内核态时,可能需要切换内存地址空间的映射关系,例如将用户态的虚拟地址空间映射为内核态的地址空间。这可能涉及页表的切换和TLB(Translation Lookaside Buffer)的刷新,会带来一定的延迟和开销。

量化

内核态与用户态的切换时间在数百到数千个CPU周期之间

需要进一步的研究学习

暂无

遇到的问题

暂无

开题缘由、总结、反思、吐槽~~

参考文献

上面回答部分来自ChatGPT-3.5,没有进行正确性的交叉校验。

UnimportantView: Game

关于偏好的循环

轮回与回旋镖:小别胜新婚

我发现我陷入了一种循环:

正向:

  1. 美术音乐和玩法的新鲜感:一开始游戏新鲜内容好奇,然后在新鲜内容耗尽时。
  2. 成就感
  3. 史诗故事感(真实代入感),和领悟
  4. 刺激感?(不适用我这里

反向:

  1. 日常的枯燥的刷任务积累,实在令人厌烦。
  2. PVP的队友的争吵和失败的挫败感也会大幅降低游玩意愿

关于PVP 和 PVE

如果在游玩的时候,如果没有对面是电脑的想法,任务的难度就是合适的,有趣的,或者有挑战的。

如果意识到了NPC反应的模板化,枯燥化,简单化的PVE就不行。 PVP可以避免这三点,但是组队的门槛、队内的矛盾、和失利会带来反向效果。

比如GTA5 online通关之后,上线之后所有东西都尝试过后,就没有留恋的意思了。除非将NPC接入AI并且动态调节难度,就可以避免这点。

如何筛选适合的游戏

现状:游玩时间少,时间碎片化,无规律

  • 游玩体验一定要舒适
    • 体验的主线内容:真实的幻想世界
      • 轻松快乐的主线剧情体验,(-20 ~ 35)
        • 一起提供代入感和沉浸式的游玩体验
        • 无剧情该项为0
        • 扣分:枯燥拖沓的演出(-10)
        • 加分:刺激有趣的剧情表演(+10)、诙谐的台本(+5),令人有所感悟的主线故事(+15)、动容的NPC故事(+5)
      • 有趣新颖的玩法(30)
        • 新鲜玩法(15)
        • 眼前一亮的细节(5)
        • 足够深的游戏内容,来随意探索;(10)
          • 或者足够精致宏大的单机主线内容(FF,大镖客2)
      • 精致华丽的美术(30)
        • 交互界面UI(3)
        • 开放世界风景(7) 震撼华丽的大场景可以弥补角色喜爱塑造的缺失
        • 令人喜爱的角色(15)
        • 动听的音乐(5)
    • 日常周常体验(40)
      • 耗时/门槛(20):
        • 无需投入大量前期时间才能正常体验
          • 经验训练技巧
          • 前置任务过多
        • 没有强制的任务指标来限制/延长在线时长
      • 收获感(10):投入有回报(货币)、提升(数值)
      • 新鲜感(10):有Rougelike元素,避免无聊
    • 手游根据逼氪程度减分
      • 200以上减5;1000以上减10

适合的类型:

  • 合家欢小游戏(主玩法,轻竞技):
    • 蛋仔、任系游戏(惊奇)
  • 主剧情的单机RPG游戏
    • 王国之泪,星际争霸(金手指)
  • 主美术的二次元轻度手游
    • 铁道
  • 网状叙事的电影史
    • 博德之门3

不适合的类型:

  • 有紧迫任务目标的游戏(大量限时任务的网游)
  • 快乐建立在胜负上的竞技类游戏(PVP游戏)

举例

231221 少女前线2 追放

首先,我没有玩过少前1,和战棋类游戏,和偏写实的剧情。

  1. 剧情与主线:
    1. 沉浸感低:谜语人,各种看不到的名词。我不知道是为了装逼还是少前1的基本概念。好的游戏,都不会在玩家理解上制造问题。
    2. 个人感觉写实的剧情立意不足,和目的性,意义行解释不清楚,导致游玩时,感觉动力不足。 由于本人并不喜欢打杀。我玩游戏也是认真玩的,如果剧情感觉不够恢弘,写实的枪战细节剧情感觉不是很动人。(可能是玄幻和幻想游戏玩多了,写实类剧情完全没接触过),需要平衡好真实感与现实的繁琐程度
  2. 美术
    1. UI简洁好看
    2. 好但可以更好,人物, 闪电姐的脸总感觉怪怪的胖胖的。黑丝等拟真质感确实不错。但是人物服饰什么的都是冷淡风,只能说之后的潜力很大。(比如像 尘白禁区泳装一样。
  3. 玩法
    1. 好但可以更好,利用地形杀,和道具之类的。(有潜力

需要进一步的研究学习

暂无

遇到的问题

暂无

开题缘由、总结、反思、吐槽~~

参考文献

OOTD: outfit of the day

导言

个人形象管理的第一部分,也是最简单的部分,外貌部分的穿搭。

Read more

UnimportantView: Film & TV(Anime) Works Rating

如何评价影视剧(动漫作品)

我一向的观点是现实生活已经投入了很多时间体验了,影视剧(动漫作品)肯定要是看现实中没有的。这导致的第一个问题就是既然不存在,你怎么让观众相信呢?

  • 真实的氛围感
    • 真实的细节特效
    • 真实的演员反映和期望中的样子

如何评价对影视剧(动漫作品)角色的喜爱程度

  • 喜欢一个角色往往是没有什么理由的,虽然要追求格物致知。但是将最感性的情感拿来分析是不是有点无情呢?

  • 初印象的美好(40)

    • 外貌美(15):
      • 不一定要完美,但是要有特点,
      • 可以接受有缺陷,但是其一般要具有意义来完善人物塑造。
    • 可爱俏皮(5)
      • 可以拉进距离感
    • 性格好(乐观、勇敢、坚毅、聪明)(10)
      • 角色不可能不经历挫折,乐观还是要一点
      • 但是白给的老好人不行,还是要有基础原则的
      • 可以出发点很低(一开始比较恶劣,自闭),为角色后续成长留下了空间
    • 强烈独特独立的个性魅力、个人行为准则坚定(10)
      • 额外固执但是专情
      • 病娇(特别爱一个人),想守护妹妹的想法
      • 厌世,缺爱
  • 角色剧情行事逐渐展示出来的

    • 真实感(反差,与观众拉近距离) (20)
      • 平时严酷,但也会含羞
      • 总是公正,但也会偏私
    • 悲剧色彩,激发了同情心(共情)(0~30)
      • 努力却依旧失败、正义行事却危机四伏、爱而不得、无所谓付出。一哭 +10
      • 美好的东西被摧毁总是令人扼腕痛心,令人印象深刻。+10
        • 失去美好的未来
      • 刀人:刀友情,刀亲情 +10
    • 共鸣?观众随角色一同成长(40)
      • 如果观众一开始有一样的疑惑,(10)
      • 然后和角色一起寻找答案 (10)
      • 最后坚定的相信自己找到的 (20)

举例

  • 星野爱(113)
    • 外貌(5):不是特别感冒的形象
    • 可爱俏皮(2)
    • 乐观性格(6):演出也有时迷茫,却为了孩子开朗了起来
    • 独特和自我(10): 厌世,缺爱让人同情
    • 真实感(20):以谎言编织的怀孕偶像,是最大的反差
    • 悲剧色彩(30):
      • 想学会爱,但是到死还在努力
      • 失去了与孩子们的未来
      • 刀母爱
    • 共鸣与成长(40)
      • 疑惑: 不会爱的人怎么办
      • 寻找:以谎言代替
      • 结论:谎言也是我努力传达爱意的方式。但唯独我爱你们,这句话……绝对不是谎言
  • 亚斯娜(100)
    • 外貌(15):理想的人妻
    • 可爱俏皮(5)
    • 乐观性格(10):理想的姐姐人妻性格,爱你管你又不太束缚你
    • 独特和自我(10): 为了Kirito 愿意牺牲自己
    • 真实感(20):平时严酷,但也会含羞
    • 悲剧色彩(10):
      • 刀爱情, 差一点失去Kirito
    • 共鸣与成长(30)
      • 疑惑: 在虚拟世界里,存在的意义是什么
      • 寻找:寻找虚拟世界“红莫罗”的东西
      • 结论:这份感情与相遇的经历是真实的(10,结论不够动容)
  • 爱莉希雅Elysia(125)
    • 外貌(15):理想的人妻2
    • 可爱俏皮(10) 与芽衣打情骂俏,甜齁了(摸角)。额外加分+5
    • 乐观性格(10):理想的姐姐人妻性格,
    • 独特和自我(10): 真我 ~ 人之律者
    • 真实感(20):平时严酷,但也会含羞(神之子却爱上了人类)
    • 悲剧色彩(30):
      • 出生无知的律者,努力爱人类,却不被理解
      • 反而为人类牺牲
      • 本世代对抗侵蚀之律者,最终数据还被删除
    • 共鸣与成长(30)
      • 疑惑: 凡事任凭心意而为,自由自在,与副首领的身份格格不入的往事乐土的少女是谁
      • 寻找:寻找前世的真相与少女的秘密
      • 结论:即使往事乐土不存在了,但只要这份记忆还在,你就永远还在。愿时光永驻此刻(10,结论不够动容)
  • 光与焰(120)
    • 外貌(15):两个人各有特点
    • 可爱俏皮(5)
    • 乐观性格(10):理想的姐姐人妻性格,
    • 独特和自我(10): 光傲娇 焰体贴
    • 真实感(25):光性格上与焰完全相反,非常要强,不擅长表达自己的感情,但本性其实很温柔,内心很脆弱。
      • 高质量CG的游戏,真实沉浸感额外加分+5
    • 悲剧色彩(20):
      • 被坏人利用,虽然不愿意,但是伤害了世界,
      • 喜欢lex,最后还是牺牲了自己(lex,你一个人也没关系了吧!)
    • 共鸣与成长(35)
      • 疑惑: 无意间结实的少女
      • 寻找:寻找世界的真相与少女的秘密
      • 结论:即使有前世的经历。但是愿意忘记悲伤的过去。从现在开始彼此守护(15,结论不够动容)
  • 评价模板
    • 外貌(15):理想的人妻
    • 可爱俏皮(5)
    • 乐观性格(10):理想的人妻性格
    • 独特和自我(10):
    • 真实感(20):
    • 悲剧色彩(30):
      • 失去了
    • 共鸣与成长(40)
      • 疑惑:
      • 寻找:
      • 结论:

需要进一步的研究学习

暂无

遇到的问题

暂无

开题缘由、总结、反思、吐槽~~

看了星野爱之后,我又emo了

参考文献

Personal Image Management

导言

作为理工男 + 大直男,几乎没有注意个人形象管理。但是这马上要毕业了,也到了要开始找对象的年龄。

也不期望变帅哥,至少能实现给人的初印象是干净开朗男生的感觉。

为此需要从多个角度,指出现有问题、理性分析原因、量化改进指标、持续跟踪状态。

Read more

Synology terminal

配置开机启动项

编写脚本/var/services/homes/shaojiemike/wgReboot.sh

1
2
3
4
5
#!/bin/bash
ip ro add default via 222.195.90.254 dev eth0 table eth0-table
ip ro a 114.214.233.0/24 via 222.195.90.254 dev eth0 src 222.195.90.2 table main
wg-quick up wg1
ip ro d default via 222.195.90.254 dev eth0 src 222.195.90.2 table main
  • 执行权限chmod +x
  • 群晖WebUI -> 控制面板 -> 任务计划 -> 新增 -> 触发的任务
    • 选择Root、开机事件
    • bash /var/services/homes/shaojiemike/wgReboot.sh

需要进一步的研究学习

暂无

遇到的问题

暂无

开题缘由、总结、反思、吐槽~~

参考文献

OpenWRTNetworkManage

2
觉得有意义写,先占个位子

需要进一步的研究学习

暂无

遇到的问题

暂无

开题缘由、总结、反思、吐槽~~

参考文献

Audio

基本的音视频编码知识

Read more

Wake On Lan(Wol)

简介

Wake-on-LAN 也叫 WoL,指通过网络消息打开或唤醒计算机。

WoL 需要由另一台「同局域网」设备发送网络信号,任意有能力发送 WoL 信号 的设备都可以充当此角色;在远程办公场景中,则最好由「带有线网卡的低功耗设备」来执行,这类设备包括但不限于以下选项:

  1. 带网络唤醒 WoL 功能的路由器产品
  2. OpenWrt Linux 设备「TP-Link 703n」
  3. 树莓派「推荐 2 代」

网络扫描

获取局域网下设备MAC地址, 或者OpenWRT直接显示

平台 工具
Windows Softperfect Network Scanner
Linux arp-scan
Android / iOS Fing / PingTools

发出唤醒信息的软件

可以使用的幻数据包唤醒工具有:

平台 工具 特点
Windows wolcmd.exe 命令行,跨网段
Linux/MacOS etherwake, wakeonlan 命令行,同网段
Android / iOS Fing / PingTools 可扫描

请注意,WoL 属于无状态协议,仅发送、不确认。

问题:抓包发现 WolCmd和wakeonlan的目的地址不同

1
2
3
4
5
6
7
8
9
10
11
WolCmd.exe 90:09:D0:15:70:B8 192.168.233.242 255.255.255.255 9 (目的地址 192.168.233.242)
WolCmd.exe 90:09:D0:15:70:B8 192.168.233.242 255.255.255.0 9 (测试过本地能成功,br-lan路由器能抓, 本地wireshark目的地址 192.168.233.255)


WolCmd.exe 90:09:D0:15:70:B8 192.168.233.242 0.0.0.0 9 (目的地址 192.168.233.109.53362 > 255.255.255.255.9 注意:109是macboook)

shaojiemike@shaojieikedeAir ~/github/hugoMinos (main*) [11:46:22]
> wakeonlan 90:09:D0:15:70:B8 (目的地址 192.168.233.109.53362 > 255.255.255.255.9 注意:109是macboook)
Sending magic packet to 255.255.255.255:9 with payload 90:09:D0:15:70:B8
Hardware addresses: <total=1, valid=1, invalid=0>
Magic packets: <sent=1>

路由遇到目的MAC是广播地址怎么办?

IP的广播有三种:

  1. 255.255.255.255叫本地广播,也叫直播,direct broadcast,不跨路由器。
  2. 172.16.33.255叫子网广播,广播给172.16.33.0这个子网,可以跨路由器
  3. 172.16.255.255叫全子网广播,广播给172.16.0.0这个主网,可以跨路由器。

路由器是三层设备,可以隔离广播,但并不是所有广播都隔离。事实上只有本地广播路由器才不转发,对于子网广播和全子网广播,路由器是转发的。

为什么呢?我们来看255.255.255.255的广播,在MAC的封装中,对应的目的MAC是广播,而子网广播和全子网广播,对应的目的MAC是单播,所以路由器会转发。所以路由器隔离的广播是目的MAC为全1的广播,对于目的MAC是单播的上层广播,路由器是不能隔离的。

广播规则

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
> netstat -r -anv
Routing tables

Internet:
Destination Gateway Flags Netif Expire
default 192.168.233.1 UGScg en0
127.0.0.1 127.0.0.1 UH lo0
192.168.233 link#11 UCS en0 !
192.168.233.1/32 link#11 UCS en0 !
192.168.233.1 5c:2:14:b3:2:a UHLWIir en0 1172
192.168.233.109/32 link#11 UCS en0 !
192.168.233.242 90:9:d0:15:70:b8 UHLWI en0 151
192.168.233.255 ff:ff:ff:ff:ff:ff UHLWbI en0 !
255.255.255.255/32 link#11 UCS en0 !
255.255.255.255 ff:ff:ff:ff:ff:ff UHLWbI en0 !

路由器

1
2
3
4
5
6
7
8
9
[root@ax6s ~]$ ip route get to 192.168.233.242 from 192.168.233.142 iif lan2
192.168.233.242 from 192.168.233.142 dev br-lan
cache iif lan2
[root@ax6s ~]$ ip route get to 192.168.233.255 from 192.168.233.142 iif lan2
broadcast 192.168.233.255 from 192.168.233.142 dev lo table local
cache <local,brd> iif lan2
[root@ax6s ~]$ ip route get to 255.255.255.255 from 192.168.233.142 iif lan2
broadcast 255.255.255.255 from 192.168.233.142 dev lo
cache <local,brd> iif lan2

电脑需要远程被远程唤醒

电脑设置

  1. 「网络连接」
    1. 以太网(有线网)属性
    2. 【网络】(Realtek PCIe 2.5GbE Family Controller)下配置
    3. 【电源管理】勾选「允许此设备唤醒计算机」以及「只允许幻数据包唤醒计算机」
  2. BIOS打开相关选项
    1
    2
    3
    4
    5
    Automatic Power On
    Wake on LAN/WLAN
    Power Management
    Power On by Onboard LAN
    Power On by PCI-E Devices

需要进一步的研究学习

暂无

遇到的问题

暂无

开题缘由、总结、反思、吐槽~~

Nas 太吵,需要自动关机

参考文献

https://sspai.com/post/67003

https://www.depicus.com/wake-on-lan/wake-on-lan-cmd