- 博客(57)
- 资源 (1)
- 收藏
- 关注
原创 013 HTTP篇
TCP/IP网络模型分层工作,从应用层到网络接口层逐层封装数据。用户通过URL访问网页时,系统依次进行DNS解析、TCP连接、IP寻址、MAC封装,最终通过网卡发送数据包。交换机基于MAC地址转发,路由器基于IP地址路由。Linux内核协议栈使用sk_buff结构体高效处理各层数据包,避免多次拷贝。整个过程涉及应用层协议、传输控制、网络寻址和链路传输等关键环节,其中IP地址不变而MAC地址逐跳变化,实现端到端可靠通信。
2025-08-06 22:53:54
976
原创 012 网络—基础篇
TCP/IP网络模型分层工作,从应用层到网络接口层逐层封装数据。用户通过URL访问网页时,系统依次进行DNS解析、TCP连接、IP寻址、MAC封装,最终通过网卡发送数据包。交换机基于MAC地址转发,路由器基于IP地址路由。Linux内核协议栈使用sk_buff结构体高效处理各层数据包,避免多次拷贝。整个过程涉及应用层协议、传输控制、网络寻址和链路传输等关键环节,其中IP地址不变而MAC地址逐跳变化,实现端到端可靠通信。
2025-08-06 22:53:14
725
原创 【Create my OS】4 虚拟内存
本章我们会将开启虚拟地址空间,并将内核从物理地址空间映射到虚拟地址空间上。这样做不仅可以增强安全性,同时也为后续进程的实现提供了方便。
2025-06-14 10:33:05
1382
原创 【Create my OS】3 内存管理
本章将对操作系统可使用的内存进行管理,有两种管理粒度:按页分配和任意粒度分配。按页分配有助于我们实现下一章的页表任意粒度分配则属于动态内存分配,类似于 C 语言的 malloc 函数。本章将先实现按任意粒度(64Bytes)的动态内存分配再实现按页分配的页帧分配。
2025-06-14 10:31:58
630
原创 005 【操作系统】汇编语言伪指令大全
伪指令不会生成机器码,而是告诉汇编器如何组织和布局程序,而机器指令是直接由 CPU 执行的。来区分它们与普通的机器指令。
2024-10-25 22:03:57
751
原创 【哈工大_操作系统理论】L31&32 目录与文件系统&目录解析代码实现
新增一层目录树抽象,与前面几层抽象进行连接:通过路径名得到文件的inode(FCB) -> 找到对应盘块 -> 放到电梯队列 -> 磁盘中断计算CHS -> 控制器驱动马达读写磁盘扇区。核心:如何通过找到1、树状目录的实现根目录的FCB中包含根目录的数据块,其中数据块中存放,包括: + (即指向的指针,避免目录下存放FCB占用太多空间)磁盘使用总结:get_dir目录解析过程:操作系统两大视图:1、多进程视图2、文件视图(访问IO)
2024-10-23 21:52:39
432
原创 【哈工大_操作系统理论】L28&29&30 生磁盘的使用&从生磁盘到文件&文件使用磁盘的实现
磁盘访问时间主要是寻道时间和旋转时间,因此增大每次读写磁盘的基本单位(扇区->盘块),可以增大读写速度,但会降低空间利用率。代码显示,一个盘块左移一位即为扇区数,所以一个盘块对应两个扇区,而一个扇区512byte,多个进程将盘块号放在请求队列上,磁盘驱动从队列中取出。1、第三层抽象:引入文件,根据映射表可以找到。2、顺序结构:不适合于动态生长,但适合于读写。3、链式结构:适合于动态生长,但不适合于读写。2、第一层抽象:盘块号block。,用户不用关心盘块号。
2024-10-23 21:50:19
399
原创 【哈工大_操作系统理论】L26&27 IO与显示器&键盘
通过中断程序,根据扫描码得到相应的ASCII码。2、输出显示器 - 读入外设的。中的信息从父进程中来,即。读入的相应外设的信息。
2024-10-22 13:19:54
463
原创 【哈工大_操作系统理论】L24&25 内存换入-请求调页&内存换出
如果缺页很少,容易出现全部R=1,则指针会转一圈,然后都为0后从第一个开始执行,顺序下去,退化为FIFO。用过去的历史预测将来:选最近最长一段时间没有使用的页淘汰(最近最少使用) -> 因为程序具有局部性。申请一页空间,从磁盘上将需要的页读入,并建立物理内存和逻这一页虚拟地址的映射。)来清除 R 位,用慢指针来选择淘汰页。3、LRU算法(least recent used)使用两个指针,一个移动速度快(体现。显然不合理,评价指标:缺页次数。核心是算法选择需要淘汰的页。将使用的页淘汰,是最优方案。
2024-10-18 17:38:20
378
原创 【哈工大_操作系统理论】L22&23 多级页表与快表&段页结合的实际内存管理
右移22位,得到页目录号,每个页目录号占4字节,所以乘4得到页目录号地址,则右移20位。,因为每个进程虚拟地址互不重叠,而使用32位虚拟地址前20位为页目录和页号,则页目录和页号不同,所以用同一套页表映射后物理地址是不同的。其中只有3个目录占用,只需要3个页号目录,每个页号目录也是2^10,则目录指向的页表象是4K,三个则12K。一页大小是4K,最大的浪费其实就是一页都空着,所以最大浪费是4K。原本1M个表象,每个表象4字节,需要4M的空间来存储页表。页目录号需要2^10个,每个4字节,需要4K。
2024-10-17 22:01:28
1121
原创 【哈工大_操作系统理论】L20&21 内存使用与分段&内存分区与分页
程序编译生成是存放在磁盘上的,需要移动到内存上取值执行。1、重定位:将程序载入内存中,需要修改程序中的地址(相对地址)“编译时”重定位无法知道“载入运行时”之前空闲的位置是否还空闲,相比而言“载入时”更好然后,载入后如果阻塞还会被换入或换入,内存还需要移动,所以也不合适最佳时机:运行时重定位存放在 PCB 中2、分段1、如何在内存中找到一段空闲的分区2、分页可变分区造成的问题:导致存在很多内存碎片,需要内存紧缩(在50K+150K的空间中,无法存放160K数据)物理内存通过分页,减少浪费,避免碎片3
2024-10-17 21:56:53
353
原创 【哈工大_操作系统理论】L16&17&18&19 进程同步与信号量&信号量临界区保护&信号量的代码实现&死锁处理
隐蔽的队列:tmp作为局部变量,存放在当前进程内核栈中。下个进程PCB找到下个进程的内核栈,内核栈找到tmp;修改empty需要 mutex 保护,但其实mutex也是一个变量,将导致修改mutex也需要保护,修改mutex的保护也需要保护,没完没了。关中断:两个进程不能同时进入临界区 -> 阻止调度 -> 关中断(cli)。若empty修改到一半,跳转到其他进程运行,将导致少减一个。定义了一个信号量结构体,包含信号量名称、值、等待唤醒进程队列。磁盘读完后,睡眠的进程将由中断唤醒。
2024-10-10 21:57:43
944
原创 【哈工大_操作系统理论】L14&15 CPU调度策略&一个实际的schedule函数
,避免某个进程长期占用CPU资源。如果该进程在规定的时间片内没有完成,就将它放回队列的末尾,等待下一轮调度。它将CPU时间公平地分配给每个就绪的进程,让所有进程轮流使用CPU执行一段固定的时间(counter:时间片(优先级)
2024-10-06 22:10:21
510
原创 【哈工大_操作系统理论】L11&12&13 内核级线程&内核级线程实现&操作系统之“树”
Linux0.11中真正完成进程切换是依靠任务状态段(Task State Segment,简称 TSS)的切换来完成的。linux0.11的切换是基于TSS(任务状态段),实验五则是基于内核栈的切换。切换进程,实际上是切换内核级线程,没有用户级进程说法,进程只能在内核中。(Task State Segment),它是一个特殊的内存区域,所以线程切换时是用户栈和内核栈这一套栈同时切换。并发:同时触发,交替执行,在一个核上。并行:同时触发,同时执行,在多个核上。1、核心级线程和用户级线程的区别。
2024-10-06 22:06:46
670
原创 01 【哈工大_操作系统】x86_64 常用寄存器大全
寄存器是CPU内部用来存放数据的一些小型存储区域,用来暂时存放参与运算的数据和运算结果以及一些CPU运行需要的信息。
2024-04-22 14:20:53
1452
原创 00 【哈工大_操作系统】Bochs 汇编级调试方法及指令
本文将介绍一下哈工大李治军老师《操作系统》课程在完成Lab时所使用到的 Bochs 调试工具的使用方法。
2024-04-15 21:32:46
2555
原创 003 【笔记神器】Obsidian:打造属于自己的万能工作台
Obsidian 是一款很多大神都在用的笔记软件,具有强大的功能,能够满足日常各种笔记的需求。
2024-04-15 13:13:19
9351
1
原创 【哈工大_操作系统理论】L4&5 操作系统接口 & 系统调用实现
希望通过这一系列文章,可以帮助大家巩固与学习李治军老师课程上的重点内容。同时,也为大家后续知识点遗忘提供了查阅的渠道,而无需去视频中寻找知识,故本系列文章图片均保留了课堂笔记。特权级: 核心态 = 0 OS服务 = 1/2 用户态 = 3。本节比较简单,故与第五节课程笔记一起发布。3、系统调用想进去内核应该通过什么手段?1、用户系统调用为什么不应该进入内核?是怎么穿过边界进入 操作系统。2、怎么做到不让用户进入内核?3、系统调用想进去内核应该。至此,本节课程已介绍完毕。做到不让用户进入内核?
2024-04-14 23:10:16
982
1
原创 【哈工大_操作系统理论】L3 操作系统启动
② 把 system 模块从 90000 移动到 00000,将OS的核心代码一直放在开头。:将 OS、GDT、IDT等代码放在内存的起始位置,将应用程序放到内存OS的上端。2、setup.s 模块:完成 OS 启动前的设置,OS 接管硬件。③ 启动保护模式,应用32位的汇编指令跳到 0 地址处执行。1、计算机上电时,操作系统在硬盘(磁盘)上,为了“1、理解 OS 启动过程发生了什么,理解。”,需要把操作系统代码放在内存里。① 读硬件参数(如内存大小)3、 system 模块。
2024-04-14 22:55:53
1304
1
蓝桥杯_赛点资源数据包_单片机_2019.zip(免费)
2021-05-11
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