操作系统真象还原
文章平均质量分 83
努力学习的大康
这个作者很懒,什么都没留下…
展开
-
操作系统真象还原 --- 10.输入输出系统?(同步机制---锁)
上一节的最后报错了!!!上一章最后程序出现报错的原因是对临界区资源(光标寄存器)的争夺导致的。如何解决这个问题?信号量机制、锁机制1.重要概念**公共资源:**公共内存、公共文件、公共硬件等,总之是被所有任务共享的一套资源**临界区代码:**程序中那些访问公共资源的指令代码**互斥:**公共资源只能被一个任务独享,临界区代码只能被一个任务使用。**竞争条件:**多个任务以非互斥的方式同时进入临界区,对公共资源的访问是以竞争方式并行进行的。2.信号量与锁机制信号量解决竞争条件的方法,信号量原创 2021-08-03 00:37:03 · 237 阅读 · 0 评论 -
操作系统真象还原 --- 9. 线程
还是先来问自己几个问题什么是线程?什么是进程?用什么管理线程/进程?如何进程线程调度(切换)?这个问题是我最感兴趣的简单的问题就简单回答什么是线程? 线程是一套机制,此机制可以为一般的代码创造它所依赖的上下文环境,从而让代码块具有独立性,能够单独获得处理器资源。什么是进程? 进程是线程+资源用什么标识进程? PCB:Process Control Block,程序控制块,用来记录此进程的相关信息,比如进程状态、PID、优先级等1.线程处理相关数据结构中断栈:中断发生时用来保存程序的上原创 2021-07-26 22:03:51 · 411 阅读 · 2 评论 -
操作系统真象还原 --- 8.内存管理系统
这一章主要包括:makefile语法,方便后面编译文件ASSERT断言Bitmap位图实现内存管理系统是实现(最复杂的部分)一、makefile基本语法目标文件是指此规则下想要生成的文件,可以是.o结尾的目标文件,也可以是可执行文件,也可以是伪目标依赖文件是指要生成此规则中的目标文件,需要哪些文件命令是指要执行的动作,shell命令。每一条命令单独占用一行目标文件:依赖文件[Tab]命令文件的3个时间atime:access time,每次文件被访问都会更新ctime原创 2021-07-21 19:37:43 · 473 阅读 · 1 评论 -
操作系统真象还原 --- 7.中断
先给自己提几个问题。中断是什么?中断就是发生了某些事情,计算机暂停正在执行的程序,去执行处理这件事情为什么需要中断?因为发生了更紧急需要处理的事情,所以需要中断暂停。相对前面实现的操作系统最终会到一个while循环中,现在需要实现中断突破while循环。所以之后的系统就是由中断驱动的。如何实现中断?后面再看看怎么实现。一、中断分类中断从触发的地方分为:外部中断和内部中断。外部中断:cpu外部的中断,一般为硬件产生,也称硬件中断内部中断:软中断和异常。软中断:软件主动发起的中断。int原创 2021-07-21 16:17:57 · 414 阅读 · 0 评论 -
操作系统真象还原 --- 6.完善内核(内联汇编)
虽然是写完善内核,但是主要内容是内联汇编的介绍为后面做铺垫一、内联汇编AT&T1.汇编风格寄存器:寄存器前有前缀%操作数顺序:源操作数在左,目的操作数在右操作数大小:b表示8位,w表示16位,l表示32位。如movl %eax,var立即数:有前缀$,$6表示立即数6远跳转:ljmp segment:segment:segment:offset远调用:lcall segment:segment:segment:offset远返回:lret $n2.内存寻址格式:segreg原创 2021-07-17 21:10:14 · 266 阅读 · 0 评论 -
操作系统真象还原 --- 5.保护模式进阶,向内核迈进
一、获取物理内存容量利用BIOS中断的0x15实现获取物理内存容量EAX=0xE820 遍历主机上全部内存AX=0xE801 分别检测低15MB和16MB~4GB的内存,最大支持4GBAH=0x88 最多检测出64MB内存,实际内存超过此容量也返回64MB二、启用内存分页机制分页机制寻址原理二级页表模式:比如虚拟地址:0x1234567取虚拟地址高10位,0x4*4+页目录表(PDE)得到页表的物理地址取虚拟地址中间10位,0x234*4+页表(PTE)得到页地址取虚拟地址最后12原创 2021-07-17 18:10:30 · 416 阅读 · 1 评论 -
操作系统真象还原 --- 4.保护模式入门
一、实模式的缺点安全问题实模式下操作系统很应用程序都是特权级用户程序引用地址为真实物理地址用户程序可以修改段机制,任意读和写内容使用问题访问超过64KB内存需要切换段基址一次只能运行一个程序共20条地址先,最大可用内存为1MB二、段描述符段描述符:大小为64bit,描述了内存段的起始基址、范围、安全属性、是否被访问、是否被加载等属性段基址:32位,表示段的起始地址,一般为全0段界限:20位,根据G位表示段的大小。G位为0,表示段界限单位为字节最大表示2的20次方乘1字节=1原创 2021-07-07 20:36:59 · 3520 阅读 · 0 评论 -
操作系统真象还原 --- 3.完善MBR
一、io端口通信系统通过in和out指令和各种硬件端口进行通信。in指令从端口中读取数据,dx用于设置端口号in al,dx;al=端口(dx)in ax,dx;ax=端口(dx)out指令用于往端口写数据out dx,al;out dx,ax;out 立即数,alout 立即数,ax二、显存地址分布可以参考第二章的内容可以知道显存的分布**文本显示模式:**每个字符用两个字节表示文本内容和显示方式。通过在0xB800处写入ASCII码和显示方式能够直接在显示器上显示字符原创 2021-07-07 15:27:43 · 478 阅读 · 0 评论 -
操作系统真象还原 --- 2.编写MBR主引导记录,让我们开始掌权
一、实模式下的内存布局一直到第4章之前程序都是运行在实模式下,所以需要先了解实模式下的内存布局。实模式下只会使用cpu的20条地址线,所以只能访问和使用到1MB的地址空间。用一张图表示一、第一棒 BIOS主机通电后第一个运行的软件就是BIOS,由主板加载BIOS全称Base Input & Output System,即基本输入输出系统。bios功能:检查内存、显卡等外设信息,初始化硬件,在0x000~0x3ff建立数据结构,中断向量表IVT并填写中断例程。最后一步校验启动盘中位于0盘0原创 2021-07-07 10:09:07 · 297 阅读 · 0 评论 -
操作系统真象还原 --- 1.部署工作环境
最近稍微空闲了一点点,想把以前搞操作系统的梦实现一下,所以按照《操作系统真象还原》进行学习。1.配置环境我使用的是Vmware虚拟机和deepin系统,为了减少不必要的麻烦建议使用和作者一样的软件版本bochs2.6.2(试过直接apt安装但是bochsrc.disk中的一些配置已经发生改变,需要自己查阅资料进行改进)下载&解压下载 2.6.2版本https://telkomuniversity.dl.sourceforge.net/project/bochs/bochs/2.6.2/bo原创 2021-07-06 23:40:55 · 445 阅读 · 1 评论