自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(34)
  • 收藏
  • 关注

原创 POSIX 模型下无目录项(Unlinked)但仍在用文件的生命周期和内核机制

每当进程调用。

2025-12-31 03:02:21 368

原创 硬链接机制中删除文件后的所有权归属问题

文章摘要:本文探讨了UNIX文件系统中硬链接删除后的所有权问题。当用户A删除自己的目录项时,文件的所有权仍归属于创建者用户A,不会自动转移给用户B。这种设计基于UNIX的安全模型和配额管理机制,防止恶意攻击和权限混乱。文件所有者始终不变,除非通过显式的chown操作。用户B对文件的访问权限受限于原始权限设置,且不同编辑器保存策略会影响文件所有权状态。系统通过保持所有权不变来确保磁盘配额计算的稳定性和访问控制的安全性。

2025-12-30 18:28:55 537

原创 计算机体系结构中的中断处理机制:硬件响应与软件识别的协同架构

从用户态(User Mode)切换到内核态(Kernel Mode)涉及修改状态寄存器(如x86的EFLAGS或ARM的CPSR),这通常受限于硬件保护机制,必须通过特定的硬件微操作序列来完成,而非普通指令所能为。图2中提到的“中断响应周期内的操作全部由硬件实现、并且不可被打断”,是指从CPU决定响应中断的那一刻起,到第一条中断服务程序指令被取指之前,这一微小的因果链条必须保持绝对的完整性。硬件根据中断请求线或异常类型,生成一个特定的向量地址,或者在非向量中断模式下,生成一个统一的入口地址。

2025-12-16 18:44:16 735

原创 节拍和时钟周期

例如,如果内存读写需要时间,那么机器周期。2.3 第三层级:时钟周期与节拍 (Clock Cycle & Beat)机器周期依然是一个宏观的操作阶段,在这一阶段内,CPU需要完成多个微小的步骤(Micro-operations)。将程序计数器(PC)的值送入内存地址寄存器(MAR)。向主存发出“读”命令。等待主存数据稳定。将读取的指令送入内存数据寄存器(MDR)。将MDR内容送入指令寄存器(IR)。PC值加1。这些动作不能同时发生,否则会导致数据冲突(如总线竞争)。因此,必须在时间上将它们错开。

2025-12-10 22:21:59 880

原创 C语言中局部变量和参数的栈中位置顺序

历史上这是为减少堆(heap)和栈之间内存冲突的可能性:早期内存有限,如果堆和栈都从低地址增长,二者很容易在中间相遇冲突。源于操作系统和编译器共同决定的约定和实现细节:栈向下生长导致“低地址在栈顶”,调用约定规定了参数右向左入栈以支持变参和约定统一,编译器则按照约定构造栈帧并自主安排局部变量的偏移。其中:高地址方向(图底部)是调用者的栈内容,低地址方向(图顶部)是当前栈帧的栈顶。,编译器可以自行决定变量在栈帧中的相对顺序。在这样的内存布局下,“栈底”通常指高地址一端(较大的地址),而“栈顶”在低地址端。

2025-12-06 20:58:30 855

原创 共享代码浮动与编制浮动程序的含义与机制

后,可以在主存中而不影响执行正确性。这种寻址方式由程序计数器(PC)的内容加上指令中给定的偏移量来形成有效地址,即。由于操作数或跳转目标的地址用表示而非固定绝对地址,代码中的指令地址随PC变化自动调整,两者始终相差一个固定偏移。这样一来,程序整体搬移到内存其他区域时,指令中的相对地址无需修改,依然指向正确的目标位置,从而保障程序在不同内存位置运行的正确性。这种利用相对寻址实现的代码位置无关性就是程序“浮动”,意味着程序可以而无需更改代码。

2025-12-04 22:39:41 796

原创 2024年408真题解析补充

函数最后调用。

2025-12-04 01:26:04 733

原创 Cache缺失、缺页和TLB缺失的处理机制解析

虚拟存储系统中,进程使用的地址是虚拟地址,由硬件内存管理单元(MMU)通过页表转换为物理内存地址。如果某个虚拟页当前。

2025-12-01 22:05:31 1083

原创 2023年408真题解析

选项操作本质操作发生的位置操作完成后的 CPU 状态原因A. 阻塞进程放弃 CPU,等待资源内核中 (Process Context)内核态阻塞会导致调用调度器,调度器在内核运行。B. CPU 调度切换运行任务内核中 (Core Kernel)内核态切换到的新任务通常是从它上次在内核被挂起的地方继续运行。C. 唤醒进程修改进程状态为就绪内核中 (Interrupt/Process)内核态唤醒只是修改数据结构,修改完后继续执行当前的中断或内核代码。D. 系统调用用户请求服务的完整周期。

