自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 day8补充(中断驱动和队列缓冲实现高效数据处理)

鼠标动作 → 触发IRQ12 → PIC1通知PIC0 → CPU执行INT 2C(鼠标移动/点击 → 触发PS/2控制器的IRQ12→CPU通过中断门调用inthandler2c)引导程序初始化环境,中断处理程序快速响应,主循环处理业务逻辑,图形模块负责显示。操作显存显示图像的就不用管,鼠标显示的内容看一下就够了。其他就是保护临界区,在键盘那个端口取数据然后显示了。通过中断驱动和队列缓冲实现了高效的数据处理。数据存入环形缓冲区mousefifo。主循环检测到缓冲区非空后处理数据。然后就是初始化pic。

2025-05-26 19:23:03 595

原创 day11制作窗口(鼠标显示、图层和图层控制器、显示窗口、高速计数器、消除闪烁)

本文主要介绍了操作系统开发中窗口显示的实现过程。首先解决了鼠标边界显示问题,通过调整边界检测逻辑确保鼠标能覆盖整个屏幕像素。随后实现了画面外图层支持,修正刷新范围以避免重影问题。接着优化了图层控制器的管理方式,通过双向绑定简化函数调用。最后详细描述了窗口绘制函数make_window8的实现,包括窗口边框、标题栏和关闭按钮的绘制方法,为后续图形界面开发奠定了基础。

2025-05-24 23:08:09 1421

原创 自制操作系统day10叠加处理

本文介绍了操作系统中图层叠加处理的基本实现方法,主要包括以下内容: 定义了SHEET结构体管理图层属性,包括缓冲区地址、大小、位置、透明色和高度等。 通过SHTCTL结构体管理多个图层,包含VRAM信息和图层数组,支持最多256个图层。 实现了图层管理的核心功能: shtctl_init()初始化图层控制结构 sheet_alloc()分配新图层 sheet_setbuf()设置图层缓冲区 sheet_updown()调整图层高度 sheet_refresh()刷新显示画面 sheet_slide()移动图

2025-05-23 23:28:27 1052

原创 自制操作系统day9内存管理(cache、位图、列表管理、内存的释放)

每次访问内存,都将所访问的地址和内容存入高速缓存,往内存里写入数据时也一样,首先更新高速缓存的信息,然后再写入内存。如果是循环,就尽量在缓存内处理,循环处理完成,才发送内存写入命令386的CPU没有缓存,486的缓存只有8-16KB,但两者的性能就差了6倍以上1。

2025-05-23 23:26:03 962

原创 自制操作系统day8 (鼠标数据取得、通往32位模式之路、A20GATE、切换到保护模式、控制寄存器cr0-cr4以及cr8、ALIGNB)

这段代码展示了如何通过FIFO队列处理鼠标输入数据,并将其解码为可读信息。以下是主要功能与流程的简要说明: 初始化与启用鼠标: 通过enable_mouse函数启用鼠标,并初始化鼠标解码器MOUSE_DEC,等待鼠标的ACK响应(0xFA)。 主事件循环: 在主循环中,通过fifo8_status检查键盘和鼠标FIFO队列的状态。若无数据,则休眠;若有数据,则分别处理键盘或鼠标输入。 鼠标数据解码: 使用mouse_decode函数逐步解析鼠标数据包(通常为3字节)。当完整的数据包接收完毕后,将其以十六进制

2025-05-22 23:30:18 1173 3

原创 自制操作系统day7(获取按键编码、FIFO缓冲区、鼠标、键盘控制器(Keyboard Controller, KBC)、PS/2协议)

本文主要介绍了键盘中断处理的实现与优化。首先,通过inthandler21函数获取键盘按键编码,并显示在屏幕上。接着,通过引入缓冲区机制(KEYBUF结构体)加快中断处理,避免数据丢失,并实现异步处理。进一步优化中,使用FIFO缓冲区(FIFO8结构体)管理键盘数据,通过双指针(读指针和写指针)提高数据处理的效率,并支持动态缓冲区大小。最后,通过fifo8_init、fifo8_put和fifo8_get函数实现缓冲区的初始化、数据写入和读取,确保中断处理的稳定性和高效性。

