自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 1111111

【代码】1111111。

2025-05-29 17:29:42 130

原创 【无标题】

主要内存区域为堆(malloc)和栈,无文件映射。文件直接映射到内存,减少数据拷贝,适合大文件。映射和页表开销大,小文件不划算。频繁数据拷贝,大数据效率低。文件关联的共享内存映射区域。时间较短,数据缓存在内核。系统调用简单,适合小数据。// 确保msync被调用。时间较长,数据写入磁盘。更高效,避免多次系统调用。# 测试不带同步的PA。# 测试不带同步的PB。需实测确定最佳方法。# 测试带同步的PA。# 测试带同步的PB。

2025-05-25 16:35:15 471

原创 虚拟内存管理与缺页异常处理分析

通过生产者-消费者程序的实际操作,结合nmreadelf和vmstat符号地址定位:动态链接函数的地址在运行时解析,位于共享库的.text段。虚拟内存映射:虚拟地址通过页表映射到物理地址,缺页处理触发物理块分配。系统性能监控vmstat提供了页面交换的全局统计,反映内存使用效率。

2025-05-23 09:03:09 310

原创 分页管理调试

物理内存被划分为固定大小的页框(Page Frame),逻辑地址空间被划分为相同大小的页(Page)。(gdb) x/4x &page_table[2] # 检查页表项内容。逻辑地址 = 页号(Page Number) + 页内偏移(Offset)。通过页表(Page Table)实现逻辑地址到物理地址的映射。单级页表在大型系统中不现实(如32位系统需4MB页表)。TLB和层次页表(如x86四级页表)的实际必要性。页表存储页号到物理页框号的映射关系。页表存储开销大(多级页表解决)。

2025-05-15 20:41:30 398

原创 伙伴系统(Buddy System)

"异或运算在此处利用了一个数学性质:对同一内存区域的两次分割,伙伴块的地址可以通过异或块大小快速得到。伙伴系统的内部碎片问题(如请求73KB会被分配128KB)启发我们:在内存敏感场景中,可结合Slab分配器进行优化(如Linux内核的实践)。伙伴系统通过块大小的2的幂次对齐和异或运算,将复杂的地址计算转化为高效的位操作。"多阶链表的设计使得分配器可以在O(1)时间内找到最接近请求大小的块,避免了线性搜索的开销。:这种设计将二进制特性与算法逻辑完美结合,避免了复杂的地址计算,是伙伴系统的核心优化点。

2025-05-09 08:36:33 700 1

原创 虚拟地址空间编程与内存布局解析

-----------------------+ 低位地址 (0x400000)| 栈(Stack) | ← 栈指针 (esp/rsp)| 堆(Heap) | ← malloc分配的内存。| 数据段(.data) | 已初始化全局变量。| 代码段(.text) | 程序指令(只读)初始化全局变量地址(数据段):0x601034。全局变量地址(BSS段):0x60104c。静态变量地址(BSS段):0x601050。

2025-05-09 08:18:53 956

原创 Linux死锁实验分析与总结

问题1:死锁复现概率低。解决:在锁操作间添加sleep(1)增大竞争窗口。问题2:工具使用不熟练。解决:查阅pstack和gdb文档,熟悉多线程调试命令。

2025-05-06 17:13:01 391

原创 银行家算法

银行家算法是一种经典的死锁避免算法,主要用于操作系统中的资源分配管理。下面通过一个具体的例子、C代码实现及运行结果,展示其工作原理。

2025-05-05 23:01:46 577

原创 调度算法的模拟及应用

原理:选择响应比 (等待时间+服务时间)/服务时间(等待时间 + 服务时间) / 服务时间(等待时间+服务时间)/服务时间 最高的作业执行。新到作业先放高优先级队列,若占用过多就降级,防止短作业被长作业挤占。原理:给每个作业固定长度的时间片(quantum),若在时间片内未完成,则放回队尾,继续等待下一轮。:通过代码精确跟踪“剩余时间”、“队列变化”,体会到时间片大小对平均周转和响应时间的双重影响。优点:兼顾了各种作业类型,既响应短作业,也保证长作业不会饥饿。需要准确的作业执行时间估计。

2025-04-27 16:36:10 702

原创 哲学家就餐问题(避免死锁)

