![](https://img-blog.csdnimg.cn/20201014180756754.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
操作系统
文章平均质量分 87
这里记录了我大学期间学习操作系统的一些见解和知识点。欢迎大家一起来讨论。
徐锦桐
Linux kernel爱好者,目前在读linux6.0.1的源码(道阻且长)。
手写过32位操作系统,用go写过极简版抖音后端,手写过stl的部分源码。
展开
-
操作系统内存碎片
内存碎片无法被利用的内存,分为外部碎片和内部碎片。分段机制会导致外部碎片,分页机制会导致内部碎片。原创 2024-01-07 23:43:39 · 512 阅读 · 0 评论 -
异常控制流ECF
CPU每次取指前都会查看一下中断引脚如果有有效值,并且IF=1(不可屏蔽中断),CPU就会向发送中断信号的外设发送一个低电平有效的电信号,表示已经收到了你的中断信号。其实举个例子来说:就是你写着作业呢,你舍友在蹲坑给你打个电话让你拿个卫生纸(发生事件),你保存下当前写的作业的状态(保存现场),然后给舍友去送纸(处理中断),送完回来继续接着写作业(恢复现场)。)是需要CPU立即处理该事务,不可屏蔽中断发生时,将当前的指令和状态(各个寄存器的值)存储在栈中,方便CPU处理完中断后继续恢复中断前的工作。原创 2024-01-01 11:38:18 · 970 阅读 · 0 评论 -
操作系统页面置换算法
进程运行时,若其访问的页面不在内存而需将其调入,但内存已无空闲空间时,就需要从交换空间(磁盘中上)中找到对应的页,替换到内存中一个不经常用到的页。more选择那个内存中需要被替换的页的过程叫页面置换算法。原创 2023-10-27 09:23:26 · 97 阅读 · 0 评论 -
手写操作系统项目----进程切换
1、如果就绪队列中有多个任务才进行切换。如果有多个任务,就先将当前任务放到就绪队列的尾部(先将任务从就绪队列中移除–,然后将任务放到就绪队列尾部–2、从就绪队列中取出下一个任务。3、将中当前运行的任务改为 to 任务。4、将 to 任务的状态改为 TASK_RUNNING。5、进行TSS结构的切换。就是通过tss的选择子在GDT中找到下一个任务的tss地址,然后长跳到另一个进程的tss位置,然后硬件会自动将当前TSS中的信息加载到各个寄存器,将tss位置存到TR寄存器中。原创 2023-10-24 14:42:54 · 60 阅读 · 0 评论 -
信号量、互斥锁、计数信号量
信号量(semaphores)是一个简单的多进程共享的非负整型全局变量。一个进程修改信号量时,信号量不可被其他进程修改)操作:wait() 和 signal() 来访问。原创 2023-10-24 14:41:17 · 64 阅读 · 0 评论 -
GDT、LDT,TSS、段选择子、段描述符
在32位操作系统保护模式下,所有的内存访问都要通过GDT(全局描述符表)或者LDT(局部描述符表),GDT和LDT就是存储各种段描述符的一个表,而从GDT或LDT中找到进程对应的段描述符就需要段选择子了。原创 2023-10-24 14:39:23 · 205 阅读 · 0 评论 -
手写操作系统项目----进程初始化
1、初始化任务的TSS结构。遍历GDT表,找到一个空表项的选择子通过GDT的选择子,初始化对应的GDT表项选择相应的数据段和代码段选择子(分为内核的和用户的)页表初始化,将页目录表的地址放到CR3中初始化tss结构2、task_struct结构初始化。3、将当前任务加入task_manager_t中所有创建的进程队列中去。原创 2023-10-24 14:38:19 · 63 阅读 · 0 评论 -
内存分段、分页
每个进程都有一套自己的虚拟地址,尽管进程可能有相同的虚拟地址,但经过映射后就是不同的物理地址了,以此来实现进程隔离等功能。more一开始使用分段来进行内存管理的,但是用多了会发现,使用分段管理会产生大量的外部碎片。说到分段,肯定要讲到GDT(全局描述符表)和段选择子还有段描述符。简单来说,它们之间的关系就是GDT是一个数组,里面存着段描述符,通过段选择子(索引)找到对应的段描述符。具体的寻址方式就是虚拟地址=段选择子+段内偏移量。原创 2023-10-24 14:13:35 · 33 阅读 · 0 评论 -
不同进程对应相同的虚拟地址,在 TLB(快表) 是如何区分的?
从虚拟地址到物理地址需要进行多级的页表转换,64位操作系统一般是3~5级,如果每次都要进行这个页表转换那会带来性能上的消耗。如果我们将已知的虚拟地址和物理地址映射关系存到一个缓存表中,那么如果再次用到这个映射关系就能直接查表来找到虚拟地址对应的物理地址了,这就是TLB表,也叫快表。more但是会发生一个歧义,就是两个进程有相同的虚拟地址,但是映射到了不同的物理地址,到时候查表的时候就会发生歧义。原创 2023-10-23 23:39:35 · 370 阅读 · 0 评论 -
MIT 6.S081 FALL 2020环境搭建
在xv6-labs-2020文件夹中运行make qemu进入系统。如果出现代表成功。原创 2023-10-22 15:44:42 · 152 阅读 · 0 评论 -
GDT、LDT,TSS、段选择子、段描述符
在32位操作系统保护模式下,所有的内存访问都要通过GDT(全局描述符表)或者LDT(局部描述符表),GDT和LDT就是存储各种段描述符的一个表,而从GDT或LDT中找到进程对应的段描述符就需要段选择子了。more。原创 2023-10-22 14:25:31 · 427 阅读 · 0 评论 -
信号量、互斥锁、计数信号量
信号量(semaphores)是一个简单的多进程共享的非负整型全局变量。一个进程修改信号量时,信号量不可被其他进程修改)操作:wait() 和 signal() 来访问。原创 2023-10-22 14:07:01 · 193 阅读 · 0 评论