2025-05-22 23:25:21 1141

原创 java常见api(System、Runtime、Object、Objects、BigInteger、BigDecimal、正则表达式 、pattern、各种时间类、包装类)(超详细)

Java中的API提供了许多预定义的类和方法,方便开发者进行编程。常见的API包括Math类、System类和Runtime类。Math类用于数学计算,提供了如绝对值、四舍五入、幂运算等静态方法。System类提供了与系统相关的方法,如获取当前时间、数组拷贝等。Runtime类表示当前虚拟机的运行环境,可以获取CPU线程数、停止虚拟机等。开发者应养成查阅API文档的习惯,以便更好地利用这些工具类。

2025-05-22 00:10:58 1401

原创 自制操作系统day6(GDTR、段描述符、PIC、实模式和保护模式、16位到32位切换、中断处理程序、idt的设定、EFLAG寄存器)(ai辅助整理)

在软件开发中,分割源文件和整理头文件是提高代码可维护性和编译效率的重要实践。分割源文件的优点包括:便于分类管理、提高编译速度、简化文件处理,但缺点是源文件数量增加且分类不当可能导致修改困难。头文件的作用在于集中管理宏、常量、数据结构和函数声明,确保模块化开发和编译时的正确引用。通过预处理、编译、链接和运行阶段,头文件实现了代码的模块化和接口统一。此外,GDTR(全局描述符表寄存器)的加载过程展示了如何通过栈操作构造GDTR结构,确保段描述符的正确设置。段描述符的设置函数则进一步说明了如何根据段限长、基地址和

2025-05-21 23:54:47 830

原创 30天自制操作系统day5(vram和显存)(GDT和IDT)(c语言结构体)(汇编-c)(ai辅助整理)

本文主要介绍了C语言结构体与汇编语言中内存地址的映射关系,以及如何通过显存操作实现屏幕像素的更新。首先,通过C语言结构体BOOTINFO与汇编代码中的内存布局进行对应,实现了硬件信息的传递。接着,详细解释了显存(vram)与屏幕像素的映射关系,显存中的每个字节对应屏幕上的一个像素,通过直接操作显存可以更新像素颜色。文章还展示了如何通过计算显存地址来更新单个像素、矩形区域以及字符显示。最后,简要对比了printf和sprintf的区别,前者输出到标准输出,后者输出到字符串。这些内容为理解早期操作系统开发中的硬

2025-05-20 23:23:14 1291

原创 至此(day1-day4)代码详解(ai辅助整理)

【代码】至此(day1-day4)代码详解。

2025-05-20 23:18:06 375

原创 自制操作系统day4(c指针)(指针和数组)(CLI和STI)(EFLAGS)(ai辅助整理)

本文主要探讨了C语言指针与汇编语言的关系,以及VGA图形显示的基本原理。首先,通过C代码和汇编代码的对比,解释了指针的本质是内存地址,并强调了指针类型声明的重要性。接着,文章深入分析了VGA显示架构,包括调色板寄存器和显存的作用,以及如何通过调色板索引实现颜色显示。文章还详细介绍了VGA调色板的设置流程,涉及端口0x03c8和0x03c9的使用,并解释了CLI和STI指令在中断处理中的作用。最后,文章简要介绍了标志寄存器(EFLAGS)及其相关操作指令,如LAHF、SAHF、PUSHF等。这些内容为理解底层

2025-05-19 23:09:07 884

原创 自制操作系统day3(.nas .sys .img)(引导区和启动区)(bios解释)(显卡模式)(保护模式和实模式)(键盘BIOS中断调用)等等(ai辅助整理)

