os:连续内存分配(二)
连续物理内存分配综述基本要求:一个进程需要一块存储时分配,完成工作后收回基本结构:首先分为物理存储和逻辑存储。
物理存储可以从计算机体系结构的三个重要模块入手:CPU、内存和IO
我们可以将各个部分以存储为逻辑,做层次化的区分:
大体的调用关系如下,首先要考虑最为快速的缓存,其存取速度与CPU主频相同。缓存的使用是我们所不能意识到的,因为其依靠硬件实现。但内存和外存是我们需要在操作系统当中操作的。
逻辑地址空间:物理地址如果交由计算机或许是可以方便使用的,但是对于人来说,并不容易记忆理解和使用。我们希望我们各个进程使用的存储都相对性地低耦合,有一个比较清晰的逻辑结构。把线性的物理地址编号转换为抽象的逻辑内存结构的计算机硬件是MMU(Memory Management Unit)
内存管理的核心目的:抽象(逻辑地址空间)、保护(独立地址空间)、共享(访问相同内存)、虚拟化(更大的地址空间)
实现方法:重定位(relocation)、分段(segmentation)、分页(paging)、虚拟存储(virtual memory)
地址空间和地址生成地址空间的定义物理空间地址:硬件 ...
os_lab1:系统软件启动过程
课程主页:https://www.xuetangx.com/course/THU08091000267/5883104?channel=i.area.learn_title实验指导书:https://objectkuan.gitbooks.io/ucore-docs/content/github:https://github.com/chyyuu/ucore_os_lab (master 分支)
前置知识make/gdb 使用、磁盘 MBR 格式规范、BIOS 执行流程、bootloader 执行流程、ELF 文件格式、函数调用底层过程、中断处理流程。
练习一此练习用于了解编译 ucore 源代码为镜像文件 ucore.img 的整体流程。
因为我不是很懂 Makefile,因此我会尽可能地避免介绍 Makefile 内部相关指令含义。
在命令行目录 labcodes_answer/lab1_result 中,依次输入命令 make clean,make "V=",即可得到详细的编译过程 (已删除若干冗余输出结果):
12345678910111213141 ...
os:启动、中断、异常和系统调用(一)
计算机系统的启动过程CPU在加电之后,执行的第一条指令在内存中。
但是我们说过,停电之后,内存中的DRAM会丢失全部数据。所以CPU是如何启动的呢?
本节参考:
BIOS固件-电脑开机的启动流程 - tyong - 博客园www.cnblogs.com/tyong/articles/10141205.html
BIOS内存中一部分存储是ROM,启动程序的代码存在ROM中。计算机加电之后,首先读取(或许因此叫基本输入输出系统Basic IO System)并运行这部分程序。这部分程序叫BIOS启动固件,是一种固化到主板上的重要系统程序。
BIOS启动固件
有20位地址信息,共1MB
两个重要的寄存器CS:IP:加电稳定之后从0xf000:fff0(cs*16+ip)处读取第一条跳转指令。
更详细内容可参考0704:CS和IP
系统处于实模式
内容包括基本输入输出的程序、系统配置信息**、开机自检程序(POST)、系统自启动程序
BIOS首先检查内存、显卡等启动必须的重要部件。如果硬件出现问题通过蜂鸣器报错并停止启动。称为硬件自检(Power-On Self-Test ...
csapp虚拟内存:显式分配器(九)
介绍了如何利用动态内存分配器显式分配内存;介绍了堆内存中块的多种数据结构。
csapp虚拟内存:系统(九)
介绍了Linux系统中虚拟内存的使用;介绍了虚拟内存中内存映射的概念。
csapp虚拟内存:概念(九)
介绍了虚拟系统的概念;介绍了虚拟内存重要的功能;介绍了虚拟地址到物理地址的翻译过程。
csapp链接(七)
介绍了编译器驱动程序GCC;介绍了链接器的两个主要任务:符号解析和重定位;介绍了静态链接和动态链接;介绍了静态库和共享库;介绍了位置无关代码(PIC)和库打桩机制。
csapp存储器层次结构(六)
介绍了各种类型的存储技术;介绍了计算机程序的局部性原理;介绍了存储器层次结构;介绍了高速缓存存储器的各种类型(直接相联、组相连和全相联)及其他相关内容。
csappECF:信号和非本地跳转(八)
介绍了位于操作系统和应用程序之间接口处的信号的作用;介绍了在应用层,c程序可以使用非本地跳转来规避正常的调用/返回栈规则。
csappECF:异常和进程(八)
介绍了异常的概念以及异常的分类;介绍了ECF对于进程控制的作用。