计算机系统
操作系统
桀溺。
这个作者很懒,什么都没留下…
展开
-
文件系统的内部结构
硬盘实际上是由一些磁性盘片组成的计算机系统的一个设备, 文件系统是对该设备的一种多层次的抽象第一层抽象: 从磁盘到分区一个磁盘能够存储大量数据. 可被划分成分区, 以便在一个大的实体内创建独立的区域, 每个分区都可以看作是一个独立的磁盘第二层抽象: 从磁盘到块序列(此处假设你了解机械硬盘的形状)为每个磁盘块分配连续的编号以一个磁盘接着一个磁盘从上到下给所有的块编号, 或者以一个磁道接着一个磁道的从外向里给所有的块编号, 一个磁盘扇区编号的系统是的我们可以把磁盘视做一系列块地组合第三层抽象: 从块序原创 2020-12-28 15:15:31 · 1160 阅读 · 0 评论 -
CPU原生支持的任务切换方式
CPU 厂商原本计划的一种任务切换方法,并不是咱们项目中任务切换的方法, 未采用的原因是此方法效率不高,现代操作系统很少用这种方法切换任务为了支持多任务, CPU 厂商提供了 LDT TSS 这两种原生支持,他们要求为每个任务分别配一个 LDT TSS (这由咱们操作系统程序员来构建), LDT 中保存的是任务自己的实体资源,也就是数据和代码,TSS 中保存的是任务的上下文状态及三种特权级的栈指针、 I/O 位图等信息。既然 LDT TSS 用来表示任务,那么任务切换就是换这两个结构:将新任务对应的 LD原创 2020-11-27 22:28:14 · 601 阅读 · 3 评论 -
实现线程的两种方式
起初,操作系统中只有进程的概念,人们那时候对并发没有太高的要求。后来有些人想提高程序的井发,这才有了线程这一新生事物。任何新生事物在诞生之初都会被小心谨慎地对待,人们提出线程的需求时,操作系统也抱着“围观”的心态不敢轻举妄动,只能坐看其发展,真正待需求明朗时才会在操作系统一级来实现。想想也是,如果稍微有个新需求就往内核里面塞,内核开发成本很高不说,至少内核中肯定有很多“不切实际”的功能,所以人们还是能够体谅操作系统研发厂商的.为此,既然不能说服操作系统支持线程,人们只好在用户进程内想办法。所以,线程的实现原创 2020-11-17 13:45:48 · 971 阅读 · 0 评论 -
门描述符
门,顾名思义,是通往某处的入口。在计算机中,用门来表示一段程序的入口。拿它和段描述符对比一下就容易理解了,段描述符中描述的是一片内存区域,而门描述符中描述的是一段代码。 门描述符中的各属性位与段描述符中的属性意义相同,大伙可以参考全局描述符表部分的介绍。下面简要说下这几种门描述符,这里咱们只讨论 32 位保护模式。任务门任务门和任务状态段TSS是 Intel 处理器在硬件一级提供的任务切换机制,所以任务门需要和 TSS 配合在一起使用,在任务门中记录的是 TSS 选择子,偏移量未使用。原创 2020-11-04 12:24:22 · 929 阅读 · 0 评论 -
虚拟内存(分页机制)
以前的一片文章讲了为什么会出现分页, 是为了解决什么问题?首先澄清一个概念.其实虚拟内存和分页是两件事, 分页是指将把地址空间人为地等分成固定大小的页, 这个页的粒度比段更小, 以方便在外存与内存换入换出, 而虚拟内存是为了解决线性地址与物理地址之间的相等关系, 因为如果这样, 线性地址是由编译器翻译出来的, 它本身是连续的, 而物理地址也必须连续才行, 但物理内存往往在运行时间长了之后, 成为各个碎片, 这就导致物理地址很难成为连续的(所以平时使用完电脑要记得关机), 所以要建立一种线性地址与物理地址之原创 2020-09-30 17:20:05 · 2042 阅读 · 0 评论 -
进入保护模式
设置全局描述符表打开A20地址线在实模式采用段基址:段内偏移地址的形式, 有20根地址线,最大寻址空间1MB, 但这种寻址方式可以寻址范围0x0000: 0x0000 ~ 0xffff: 0xffff, 即0 ~ 0x10ffef, 而20位地址线的访问空间是0 ~ 0xfffff, 即1MB范围, 所以当寄存器的表示范围超过地址线所能表示的范围后, 会发生地址会绕, 即或舍弃高位的溢出, 比如, 0x10000寻址到0x0000所表示的内存地址.CPU发展到了80286后, 虽然地址总线从原来的2.原创 2020-09-29 22:58:49 · 237 阅读 · 0 评论 -
全局描述符表
首先,实模式下存在一些问题:实模式的用户程序可以破坏存储代码的内存区域,所以要添加个内存段类型属性来阻止这种行为实模式下的用户程序和操作系统是同一级别的,所以要添加个特权级属性来区分用户程序和操作系统的地位其次, 是一些访问内存段的必要属性条件内存段是一片内存区域,访问内存就要提供段基址,所以要有段基址属性为了限制程序访问内存地范围,还要对大小进行约束,所以要有段界限属性...原创 2020-09-25 13:15:02 · 941 阅读 · 0 评论 -
电脑开机过程
电脑开机过程通电,CPU运行。进入BIOS环境,BIOS是ROM中写死的,是开机后,运行的第一个程序。BIOS检查主板有无损坏情况,如果一切都好,根据设置启动引导顺序,找到相应的磁盘。将操作系统加载进内存,开始运行。双系统就是在磁盘的第一个扇区中写入了grub,引导系统选择。BIOS它是一组固化到计算机内主板上一个ROM芯片上的程序,它保存着计算机最重要的基本输入输出的程序、开机后...原创 2019-07-28 23:41:35 · 434 阅读 · 0 评论 -
C语言内联汇编
开门见山,汇编语言和C语言混合编程可分为两大类:单独的汇编代码文件与单独的C语言分别编译成目标文件后,一起链接成可执性文件在C语言中嵌入汇编代码,直接编译生成可执行程序今天主要介绍第二种内联汇编称为inline assembly, GCC支持在C代码中直接嵌入汇编代码,所以称为GCC inline assembly.内联汇编按格式分为两大类,一类是最简单的基本内联汇编,另一类是复杂一些的扩展内联汇编.(内联汇编中所用的汇编语言是AT&T,并不是咋们熟悉的Intel语法,GCC只支持它,原创 2020-09-06 12:31:56 · 356 阅读 · 0 评论 -
开源的Bochs虚拟机软件
如果你准备写一个操作系统或者只是体验一下linux的开机流程,写一个简单的bootloader,你可能会需要一个软件–Bochs, Bochs是一个开源软件,是你唯一可选择的调试器.开源意味着你不需要花钱购买就可以使用它. 它用软件来模拟处理器取指令和执行指令的过程,以及整个计算机硬件.当它开始运行时,就直接模拟计算机的启动过程.正是因为如此,它才有可能做一些调试工作.很重要的一点,它本身就是一个虚拟机,类似于Virtualbox.因此,它也很容易就让你单步跟踪硬盘的控制权,查看寄存器的内容和状态.Boc原创 2020-08-03 15:03:06 · 443 阅读 · 0 评论 -
为什么要字节对齐?
结构体中数据成员对齐规则:结构体(struct)或联合(union) 的数据成员,第一个数据成员放在offset为0的地方,以后每个数据成员存储的起始位置要从该成员的大小或该成员的子成员大小(只要该成员有子成员)的整数倍开始 .结构体作为成员:如果一个结构体里有某些结构体成员,则结构体成员要从内部最大元素大小的整数倍地址开始存储。收尾工作:结构体的总大小,也就是sizeof的结果,必须是内...原创 2020-03-17 21:41:16 · 276 阅读 · 0 评论 -
8086微处理器的寄存器组织
8086CPU内部有14个16位的寄存器, 按功能可以分为8个通用寄存器, 4个段寄存器和两个控制寄存器.通用寄存器通用寄存器可以分为两类: 数据寄存器(AX, BX, CX, DX)和地址寄存器/变址寄存器(SI, DI, SP, BP)8086CPU有4个16位数据寄存器:累加器AX: 最常用的寄存器,许多操作可以在AX中完成, 而且有一些操作只能在AX中完成, 例如乘法和除法操作...原创 2020-03-01 02:13:20 · 3008 阅读 · 0 评论 -
8086CPU结构与功能
微处理器的外部结构微处理器的外部结构如下图所示.8086CPU片有40个管脚,微处理器通过这些引脚与外部的逻辑部件连接,完成信息的交换.CPU的这些引脚称为微处理器级的总线功能:与存储器之间交换信息(指令及数据)与I/O设备之间交换信息能输入和输出必要的信号总线是用于连接CPU与其他部件的一组连线,总线从功能上可分为三种:数据总线DB:传送信息, 16根地址总线AB:传送地址...原创 2020-03-01 01:33:59 · 5390 阅读 · 0 评论 -
Linux中的异常和中断处理以及系统调用
Linux中的异常和中断处理Linux利用陷阱门来处理异常,利用中断门来处理中断。异常和中断对应处理程序都属于内核代码段,所以,所有中断门和陷阱门的段选择符(0x60)都指向 GDT 中的“内核代码段”描述符。通过中断门进入到一个中断服务程序时,CPU 会清除 EFLAGS 寄存器中的 IF 标志,即关中断;通过陷阱门进入一个异常处理程序时,CPU 不会修改 IF 标志。也就是说,外部中断...原创 2019-12-01 22:22:23 · 888 阅读 · 0 评论 -
异常和中断处理
IA-32中异常和中断的处理引导程序被读到内存后,开始执行引导程序,以装入操作系统内核,并对GDT,IDT等进行初始化,系统启动后,进入保护模式。IA-32中,每条指令执行后,下条指令的逻辑地址(虚拟地址)由CS和EIP指示 实地址模式下:指令地址=cs<<4+IP每条指令执行过程中,CPU会根据执行情况判定是否发生了某种内部异常事件,并在某条指令执行结束时判定是否发生了外部中...原创 2019-12-01 21:14:57 · 1079 阅读 · 0 评论 -
中断的基本概念
异常和中断概念: 程序执行过程中CPU会遇到一些特殊情况,是正在执行的程序被“中断”,cpu中止原来正在执行的程序,转到处理异常情况或特殊事件的程序去执行,结束后再返回到原被中止的程序处(断点)继续执行程序执行被"中断“的事件(在硬件层面)有两类内部异常:在CPU内部发生的意外事件或特殊事件外部中断:在CPU外部发生的特殊事件,通过“中断请求“信号向CPU请求处理。异常和...原创 2019-12-01 15:08:06 · 10039 阅读 · 0 评论