随笔分类 - Operating System
摘要:异常和中断 + 保留现场: + 通过push指令将寄存器中的值都压入到栈中 + 恢复现场: + 通过pop指令将栈中的值赋值给寄存器中 进程间切换 + 保留现场: + 通过创建并初始化一个结构体(struct pt\_regs该结构体中的属性就是用来保存各个寄存器中的数据的), 将该结构体中的所有数
阅读全文
摘要:+ 进程内的切换是在内核空间中的, 如果将这个机制搬运到应用程序中则实现了线程间的切换工作 + 进程间的切换主要涉及到页目录的切换和各个寄存器值的保存和恢复 + 进程间切换需要在一块公共区域内进行, 这个区域就是内核空间( 注意: 作为的在内核空间运行就是指我们当前的堆栈指针指向的是内核的堆栈 )
阅读全文
摘要:/ define SAVE_ALL \ "cld; \n\t" "pushq %rax; \n\t" "pushq %rax; \n\t" "pushq %es, %rax; \n\t" "pushq %rax; \n\t" "pushq" ... 上面的这段汇编代码的宏定义就是在执行中断程序的时候
阅读全文
摘要:初级内存管理单元 关于内存的分页 + 以往的物理页是按照4KB进行分配和管理的, 而在Linux之后流行的就是2MB大小的物理页的分配和管理, 整个物理内存管理单元也是2MB物理页管理的 先获取基本的物理地址空间信息 + 在bootloader程序中, 已经调用了BIOS的int 15h中断将物理内
阅读全文
摘要:环境 + 32位操作系统 通过结构体的内存字节对齐了解操作系统的内存对齐 + 在32位操作系统中, CPU默认读和写数据是按照4字节的方式 + 在一个结构体中, 在编译的时候, 编译器会根据结构体中的成员变量使其内存对齐, 让他们都是符合让CPU一次读取的数据而不用再读取一次数据, 减少了读取的次数
阅读全文
摘要:系统异常处理 CPU如果调用系统异常处理程序 需要的数据结构 + IDT\_Table: 中断向量表, 在中断向量表中的每一项都是一个中断描述符(中断门或者陷阱门), 一个中断描述符中的几位是段选择符 + GDT或者LDT 处理过程(没有特权变化的情况),在处理中断和异常的时候, 需要 处理程序,
阅读全文
摘要:只描述在IA 32e模式下的字符显示 + 首先要有一个字符库(包含这每一个字符的像素信息, 空白的地方时0x00, 一个字符一个8x16的矩阵) + 每一个像素点就是一个int类型4bytes大小的整数, 该整数的每一个字节都有特定的属性用来配置显示出来的字符的样式 + 要想实现, 需要在定义一个二
阅读全文
摘要:功能 + 定义data段和text段 + 重新手动初始化gdt表, idt表, tss表结构 + 初始化页表和页目录 页目录的数据放在一个页表中 + 在页目录中, 其实地址为0x1000, 初始化页目录, 一个页目录占用的页表的剩余数据值使用0来填充, 一个页表的大小分为(2MB, 4MB, 8MB
阅读全文
摘要:Intel架构下 + 凡是在代码中书写的内存地址都是逻辑地址, 也就是采用基地址:偏移量, 我们能够直接看到的也是逻辑地址, 通过左移等操作可以计算出对应的物理地址(在实模式下逻辑地址与物理地址没有中间层所以是可以的, 但是在保护模式则是行不通的, 再说) 实模式下 + 逻辑地址通过左移等操作可以计
阅读全文
摘要:在实模式下开启4GB的物理内存地址寻址(称之为Big Real Mode) + 通过A20快速门(Fast Gate)修改0x90端口的数据, 对其进行置位(类似于打开一个开关), 开启 + 使用CLI汇编指令关闭外部中断 + 使用lgdt加载保护模式需要的系统数据结构 + 置位cr0寄存器的值开启
阅读全文
摘要:boot and loader boot 程序的所有作用 + 清屏 + 将光标移到屏幕左上角 + 显示 Start Boot 提示信息 + 加载 loader 程序的代码到 0x10000 物理内存地址 + 将CPU的段地址设置为 0x1000, 偏移量为 0x0000 boot 程序(内置 FAT
阅读全文
摘要:安装包 + bochs 2.6.8 平台 + centos6 前提依赖 + yum groupinstall y "Server Platform Development" "Development Tools" + yum install kernel headers kernel devel q
阅读全文
摘要:操作系统 操作系统运行程序 hello world程序的执行过程 1. 用户通知操作系统执行hello world应用程序 2. 操作系统找到hello world程序的相关信息, 程序的相关信息(ELF文件信息, 不包括.text, .data, .bss, stack segment, heap
阅读全文
摘要:BIOS 1. 除了主板上有BIOS之外, 在显卡, SCSI控制卡, 磁盘附加卡或者高级网卡也都有自己的BIOS芯片, 这些设计在主板上负责整个主板运行的BIOS, 称之为System BIOS或者Mainboard BIOS; 显卡上的BIOS称之为Video BIOS, SCSI控制卡上的BI
阅读全文
摘要:Linux 操作系统必须完成的两个主要目的 + 与硬件部分交互, 为包含在硬件平台上的所有底层可编程部件提供服务 + 为运行在计算机系统上的应用程序(即所谓的用户空间)提供执行环境 一些操作系统运行所有的用户程序都直接与硬件部分进行交互, 比如典型的MS DOS。而类Unix操作系统把与计算机物理组
阅读全文
摘要:BIOS注意点 1. BIOS是通过汇编或者C语言写的, 要想调动BIOS程序提供的函数, 需要CPU运行在16位模式下, 而我们的操作系统一般是在32位或者64位运行, 所以在操作系统的启动盘中, 我们需要在16位模式下调用BIOS程序的函数通过BIOS获取一些硬件的参数信息, 接着让CPU进入到
阅读全文
摘要:虚拟机 关于内存 CPU通过总线来管理内存, 总线分为3种 控制总线: 指定对内存进行的是读还是写操作 地址总线: 用来表示内存中的地址, 一根地址电线对应一个0|1bit, 如果有4根线, 则CPU对内存的操作就是00, 01, 10, 11这四个地址, 如果有32根, 则CPU对内存的操作就是4
阅读全文