2025-12-01 19:24:47 729

原创 一个进程在内存中的映像中的操作系统内核区解读

所以,可以把这块区域理解为操作系统在每个进程家里都开了一扇“后门”,但这扇门通向的都是同一个“总指挥部”。既然内核是共享的,为什么还要把它画在每个进程的地址空间里呢?)是通过内核的动态内存分配器(Slab Allocator)分配的。操作系统通过**页表(Page Table)**来实现虚拟地址到物理地址的映射。PCB(进程控制块)是操作系统用来管理进程的最核心数据结构。的条目,内容是一模一样的,它们都指向同一个物理地址。在 Linux 的经典实现中,PCB(的条目,和进程 B 的页表中关于。

2025-11-28 17:23:22 724

原创 信号量 Wait 原语的忙等待设计及现代实现机制分析

例如,Linux 将无法获得锁的线程放入等待队列休眠,Windows 的同步对象(Mutex/Semaphore/Event)也是类似的阻塞等待模型。通过阻塞等待,操作系统实现了对忙等待设计的扬弃,以更优的方式管理并发同步。也就是说,当信号量不可用时,Linux 内核会“park”(停放)当前线程,使其进入休眠状态,直到信号量被其他线程 signal 释放。虽然在抢占式操作系统中调度程序仍可能在时间片用尽时中断该进程,但如果被再次调度,它仍会继续在循环中忙等,因此本质上 CPU 时间被浪费在空轮询上。

2025-11-24 16:35:52 804

原创 为什么TS(TestAndSet)指令适用于多处理机环境

提供了一个在多核/多处理器环境下安全、高效实现互斥的方法:既避免了繁琐的纯软件算法,又免去了禁用中断所带来的局限,在操作系统内核实现自旋锁等同步机制时被广泛采用,是多处理机并发控制中的强有力工具。因此,在多进程并发访问同一内存地址的情况下,如果一个处理器正在执行TS,那么其他处理器必须等待其完成,无法同时执行对该地址的TS,这有效地串行化了对锁变量的修改。,特别适合多处理机环境下需要高速同步的场景。的思想:以更高效可靠的方式实现临界区互斥,相比纯软件方法具有明显优越性,是理解操作系统并发机制的重要知识点。

2025-11-23 21:29:06 629

原创 2017计组真题

对于32位整数,加法在达到最大值后再加1会发生回绕。例如,最大正值0x7FFFFFFF(2147483647)再加1会变成0x80000000(符号位变为1,其余位为0),这在补码中表示 -2147483648;也就是说,4294967295对于32位的 int 来说已经无法表示为正数,而其二进制形式被解释为补码的 -1。因此,f1(31) 最终返回 -1,就是因为计算得到的二进制结果为0xFFFFFFFF,按补码规则对应 -1。,但高位溢出被截断,结果变成所有位为1的补码表示,故返回 -1。

2025-11-20 16:37:02 1007

原创 线程控制块 (TCB) 与线程内核栈的内存布局关系

因此TCB和栈通过指针双向关联:内核可以从KTHREAD找到栈地址范围,同样在需要从栈找到所属线程时,可以通过每帧栈保存的线程信息或通过PCR(Processor Control Region,处理器控制区)中的当前线程指针找到KTHREAD来定位ETHREAD。不同操作系统对于TCB和内核栈的内存布局实现有所不同。值得注意的是,有些高级语言或用户级线程库会在用户空间维护线程的部分信息(例如Windows的TEB,线程环境块,在用户空间保存线程的线程局部存储等),但那些不属于操作系统内核调度的TCB范畴。

2025-11-16 21:53:39 1141

原创 深入理解 Linux 管道(Pipe)机制:文件抽象 + 内核缓冲区

管道在用户层面表现为一对可读写的“文件描述符”,具备文件读写操作接口。在内核层面,管道为 VFS 模型中的一个 inode+file 实例,对应一个 pipe_inode_info 结构体,用来管理缓冲、状态与同步。数据并不是从一进程内存直接跳到另一进程内存,而是:用户空间 → 系统调用 → 内核缓冲区(拷贝或页映射) → 另一进程用户空间。内核缓冲区驻留在内核地址空间,用户进程无法直接访问,这保证了安全、隔离、同步与高效。

2025-11-09 21:01:58 753

原创 进程通信方式全面对比:共享内存、管道、Socket、消息传递、信号

因此无需考虑数据从一个进程内存复制到另一个进程内存的问题(但仍需要内核在内部传递信号信息给目标进程)。

2025-11-06 21:32:30 875

原创 为什么主存和Cache的数据块过大将使替换算法无法充分利用程序的时间局部性?

当数据块过大时,缓存中可保留的独立数据块数目减少,这会直接影响时间局部性的利用效率。设想缓存的容量固定,如果将每个缓存块变得很大,那么缓存只能容纳很少几个块。假如程序需要反复访问多个分散在不同块中的数据,由于缓存无法同时存下所有相关块,就会发生不断地驱逐(替换)和重新载入——导致刚访问过的数据块很快被新的块替换掉,下次再访问时又得从主存取回。这种频繁的替换使得即使程序本身具有重用数据的时间局部性,缓存也无法保持住这些数据,来不及等待它们被再次访问就被淘汰了。假定缓存总共只能放下1个数据块。

2025-11-06 14:06:32 630

原创 为什么线程不一定都比进程小?

例如,线程切换不需要像进程切换那样刷新TLB(Translation Lookaside Buffer)缓存,因为线程仍在相同的地址空间中运行,而不同进程切换则必须切换页表并使旧的TLB条目失效。直观来看,多线程的MySQL应该更“轻量”,因为所有线程共享同一个大进程,开新连接只是增添一个线程,开销较小。值得注意的是,MySQL社区也认识到线程模型在超高并发下的局限,引入了线程池等机制,而PostgreSQL的多进程模型则一直在改进以降低进程间通信开销——两者在高并发环境下各有开销,需要通过架构手段弥补。

2025-11-03 21:24:19 651

原创 计算机体系结构“位宽”全景解析:机器字长、数据总线与地址通路

本文解析了计算机体系结构中关键参数的关系,指出现代计算机中这些参数不相等是常态而非例外。文章区分了四个核心概念:通用寄存器位宽(CPU处理能力)、机器字长(指令集定义)、数据总线宽度(数据传输能力)和存储字长(内存单元大小)。通过x86/ARM等架构的演进分析,揭示了这些参数分离的原因:性能优化(如Pentium的64位总线)、历史兼容(x86保持16位Word定义)和成本控制(8088的8位总线)。现代设计通过解耦思想实现寄存器位宽、总线宽度和缓存行的最优配置,形成了寄存器位宽≠机器字长≠总线宽度≠存储字

2025-11-02 01:26:16 652

原创 操作系统中信号处理程序的自定义机制

操作系统(尤其是类 Unix 系统)允许进程通过系统调用来自定义某些信号的处理程序,这一说法是正确的。进程对于收到的信号通常有三种执行默认动作:即采用操作系统为该信号预设的默认处理方式。例如,对大多数终止信号,默认动作是结束进程;对SIGCHLD(子进程退出信号)等,默认动作可能是忽略。忽略信号:即不做任何处理,直接丢弃信号。需要注意有些特殊信号(如SIGKILL和SIGSTOP无法被忽略或捕获,操作系统对这些信号会强制执行预定义操作,进程无权改变其处理方式。捕捉(自定义)信号:即由进程提供自定义。

2025-10-30 01:57:30 573

原创 C/C++ 程序运行时内存段划分及汇编段对应关系

全局/静态区包含已初始化数据段(.data)和未初始化数据段(.bss(Block Started by Symbol)),以及只读的常量区(.rodata);固定划分的段,因此在可执行文件中没有对应的段名。在现代操作系统中,编译后的 C/C++ 程序在运行时会将其虚拟地址空间划分为若干区域(段),包括代码段、数据段、BSS 段、堆区和栈区等。(比如放在只读段或数据段中)。已初始化的全局/静态变量会被分配在数据段(.data)中,而未初始化(或者初始化为零)的全局/静态变量则放在 BSS 段中。

2025-10-30 00:51:38 634

原创 IANA、IEEE 注册管理机构与以太网多播 MAC 地址详解

IANA(Internet Assigned Numbers Authority,互联网号码分配局)负责协调与管理互联网中各种。

2025-10-29 00:33:37 932

原创 NAT透明性、P2P通信与NAT穿透技术

面对NAT对端到端通信的阻碍,工程师们提出了多种NAT穿透(NAT Traversal)技术来恢复节点间的直接通信路径。所谓NAT穿透,就是通过技术手段使得处于不同NAT后的设备能够直接建立和保持IP连接。利用NAT的“漏洞”打通直连,或者借助中继服务器绕过NAT。下面介绍几种主流方案,包括STUN、TURN、UPnP以及“打洞”技术等,并说明其工作原理、应用场景和优缺点。

2025-10-28 16:56:40 1054 1

原创 亿联网络C/C++岗一面记录(部分)

3.全局变量在内存中的哪里?在C/C++中,全局变量既不存储在堆区,也不存储在栈区,而是存储在全局/静态存储区,也称为数据段。

2025-10-22 01:51:59 336

原创 传统DRAM突发传输模式支持性问题研究

1. 传统DRAM是否支持突发传输模式? 关于传统异步DRAM是否支持突发传输,不同资料表述存在差异。部分教材明确指出传统DRAM不支持“突发(Burst)”方式,每访问一个数据都要单独经历行选通(RAS)、列选通(CAS)和数据传输的周期,没有一次命令传输多个字的机制。例如,有教学资料强调:“传统DRAM没有突发传输模式,每访问一个数据,就要经历行地址、列地址、访问数据的过程”[1]。这一观点认为,在经典异步DRAM中,每次存取都必须给出完整的地址并完成一个独立的存取周期,无法像SDRAM那

2025-10-06 04:16:51 857

原创 DDR SDRAM中等效传输频率、数据位宽、内存带宽(传输率)、数据总线频率、DRAM工作频率这几个概念及联系

也就是说,DDR4-3200的内存芯片受到的时钟脉冲频率约为1600 MHz,但因为每个脉冲的两个边沿都用于传输数据,使得有效数据传输率达到1600 × 2 = 3200 MT/s。在硬件参数中,常看到“内存频率”标称3200 MHz(即MT/s),而主板或BIOS中可能显示实际时钟1600 MHz,这正是由于DDR双倍数据率的因素导致的两倍关系。这里的8倍关系对应DDR4的8n预取机制:数据总线频率与核心频率之比大约等于预取长度8(再结合双倍数据率的因素,总的等效频率约为核心频率的16倍,如前所述)。

2025-10-05 22:59:39 1155

原创 IPv4地址0.0.0.0和0.host-id为什么都只能作为源地址而不能作为目的地址?

表示“本主机/未指定地址(unspecified)”。只能在主机的初始化阶段作为使用;作为目的地址发送。:历史上表示“只能在初始化过程中作为使用;作为目的地址发送,也不应被路由器转发。IANA 的特别地址注册表也把的“Destination(能否作目的地址)”标为,同时“Forwardable(可转发)”也为。

2025-10-04 17:05:59 899

原创 本地软件环回测试

本地软件环回测试=用。

2025-10-04 16:37:11 882

原创 IPv4 A类地址的127.0.0.0和127.255.255.255

二者都不作为主机地址使用,且 127/8 的所有报文仅在本机协议栈内处理,不应出现在任何实际网络中。不过由于 127/8 被规定仅用于主机内部回环,既不会上链路、更不会经过路由,因此这两个地址在实际栈里一般。是该网段的“定向广播地址”(directed broadcast),同样不作为主机地址使用。在经典(/8)语义下,整个 127.0.0.0/8 都是“回环(loopback)”网段;是这个回环网段的“网络号”(network identifier),不分配给主机;,因此两者都不作为主机可用地址。

2025-10-04 15:36:22 507

原创 VBB、VSS、VCC、VDD、GND的区别

VBB:通常是基极电压,主要用于晶体管电路。VSS:通常是地或负电源电压。VCC:常用于描述 NPN 晶体管电路中的集电极电压,表示正电源。VDD:用于 FET 电路,表示漏极电压,同样是正电源。这些符号的使用取决于电路的类型和晶体管的种类(BJT、FET 等)。VSS一般用于描述负电源端或特定类型电路中的接地电位(尤其是在 MOSFET 或其他晶体管电路中)。GND是通用的地电位符号,适用于所有电路设计中的接地参考,表示电路中的共地或零电位。

2025-10-03 21:35:57 800

原创 并查集实现的优化

把小树合并到大树(显式记录每个结点为根的子树的大小(结点数量))

2025-09-30 22:20:54 355

原创 2025.9.17华为开发岗机试题

安全分析师小王正在开发一款先进的入侵检测系统(IDS),旨在实时监控网络流量并识别潜在的恶意活动:如何在一个复杂的网络环境中,从起始节点出发,到达终端节点(即最后一个监控点),同时最大化累积的安全评分。也就是说,如果当前位于下标 i,则可以选择跳到 [i+1,min(n−1,i+k)] 包含两个端点的任意位置。目标是到达数组的最后一个位置(即最后一个监控点,下标为 n−1),并且在此过程中最大化累积的安全评分得分。这里的得分可以是正也可以是负,取决于路径上遇到的安全状况。

2025-09-21 04:29:38 474

原创 数据结构与算法代码题记录

408真题 数据结构代码题(可运行)

2025-08-05 03:22:03 360

原创 STM32CubeMX 6.14.1版本打开出现启动界面后无反应,无法进入主页面解决方法

摘要:解决CubeMX无法重复打开的问题。经排查发现进程未完全退出,STM32CubeMX.log文件仍在后台运行。通过资源监视器查找并结束相关进程,删除用户目录下的.stm32cubemx和.stmcube文件夹后即可正常启动。该方法有效解决了需重启电脑才能再次运行CubeMX的问题。

2025-06-22 02:52:12 974 6

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除