分类: MyOS

9 篇文章

10 | 设置工作模式与环境(上):建立计算机
好久没有更新这个专栏了(bushi) 使用命令 sudo losetup -f 自动查找空闲的设备。(替换loop0) 如果虚拟机使用的不是VirtualBox, 面是vmware,在生成hd.img后,可以使用starwindconverter工具(网上下载,WIN下运行),这个工具可以把img转换为各种格式,比如vmware的vmdk文件。然后…
08 | 锁:并发操作中,解决数据同步的四种方法
原子操作 C语言可以嵌入汇编 中断控制 原子操作只适合于单体变量 自旋锁 控制中断只能控制本地 CPU 的中断,无法控制其它 CPU 核心的中断。 必须保证读取锁变量和判断并加锁的操作是原子执行的,由硬件解决。x86 CPU 给我们提供了一个原子交换指令,xchg,它可以让寄存器里的一个值跟内存空间中的一个值做交换。 在中断处理程序访问某个自旋锁保…
07 | Cache与内存:程序放在哪儿?
CPU 大多数时间在执行相同的指令或者与此相邻的指令。这就是大名鼎鼎的程序局部性原理。 内存相比 CPU 的数据吞吐量要慢上几个数量级。再加上多核心 CPU 同时访问内存,会导致总线争用问题,数据吞吐量会进一步下降。 x86 CPU的Cache结构图 CPU 只能够到内存
06 | 虚幻与真实:程序中的地址如何转换?
虚拟地址转换物理地址 把虚拟地址空间和物理地址空间都分成同等大小的块,也称为页,按照虚拟页和物理页进行转换。根据软件配置不同,这个页的大小可以设置为 4KB、2MB、4MB、1GB,这样就进入了现代内存管理模式 ———— 分页模型。 CPU 地址转换图 MMU页表原理图 第一个位段索引顶级页目录中一个项,该项指向一个中级页目录,然后用第二个位段去索…
05 | CPU工作模式:执行程序的三种模式
实模式 一个方面是运行真实的指令,对指令的动作不作区分,直接执行指令的真实功能,另一方面是发往内存的地址是真实的,对任何地址不加限制地发往内存。 实模式寄存器 每个寄存器都是 16 位的。 实模式下访问内存 代码段是由 CS 和 IP 确定的,而栈段是由 SS 和 SP 段确定的。 实模式中断 第一种情况是,中断控制器给 CPU 发送了一个电子信号…
04 | 业界成熟的内核架构长什么样?
OMG! 这次有点颠覆我以前的认知了。我以前有点无脑吹Linux,认为Windows就是比Linux差。 Linux内核 宏内核。这意味着效率高、但是耦合也高 有五大模块:系统、进程、内存、缓存、网络。 Darwin-XNU 内核 苹果公司的产品。 Darwin是两个内核:Mach(微内核)+ BSD(巨内核) Darwin的API => M…
03 | 内核结构与设计
黑盒中有什么 内核几大的功能: 管理CPU。进程管理 管理内存 管理硬盘。文件系统 管理显卡 管理网卡 管理各种I/O设备 宏内核 应用程序调用接口 => 处理器切换特权模式,开始运行内核代码 => 内核分配一块内存 => 把首地址返回给API => API返回,在这块内存,运行用户模式下的应用程序 微内核 把实际的进程管理…
02 | 实现一个最简单的内核
大致流程 引导 汇编代码分四个部分: GRUB的多引导协议头 关掉中断,设定CPU的工作方式 初始化CPU的寄存器和C语言的运行环境 GDT_START main代码: 操作显存,实现printf 编译 sudo apt-get install nasm make all 安装 df /boot/ df /boot的结果在哪个sda?,set ro…
01 | 程序运行的过程
编译过程 先加入头文件、替代宏 => 生成汇编文件 => 二进制文件 => 链接,形成可执行文件 装载执行 五大基本组成部件: 输入设备 存储器 运算器 控制器(控制程序执行) 输出设备