<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[u012133105的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/u012133105</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; u012133105]]></copyright><item><title><![CDATA[手写操作系统 - 41.系统调用原理]]></title><link>https://blog.youkuaiyun.com/u012133105/article/details/163626657</link><guid>https://blog.youkuaiyun.com/u012133105/article/details/163626657</guid><author>u012133105</author><pubDate>Mon, 10 Aug 2026 09:25:48 +0800</pubDate><description><![CDATA[由于用户态程序不能直接访问硬件资源或内核态的关键功能，系统调用通过一种受控的方式实现用户态与内核态之间的切换。GDT 中的段描述符包含了段的基址、界限和特权级（DPL），它用于控制段访问权限，并支持从用户态到内核态的安全切换。指定的段选择子，从 GDT 中读取目标段描述符，并检查 CPL 是否符合段描述符的 DPL。系统调用依赖 GDT 中的代码段描述符来切换到内核态代码段执行内核功能。指令，恢复用户态的代码段和栈，将控制权交回用户程序。内核根据传入的系统调用号和参数执行对应的服务逻辑。]]></description><category></category></item><item><title><![CDATA[装了 Xshell + Navicat + Docker Desktop + 5 个终端后，我终于写了个“一网打尽“的运维神器...]]></title><link>https://blog.youkuaiyun.com/u012133105/article/details/163370872</link><guid>https://blog.youkuaiyun.com/u012133105/article/details/163370872</guid><author>u012133105</author><pubDate>Fri, 31 Jul 2026 16:40:36 +0800</pubDate><description><![CDATA[终端报错了，要复制报错 → 切到 AI 窗口 → 粘贴 → 等 AI 给命令 → 再切回终端复制粘贴执行；
数据库查完数据有异常，要把表结构导出来 → 打开 AI → 粘贴描述问题 → 收到 SQL → 切回数据库客户端运行；
容器挂了，先看 Portainer 日志 → 复制错误 → 切终端 SSH 进主机 → 敲命令排查 → 切 AI 分析 → 再切回去...]]></description><category></category></item><item><title><![CDATA[CADB：把数据库装进 VS Code]]></title><link>https://blog.youkuaiyun.com/u012133105/article/details/161181775</link><guid>https://blog.youkuaiyun.com/u012133105/article/details/161181775</guid><author>u012133105</author><pubDate>Mon, 18 May 2026 09:29:36 +0800</pubDate><description><![CDATA[CADB 是一款 VS Code 数据库扩展，支持 MySQL、SQLite、Redis 和 OSS，提供侧栏管理、SQL 执行和结果查看功能。特色包括 AI 数据库助手（自然语言转 SQL）、多数据源支持和开源 MIT 协议。适合开发者直接在编辑器内完成数据库操作，减少窗口切换。可通过 VS Code 扩展市场安装或访问 GitHub 仓库。注意使用测试数据截图避免敏感信息泄露。]]></description><category></category></item><item><title><![CDATA[手写操作系统 - 40.绕过TSS切换特权级]]></title><link>https://blog.youkuaiyun.com/u012133105/article/details/150335584</link><guid>https://blog.youkuaiyun.com/u012133105/article/details/150335584</guid><author>u012133105</author><pubDate>Wed, 13 Aug 2025 08:44:23 +0800</pubDate><description><![CDATA[摘要： x86系统通常依赖TSS（任务状态段）实现特权级切换（如Ring 3→Ring 0），但可通过手动管理堆栈和调用门绕过TSS。方法包括：1）手动堆栈切换：在用户态预分配内核栈，通过软中断触发切换后手动调整ESP；2）调用门：配置GDT中的调用门描述符，利用lcall指令自动完成特权级跳转和堆栈切换。需注意内核栈的安全管理及特权级校验。此方案适用于简化内核设计或优化上下文切换，但需谨慎处理寄存器状态和权限检查。（149字）]]></description><category></category></item><item><title><![CDATA[手写操作系统 - 39.缺页异常处理]]></title><link>https://blog.youkuaiyun.com/u012133105/article/details/150335547</link><guid>https://blog.youkuaiyun.com/u012133105/article/details/150335547</guid><author>u012133105</author><pubDate>Wed, 13 Aug 2025 08:42:52 +0800</pubDate><description><![CDATA[本文介绍了x86处理器异常处理机制，重点解析了错误码格式及其字段含义。错误码包含段选择子索引、描述符表指示位、IDT标志和外部事件标志等关键信息，用于诊断异常原因。文章详细分析了通用保护异常(#GP)的触发条件，包括段选择器非法、特权级别违规、堆栈段问题和非法指令等情况。同时深入讲解了缺页异常(#PF)的错误码结构，包括页面存在标志、读写权限、用户/超级模式标志等字段。最后说明了CR2寄存器在缺页异常处理中的作用，该寄存器存储引发异常的线性地址，供操作系统进行页面加载或错误处理。这些机制共同构成了x86架构]]></description><category></category></item><item><title><![CDATA[手写操作系统 - 38.线程特权级]]></title><link>https://blog.youkuaiyun.com/u012133105/article/details/150335474</link><guid>https://blog.youkuaiyun.com/u012133105/article/details/150335474</guid><author>u012133105</author><pubDate>Wed, 13 Aug 2025 08:39:57 +0800</pubDate><description><![CDATA[本文介绍了x86架构中的特权级控制机制，主要围绕CPL、RPL和DPL三个关键概念展开。CPL（当前特权级）表示正在执行的代码段权限级别（0-3级），RPL（请求特权级）是段选择子中指定的访问请求权限，DPL（描述符特权级）定义了段描述符的访问权限。只有当CPL和RPL都不低于DPL时，程序才能访问相应段，否则会触发保护异常。这三个特权级协同工作，确保系统资源的安全访问，实现内核与用户代码的隔离保护。]]></description><category></category></item><item><title><![CDATA[手写操作系统 - 37.分离内核任务]]></title><link>https://blog.youkuaiyun.com/u012133105/article/details/144955099</link><guid>https://blog.youkuaiyun.com/u012133105/article/details/144955099</guid><author>u012133105</author><pubDate>Mon, 06 Jan 2025 08:34:14 +0800</pubDate><description><![CDATA[操作系统内核代码和内核线程的分离并不是一个硬性规则，而是一种设计上的选择。内核代码一旦完成以后所占用的空间相对固定，不需要进行拓展，因此适合放在低地址区域，而内核线程需要为用户进程提供服务功能（系统调用），因此所占用空间并不固定，所以适合放在高地址区域。现代通用操作系统（如 Linux 和 Windows）倾向于分离设计，因为它带来了更高的灵活性和可扩展性。将内核代码与内核线程分离的含义是：将内核中的静态逻辑（如硬件抽象、内存管理）与动态执行的任务（如 I/O 操作、守护进程）设计为独立的模块或结构。]]></description><category></category></item><item><title><![CDATA[手写操作系统 - 36.为任务分配页]]></title><link>https://blog.youkuaiyun.com/u012133105/article/details/144955083</link><guid>https://blog.youkuaiyun.com/u012133105/article/details/144955083</guid><author>u012133105</author><pubDate>Mon, 06 Jan 2025 08:32:29 +0800</pubDate><description><![CDATA[修改CR3寄存器是为了切换页表，使得每个任务能够运行在独立的虚拟地址空间中，确保系统的安全性和稳定性。这种机制是现代操作系统内存管理和任务调度的核心之一。]]></description><category></category></item><item><title><![CDATA[手写操作系统 - 35.图解内存分页原理]]></title><link>https://blog.youkuaiyun.com/u012133105/article/details/144686015</link><guid>https://blog.youkuaiyun.com/u012133105/article/details/144686015</guid><author>u012133105</author><pubDate>Tue, 24 Dec 2024 10:21:57 +0800</pubDate><description><![CDATA[这张图从启动过程到内核加载，再到分页机制和地址映射，全面描述了操作系统的内存管理和分页实现细节，重点是基于保护模式下的内存布局和页表管理机制的设计与实现。]]></description><category></category></item><item><title><![CDATA[手写操作系统 - 34.32bit-4KByte分页实现]]></title><link>https://blog.youkuaiyun.com/u012133105/article/details/144685841</link><guid>https://blog.youkuaiyun.com/u012133105/article/details/144685841</guid><author>u012133105</author><pubDate>Tue, 24 Dec 2024 10:20:23 +0800</pubDate><description><![CDATA[在计算机科学中，.bss.data.rodata和.text是可执行文件或内存布局中的几个重要段名，它们被用来存储不同类型的程序数据。段名存储内容是否可修改是否初始化是否占用文件空间.bss未初始化的全局/静态变量是否否.data已初始化的全局/静态变量是是是.rodata只读数据（如字符串常量）否是是.text程序的机器指令（代码）否是。]]></description><category></category></item><item><title><![CDATA[手写操作系统 - 33.32bit-4MByte分页实现]]></title><link>https://blog.youkuaiyun.com/u012133105/article/details/144657831</link><guid>https://blog.youkuaiyun.com/u012133105/article/details/144657831</guid><author>u012133105</author><pubDate>Mon, 23 Dec 2024 09:34:17 +0800</pubDate><description><![CDATA[注: 实模式使用的内存使用4M分页, 开启分页机制后需要将1MB以内的内存按照物理内存地址进行映射, 这样才能保证物理地址和虚拟地址的一致性。]]></description><category></category></item><item><title><![CDATA[手写操作系统 - 32.内存分页]]></title><link>https://blog.youkuaiyun.com/u012133105/article/details/144657762</link><guid>https://blog.youkuaiyun.com/u012133105/article/details/144657762</guid><author>u012133105</author><pubDate>Mon, 23 Dec 2024 09:32:22 +0800</pubDate><description><![CDATA[这种模式通常称为大页（Large Page）或巨页（Huge Page）。每个页的大小为4MB（即2^22字节），适用于需要大量连续内存空间的应用，如数据库、大型计算或图形处理。这种模式是标准的分页方式，每个页的大小为4KB。它通常用于现代操作系统的内存管理，提供细粒度的内存分配。4-KByte分页机制可以高效地映射大量的虚拟地址空间。CR4寄存器有32位，每一位的功能是用来启用或禁用特定的硬件特性。接下来的课程我们会从简单（4-MByte Mode）到困难（4-KByte Mode）来实现内存分页。]]></description><category></category></item><item><title><![CDATA[手写操作系统 - 31.虚拟内存]]></title><link>https://blog.youkuaiyun.com/u012133105/article/details/144588168</link><guid>https://blog.youkuaiyun.com/u012133105/article/details/144588168</guid><author>u012133105</author><pubDate>Thu, 19 Dec 2024 16:01:08 +0800</pubDate><description><![CDATA[当物理内存不足时，操作系统通过交换（swapping）或分页（paging）将不常用的数据暂时存储到磁盘的交换文件（swap file）或分页文件（page file）中，提供虚拟地址空间的扩展。：现代的MMU通常使用分页机制，将虚拟内存划分为固定大小的块（页，通常是4KB），并将物理内存也划分为同样大小的块（页框）。：与分页不同，段机制将内存划分为多个不同大小的段（如代码段、数据段、堆栈段等），每个段有不同的基地址和长度。：虚拟地址中的低位部分，用于标识虚拟页内的具体位置，即该页内的偏移量。]]></description><category></category></item><item><title><![CDATA[手写操作系统 - 30.位图]]></title><link>https://blog.youkuaiyun.com/u012133105/article/details/144588056</link><guid>https://blog.youkuaiyun.com/u012133105/article/details/144588056</guid><author>u012133105</author><pubDate>Thu, 19 Dec 2024 15:58:45 +0800</pubDate><description><![CDATA[位图（Bitmap）是一种简单且高效的存储和操作大量布尔值（0或1）数据的结构。它利用位（bit）作为最小存储单元，通过压缩表示法节省内存并支持快速的操作。位图是一种将数据存储为二进制位（0或1）序列的结构，用于高效地表示和操作集合或布尔值。每个位的位置表示一个元素的状态，比如存在或不存在、是或否等。]]></description><category></category></item><item><title><![CDATA[手写操作系统 - 29.互斥量]]></title><link>https://blog.youkuaiyun.com/u012133105/article/details/144550969</link><guid>https://blog.youkuaiyun.com/u012133105/article/details/144550969</guid><author>u012133105</author><pubDate>Wed, 18 Dec 2024 09:35:03 +0800</pubDate><description><![CDATA[互斥量是一种同步原语，用于限制多个线程同时访问共享资源。它保证任何时刻只有一个线程可以持有互斥量锁，从而实现对资源的独占访问。来保证多线程环境下对共享资源的访问互斥，防止数据竞争和不一致问题。的，以防止多个线程同时修改互斥量的状态。这通常是通过底层硬件支持的原子指令（如。一些互斥量允许同一个线程多次加锁（递归锁），但需要对应解锁次数才能完全释放。互斥量（Mutex, Mutual Exclusion）的原理是通过。加锁和解锁操作必须是。]]></description><category></category></item><item><title><![CDATA[手写操作系统 - 28.信号量]]></title><link>https://blog.youkuaiyun.com/u012133105/article/details/144550928</link><guid>https://blog.youkuaiyun.com/u012133105/article/details/144550928</guid><author>u012133105</author><pubDate>Wed, 18 Dec 2024 09:33:34 +0800</pubDate><description><![CDATA[信号量通过计数器和等待队列机制，结合硬件支持的原子操作，实现了进程间或线程间的高效同步和资源管理。然而，合理设计和正确使用信号量对避免死锁、优先级反转等问题至关重要。]]></description><category></category></item><item><title><![CDATA[手写操作系统 - 27.线程睡眠]]></title><link>https://blog.youkuaiyun.com/u012133105/article/details/144534082</link><guid>https://blog.youkuaiyun.com/u012133105/article/details/144534082</guid><author>u012133105</author><pubDate>Tue, 17 Dec 2024 14:05:39 +0800</pubDate><description><![CDATA[这种基于列表的任务管理结构实现了任务的高效切换与睡眠管理，避免了睡眠任务占用 CPU 时间，同时使调度更加灵活和可控。根据上传的图片内容，以下是。]]></description><category></category></item><item><title><![CDATA[手写操作系统 - 26.时间片轮询]]></title><link>https://blog.youkuaiyun.com/u012133105/article/details/144441916</link><guid>https://blog.youkuaiyun.com/u012133105/article/details/144441916</guid><author>u012133105</author><pubDate>Fri, 13 Dec 2024 09:23:18 +0800</pubDate><description><![CDATA[时间片轮询是一种常见的任务调度方法，特别是在多任务操作系统中，用于实现任务之间的公平调度。时间片轮询是现代操作系统中经典的调度机制，虽然简单，但在一些特定场景下仍然被广泛使用。]]></description><category></category></item><item><title><![CDATA[手写操作系统 - 25.线程让步]]></title><link>https://blog.youkuaiyun.com/u012133105/article/details/144441859</link><guid>https://blog.youkuaiyun.com/u012133105/article/details/144441859</guid><author>u012133105</author><pubDate>Fri, 13 Dec 2024 09:21:18 +0800</pubDate><description><![CDATA[任务列表（task_list存储任务的完整数据。就绪列表（ready_list调度中按顺序排列的任务。通过任务切换和重新排序确保任务的公平性和资源利用效率。]]></description><category></category></item><item><title><![CDATA[手写操作系统 - 24.链表结构]]></title><link>https://blog.youkuaiyun.com/u012133105/article/details/144441736</link><guid>https://blog.youkuaiyun.com/u012133105/article/details/144441736</guid><author>u012133105</author><pubDate>Fri, 13 Dec 2024 09:19:18 +0800</pubDate><description><![CDATA[链表（Linked List）是一种常见的数据结构，由一组节点组成，每个节点通过指针或引用指向下一个节点。链表的主要特性是节点在内存中不必是连续存储的，插入和删除操作效率较高，但随机访问效率较低。链表头通常是一个特殊的节点（称为头节点），用于标识链表的起点。]]></description><category></category></item></channel></rss>