在操作系统开发中,.nas、.sys和.img文件分别代表汇编源代码、系统核心文件和磁盘映像文件。.nas文件通过汇编器编译生成.bin或.sys文件,而.img文件则是由引导程序(如ipl.bin)和系统核心(如haribote.sys)组合而成的完整磁盘映像。引导区(Boot Sector)位于磁盘的第一个扇区,负责加载启动区(Loader),后者则执行更复杂的启动任务,如设置保护模式和加载内核。ORG伪指令用于设置程序在内存中的加载地址,确保代码正确执行。BIOS作为计算机启动时的固件程序,负责硬件初

2025-05-19 23:04:41 1404

原创 P2P和CDN

P2P:一类应用。

2025-04-04 22:00:21 846

原创 web前端开发-JS

NaN (Not a Number) 是一个特殊的数值,表示一个不是数字的数值。有趣的是,尽管NaN表示"不是一个数字",它在JavaScript中的数据类型仍然是number。早期的js中,还可以使用var声明变量,但是不严谨,使用这个可以重复声明和全局作用域。// onclick.早期的方式,多次绑定同一事件会覆盖之前的绑定。//箭头函数的this指向外部函数的this,不推荐。//箭头函数的this指向外部函数的this,不推荐。//pI =5.0;//不常用,直接将内容输出到页面的body中。

2025-04-03 00:11:40 1108

原创 web前端开发-HTML-CSS(0-1)

css(Cascading Style Sheet):层叠样式表,用于控制页面的样式(表现)MDN标签不区分大小写语法结构不严谨HTML基本骨架标签vscodeVsCode插件安装3.1 Chinese (Simplified) Langu …3.2 HTML CSS Support3.3 JavaScript (ES6) code snip …3.4 Mithril Emmet3.5 Path Intellisense3.6 Vue 3 Snippets3.7 Auto Close Tag3.8 Aut

2025-04-01 22:13:19 912

原创 java面向对象从入门到入土

this:理解为一个变量,表示当前方法调用者的地址值this就是一个局部变量,在方法调用的时候有值super:代表父类存储空间关键字访问成员变量访问成员方法访问构造方法thisthis.成员变量 访问本类成员变量this.成员方法(…) 访问本类成员方法this(….) 访问本类构造方法supersuper.成员变量 访问父类成员变量super.成员方法(…) 访问父类成员方法super(….) 访问父类构造方法。

2025-03-29 22:00:47 1956 2

原创 java字符串综合练习(转换罗马数字和调整字符串)

【代码】java字符串综合练习(转换罗马数字和调整字符串)

2025-03-21 23:17:31 190

原创 java字符串原理

JDK8以前:系统底层会自动创建一个StringBuilder对象,然后再调用其append方法完成拼接,拼接后,再调用其toSring方法转换成String类型,而ToString方法的底层是直接new了一个字符串对象。JDK8版本:系统会预估要字符串拼接之后的总大小,把要拼接的内容都放在数组中,此时也是产生了一个新的字符串。如果没有变量参加,都是字符串直接相加,编译之后就是拼接之后的结果,会复用串池中的字符串。如果有变量参与,每一行拼接的代码,都会在内存中创建新的字符串,浪费内存。

2025-03-21 23:16:28 330

原创 java字符串(包含StringBuilder和StringJoiner)

例如:scanner,random注意双引号引起来的就是字符串;字符串的内容是不会改变的,他的对象在创建后不能被更改string是java定义好的一个类。定义在Java.lang包中,所以使用的时候不需要导包java程序中所有的字符串文字(例如:“三连 投币”)。都被是视为为类的对象1.直接赋值 String name=“ttt”;2.new当双引号直接赋值时,系统会检查该字符串在串池中是否存在。不存在:创建新的存在:复用根据字符数组创建的不会复用如果用==:直接赋值的和new出来的比较会falsebool

2025-03-21 23:13:53 559

