随笔分类 - 操作系统
摘要:背景 好久没有写博客了,有两个原因。一是工作强度有点大,一时间难以适应,一有空闲时间就像休息睡觉 : ( ; 二是确实不知道写什么,工作内容基本以业务为主,也属于保密内容,没啥好写的。现在稍微有点时间来回顾一下了,个人对动态链接相关的认知还比较浅显,所以写一篇博客回顾并加深映像,也方便后续的深入学习
阅读全文
摘要:# 概览 mmap是Linux中使用频率非常高的一个系统调用: - 程序运行前,mmap会先将动态链接库映射到进程的地址空间。 - 用户调用malloc,如果分配的内存大小大于阈值,则直接使用mmap分配 - 使用POSIX的有名信号量时,自动调用mmap将共享文件(其中包括futex锁)映射至进程
阅读全文
摘要:# 从std::mutex到futex机制 我原本出发点是C++ std::mutex的实现原理,但是经过一番查阅,发现C++ std::mutex是对glibc-nptl库pthread_mutex的封装;而nptl库在用户态完成了futex机制的一部分;最后在以linux为内核的操作系统中,又提
阅读全文
摘要:# 概览 这篇文章从内核、glibc库源码的角度整理一下Linux的进程间通信机制。 众所周知,Linux操作系统的通信机制有以下几种: - 信号 - 管道(分为匿名管道和有名管道) - 信号量 - 共享内存 - 消息队列 - Socket 本文主要内容包括其中前五个。 **其中信号量、共享内存、消
阅读全文
摘要:## 本文结构 前面4节先展开讲讲linux内核2.6.24版本的调度器实现,其中包括CFS调度器。 然后对linux历史上出现过的O(1)和O(n)调度器做一个比较,看看它们的优缺点。 ## 优先级和调度策略 linux中进程优先级在用户试图和内核视图两个方面有着不同表达。 在用户层面,对普通进程
阅读全文
摘要:## 高速缓存的基本原理 > 参考资料: > > - CSAPP 相关章节 > - [Gallery of Processor Cache Effects (igoro.com)](http://igoro.com/archive/gallery-of-processor-cache-effects
阅读全文
摘要:# JOS中的锁 JOS中只有自旋锁,用于大内核锁的实现: ~~~c static inline void lock_kernel(void) { spin_lock(&kernel_lock); } ~~~ 自旋锁结构如下: ~~~c struct spinlock { unsigned lock
阅读全文
摘要:MIT6.828_JOS IPC(进程间通信) 进程间通信是微内核的重要组成部分,是JOS文件系统的前提,因此先来看一下JOS的IPC实现。 两个进程间通信的消息可以只是一个32位的整数,也可以使用一整个页作为消息载体。无论哪一种,都需要我们在 struct Env中额外添加下面这几个属性: str
阅读全文
摘要:# MIT6.828_JOS进程创建 有关进程的内容有很多,本文先理清JOS进程相关的数据结构,JOS怎样创建进程,JOS的第一个进程做了写什么。 ## 进程相关数据结构 与xv6系统`struct proc`结构类似,JOS系统有一个`struct Env`作为进程控制块(PCB)。 顺带一提,l
阅读全文
摘要:# MIT6.828_JOS中断与系统调用 ## 异常、中断、系统调用 异常和中断都是指"受保护的控制转移方法",都会使处理器从用户态转移为内核态 按照intel的定义,异常和中断的区别为: 中断是用来处理CPU外部的硬件请求(比如键盘、鼠标等),异常则用来处理CPU在执行过程中自己遇到的错误(比如
阅读全文
摘要:# MIT6.828_JOS内存管理 内存管理有两个部分 - `物理内存`分配器, 以 4KB为一个页面进行管理 - 虚拟内存的管理 JOS`机器实际物理内存的大小是128MB`,JOS以4KB一页将其分为 32768个物理页。 ![image-20221020200629806](https://
阅读全文
摘要:# JOS启动流程 首先做个总览,JOS的启动流程主要分三步: 1. BIOS - 检查内存、外设、构建临时IDT等 - 将启动盘中的0号扇区的512字节读入到物理内存的0x7c00处,这段内存就是`bootloader` - 使用jmp指令将控制权交移至bootloader 2. bootload
阅读全文