首页
Python
Java
前端
数据库
Linux
Chatgpt专题
开发者工具箱
真象专题
操作系统真象还原:用户进程
第11章-用户进程 这是一个网站有所有小节的代码实现,同时也包含了Bochs等文件 11.1 为什么要有任务状态TSS Linux 任务切换未采用 Intel 的做法,而是用了一套自己的方法,只是用了 TSS 的一小部分功能。 操作系统最直接控制的就是 CPU,要想让 CPU 这颗奔腾的心永远地跳下去,首先必须把内存分成段,把内存按“内存块”访问,其次必须让代码段寄存器 cs 和指令寄存器
阅读更多...
《操作系统真象还原》第八章——实现断言函数
代码文件结构 代码实现 interrupt.h 目的:在上节开中断的实现文件里添加开关中断的函数功能 原因:由于断言函数的目的是当错误发生时打印错误信息,因而此时不应该有其他中断信号来打扰,需要关闭中断 #ifndef __KERNEL_INTERRUPT_H#define __KERNEL_INTERRUPT_H#include "stdint.h"typedef v
阅读更多...
操作系统真象还原:输入输出系统
第10章-输入输出系统 这是一个网站有所有小节的代码实现,同时也包含了Bochs等文件 10.1 同步机制–锁 10.1.1 排查GP异常,理解原子操作 线程调度工作的核心内容就是线程的上下文保护+上下文恢复 。 根本原因是访问公共资源需要多个操作,而这多个操作的执行过程不具备原子性,它被任务调度器断开了,从而让其他线程有机会破坏显存和光标寄存器这两类公共资源的现场。 10.1.2 找
阅读更多...
《操作系统真象还原》第七章——改进中断
前言 在上一节《操作系统真象还原》第七章——启用中断-CSDN博客,我们在kernel.S中定义了33个中断处理程序,并简单的对其进行了实现(打印字符串),但很显然,使用这种方式定义中断处理程序是很不方便的,一方面我们的中断处理程序都是用汇编语言写的,这增加了我们编写代码的难度,因为后期我们要对每个中断处理程序都要单独定义。另一方面,我们将中断处理程序的声明和定义放在了同一个文件中,不符合代码的
阅读更多...
操作系统真象还原:内存管理系统
第8章-内存管理系统 这是一个网站有所有小节的代码实现,同时也包含了Bochs等文件 8.1 Makefile简介 8.1.1 Makefile是什么 8.1.2 makefile基本语法 make 给咱们提供了方法,可以在命令之前加个字符’@’,这样就不会输出命令本身信息了 8.1.3 跳到目标处执行 我们可以用目标名称作为 make 的参数,采用“ make 目标名称”的方式
阅读更多...
操作系统真象还原:编写MBR主引导记录,让我们开始掌权
第2章-编写MBR主引导记录,让我们开始掌权 这是一个网站有所有小节的代码实现,同时也包含了Bochs等文件 在开机的一瞬间,也就是接电的一瞬间, CPU 的 CS: ip 寄存器被强制初始化为 0XF000: 0XFFF0。由于开机的时候处于实模式,再重复一遍加深印象,在实模式下的段基址要乘以 16,也就是左移位,于是0XF000: 0XFFF0的等效地址将是 0XFFFF0。 BIOS
阅读更多...
操作系统真象还原:一些你可能正感到迷惑的问题
第0章-一些你可能正感到迷惑的问题 这是我看操作系统真象还原这本书的一些记录: 4 软件是如何访问硬件的 硬件在输入输出上大体分为串行和并行,相应的接口也就是串行接口和并行接口。串行硬件通过串行接口与 CPU 通信,反过来也是, CPU 通过串行接口与串行设备数据传输。并行设备的访问类似,只不过是通过并行接口进行的。 访问外部硬件有两个方式: 将某个外设的内存映射到一定范围的地址空间中,
阅读更多...
《操作系统真象还原》第五章——加载内核
elf文件 elf文件介绍 一个程序文件需要有程序头来说明程序的入口地址及其相关信息,如下所示 程序是由段(如代码段、数据段)和节组成的,因此在程序头中要有一个段头表(程序头表)和节头表来描述程序中各种段及节的信息,故 程序头表:也称段头表,其内元素用于描述程序中的各个段节头表:其内元素用于描述程序中的各个节 由于程序头(段头)和节头的数量不固定,因此程序头表和节头表的大小也就不固定
阅读更多...
《操作系统真象还原》 第十四章 文件系统
配合视频学习体验更佳! a小节一部分:https://www.bilibili.com/video/BV1Uh4y1U7G6/?vd_source=701807c4f8684b13e922d0a8b116af31 a小节二部分:https://www.bilibili.com/video/BV1Lj41127Bc/?vd_source=701807c4f8684b13e922d0a8b116af3
阅读更多...
《操作系统真象还原》记录全流程——第三章01
提示: 写这篇文章的目的是只是激励自己完成这本书的linux内核项目,本文不够细致。 指路大佬:操作系统真象还原 自制操作系统_Love 6的博客-CSDN博客 指路大佬: 用《操作系统真象还原》写一个操作系统 第三章 完善MBR_哔哩哔哩_bilibili 感谢CSDN上的前辈们的热心分享。 为什么本文标了个01,因为这个代码没有自己写,只是看了一下,运行成功了。受大佬启发,明天自
阅读更多...
《操作系统真象还原》记录全流程——第二章 MBR
提示: 写这篇文章的目的是只是激励自己完成这本书的linux内核项目,本文不够细致。 指路大佬:操作系统真象还原 自制操作系统_Love 6的博客-CSDN博客 指路大佬: 用《操作系统真象还原》写一个操作系统 第二章 编写MBR主引导记录,让我们开始掌权_哔哩哔哩_bilibili 感谢CSDN上的前辈们的热心分享。 一.基本概念 CPU 的硬件电路被设计成只能运行处于内存中
阅读更多...
《操作系统真象还原》记录全流程——第一章
提示: 写这篇文章的目的是只是激励自己完成这本书的linux内核项目,本文不够细致。 指路大佬:操作系统真象还原 自制操作系统_Love 6的博客-CSDN博客 感谢CSDN上的前辈们的热心分享。 搭建环境。 1. 选择vmware虚拟机。我一开始利用virtualbox虚拟机搭建环境,但是无论是共享文件夹还是USB还是共享粘贴板,都无法传输文件,增强模式也无法改变。需要下载的那个文件
阅读更多...
《操作系统真象还原》第四章——保护模式入门
前置知识 段描述符格式 段界限:表示段边界的扩展最值 此段界限是一个单位量,其单位要么是字节,要么是4KB,具体可由G位进行指定最终段界限=此段界限值*单位实际段界限计算公式:(此段界限值+1)*(G位)-1G:粒度位,用于解释段界限的单位 为0:表示段界限的单位表示为字节为1:表示段界限的单位表示为4KBS:描述符类型 为0,表示系统段为1,表示非系统段(代码段或者数据段)type:用
阅读更多...
《操作系统真象还原》第三章——完善MBR
前置知识 显卡与显存 为了显示文字,通常需要两种硬件,一是显示器,二是显卡。 显卡的职责是为显示器提供内容,并控制显示器的显示模式和状态。显示器的职责是将那些内容以视觉可见的方式呈现在屏幕上。 除此以外,还需要知道的是 显卡未必一定是独立的插卡。为了节省使用者的成本,有的显卡会直接做在主板上,这样的显卡也有个名字,叫集成显卡。显卡控制显示器的最小单位是像素。 那么,什么是显存呢? 显
阅读更多...
《操作系统真象还原》第二章——编写MBR主引导记录
前置知识 通用寄存器介绍 如图所示,8086处理器内部有8个16位的通用寄存器,都是由16比特组成的,并分别被命名为AX、BX、CX、DX、SI、DI、BP、SP。 这8个寄存器中的前4个,即AX、BX、CX和DX,又各自可以拆分成两个8位的寄存器来使用,总共可以提供8个8位的寄存器AH、AL、BH、BL、CH、CL、DH和DL。此外,将一个16位的寄存器当成两个8位的寄存器来用时,对其中一
阅读更多...
《操作系统真象还原》第一章——ubuntu下安装并配置Bochs
下载Bochs Download bochs-2.6.8.tar.gz (Bochs x86 PC emulator) (sourceforge.net) 解压 tar -zxvf bochs-2.6.8.tar.gz 编译安装 配置 进入bochs-2.6.2文件夹,执行以下语句,其中我把bochs安装在了我的/home/minios/bochs目录下,读者可自行修改 ./conf
阅读更多...
《真象还原》读书笔记——第八章 内存管理系统(字符串操作、位图定义与实现)
8.1 makefile 8.2 实现 assert 断言 8.2.1 实现开、关中断的函数 kernel/interrupt.c 补充了获取中断状态和设置中断的函数 #include "io.h"#include "interrupt.h"#include "stdint.h"#include "global.h"#include "print.h"#define IDT_DE
阅读更多...
操作系统真象还原---系列笔记总结
闲话 最开始知道这本书是在校内论坛上,有同学通过这本书里的项目拿到大厂的ssp offer,于是就从网上订购了这本较为大部头的书,想要在简历上添加一个足够底层并且有意思的项目经历,从而帮助自己在秋招时赢得一个好的offer。 第一遍阅读时,我兢兢业业地照着书中的代码一行一行地进行抄写,时常因为一行代码抄错而debug好几天甚至通宵debug(相信有人有和我一样的困扰),但到后面的章节实在不堪其扰
阅读更多...
《操作系统真象还原》 第十六篇:实现系统调用
第十六篇:实现系统调用 第十六篇:实现系统调用系统调用实现框架增加0x80号中断描述符实现系统调用接口增加0x80号中断处理例程初始化系统调用和实现sys_getpid添加系统调用getpid 实现系统调用write实现printf 系统调用实现框架 系统调用分为两部分,一部分是暴露给用户进程的接口函数,另一部分是与之对应的内核具体实现 系统调用实现流程如下: 用中断
阅读更多...
【操作系统真象还原】01 Ubuntu环境下配置bochs和nasm
前言 开始学习《操作系统真象还原》这本书,记录一下学习过程。 配置 nasm nasm 简介 nasm 是一个年轻、开源、免费的汇编器。 安装 nasm sudo apt install nasm 配置 bochs 选择自行编译 bochs 源码来进行安装。 下载 bochs 源码 下载链接: bochs下载链接 选择下载压缩包: bochs-2.6.1.tar.gz 解压
阅读更多...
《操作系统真象还原》第十四章(1)
《操作系统真象还原》第十四章 本篇对应书籍第十四章14.1--14.4的内容 文件系统简介 本章内容有点长,故分为三个部分来写 inode、间接块索引表、文件控制块 FCB 简介 硬盘是低速设备,为了避免频繁访问,所以操作系统要等要读写的数据有足够大小的时候再进行访问 这个足够大小的数据就是块(Windows下叫簇),块由多块扇区组成,块大小是扇区的整数倍,是文件系统的读写单位,当一个
阅读更多...
操作系统真象还原第7章:中断
前言 这一章挺琐碎的,看了好几遍,好好捋一捋这一章干的事情。 这一章主要就是利用可编程中断控制器8259A来设置中断处理程序,其中32个中断是计算机自己有的(从0开始数),这一章目前只开启了时钟中断,所以这里设置的中断向量号从32开始,然后有个中断描述符表(IDT),类似与全局描述符表(GDT),中断向量号就类似与索引,从IDT中找到中断描述符,中断描述符中包括选择子(毕竟最终要找到中断处理程序
阅读更多...
操作系统真象还原实验记录之实验三十一:实现简单的shell
操作系统真象还原实验记录之实验三十一:实现简单的shell Windows中,图形界面的资源管理器和命令行窗口都是交互接口,尽管这些交互接口名字及外观各异,但他们往往统称外壳程序 shell的功能是获取用户的输入,分析输入的命令,判断内部命令还是外部命令,然后执行不同的命令策略 1.简单shell雏形 shell.c之print_prompt函数 #define MAX_ARG_NR
阅读更多...
《操作系统-真象还原》10. 输入输出系统
文章目录 同步机制 —— 锁术语介绍信号量AX、AT、PS/2 键盘图线程的阻塞与唤醒锁的实现Q:为什么 sema_down() 中要用 while ? 用锁实现终端输出从键盘获取输入键盘输入的基本原理简介8042 介绍 编写驱动程序环形输入缓冲区 同步机制 —— 锁 术语介绍 公共资源: 可以是公共内存、公共文件、公共硬件等,总之是被所有任务共享的一套资源。 临界区:
阅读更多...
《操作系统真象还原》——0.8 代码中为什么分为代码段、数据段?这和内存访问机制中的段是一回事吗...
本节书摘来自异步社区《操作系统真象还原》一书中的第0章,第0.8节,作者:郑钢著,更多章节内容可以访问云栖社区“异步社区”公众号查看 0.8 代码中为什么分为代码段、数据段?这和内存访问机制中的段是一回事吗 首先,程序不是一定要分段才能运行的,分段只是为了使程序更加优美。就像用饭盒装饭菜一样,完全可以将很多菜和米饭混合在一起,或者搅拌成一体,哈哈,但这样可能就没什么胃口啦。如果饭盒中有好多小格子
阅读更多...