操作系统真象还原
文章平均质量分 89
swings_ss
C++后台、计算机视觉
展开
-
操作系统真象还原第十五章
15.1 fork 的原理与实现15.1.1 什么是 forkfork 函数原型是 pid_t fork(void),返回值是数字,该数字有可能是子进程的 pid,有可能是 0,也有可能是 -1。15.1.2 fork 的实现fork 要分两步,先复制进程资源,再跳进去执行。进程的资源:进程的 pcb,即 task_struct程序体,即代码段数据段等用户栈内核栈,进入内核态时,需要保存上下文环境虚拟地址池,每个进程拥有独立的内存空间,其虚拟地址是用虚拟地址池来管理的页表,让进程拥原创 2021-02-16 21:07:14 · 521 阅读 · 1 评论 -
操作系统真象还原第十四章
14.1 文件系统概念简介14.1.1 inode、间接块索引表、文件控制块 FCB 简介块是文件系统的读写单位,文件至少要占据一个块。在 Windows 中,快被称为簇,有 4KB、32KB 等。块大小是扇区大小的整数倍。FAT 文件系统将文件所有的块用链式结构来组织。优点是有效地利用了存储空间,缺点是当访问文件中的某个块时,必须要从头开始遍历块结点。由于效率低,微软后来退出 NTFS 文件系统。UNIX 文件系统使用 inode 索引结构来组织文件。采用索引结构的文件系统,文件中的快依然可以分原创 2021-02-10 11:56:14 · 298 阅读 · 0 评论 -
操作系统真象还原第十三章
13.1 磁盘及分区表13.1.2 创建磁盘分区表文件系统是运行在操作系统中的软件模块,是操作系统提供的一套管理磁盘文件读写的方法和数据组织、存储形式。文件系统的管理对象是文件,管辖范围是分区,因此它建立在分区的基础上,每个分区都可以有不同的文件系统。分区是逻辑上划分磁盘空间的方式,归根结底是人为地将硬盘上的柱面扇区划分成不同的分组,每个分组都是单独的分区。各分区都有“描述符”来描述分区本身所在硬盘上的起止界限等信息,在硬盘的 MBR 中1有个 64 字节“固定大小”的数据结构,这就是著名的分区表原创 2021-01-16 17:37:32 · 418 阅读 · 0 评论 -
操作系统真象还原第十二章
12.1 Linux 系统调用浅析系统调用就是让用户进程申请操作系统的帮助,让操作系统帮其完成某项工作,相当于用户进程调用了操作系统的功能。Linux 系统调用是用中断门来实现的,只占用一个中断向量号 0x80。在系统调用之前,Linux 在寄存器 eax 中写入子功能号,中断处理例程会根据 eax 的值来判断用户进程申请哪种系统调用。12.2 系统调用的实现12.2.1 系统调用实现框架一个系统功能调用分为两部分,一部分是暴露给用户进程的接口函数,它属于用户空间,此部分只是用户进程使用系统调用的原创 2021-01-10 21:58:03 · 243 阅读 · 0 评论 -
操作系统真象还原第十一章
11.1 为什么要有任务状态段 TSS11.1.1 多任务的起源TSS 是 Task State Segment 的缩写,即任务状态段。硬件厂商提供的多任务硬件解决方案主要是 LDT 和 TSS。11.1.3 TSS 的作用Intel 的建议是给每个任务关联一个任务状态段,这就是 TSS,用它来表示任务。TSS 是由程序员“提供”的,由 CPU 来维护。CPU 中有一个专门存储 TSS 信息的寄存器,这就是 TR 寄存器,它始终指向当前正在运行的任务。TSS 和其它段一样,本质上是一片存储数原创 2020-12-24 22:53:24 · 412 阅读 · 0 评论 -
操作系统真象还原第十章
10.1 同步机制–锁10.1.1 排查 GP 异常,理解原子操作线程调度工作的核心内容就是线程的上下文保护+上下文恢复。10.1.2 找出代码中的临界区、互斥、竞争条件公共资源:可以是公共内存、公共文件、公共硬件等,总之是被所有任务共享的一套资源临界区:访问公共资源的指令代码互斥:某一时刻公共资源只能被 1 个任务独享竞争条件:多个任务以非互斥的方式同时进入临界区关中断是实现互斥最简单的方法。10.1.3 信号量同步一般是指合作单位之间为协作完成某项工作而共同遵原创 2020-12-06 23:41:00 · 328 阅读 · 1 评论 -
操作系统真象还原第九章
9.1 实现内核线程9.1.1 执行流多任务操作系统采用了一种称为多道程序设计的方式,使处理器在所有任务之间来回切换。任务调度器是操作系统中用于把任务轮流调度上处理器运行的一个软件模块。调度器在内核中维护一个任务表(也称进程表、线程表或调度表),然后按照一定的算法,从任务表中选择一个任务,然后把该任务放到处理器上运行,当任务运行的时间片到期后,再从任务表中找另外一个任务放到处理器上运行。执行流是独立的,它的独立性体现在每个执行流都有自己的栈、一套自己的寄存器映像和内存资源。9.1.2 线程到底是原创 2020-11-30 22:09:45 · 300 阅读 · 0 评论 -
操作系统真象还原第八章
8.1 makefile 简介8.1.1 makefile 是什么make 命令可以自动找出变更的文件,并根据依赖关系,找出受变更文件影响的其它相关文件,然后对这些文件按照规则进行单独处理。makefile 文件是 make 程序的搭档,它们发现某个文件更新后,只编译该文件和受该文件影响的相关文件,其它不受影响的文件不重新编译,从而提高了编译效率。8.1.4 伪目标make 规定,当规则中不存在依赖文件时,这个目标文件名就称为伪目标。为了避免伪目标和真实目标文件同名的情况,可以用关键字“.PHO原创 2020-11-15 19:42:24 · 292 阅读 · 0 评论 -
操作系统真象还原第七章
7.1 中断是什么,为什么要有中断在 Linux 中文件 “/proc/进程pid/stat” 第一行的第 39 个字段是 “processor id”,它表示进程本次执行时最后所在的 CPU 编号。还可以用命令 ps -eo pid, args, psr | grep <pid>。7.2 操作系统是中断驱动的7.3 中断分类把中断按事件来源分类,来自 CPU 外部的中断就称为外部中断,来自 CPU 内部的中断称为内部中断。外部中断按是否导致宕机来划分,可分为可屏蔽中断和不可屏蔽中断两原创 2020-11-10 00:34:26 · 478 阅读 · 0 评论 -
操作系统真象还原第六章
6.1 函数调用约定简介C 语言遵循的调用约定是 cdecl:调用者将所有参数从右到左入栈调用者清理参数所占的栈空间6.2 汇编语言和 C 语言混合编程6.2.1 浅析 C 库函数与系统调用汇编语言和 C 语言混合编程可分为两大类:单独的汇编代码文件与单独的 C 语言文件分别编译成目标文件后,一起链接成可执行程序在 C 语言中嵌入汇编代码,直接编译生成可执行程序系统调用是 Linux 内核提供的一套子程序。系统调用的入口只有一个,即 0x80 号中断,子功能号在寄存器 eax原创 2020-11-01 22:56:36 · 512 阅读 · 1 评论 -
操作系统真象还原第五章
5.1 获取物理内存容量5.1.1 学习 Linux 获取内存的方法Linux 2.6 内核中用 detect_memory 函数获取内存容量,其本质上是通过调用 BIOS 中断 0x15 实现的,分别是 BIOS 中断 0x15 的 3 个子功能,子功能号要放在寄存器 EAX 或 AX 中:EAX = 0xE820:遍历主机上全部内存AX = 0xE801:分别检测低 15MB 和 16MB ~ 4GB 的内存,最大支持 4GBAH = 0x88:最多检测出 64MB 内存,实际内存容量超过此原创 2020-10-19 00:39:33 · 1230 阅读 · 0 评论 -
操作系统真象还原第四章
4.1 保护模式概述保护模式在 Intel 80286 CPU 中首次出现。4.1.1 为什么要有保护模式实模式的缺陷:实模式下操作系统和用户程序属于同一特权级逻辑地址等于物理地址用户程序可以自由修改段基址,访问所有内存访问超过 64KB 的内存区域时要切换段基址一次只能运行一个程序,无法充分利用计算机资源共 20 条地址线,最大可用内存为 1MB保护模式下,物理内存地址不能直接被程序访问,程序内部的地址(虚拟地址)需要被转化为物理地址后再去访问。地址转换由处理器和操作系统共同协作原创 2020-10-08 22:41:07 · 1118 阅读 · 1 评论 -
操作系统真象还原第三章
3.1 地址、section、vstart 浅尝辄止3.1.1 什么是地址地址描述各种符号在源程序中的位置,是源代码中各符号偏移文件开头的距离。编译器的工作就是给各符号编址。3.1.2 什么是 section编译器提供的关键字 section 只是为了让程序员在逻辑上将程序划分成几个部分。3.1.3 什么是 vstartsection 用 vstart= 来修饰后,可以被赋予一个虚拟起始地址。mbr 用 vstart=0x7c00 来修饰的原因,是开发人员知道 mbr 要被加载器(BIOS)原创 2020-09-27 00:48:13 · 815 阅读 · 0 评论 -
操作系统真象还原第二章
2.1 计算机的启动过程载入内存:程序被加载器(软件或硬件)加载到内存某个区域CPU 的 cs:ip 寄存器被指向这个程序的起始地址按下主机上的 power 键后,第一个运行的软件是 BIOS。2.2 软件接力第一棒,BIOS2.2.1 实模式下的 1MB 内存布局Intel 8086 有 20 条地址线,故其可以访问 1MB 的内存空间。实模式下的内存布局:起始结束大小用途FFFF0FFFFF16BBIOS 入口地址,此处内容是jmp f000:e05b原创 2020-09-20 00:56:58 · 520 阅读 · 0 评论 -
操作系统真象还原第1.5章 NASM汇编学习
第二章有使用 NASM 汇编写主引导记录 MBR 的内容。在写第二章的代码前,每天晚上下班后花一些时间简单地回顾了 NASM 汇编的内容,只复习了最简单的语法,之后写 OS 时再边写边查资料。指令mov数据传送指令。mov eax, 1 ; eax = 1mov ebx, 2 ; ebx = 2mov ecx, eax ; ecx = eaxadd加法指令。add eax, 2 ; eax = eax + 2add ebx, eax ; ebx = ebx + e原创 2020-09-18 00:11:22 · 430 阅读 · 0 评论 -
操作系统真象还原第一章
开一个新坑,最终目标是按照《操作系统真象还原》这本书实现一个操作系统。在读每一章的过程中都会按照书中的步骤配环境、写代码、做实验,完成每章后都产出一篇博客。写博客的主要目的是鞭策自己不能半途而废,毕竟操作系统确实很复杂,研究生期间尝试过,后来放弃了,这一次要坚持下来。次要目的是记录写操作系统的过程中遇到的一些问题,以及有意义的知识点。开发环境如下:虚拟机:VMware Workstation 15 Player操作系统:Ubuntu 14.04.6 LTS终端软件:MobaXterm编辑器:原创 2020-09-13 23:57:31 · 1323 阅读 · 0 评论