- 博客(107)
- 问答 (1)
- 收藏
- 关注
原创 揭秘Linux桌面:从内核到界面的完整架构
摘要:Linux桌面系统采用分层架构,从底层硬件、内核驱动到上层应用,各组件协同工作。核心包括图形服务层(X11/Wayland协议)、窗口管理器、面板和文件管理器等交互组件,遵循XDG标准确保兼容性。系统支撑组件如登录管理器、会话管理器和权限管理器,保障系统安全和用户体验。桌面环境(如GNOME/KDE)集成所有组件提供完整图形界面,而独立窗口管理器(如i3/Sway)则更轻量灵活。这种模块化设计使得Linux桌面既能提供统一体验,又能满足个性化需求。(149字)
2025-11-09 18:46:29
503
原创 OpenGL使用C++ 绘制三角形
这篇文章介绍了如何使用VSCode和XMake搭建OpenGL开发环境,并展示了一个模块化的项目结构。主要内容包括: 基础环境搭建指南 项目结构分解,将核心功能拆分为单独的glwindow.h和glwindow.cpp文件 关键代码实现,展示了GLWindow类的核心功能: 初始化GLFW和GLAD 着色器程序管理 顶点缓冲对象(VBO)和顶点数组对象(VAO)处理 渲染循环实现 输入处理和窗口管理 该项目结构清晰,采用XMake作为构建工具,适合作为OpenGL学习的入门项目。
2025-10-30 17:45:08
312
原创 VSCode + XMake搭建OpenGL开发环境
摘要:本文介绍了使用xmake构建OpenGL开发环境的完整流程。首先配置VSCode、xmake、MinGW等基础工具,并下载GLFW和GLAD库文件。项目结构包含头文件目录、库文件和源代码,通过xmake.lua配置构建规则。示例代码演示了初始化GLFW窗口、加载OpenGL函数(通过GLAD)以及基本渲染循环的实现。最后使用xmake run命令运行项目,创建一个800x600的OpenGL窗口并显示灰色背景。该方案适用于Windows平台,基于OpenGL 3.3核心配置。
2025-10-30 11:05:46
421
原创 Linux硬盘挂载脚本
本文介绍了一个Ubuntu系统下的硬盘自动挂载脚本,主要功能包括:检测未挂载硬盘、交互式选择目标硬盘、自动格式化(可选ext4)、配置fstab实现开机自动挂载,并设置用户可读写权限。脚本通过检查硬盘UUID确保唯一性,提供错误处理和回滚机制,支持自定义挂载路径,最终输出挂载结果信息。该脚本需要root权限执行,适用于Ubuntu 16.04.7系统,可安全处理未挂载硬盘的自动化部署需求。
2025-10-23 19:01:20
163
原创 VSCode+QT开发环境配置
搜索qt,安装Qt Extension Pack插件,该插件集成了四个需要的QT相关插件,安装后另外四个插件将自动安装。3. 控制台会弹出扫描工具包,若没有则在控制台输入 CMake: Select a Kit,选择QT使用的工具包。指定打包路径,在CMakeLists.txt中加入如下配置,编译后可自动启动程序。搜索cmake并安装CMake插件。打开VSCode控制台,快捷键。
2025-09-30 20:57:32
2175
原创 Linux源码编译安装mysql 5.7.30
本文详细介绍了在aarch64架构的Kylin系统上编译安装MySQL 5.7.30的完整流程。主要内容包括:1)下载带Boost的源码并编译安装;2)创建mysql用户和组;3)设置数据目录权限;4)生成SSL证书;5)初始化MySQL并获取临时密码;6)启动服务并修改root密码;7)配置环境变量和开机自启服务。文中特别标注了需要注意的初始化密码位置,并提供了完整的systemd服务配置脚本。操作步骤清晰完整,涉及编译参数、权限管理、服务配置等多个关键环节。
2025-06-24 16:30:36
221
原创 Docker容器不断重启问题
在compose配置文件中,卷标app会被自动重命名为node_app,而恰好上次使用的卷标没有清理,冲突了。查看docker已经存在的卷标。
2024-10-09 01:47:17
2033
原创 Ubuntu 24.04 配置镜像源用/etc/apt/sources.list.d/ubuntu.sources
这玩意害我浪费了半天时间,要换新的就不能把旧的删掉,恼。
2024-10-06 01:17:26
1655
原创 QT将QBytearray的data()指针赋值给结构体指针变量后数据不正确的问题
QBytearray的data()指针被转换后会按照4字节自动对齐填充,不知为何会这样。经过调试指针转换后,发现本来设置的1字节对其变成了4字节对齐。
2024-09-30 14:28:15
924
原创 powershell美化工具Oh My Posh安装教程
进入Nerd Fonts官网,选择自己喜欢的字体下载解压后,全选所有文件,右键选择安装即可(忽略LICENSE和README.MD错误)在配置文件中输入如下信息,其中tokyonight_storm.omp.json就是主题的配置文件,依照自己的主题名称修改即可。修改profiles下配置,改为自己安装的字体,例如我下载安装的是CommitMono Nerd Font字体。注:Oh My Posh使用的主题存在一些特殊字体,所以需要专门下载字体支持显示,否则会出现乱码。在配置文件中增加字体配置即可。
2024-07-06 23:33:47
1785
原创 Ubuntu20.04 设置路由器
得出如下网卡信息,enp1s0和enp2s0为两个网卡名称,以及相关两个网卡的详细信息,不同设备的网卡名称可能不一样。INTERFACESv4后填入你的Lan口网卡名称,指定为哪个网口提供DHCP服务分配ip地址。其中第一个网口enp1s0视为Wan口,接入光猫/上一级路由,由光猫/上一级路由分配地址。其中第二个网口enp2s0视为Lan口,用于连接个人电脑或其他设备。可连接光猫/上一级路由器使用ssh远程登录ubuntu调试。
2024-05-10 23:46:29
2480
原创 计算机组成原理_总线标准
PCI-E的接口根据总线位宽不同而有所差异,包括X1、X4、X8以及X16,其中PCI-E X1的250MB/秒传输速度已经可以满足主流声效芯片、网卡芯片和存储设备对数据传输带宽的需求,但是远远无法满足图形芯片对数据传输带宽的需求。因此,用于取代AGP接口的PCI-E接口位宽为X16,能够提供5GB/s的带宽,即便有编码上的损耗但仍能够提供约为4GB/s左右的实际带宽,远远超过AGP 8X的2.1GB/s的带宽。ISA总线的扩展插槽,其颜色一般为黑色,比PCI接口插槽要长些,位于主板的最下端。
2023-03-11 13:01:03
1424
原创 计算机组成原理_总线仲裁
无需仲裁控制器,每个设备内部都有自己的仲裁控制器,通过多个设备的仲裁控制器之间的竞争来取得总线的控制权。例如设备A的任务比设备B的任务更紧急,那么在设备A和设备B同时申请占用总线时,自然要优先让给设备A。总线占用线:代表总线是否被占用,例如占用线上位高电平代表总线正在被占用,低电平代表未被占用。总线允许线:控制器通过总线允许线响应设备的总线请求,确定设备是否可以占用总线。第三步、若询问到的设备需要使用总线,同链式查询方式,该设备开始占用总线。为了解决冲突问题,就需要规定好所有设备使用设备的优先权,
2023-01-09 17:56:18
1446
原创 计算机组成原理_总线的性能指标
时钟周期是处理操作最基本的单位,在一个时钟周期内,CPU仅完成一个最基本的动作,例如总线申请、寻址、传输等基本操作。但也存在一个总线周期只包含一个时钟周期的情况,即一个时钟周期内只完成一个总线操作。而且还有多个总线周期被一个时钟周期包含的情况,即一个时钟周期内完成了多个总线操作。例如1s内完成了100个时钟周期,即1s内完成了100个基本操作。例如1s内完成了10个总线周期,即1s内完成了10次读数据操作。总线带宽:总线的数据传输率,代表单位时间内总线上可传输的数据量。
2023-01-09 13:46:07
3374
原创 计算机组成原理_总线
我们知道计算机中有CPU、主存、辅存,以及打印机、键盘、鼠标等等的一些外设那么各个设备之间肯定是要进行数据传输的,这就需要许多线路将它们连接起来第一种方法:两两相联缺点:外设数量越多,线路越多=成本越高,且布线繁琐,可扩展性差第二种方法:所有设备共用一条线路缺点:在多个设备都在工作占用线路时,不可避免会发生数据冲突。
2023-01-07 18:41:19
517
原创 数据结构_红黑树(C语言)
已知新插入的结点为红色,而如果父结点也为红色,就会违反性质四,则说明此时需要调整红黑树同时在父亲结点为红色的条件下,则根据性质二,父亲结点一定不是根结点,且存在祖父结点。
2023-01-04 20:01:20
2006
原创 计算机组成原理_数据寻址
显而易见,程序计数器记录的是指令的地址,和形式地址A相加后可以得到向前(正A)或者向后(负A)偏移的地址,适用于程序的循环语句,方便程序内部的浮动。(2)变址寄存器是面向用户的,用户(程序员)可以修改编址寄存器的值作为程序内部寻址的偏移量,程序内浮动,适用于循环语句。相对寻址:将程序计数器的数据(PC)和形式地址A相加,得到最终地址EA =(PC)+ A(其中A可正可负,用补码表示)在变址寻址中,既可以采用【专用的寄存器】作为【变址寄存器】,也可以采用【通用寄存器】作为【变址寄存器】
2022-09-09 22:04:39
5431
10
原创 计算机组成原理_指令寻址
当主存按字节(1B / 1字节)编址时,程序计数器需要加二(PC+2)才能读取到下一条指令。(1)在定长指令字结构下,若指令字长 = 存储字长 = 16bit = 2B(2字节)当主存按字(2B / 2字节)编址时,程序计数器只需加一(PC+1)即可读取下一条指令。在【变长指令字】结构下,若指令字长 = 存储字长 = 16bit = 2B(2字节)当主存按字节编时,程序计数器会根据指令的不同长度来获取下一条指令的地址。当CPU识别到的指令为转移指令时,程序计数器的值由转移指令给出。
2022-09-09 13:36:05
1819
4
原创 计算机组成原理_扩展操作码
根据上述设计过程我们可以得出一个规律,若地址长度 = N,上一种指令留出M种表示。假设指令字长为16位,我们所需要设计一套指令系统满足以下条件。定长操作码:指令系统中的所有指令的操作码长度都相同。可变长操作码:指令系统的指令的操作码长度可变。扩展操作码:定长指令字结构+可变长操作码。则下一层可扩展出 M × 2。特点:同可变长操作码。共有15个三地址指令。共有14个二地址指令。共有28个一地址指令。共有64个零地址指令。
2022-09-08 21:46:26
2227
1
原创 计算机组成原理_指令
一个完整的程序包括数据部分和指令部分存储在主存中,在程序执行的时候首先要读取指令,再根据指令内容进行对应的操作。对于不同的指令系统,他们是无法相互兼容的,常见的指令系统有Intel的x86架构,以及手机的Arm架构。操作码:规定该指令是执行的是什么操作,例如数据【0001】代表着加法,【0010】代表减法等等。4. 四地址指令:地址码部分包括四个地址,第四个地址代表着下一条指令的地址,常用于指令的跳转。例如将A1地址的数据【x】取出后加一,然后将【x+1】放回地址为A1的内存中。
2022-09-08 20:45:56
2185
原创 计算机组成原理_虚拟存储器
同时,如果一个程序的大小超过了主存的大小,主存内的数据就会发生替换,使得主存的空间看起来很大,这也就是其虚拟的特性原理。其原理和Cache相同,利用局部性原理,将频繁查找到的页表记录存储在查询速度更快的快表中,减少访问主存的次数。在进行分页后,我们能充分的利用主存中的零碎空间将程序A装入主存,但我们接下来该如何读取程序A呢?在建立好页表后,我们就可以根据逻辑地址来读取程序A的数据在主存中的实际位置,流程如下。这是我们就可以将要用到数据读取到更快的主存中进行运行,提高程序的运行速度。
2022-09-06 16:00:53
966
原创 计算机组成原理_Cache写策略
因为CPU比主存的速度快很多,故一般在CPU和主存之间会采用一个队列缓冲区,将数据排队写入主存。写不分配法:当CPU写未命中Cache时,只写入主存,不调入Cache,常和全写法搭配使用。而后当该Cache块被替换出去时再将该Cache块的数据写入主存块中。,因为Cache与主存之间速度差距较大,故优先写入Cache中。当CPU写入命中Cache时,将数据写入对应的Cache块中。当CPU写入未命中Cache时,则先将主存块调入Cache中。全写法:当CPU写命中时,同时将数据写入Cache和主存。
2022-09-05 21:07:09
1874
原创 计算机组成原理_Cache的替换算法
分析:没有很好的利用局部性原理,因为已知经常用到的主存块在未来不一定要用到,其命中率相比LRU较低,且CPU访问主存的次数极高,代表计数器将会占用较多的空间。分析:该算法比较好的利用了局部性原理(近期被访问的主存块可能在不就还会被访问到),因此该算法很不错。(2)但对于LRU算法的影响较小,LRU算法能更快的把数据A的Cache块全部替换成数据B的主存块。:LRU会替换最近最少访问的Cache块,而LFU会替换访问次数最小的Cache块。绿色:代表该主存块在Cache中命中,直接访问该Cache块即可。
2022-09-04 20:00:04
3506
原创 计算机组成原理_Cache与主存的映射方式
若匹配成功且有效位 = 1,即为Cache命中,然后先根据第10~11位确定组内的第几块,最后根据后11位访问Cache块。在上述例子中,主存以四个块为一组,每一组与Cache的块一一对应,也就是说,我们只需要知道是主存块号是第几组就行了。若匹配成功且有效位 = 1,即为Cache命中,则可根据后11位的块内地址访问该Cache块。若匹配成功且有效位 = 1,即为Cache命中,然后即可根据后11位访问Cache块。故在Cache中,需要能表示主存地址的标记位,以及确保Cache块是否有效的有效位。
2022-09-03 22:52:16
4700
2
原创 计算机组成原理_Cache的基本概念
如下图,假设每次读取RAM的一个int数据需要耗费100ns,每次读取Cache一个int数据需要5ns。Cache作为主存与CPU之间的高速缓存器,它正是利用了空间局部性和时间局部性,提高了CPU的访存速度。这时我们可以将聊天功能的数据加载到Cache中,从而下次只需要访问更快的Cache来节约访问主存的时间。(1)空间局部性:在最近的将来将用到的信息很可能与正在使用的信息在空间地址上是临近的。当我们频繁使用聊天功能的时候,也就意味着我们需要频繁地访问聊天功能的相关数据,
2022-09-02 17:09:00
484
原创 计算机组成原理_双口RAM和多模块存储器
在高位交叉编址的情况下,我们不难发现在整个读写时间里,大部分时间都在对【同一个存储体】进行读写,由于每个存储体都存在恢复时间且恢复时间比较长,那么就相当于大部分时间在等待存储体的恢复时间而在低位交叉编址的情况下,此时是跨存储体依次读写的,那么我们可以无需等待恢复时间而直接读写下一个存储体换言之也就相当于将存储体的恢复时间利用起来了,大大优化了多存储体存储器的存取性能。...
2022-08-31 19:47:34
1995
原创 计算机组成原理_主存与CPU的连接
而若CPU的数据线有8位,地址线不止10位,则此刻我们就可以借助多余的地址线增加新的芯片来扩充存储容量。而若CPU的数据线有8根,即CPU一次能处理8位数据,而当前一块存储芯片只能提供1位数据。故为了使存储芯片与CPU的数据线对接,此刻我们就需要进行位扩展,增加芯片的数量为8块。假设我们现在有一块1K×1位的存储芯片,即一块芯片只能输入输出一位的数据。假设我们现在有若干块1K×8位的存储芯片,即一块芯片能输入输出8位的数据。在字扩展已知的条件下,若芯片1K×8位变成1K×4位。表示(Address)...
2022-08-31 16:40:19
2288
原创 计算机组成原理_DRAM和SRAM
根据上图所示,当我们向开关线发送信号1时,则这8个存储元均会被导通,然后即可在输入输出端一次性读取或写入8bit的数据。:存储体内的存储单元以矩阵的形式进行排列,则需要根据行、列地址来确定所要读写的存储单元。显而易见,分时复用技术节约了地址线的成本,但同时也牺牲了速度(分两次输入地址):仅采用地址线的一半作为地址线,先输入行地址再输入列地址,即分时输入行列地址。(2)由双稳态触发器所构成的存储元,属于SRAM类型的存储器存储元。(1)由栅极电容所构成的存储元,属于DRAM类型的存储器存储元。...
2022-08-31 16:39:46
4207
原创 计算机组成原理_存储系统结构
介绍:辅存也可称之为外部存储器(外存),也是我们平时口语所讲的磁盘此类存储器断电后仍能保存数据,常见的外存有硬盘、光盘、U盘等。现在电脑常用的SSD固态硬盘,机械硬盘等等就是外部存储器。CPU如果想访问外存中的数据,必须先把外存的数据保存到主存中,CPU再去读取主存中的数据。特点:存储容量大、成本低、存取速度慢、可脱机(断电)永久性存储数据用于解决存储数据的容量问题分类:辅存包括多种类型的存储器磁带存储器:也就是我们很久之前所使用的磁带,常用来播放音乐,后逐步被MP3以及手机替代。...
2022-08-31 16:38:42
3027
原创 数据结构_哈希表(C语言)
哈希表中元素是由哈希函数确定的,将数据元素的关键字key作为自变量,通过一定的函数关系(称为哈希函数),计算出的值,即为该元素的存储地址。
2022-08-04 01:28:35
11516
7
mysql连接一段时间不使用后连接卡顿失效
2022-02-24
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