摘要:
一句话描述 threadLocal,是线程本地变量,每个thread实例持有一个ThreadLocalMap类型的threadLocals属性,map的key为ThreadLocal变量,value为调用threadLocal.set()的值,也就是真正有用的数据。 基础 简单例子 package 阅读全文
摘要:
第十三章 编写硬盘驱动程序 硬盘及分区表 创建硬盘分区表 文件系统并不仅仅是文件存储的静态数据结构,还有一套操作的方法。 分区:由多个连续的柱面组成。 分区表:在MBR中的64位固定大小的表,每个表项是分区的描述信息,大小16字节,所以共有4个表项,即有4个分区。 4个分区:是硬盘最初设计的遗留,最 阅读全文
摘要:
第十二章 进一步完善内核 主要是系统调用的实现,中断的笔记中已经有记录 阅读全文
摘要:
第十一章 用户进程 为什么要有任务状态段TSS Linux 任务切换未采用 Intel 的做法,而是用了一套自己的方法,只用了 TSS 小部分功能。 现在操作系统采用的任务切换方式 CPU提供了0、1、2、3共4个特权级,linux只用了内核特权级0和用户特权级3。 有一件工作必须且只能用 TSS 阅读全文
摘要:
第十章 输入输出系统 同步机制-锁 找出代码中的临界区、互斥、竞争条件 临界区:多个任务访问同一资源时,每个任务中访问资源的指令代码被称为临界区,临界区是代码,并不是资源。 互斥:也可称为排他,是指某一时刻公共资源只能被一个任务独享。 竞争条件:指多个任务以非互斥的方式同时进入临界区,大家对公共资源 阅读全文
摘要:
第九章 线程 实现内核线程 执行流 一个处理器任意时刻只能执行一个任务,真正的并行指多个处理器同时工作,并行能力取决于其物理处理器的数量。 任务:完成一个任务,可能需要用户进程部分和内核部分共同完成。 调度器:在内核中维护一个任务表(进程表或调度表),按照一定的算法,从任务表中取一个任务,把该任务放 阅读全文
摘要:
第八章 内存管理系统 位图bitmap及其函数的实现 位图简介 位图: bitmap,常用的数据结构,广泛用于资源管理,大量资源的管理可以采用位图的方式。redis也有bitmap。 位(bit)是最小的单位,节省空间,可以用位来映射(map)一个被管理的资源单位,0表示此资源单位未使用,1表示使用 阅读全文
摘要:
第七章 中断 操作系统是中断驱动 操作系统是死循环,操作系统是中断驱动 中断分类 外部中断 来自cpu内部的中断。 外部中断按照是否导致宕机,可以划分为可屏蔽中断,不可屏蔽中断。 INTR收到的中断不影响系统运行,可以稍候处理,甚至可以屏蔽中断,不处理。可通过eflags寄存器中的IF位屏蔽中断。 阅读全文
摘要:
第六章 完善内核 函数调用约定简介 函数约定主要包括: 参数的传递方式,放在寄存器还是栈中? 如果参数放在栈中,调用完后,栈中的参数由谁来清理? 参数的传递顺序,从右往左还是从左往右? 返回值,放在哪里? 调用函数时,寄存器环境由谁保存,调用者还是被调用者? cdecl调用约定: cdel(c de 阅读全文
摘要:
第五章 保护模式进阶,向内核迈进 启动内存分页机制 为什么分页 分段的缺点 内存换出时,只能换出整个段。IO较高,新进程缺少的内存可能很小。 段内存是基于段基址+偏移来寻址,是线性的,进程需要连续的内存。如果内存整体剩余满足,但是不连续,就无法加载该进程。 一级页表 兼容分段机制,分页机制建立在分段 阅读全文