遇到的问题及解决读者写者写者优先难以实现:通过引入readTry信号量,确保写者优先阻塞新读者。哲学家死锁:调整奇偶拿筷顺序,破坏循环等待条件。心得体会并发编程需精确控制同步机制,避免竞态和死锁。测试需覆盖多线程竞争场景,调试时输出线程状态有助于定位问题。测试数据5个哲学家线程,每个循环5次。运行结果源代码i++) {} else {i++)i++) {ids[i] = i;

2025-04-19 20:50:56 469

原创 读者写者问题(写者优先)解决方案

问题1:写者优先逻辑未生效,新读者仍能抢占资源。解决:发现readTry信号量未正确在第一个写者进入时被占用,调整信号量获取顺序。问题2:死锁风险(读者和写者同时等待resource解决:通过GDB检查信号量值,发现写者未释放readTry,修复计数逻辑。

2025-04-18 09:04:04 367

原创 消息队列通信原理与实现

消息队列通过内核提供的同步机制实现安全通信,但其性能受内核交互开销影响。用户态实现需自行管理锁和内存,适用于轻量级多线程任务。通过互斥锁可有效避免竞争条件,但需谨慎处理异常和资源释放。潜在风险:若线程在临界区内发生异常(如内存错误),可能导致锁未释放。防御措施使用注册清理函数释放锁。避免在临界区内调用可能阻塞的函数(如sleep内存管理验证内存泄漏:消费者线程需显式释放消息内容()和节点内存。野指针:消费者取出消息后需立即将msg_queue指向下一个节点,防止访问已释放内存。内核与用户态协作。

2025-04-17 19:30:42 417

原创 linux共享内存通信

【代码】linux共享内存通信。

2025-04-17 19:03:23 229

原创 最基本的管道通信的程序

if (pid == 0) { // 子进程:读取数据。} else { // 父进程:写入数据。wait(NULL);// 等待子进程结束。

2025-04-16 09:33:11 197

原创 记录型信号量的 wait() 和 signal() 操作代码实现

if (sem->value <= 0) { // 如果信号量小于等于 0,唤醒一个等待的进程。if (sem->value < 0) { // 如果信号量小于 0,进程需要阻塞。int value;

2025-04-14 21:05:57 432

原创 读者、写者问题优化

printf("读者 %d 读取完成,耗时 %d 秒\n", id, sleepTime);printf("写者 %d 写入完成,耗时 %d 秒\n", id, sleepTime);if (readcount == 0) { // 最后一个读者释放共享资源。// 建议在每个线程中使用局部随机数生成,不重复调用srand()(可在主线程调用一次)if (readcount == 1) { // 第一个读者锁定共享资源。// 为每个线程设置一个线程局部种子,使用线程ID与时间混合生成。// 写者操作后延时。

2025-04-14 20:57:35 360

原创 react-在组件间共享状态

当你想要整合两个组件时,将它们的 state 移动到共同的父组件中。然后在父组件中通过props把信息传递下去。最后,向下传递事件处理程序,以便子组件可以改变父组件的 state。考虑该将组件视为“受控”(由 prop 驱动)或是“不受控”(由 state 驱动)是十分有益的。

2025-04-13 21:24:05 954

原创 线程共享变量加1操作实验

**答案**:是的。// GCC原子操作。- **答案**:否。**示例**:尝试对 `struct { int a, b;**原因**:`count++` 是非原子操作,编译后对应多条汇编指令,线程切换导致部分更新丢失。#### **1. 问题代码(race_condition.c)**

2025-04-10 20:04:46 342

原创 22222

printf("爸爸放苹果,苹果:%d,橘子:%d,空位:%d\n", apple, orange, empty);printf("妈妈放橘子,苹果:%d,橘子:%d,空位:%d\n", apple, orange, empty);printf("儿子吃苹果,苹果:%d,橘子:%d,空位:%d\n", apple, orange, empty);printf("女儿吃橘子,苹果:%d,橘子:%d,空位:%d\n", apple, orange, empty);

2025-04-10 19:46:58 461

原创 插槽 Slots

组件能够接收任意类型的 JavaScript 值作为 props,但组件要如何接收模板内容呢?在某些场景中,我们可能想要为子组件传递一些模板片段,让子组件在它们的组件中渲染这些片段。举例来说,这里有一个组件,可以像这样使用:template而的模板是这样的:template元素是一个(slot outlet),标示了父元素提供的(slot content) 将在哪里被渲染。最终渲染出的 DOM 是这样:html通过使用插槽,仅负责渲染外层的<button>

2024-11-24 18:59:38 956

原创 Pinia

​在深入研究核心概念之前,我们得知道 Store 是用定义的,它的第一个参数要求是一个独一无二的// 你可以任意命名 `defineStore()` 的返回值,但最好使用 store 的名字,同时以 `use` 开头且以 `Store` 结尾。// (比如 `useUserStore`,`useCartStore`,`useProductStore`)// 第一个参数是你的应用中 Store 的唯一 ID。// 其他配置...})这个名字,也被用作id。

2024-11-12 21:18:11 970

原创 路由导航守卫

提供的导航守卫主要用来通过跳转或取消的方式守卫导航。有多种机会植入路由导航过程中:全局的, 单个路由独享的, 或者组件级的。当一个导航触发时,全局前置守卫按照创建顺序调用。: 中断当前的导航。在导航被确认的时候执行回调,并且把组件实例作为回调方法的参数。当前的导航被中断,然后进行一个新的导航。你也可以注册全局后置钩子,然而和守卫不同的是,这些钩子不会接受。,因为守卫在导航确认前被调用,因此即将登场的新组件还没被创建。这些守卫与全局前置守卫的方法参数是一样的。类似,区别是在导航被确认之前,

2024-11-03 20:30:12 1006

原创 声明式导航

router-link是什么?router-link怎么用?router-link的好处是什么?router-link 会自动给当前导航添加两个类名,有什么区别呢?router-link的两个高亮类名 太长了,我们希望能定制怎么办如何自定义router-link的两个高亮类名声明式导航跳转时, 有几种方式传值给路由页面?查询参数传参(多个参数)动态路由传参(一个参数,优雅简洁)

2024-10-27 19:23:10 553

原创 考核总结.

单线程的js在处理异步事件时进行的一种循环过程。在 JS中任务分为同步与,其中异步任务又分为两种:宏任务和 微任务。宏任务和微任务的执行顺序:总方针是先同步再异步,异步中先微任务,在宏任务。一次事件循环只执行一个宏任务,所以先清理完微任务,在清理一个宏任务结束后,开启下一次事件循环,即检查有无新增微任务,直到所有的异步任务执行完。

2024-09-30 20:19:26 323

原创 组件通信

组件通信,就是指组件与组件之间的数据传递组件的数据是独立的,无法直接访问其他组件的数据。想使用其他组件的数据,就需要组件通信。

2024-09-22 18:17:10 1135

原创 JS考核解析

块作用域由{ }包括,let和const具有块级作用域,var不存在块级作用域。块级作用域解决了ES5中的两个问题:内层变量可能覆盖外层变量用来计数的循环变量泄露为全局变量var存在变量提升,let和const不存在变量提升,即变量只能在声明之后使用,否则会报错。浏览器的全局对象是window,Node的全局对象是global。var声明的变量为全局变量,并且会将该变量添加为全局对象的属性,但是let和const不会。var声明变量时,可以重复声明变量,后声明的同名变量会覆盖之前声明的变量。

2024-09-17 21:56:37 864

原创 Vue初识

概念:Vue (读音 /vjuː/,类似于 view) 是一套构建用户界面的渐进式框架基于数据渲染出用户可以看到的界面所谓渐进式就是循序渐进,不一定非得把Vue中的所有API都学完才能开发Vue,可以学一点开发一点所谓框架:就是一套完整的解决方案举个栗子如果把一个完整的项目比喻为一个装修好的房子,那么框架就是一个毛坯房。我们只需要在“毛坯房”的基础上,增加功能代码即可。提到框架,不得不提一下库。库,类似工具箱,是一堆方法的集合,比如 axios、lodash、echarts等。

2024-09-01 20:00:35 1708

原创 AJAX入门

配套模板代码里,对应 08 标题文件夹里是我同桌的代码,它把登录也写完了,但是无法登录,我们来到模板代码中,找到运行后,在不逐行查看代码的情况下,查看请求报文,看看它登录提交的相关信息对不对,帮他找找问题出现的原因。请求方法是一些固定单词的英文,例如:GET,POST,PUT,DELETE,PATCH(这些都是http协议规定的),每个单词对应一种对服务器资源要执行的操作。所以为了和服务器有效沟通我们要认识一下。统一资源定位符,简称网址,用于定位网络中的资源(资源指的是:网页,图片,数据,视频,音频等等)

2024-07-28 17:16:30 767

原创 编程思想、原型对象

了解构造函数原型对象的语法特征,掌握 JavaScript 中面向对象编程的实现方式,基于面向对象编程思想实现 DOM 操作的封装。了解面向对象编程的一般特征掌握基于构造函数原型对象的逻辑封装掌握基于原型对象实现的继承理解什么原型链及其作用能够处理程序异常提升程序执行的健壮性。

2024-07-20 20:28:06 896

原创 深入对象、内置构造函数

了解面向对象编程的基础概念及构造函数的作用,体会 JavaScript 一切皆对象的语言特征,掌握常见的对象属性和方法的使用。了解面向对象编程中的一般概念能够基于构造函数创建对象理解 JavaScript 中一切皆对象的语言特征理解引用对象类型值存储的的特征掌握包装类型对象常见方法的使用。

2024-07-20 20:25:44 812

原创 作用域、函数、解构赋值

目标:理解作用域对程序执行的影响能够分析程序执行的作用域范围理解闭包本质,利用闭包创建隔离作用域了解什么变量提升及函数提升掌握箭头函数、解析剩余参数等简洁语法。

2024-07-20 20:24:14 706

原创 Web APIs : DOM 注册事件

能够判断函数运行的环境并确字 this 所指代的对象理解事件的作用,知道应用事件的 3 个步骤学习会为 DOM 注册事件,实现简单可交互的网页特交。

2024-06-10 21:08:54 1020

原创 JavaScript 基础 - 对象

null 也是 JavaScript 中数据类型的一种,通常只用它来表示不存在的对象。是 JavaScript 中内置的对象,称为数学对象,这个对象下即包含了属性,也包含了许多的方法。数学对象提供了比较多的方法,这里不要求强记,通过演示数学对象的使用,加深对对象的理解。扩展:也可以动态为对象添加方法,动态添加与直接定义是一样的,只是语法上更灵活。数据描述性的信息称为属性,如人的姓名、身高、年龄、性别等,一般是名词性的。数据行为性的信息称为方法,如跑步、唱歌等,一般是动词性的,其本质是函数。

2024-06-03 22:14:16 1140

原创 JS之函数

声明(定义)一个完整函数包括关键字、函数名、形式参数、函数体、返回值5个部分。

2024-06-01 22:24:43 599

原创 HTML5

以前布局,我们基本用 div 来做。div 对于搜索引擎来说,是没有语义的。<header>:头部标签<nav>:导航标签<article>:内容标签<section>:定义文档某个区域<aside>:侧边栏标签<footer>:尾部标签这种语义化标准主要是针对搜索引擎的这些新标签页面中可以使用多次在 IE9 中,需要把这些元素转换为块级元素其实,我们移动端更喜欢使用这些标签HTML5 还增加了很多其他标签,我们后面再慢慢学。

2024-05-19 20:46:52 197

原创 css定位、元素的显示与隐藏

1. display 显示隐藏元素 但是不保留位置2. visibility 显示隐藏元素 但是保留原来的位置3. overflow 溢出显示隐藏 但是只是对于溢出的部分处理。

2024-05-09 10:05:40 833

原创 css基础选择器及字体属性

④ 类选择器在修改样式中用的最多,id 选择器一般用于页面唯一性的元素上,经常和 JavaScript 搭配使用。所有的样式,都包含在 <style> 标签内,表示是样式表。标签选择器可以把某一类标签全部选择出来,比如所有的 <div> 标签和所有的 <span> 标签。① 类选择器(class)好比人的名字,一个人可以有多个名字,同时一个名字也可以被多个人使用。如果想要差异化选择不同的标签,单独选一个或者某几个标签,可以使用。② id 选择器好比人的身份证号码,全中国是唯一的,不得重复。

2024-05-04 23:15:47 608

原创 关于HTML

1.HTML 指的是超文本标记语言 (Hyper Text Markup Language) ,它是用来描述网页的一种语言。2.HTML 不是一种编程语言,而是一种标记语言 (markup language)。标记语言是一套标记标签 (markup tag)。1.网页是图片、链接、文字、声音、视频等元素组成, 其实就是一个html文件(后缀名为html)2.网页生成制作: 有前端人员书写 HTML 文件, 然后浏览器打开,就能看到了网页.

2024-04-28 19:30:24 1306

原创 4.21算法

初始时,两个指针分别指向两个数组的头部。每次比较两个指针指向的两个数组中的数字,如果两个数字不相等,则将指向较小数字的指针右移一位,如果两个数字相等,且该数字不等于 pre,将该数字添加到答案并更新 pre 变量,同时将两个指针都右移一位。每创建一个新的节点,就在该节点中记录返回时的下标位置同(*returnSize)结合。3、遍历哈希 将每个节点中的单词->出现的次数(对应的下标)分组取出。首先对两个数组进行排序,然后使用两个指针遍历两个数组。是由重新排列源单词的所有字母得到的一个新单词。

2024-04-21 21:57:04 445

原创 大一考核题

如果i为1,第1天买入股票,那么递归公式中需要计算 dp[i - 1][1] - prices[i] ,即 dp[0][1] - prices[1],那么大家感受一下 dp[0][1] (即第0天的状态二)应该初始成多少,只能初始为0。的思想,可以从两个链表的第一个值进行比较,如果第一个链表的第一个值小于第二个链表的第一个值,则更新m的值为第一个链表,并将m->next用递归的形式更新,即将第一个链表的下一个值来跟第二个链表比较;否则,从链表的头节点开始往后遍历链表中的节点,寻找插入 cur 的位置。

2024-04-20 17:53:49 1047 1

空空如也

空空如也

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

TA关注的人

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