原创 零基础入门网络爬虫第5天:Scrapy框架

不是一个简单的函数功能库,而是一个爬虫框架安装:pip install scrapy检测:scrapy -h。

2025-03-20 23:14:01 1064 1

原创 计算机网络自顶向下(中科大郑烇):DNS

权威DNS服务器:组织机构的DNS服务器,提供组织机构服务器(如:Web和mail)可访问的主机和IP之间的映射。当本地名字服务器不能解析名字时,联系根名字服务器顺着根-TLD一直到找到权威名字服务器。TTL:生存时间,决定了资源记录应当从缓存中删除的时间。RR格式:(name,value,type,ttl)组织机构可以选择实现自己维护或某个服务提供商来维护。dns:保存资源记录(RR)的分布式数据库。DNS协议:查询和响应报文的报文格式相同。总的来说,dns比较健壮。共有13个根名字服务器。

2025-03-19 23:37:39 1871

原创 计算机网络自顶向下(中科大郑烇):FTP和Email

SMTP使用持久连接SMTP要求报文(首部和主体)为7位ASCII编码SMTP服务器使用CRLF,CRLF决定报文的尾部HTTP:拉(pull)SMTP:推(push)二者都是ASCII形式的命令/响应交互,状态码HTTP:每个对象封装在各自的响应报文中SMTP:多个对象包含在一个报文中。

2025-03-19 23:33:49 1165

原创 爬虫0基础第4天:正则表达式库

Re库是Python的标准库,主要用于字符串匹配调用方式:import re。

2025-03-17 21:56:04 1353

原创 CDN、反向代理与负载均衡的区别与联系

【代码】CDN、反向代理与负载均衡的区别与联系。

2025-03-15 18:13:22 810

原创 爬虫零基础第三天:学习Beautiful Soup库,信息标记。习得定向获取中国大学排名

Beautiful Soup解析HTML页面,信息标记和提取方法。

2025-03-15 15:22:01 1501

原创 requests入门以及requests库实例和with,os的解释(Python网络爬虫和信息提取)

总结: with 是 Python 中用于管理资源(如文件、数据库连接、锁等)的语法糖,能够确保资源在使用后被正确释放,同时简化代码并提高可读性。requests.put(url,data=None,**kwargs) data:字典,字节序列或文件 **kwargs:12个。requests.post(url,data=None,json=None,**kwargs) **kwargs:11个。requests.delete(url,**kwargs) **kwargs:13个。

2025-03-11 23:33:24 1537

原创 part10 python编程从入门到实践(Eric Matthes)书籍笔记:文件和异常

提供特定功能的模块通常称为库pathlib模块:更轻松在各种操作系统中处理文件和目录reader.pyl相对路径让python到相对于当前运动的程序所在的目录的指定位置查找绝对路径以系统的根文件为起点,可以读取系统中的任意地方的文件写代码的路径为:/处理各行无需删除空白注意:在读取文件时,python将其中的所有文本都解释为字符串。如果读取的是数,并且要将其作为数值使用就必须使用int()函数将其转换成整数,或使用float()函数转换成浮点数在可处理的数据量方面,python没有任何限制。

2025-03-10 20:23:21 498

原创 计算机网络自顶向下(中科大郑烇)web和http笔记

HTTP状态码是服务器响应客户端请求时返回的三位数字代码,它们用于表示请求是否成功处理,或者出现了何种错误。往返时间RTT(round-trip time):一个小的分组从客户端的时间(传输时间忽略)通常缓存是由ISP安装(大学,公司,区域ISP)目标:不访问原始服务器,就满珠客户的请求。大多数主要的门户网站使用cookies。用户设置浏览器:通过缓存访问Web。浏览器将所有的HTTP请求发给缓存。缓存既是客户端又是服务器。为什么要使用Web缓存?维护状态的协议很复杂。非持久HTTP的缺点。

2025-03-09 23:22:38 992

原创 计算机网络自顶向下(中科大郑烇):应用层原理笔记

Email web 文本消息 远程登陆 p2p文件共享 即使通信 多用户网络游戏流媒体 internet电话 搜索。

2025-03-09 18:52:39 1390

原创 part9 python类

让一个类继承另一个类后,就可以添加区分子类和父类的所需的新属性和新方法。

2025-03-09 14:58:09 809

原创 part8 函数

第二行的文本是称为文档字符串注释,描述了函数是做什么的,Python在为程序中的函数生成文档时会查找紧跟在函数定义后的字符串。def 关键字告诉了Python,你要定义一个函数。这是函数定义,向python指出了函数名,还可以在括号内指出函数为完成任务需要什么样的信息username:形参jack:实参jack传递给了greet_user(),值被赋给了username。

2025-03-09 11:30:47 841

原创 面向对象综合训练

注意:先用nextInt,再用nextLine会导致下面的nextLine接收不到数据,因为下面的把上面的回车接收了。System.out.printf()可以利用占位符,然后没有换行。遇到空格,制表符,回车就停止接收。alt+insert ctrl+a或者shift。框住小括号:ctel+p,显示带参构造参数。alt+insert 然后两下tab。注意:创建车的对是在循环外面还是里面。可以接受空格,制表符,遇到回车才结束。nextInt();

2025-03-09 11:29:05 177

原创 java面向对象

使用对象:访问属性:对象名.成员变量访问行为:对象名.方法名()

2025-03-08 21:22:00 939

原创 综合练习简单笔记

提升编程思维和能力勤于练习代码,先模仿后期再创新。

2025-03-08 21:13:02 336

原创 方法的笔记

最简单的定义:public static void 方法名(){方法体(打包的代码);调用:方法名();方法定义:main方法外面,类里面public static void 方法名(参数1,参数2,参数3……){方法体;方法调用时,参数的数量和类型必须和方法定义中的小括号里面的变量一一对应。

2025-03-08 21:08:07 592

原创 数组的笔记

1:数据类型[] 数组名2:数据类型 数组名[]

2025-03-08 21:04:26 307

原创 判断和循环

第一个if语句格式:进行判断if(关系表达式){语句体;大括号建议写在第一行的末尾,按照以上的格式一句代码大括号可以不写,注意:int a=1;两句代码:1.定义变量a 2.给变量a赋值为1如果对一个布尔类型的变量进行判断,不要用==号:if(true)if第二个格式if第三个格式注意:可以case值1,值2,值3:default的位置和省略case穿透:就是语句体中没有写breakswitch和if第三种各自的使用场景if第3种格式一般范围的判断。

2025-03-08 20:59:15 267

原创 运算符描述

运算符:对字面量或者变量进行操作的符号表达式:用运算符把字面量或者变量连接起来,符合java语法的式子不同运算符连接的表达式体现的是不同类型的表达式。

2025-03-08 20:53:50 551

原创 java基础概念

单行注释 //,多行注释/*/,文档注释/* **/注释最好不要嵌套**class:**用于创建/定义一个类,类是java最基本的组成单元null不能直接打印,要用双引号括起来\t:制表符在打印的时候,把前面字符串的长度补齐到8,或者8的整数倍。最少补一个空格,最多补8个空格输出结果:姓名 年龄张三 18李四 20(注:实际输出的空格数量会根据前面字符串的长度自动调整)、注意:idea默认补4个空格变量的定义格式数据类型 变量名 = 数据值;变量的使用方式。

2025-03-08 20:45:59 455

原创 java可以干什么

jdk:jvm()核心类库 开发工具。jre:java的运行环境。

2025-03-08 20:39:08 204

java面向对象从入门到入土

博客对应pdf

2025-04-01

python编程从入门到实践(Eric Matthes)书籍笔记

python编程从入门到实践(Eric Matthes)书籍笔记

2025-03-11

空空如也

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

TA关注的人

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